diff --git a/.bazelrc b/.bazelrc index 54a510f05dc..679eeec77a3 100644 --- a/.bazelrc +++ b/.bazelrc @@ -33,10 +33,6 @@ common --@rules_dotnet//dotnet/settings:strict_deps=false # we only configure a nightly toolchain common --@rules_rust//rust/toolchain/channel=nightly -# rust does not like the gold linker, while bazel does by default, so let's avoid using it -common:linux --linkopt=-fuse-ld=lld -common:macos --linkopt=-fuse-ld=lld - # Reduce this eventually to empty, once we've fixed all our usages of java, and https://github.com/bazel-contrib/rules_go/issues/4193 is fixed common --incompatible_autoload_externally="+@rules_java,+@rules_shell" diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 6621d59b7c2..00000000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,4 +0,0 @@ -When reviewing code: -* do not review changes in files with `.expected` extension (they are automatically ensured to be correct). -* in `.ql` and `.qll` files, do not try to review the code itself as you don't understand the programming language - well enough to make comments in these languages. You can still check for typos or comment improvements. diff --git a/.github/instructions/expected-files.instructions.md b/.github/instructions/expected-files.instructions.md new file mode 100644 index 00000000000..b76119d7028 --- /dev/null +++ b/.github/instructions/expected-files.instructions.md @@ -0,0 +1,4 @@ +--- +applyTo: "**/*.expected" +--- +Ignore these files. These are generated to be correct by running the tests, and should not be edited manually. diff --git a/.github/instructions/ql-files.instructions.md b/.github/instructions/ql-files.instructions.md new file mode 100644 index 00000000000..4d331807e06 --- /dev/null +++ b/.github/instructions/ql-files.instructions.md @@ -0,0 +1,6 @@ +--- +applyTo: "**/*.ql,**/*.qll" +--- +When reviewing these QL files, do not make any comment on the code itself. You don't understand the QL programming language well enough yet. You can only make comments about the following aspects: +* comments (lines starting with `//` or block comments enclosed in `/* ... */`): you can suggest improvements to the clarity of comments, or point out spelling mistakes +* typos in identifiers diff --git a/.github/workflows/build-ripunzip.yml b/.github/workflows/build-ripunzip.yml index 3e32b868985..08547268e3b 100644 --- a/.github/workflows/build-ripunzip.yml +++ b/.github/workflows/build-ripunzip.yml @@ -1,38 +1,67 @@ -name: Build runzip +name: Build ripunzip on: workflow_dispatch: inputs: ripunzip-version: - description: "what reference to checktout from google/runzip" + description: What reference to checkout from google/ripunzip. Latest by default required: false - default: v2.0.2 openssl-version: - description: "what reference to checkout from openssl/openssl for Linux" + description: What reference to checkout from openssl/openssl for Linux. Latest by default required: false - default: openssl-3.5.0 + open-pr: + description: Open a pull request updating the ripunzip versions committed to lfs + required: false + default: true # will be false on PRs + pull_request: + paths: + - .github/workflows/build-ripunzip.yml +permissions: {} + jobs: + versions: + runs-on: ubuntu-slim + outputs: + ripunzip-version: ${{ inputs.ripunzip-version || steps.fetch-ripunzip-version.outputs.version }} + openssl-version: ${{ inputs.openssl-version || steps.fetch-openssl-version.outputs.version }} + steps: + - name: Fetch latest ripunzip version + id: fetch-ripunzip-version + if: "!inputs.ripunzip-version" + run: &fetch-version + echo "version=$(gh release view --repo $REPO --json tagName --jq .tagName)" | tee -a $GITHUB_OUTPUT + env: + REPO: "google/ripunzip" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Fetch latest openssl version + id: fetch-openssl-version + if: "!inputs.openssl-version" + run: *fetch-version + env: + REPO: "openssl/openssl" + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} build: + needs: versions strategy: fail-fast: false matrix: - os: [ubuntu-22.04, macos-13, windows-2022] + os: [ubuntu-24.04, macos-15, windows-2025] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: repository: google/ripunzip - ref: ${{ inputs.ripunzip-version }} + ref: ${{ needs.versions.outputs.ripunzip-version }} # we need to avoid ripunzip dynamically linking into libssl # see https://github.com/sfackler/rust-openssl/issues/183 - if: runner.os == 'Linux' name: checkout openssl - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: openssl/openssl path: openssl - ref: ${{ inputs.openssl-version }} + ref: ${{ needs.versions.outputs.openssl-version }} - if: runner.os == 'Linux' name: build and install openssl with fPIC shell: bash @@ -64,11 +93,74 @@ jobs: lipo -create -output ripunzip-macos \ -arch x86_64 target/x86_64-apple-darwin/release/ripunzip \ -arch arm64 target/aarch64-apple-darwin/release/ripunzip - - uses: actions/upload-artifact@v4 + - name: Archive + shell: bash + run: | + tar acf ripunzip-$RUNNER_OS.tar.zst ripunzip-$(echo $RUNNER_OS | tr '[:upper:]' '[:lower:]') + - name: Upload built binary + uses: actions/upload-artifact@v4 with: name: ripunzip-${{ runner.os }} - path: ripunzip-* + path: ripunzip-${{ runner.os }}.tar.zst + retention-days: 5 + compression: 0 - name: Check built binary shell: bash run: | + rm -f ripunzip-*.tar.zst ./ripunzip-* --version + publish: + needs: [versions, build] + if: inputs.open-pr == 'true' + permissions: + contents: write + pull-requests: write + runs-on: ubuntu-slim + steps: + # workaround for git-lfs not being installed yet on ubuntu-slim runners + - name: Ensure git-lfs is installed + shell: bash + run: | + if which git-lfs &>/dev/null; then + echo "git-lfs is already installed" + exit 0 + fi + cd $TMP + gh release download --repo git-lfs/git-lfs --pattern "git-lfs-linux-amd64-*.tar.gz" --clobber + tar xzf git-lfs-linux-amd64-*.tar.gz + rm git-lfs-linux-amd64-*.tar.gz + cd git-lfs-* + pwd | tee -a $GITHUB_PATH + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v5 + with: + sparse-checkout: | + .github + misc/ripunzip + lfs: true + - name: Download built binaries + uses: actions/download-artifact@v4 + with: + merge-multiple: true + path: misc/ripunzip + - name: Open PR + shell: bash + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + git switch -c update-ripunzip + git add misc/ripunzip + git commit -m "Update ripunzip binaries to version $VERSION" + git push --set-upstream origin update-ripunzip --force + TITLE="Update ripunzip binaries to version $VERSION" + gh pr create \ + --draft \ + --title "$TITLE" \ + --body "Automated update of ripunzip binaries." \ + --assignee "$ACTOR" || + (gh pr edit --title "$TITLE" --add-assignee "$ACTOR" && gh pr ready --undo) + env: + ACTOR: ${{ github.actor }} + VERSION: ${{ needs.versions.outputs.ripunzip-version }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/buildifier.yml b/.github/workflows/buildifier.yml index f3fbf97854c..ac344df588e 100644 --- a/.github/workflows/buildifier.yml +++ b/.github/workflows/buildifier.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Check bazel formatting uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 with: diff --git a/.github/workflows/check-implicit-this.yml b/.github/workflows/check-implicit-this.yml index f58db399ccb..a109f4bfe55 100644 --- a/.github/workflows/check-implicit-this.yml +++ b/.github/workflows/check-implicit-this.yml @@ -16,7 +16,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check that implicit this warnings is enabled for all packs shell: bash run: | diff --git a/.github/workflows/check-overlay-annotations.yml b/.github/workflows/check-overlay-annotations.yml index 5369dfd49d0..849cad113c4 100644 --- a/.github/workflows/check-overlay-annotations.yml +++ b/.github/workflows/check-overlay-annotations.yml @@ -17,7 +17,7 @@ jobs: sync: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check overlay annotations run: python config/add-overlay-annotations.py --check java diff --git a/.github/workflows/check-qldoc.yml b/.github/workflows/check-qldoc.yml index f10e0dc90b9..8fe47bf50f7 100644 --- a/.github/workflows/check-qldoc.yml +++ b/.github/workflows/check-qldoc.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 diff --git a/.github/workflows/check-query-ids.yml b/.github/workflows/check-query-ids.yml index 8ae19cc3e5f..14d597d44cb 100644 --- a/.github/workflows/check-query-ids.yml +++ b/.github/workflows/check-query-ids.yml @@ -19,6 +19,6 @@ jobs: name: Check query IDs runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check for duplicate query IDs run: python3 misc/scripts/check-query-ids.py diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ba384245e0e..72bf2052627 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -34,10 +34,10 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.100 + dotnet-version: 9.0.300 - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/compile-queries.yml b/.github/workflows/compile-queries.yml index 945515c0c53..36171543cac 100644 --- a/.github/workflows/compile-queries.yml +++ b/.github/workflows/compile-queries.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest-xl steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql with: diff --git a/.github/workflows/cpp-swift-analysis.yml b/.github/workflows/cpp-swift-analysis.yml index 18c2708d7b4..f72c13cdd70 100644 --- a/.github/workflows/cpp-swift-analysis.yml +++ b/.github/workflows/cpp-swift-analysis.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index ef0b93c50c8..3c73eaec3b6 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -39,23 +39,23 @@ jobs: os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.100 + dotnet-version: 9.0.300 - name: Extractor unit tests run: | dotnet tool restore - dotnet test -p:RuntimeFrameworkVersion=9.0.0 extractor/Semmle.Util.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.0 extractor/Semmle.Extraction.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.0 autobuilder/Semmle.Autobuild.CSharp.Tests - dotnet test -p:RuntimeFrameworkVersion=9.0.0 autobuilder/Semmle.Autobuild.Cpp.Tests + dotnet test -p:RuntimeFrameworkVersion=9.0.5 extractor/Semmle.Util.Tests + dotnet test -p:RuntimeFrameworkVersion=9.0.5 extractor/Semmle.Extraction.Tests + dotnet test -p:RuntimeFrameworkVersion=9.0.5 autobuilder/Semmle.Autobuild.CSharp.Tests + dotnet test -p:RuntimeFrameworkVersion=9.0.5 autobuilder/Semmle.Autobuild.Cpp.Tests shell: bash stubgentest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./csharp/actions/create-extractor-pack - name: Run stub generator tests run: | diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml index 08f0e9883ef..c9ec9e602d2 100644 --- a/.github/workflows/csv-coverage-metrics.yml +++ b/.github/workflows/csv-coverage-metrics.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql - name: Create empty database @@ -51,7 +51,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql - name: Create empty database diff --git a/.github/workflows/csv-coverage-pr-artifacts.yml b/.github/workflows/csv-coverage-pr-artifacts.yml index cbd92dd47d7..c62de00535e 100644 --- a/.github/workflows/csv-coverage-pr-artifacts.yml +++ b/.github/workflows/csv-coverage-pr-artifacts.yml @@ -35,11 +35,11 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - MERGE - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: merge - name: Clone self (github/codeql) - BASE - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 2 path: base diff --git a/.github/workflows/csv-coverage-pr-comment.yml b/.github/workflows/csv-coverage-pr-comment.yml index cf01ef063ac..534725815b4 100644 --- a/.github/workflows/csv-coverage-pr-comment.yml +++ b/.github/workflows/csv-coverage-pr-comment.yml @@ -24,7 +24,7 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Python 3.8 uses: actions/setup-python@v4 with: diff --git a/.github/workflows/csv-coverage-timeseries.yml b/.github/workflows/csv-coverage-timeseries.yml index 13dc99b162c..11bc06bee60 100644 --- a/.github/workflows/csv-coverage-timeseries.yml +++ b/.github/workflows/csv-coverage-timeseries.yml @@ -12,11 +12,11 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeqlModels fetch-depth: 0 diff --git a/.github/workflows/csv-coverage-update.yml b/.github/workflows/csv-coverage-update.yml index 6b73bff820d..9f7a0b778da 100644 --- a/.github/workflows/csv-coverage-update.yml +++ b/.github/workflows/csv-coverage-update.yml @@ -21,7 +21,7 @@ jobs: GITHUB_CONTEXT: ${{ toJSON(github.event) }} run: echo "$GITHUB_CONTEXT" - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: ql fetch-depth: 0 diff --git a/.github/workflows/csv-coverage.yml b/.github/workflows/csv-coverage.yml index 525f4bfb64c..a1224456410 100644 --- a/.github/workflows/csv-coverage.yml +++ b/.github/workflows/csv-coverage.yml @@ -16,11 +16,11 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: script - name: Clone self (github/codeql) for analysis - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeqlModels ref: ${{ github.event.inputs.qlModelShaOverride || github.ref }} diff --git a/.github/workflows/fast-forward.yml b/.github/workflows/fast-forward.yml index dd8fefbc529..d71f8be20f9 100644 --- a/.github/workflows/fast-forward.yml +++ b/.github/workflows/fast-forward.yml @@ -26,7 +26,7 @@ jobs: exit 1 - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Git config shell: bash diff --git a/.github/workflows/go-tests.yml b/.github/workflows/go-tests.yml index c30abdd9e5d..6578f09b8df 100644 --- a/.github/workflows/go-tests.yml +++ b/.github/workflows/go-tests.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest-xl steps: - name: Check out code - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Run tests uses: ./go/actions/test with: diff --git a/.github/workflows/kotlin-build.yml b/.github/workflows/kotlin-build.yml index 565c3d3a8ba..71a9f8b525c 100644 --- a/.github/workflows/kotlin-build.yml +++ b/.github/workflows/kotlin-build.yml @@ -20,7 +20,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: | bazel query //java/kotlin-extractor/... # only build the default version as a quick check that we can build from `codeql` diff --git a/.github/workflows/mad_modelDiff.yml b/.github/workflows/mad_modelDiff.yml index b0e4a20f2b8..3b96d903e23 100644 --- a/.github/workflows/mad_modelDiff.yml +++ b/.github/workflows/mad_modelDiff.yml @@ -28,12 +28,12 @@ jobs: slug: ${{fromJson(github.event.inputs.projects || '["apache/commons-codec", "apache/commons-io", "apache/commons-beanutils", "apache/commons-logging", "apache/commons-fileupload", "apache/commons-lang", "apache/commons-validator", "apache/commons-csv", "apache/dubbo"]' )}} steps: - name: Clone github/codeql from PR - uses: actions/checkout@v4 + uses: actions/checkout@v5 if: github.event.pull_request with: path: codeql-pr - name: Clone github/codeql from main - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeql-main ref: main diff --git a/.github/workflows/mad_regenerate-models.yml b/.github/workflows/mad_regenerate-models.yml index 61e4f986243..402dd957331 100644 --- a/.github/workflows/mad_regenerate-models.yml +++ b/.github/workflows/mad_regenerate-models.yml @@ -30,11 +30,11 @@ jobs: ref: "placeholder" steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL binaries uses: ./.github/actions/fetch-codeql - name: Clone repositories - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: repos/${{ matrix.ref }} ref: ${{ matrix.ref }} diff --git a/.github/workflows/python-tooling.yml b/.github/workflows/python-tooling.yml index 19059070878..bab1277dd03 100644 --- a/.github/workflows/python-tooling.yml +++ b/.github/workflows/python-tooling.yml @@ -21,7 +21,7 @@ jobs: check-python-tooling: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/setup-python@v5 with: python-version: '3.12' diff --git a/.github/workflows/qhelp-pr-preview.yml b/.github/workflows/qhelp-pr-preview.yml index be5a42096bb..a152eb7cc09 100644 --- a/.github/workflows/qhelp-pr-preview.yml +++ b/.github/workflows/qhelp-pr-preview.yml @@ -43,7 +43,7 @@ jobs: if-no-files-found: error retention-days: 1 - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 persist-credentials: false diff --git a/.github/workflows/ql-for-ql-build.yml b/.github/workflows/ql-for-ql-build.yml index 73833da0549..9c568a9b572 100644 --- a/.github/workflows/ql-for-ql-build.yml +++ b/.github/workflows/ql-for-ql-build.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest-xl steps: ### Build the queries ### - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Find codeql diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index c3441ffa407..b4561c04a96 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -25,7 +25,7 @@ jobs: - github/codeql runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Find codeql id: find-codeql @@ -46,7 +46,7 @@ jobs: env: CODEQL: ${{ steps.find-codeql.outputs.codeql-path }} - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -75,7 +75,7 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: name: measurements diff --git a/.github/workflows/ql-for-ql-tests.yml b/.github/workflows/ql-for-ql-tests.yml index 4502dded53f..fdb9da284ce 100644 --- a/.github/workflows/ql-for-ql-tests.yml +++ b/.github/workflows/ql-for-ql-tests.yml @@ -24,7 +24,7 @@ jobs: qltest: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Find codeql id: find-codeql uses: github/codeql-action/init@main @@ -64,7 +64,7 @@ jobs: needs: [qltest] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install GNU tar if: runner.os == 'macOS' run: | diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index a286b9b846b..8c736379f8a 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Clone self (github/codeql) - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: path: codeql - name: Set up Python 3.8 @@ -31,7 +31,7 @@ jobs: with: python-version: 3.8 - name: Download CodeQL CLI - # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo + # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo uses: ./codeql/.github/actions/fetch-codeql - name: Build code scanning query list run: | diff --git a/.github/workflows/ruby-build.yml b/.github/workflows/ruby-build.yml index 343e896151c..39aadef0913 100644 --- a/.github/workflows/ruby-build.yml +++ b/.github/workflows/ruby-build.yml @@ -47,7 +47,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install GNU tar if: runner.os == 'macOS' run: | @@ -113,7 +113,7 @@ jobs: if: github.repository_owner == 'github' runs-on: ubuntu-latest-xl steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Fetch CodeQL uses: ./.github/actions/fetch-codeql - name: Cache compilation cache @@ -146,7 +146,7 @@ jobs: runs-on: ubuntu-latest needs: [build, compile-queries] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: name: ruby.dbscheme @@ -209,7 +209,7 @@ jobs: runs-on: ${{ matrix.os }} needs: [package] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Fetch CodeQL uses: ./.github/actions/fetch-codeql diff --git a/.github/workflows/ruby-dataset-measure.yml b/.github/workflows/ruby-dataset-measure.yml index e3229b15806..a88b23bf3a1 100644 --- a/.github/workflows/ruby-dataset-measure.yml +++ b/.github/workflows/ruby-dataset-measure.yml @@ -30,14 +30,14 @@ jobs: repo: [rails/rails, discourse/discourse, spree/spree, ruby/ruby] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Checkout ${{ matrix.repo }} - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: ${{ matrix.repo }} path: ${{ github.workspace }}/repo @@ -62,7 +62,7 @@ jobs: runs-on: ubuntu-latest needs: measure steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: actions/download-artifact@v4 with: path: stats diff --git a/.github/workflows/ruby-qltest-rtjo.yml b/.github/workflows/ruby-qltest-rtjo.yml index c2ae9c0cef1..1d57c465538 100644 --- a/.github/workflows/ruby-qltest-rtjo.yml +++ b/.github/workflows/ruby-qltest-rtjo.yml @@ -25,7 +25,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Cache compilation cache diff --git a/.github/workflows/ruby-qltest.yml b/.github/workflows/ruby-qltest.yml index d1518205dab..e178a5dfb6e 100644 --- a/.github/workflows/ruby-qltest.yml +++ b/.github/workflows/ruby-qltest.yml @@ -36,7 +36,7 @@ jobs: qlupgrade: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - name: Check DB upgrade scripts run: | @@ -58,7 +58,7 @@ jobs: strategy: fail-fast: false steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: ./ruby/actions/create-extractor-pack - name: Cache compilation cache diff --git a/.github/workflows/rust-analysis.yml b/.github/workflows/rust-analysis.yml index 04028ad594b..397aa2fba51 100644 --- a/.github/workflows/rust-analysis.yml +++ b/.github/workflows/rust-analysis.yml @@ -35,7 +35,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Query latest nightly CodeQL bundle shell: bash diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index cc880072555..34f5efb74ba 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -30,7 +30,7 @@ jobs: working-directory: rust/ast-generator steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Inject sources shell: bash run: | @@ -53,7 +53,7 @@ jobs: working-directory: rust/extractor steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Format shell: bash run: | @@ -69,7 +69,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Install CodeQL uses: ./.github/actions/fetch-codeql - name: Code generation diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index df610a96702..4a5613f988e 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -36,7 +36,7 @@ jobs: fail-fast: false runs-on: ${{ matrix.runner }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup (Linux) if: runner.os == 'Linux' run: | @@ -53,7 +53,7 @@ jobs: clang-format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 name: Check that python code is properly formatted with: @@ -61,7 +61,7 @@ jobs: codegen: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: ./.github/actions/fetch-codeql - uses: pre-commit/action@646c83fcd040023954eafda54b4db0192ce70507 name: Check that QL generated code was checked in @@ -77,6 +77,6 @@ jobs: check-no-override: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check that no override is present in load.bzl run: bazel test ... --test_tag_filters=override --test_output=errors diff --git a/.github/workflows/sync-files.yml b/.github/workflows/sync-files.yml index 1ed49ac3ecf..f7f42f2e5af 100644 --- a/.github/workflows/sync-files.yml +++ b/.github/workflows/sync-files.yml @@ -17,7 +17,7 @@ jobs: sync: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check synchronized files run: python config/sync-files.py - name: Check dbscheme fragments diff --git a/.github/workflows/tree-sitter-extractor-test.yml b/.github/workflows/tree-sitter-extractor-test.yml index 9a71e1fc7c5..da5834a7f9f 100644 --- a/.github/workflows/tree-sitter-extractor-test.yml +++ b/.github/workflows/tree-sitter-extractor-test.yml @@ -30,7 +30,7 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check formatting run: cargo fmt -- --check - name: Run tests @@ -38,12 +38,12 @@ jobs: fmt: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check formatting run: cargo fmt --check clippy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run clippy run: cargo clippy -- --no-deps -D warnings -A clippy::new_without_default -A clippy::too_many_arguments diff --git a/.github/workflows/validate-change-notes.yml b/.github/workflows/validate-change-notes.yml index 42784b661fc..6812d8ff0f6 100644 --- a/.github/workflows/validate-change-notes.yml +++ b/.github/workflows/validate-change-notes.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup CodeQL uses: ./.github/actions/fetch-codeql diff --git a/.github/workflows/zipmerge-test.yml b/.github/workflows/zipmerge-test.yml index edae93a90a0..1e7ac195b5a 100644 --- a/.github/workflows/zipmerge-test.yml +++ b/.github/workflows/zipmerge-test.yml @@ -18,6 +18,6 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - run: | bazel test //misc/bazel/internal/zipmerge:test --test_output=all diff --git a/.gitignore b/.gitignore index fe4a5de9672..4dbe45b8d28 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,6 @@ node_modules/ # some upgrade/downgrade checks create these files **/upgrades/*/*.dbscheme.stats **/downgrades/*/*.dbscheme.stats + +# Mergetool files +*.orig diff --git a/CODEOWNERS b/CODEOWNERS index 7233623d452..131fb1e767d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,17 +1,33 @@ +# Catch-all for anything which isn't matched by a line lower down +* @github/code-scanning-alert-coverage + +# CodeQL language libraries /actions/ @github/codeql-dynamic /cpp/ @github/codeql-c-analysis /csharp/ @github/codeql-csharp -/csharp/autobuilder/Semmle.Autobuild.Cpp @github/codeql-c-extractor -/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests @github/codeql-c-extractor +/csharp/autobuilder/Semmle.Autobuild.Cpp @github/codeql-c-extractor @github/code-scanning-language-coverage +/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests @github/codeql-c-extractor @github/code-scanning-language-coverage /go/ @github/codeql-go +/go/codeql-tools/ @github/codeql-go @github/code-scanning-language-coverage +/go/downgrades/ @github/codeql-go @github/code-scanning-language-coverage +/go/extractor/ @github/codeql-go @github/code-scanning-language-coverage +/go/extractor-smoke-test/ @github/codeql-go @github/code-scanning-language-coverage +/go/ql/test/extractor-tests/ @github/codeql-go @github/code-scanning-language-coverage /java/ @github/codeql-java /javascript/ @github/codeql-javascript +/javascript/extractor/ @github/codeql-javascript @github/code-scanning-language-coverage /python/ @github/codeql-python +/python/extractor/ @github/codeql-python @github/code-scanning-language-coverage +/ql/ @github/codeql-ql-for-ql-reviewers /ruby/ @github/codeql-ruby +/ruby/extractor/ @github/codeql-ruby @github/code-scanning-language-coverage /rust/ @github/codeql-rust +/rust/extractor/ @github/codeql-rust @github/code-scanning-language-coverage +/shared/ @github/codeql-shared-libraries-reviewers /swift/ @github/codeql-swift +/swift/extractor/ @github/codeql-swift @github/code-scanning-language-coverage /misc/codegen/ @github/codeql-swift -/java/kotlin-extractor/ @github/codeql-kotlin +/java/kotlin-extractor/ @github/codeql-kotlin @github/code-scanning-language-coverage /java/ql/test-kotlin1/ @github/codeql-kotlin /java/ql/test-kotlin2/ @github/codeql-kotlin @@ -25,9 +41,6 @@ /docs/codeql/ql-language-reference/ @github/codeql-frontend-reviewers /docs/query-*-style-guide.md @github/codeql-analysis-reviewers -# QL for QL reviewers -/ql/ @github/codeql-ql-for-ql-reviewers - # Bazel (excluding BUILD.bazel files) MODULE.bazel @github/codeql-ci-reviewers .bazelversion @github/codeql-ci-reviewers diff --git a/Cargo.lock b/Cargo.lock index 263b16482a9..b6456c84106 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" @@ -23,12 +23,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -40,9 +34,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -55,44 +49,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "argfile" @@ -127,18 +121,18 @@ dependencies = [ [[package]] name = "atomic" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994" +checksum = "a89cbf775b137e9b968e67227ef7f775587cde3fd31b0d8599dbd0f598a48340" dependencies = [ "bytemuck", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -154,30 +148,30 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" [[package]] name = "borsh" -version = "1.5.5" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" dependencies = [ "cfg_aliases", ] [[package]] name = "boxcar" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c4925bc979b677330a8c7fe7a8c94af2dbb4a2d37b4a20a80d884400f46baa" +checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" dependencies = [ "memchr", "serde", @@ -185,27 +179,21 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" - -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" [[package]] name = "camino" -version = "1.1.10" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0da45bc31171d8d6960122e222a67740df867c1dd53b4d51caa297084c185cab" +checksum = "dd0b03af37dad7a14518b7691d81acb0f8222604ad3d1b02f6b4bed5188c0cd5" dependencies = [ "serde", ] @@ -221,25 +209,25 @@ dependencies = [ [[package]] name = "cargo-util-schemas" -version = "0.2.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63d2780ac94487eb9f1fea7b0d56300abc9eb488800854ca217f102f5caccca" +checksum = "7dc1a6f7b5651af85774ae5a34b4e8be397d9cf4bc063b7e6dbd99a841837830" dependencies = [ "semver", "serde", "serde-untagged", "serde-value", - "thiserror 1.0.69", - "toml", + "thiserror", + "toml 0.8.23", "unicode-xid", "url", ] [[package]] name = "cargo_metadata" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7835cfc6135093070e95eb2b53e5d9b5c403dc3a6be6040ee026270aa82502" +checksum = "5cfca2aaa699835ba88faf58a06342a314a950d2b9686165e038286c30316868" dependencies = [ "camino", "cargo-platform", @@ -247,15 +235,16 @@ dependencies = [ "semver", "serde", "serde_json", - "thiserror 2.0.12", + "thiserror", ] [[package]] name = "cc" -version = "1.2.7" +version = "1.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -263,9 +252,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -285,14 +274,36 @@ dependencies = [ "synstructure", ] +[[package]] +name = "chalk-derive" +version = "0.104.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea9b1e80910f66ae87c772247591432032ef3f6a67367ff17f8343db05beafa" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "chalk-ir" version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90a37d2ab99352b4caca135061e7b4ac67024b648c28ed0b787feec4bea4caed" dependencies = [ - "bitflags 2.9.1", - "chalk-derive", + "bitflags 2.9.4", + "chalk-derive 0.103.0", +] + +[[package]] +name = "chalk-ir" +version = "0.104.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7047a516de16226cd17344d41a319d0ea1064bf9e60bd612ab341ab4a34bbfa8" +dependencies = [ + "bitflags 2.9.4", + "chalk-derive 0.104.0", ] [[package]] @@ -301,8 +312,8 @@ version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c855be60e646664bc37c2496d3dc81ca5ef60520930e5e0f0057a0575aff6c19" dependencies = [ - "chalk-derive", - "chalk-ir", + "chalk-derive 0.103.0", + "chalk-ir 0.103.0", "chalk-solve", "rustc-hash 1.1.0", "tracing", @@ -314,10 +325,10 @@ version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "477ac6cdfd2013e9f93b09b036c2b607a67b2e728f4777b8422d55a79e9e3a34" dependencies = [ - "chalk-derive", - "chalk-ir", + "chalk-derive 0.103.0", + "chalk-ir 0.103.0", "ena", - "indexmap 2.9.0", + "indexmap 2.11.4", "itertools 0.12.1", "petgraph", "rustc-hash 1.1.0", @@ -326,24 +337,23 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", "wasm-bindgen", - "windows-link", + "windows-link 0.2.0", ] [[package]] name = "clap" -version = "4.5.40" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -351,9 +361,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.40" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -363,9 +373,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.40" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -375,9 +385,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "codeql-autobuilder-rust" @@ -433,7 +443,7 @@ version = "0.1.0" dependencies = [ "anyhow", "argfile", - "chalk-ir", + "chalk-ir 0.104.0", "chrono", "clap", "codeql-extractor", @@ -462,7 +472,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "toml", + "toml 0.9.7", "tracing", "tracing-flame", "tracing-subscriber", @@ -471,9 +481,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "core-foundation-sys" @@ -489,15 +499,15 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" [[package]] name = "cov-mark" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0570650661aa447e7335f1d5e4f499d8e58796e617bedc9267d971e51c8b49d4" +checksum = "3f1d92727879fb4f24cec33a35e3bff74035541326cbc12ad44ba8886d1927b0" [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -547,9 +557,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "darling" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -557,9 +567,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", @@ -571,9 +581,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", @@ -596,9 +606,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", "serde", @@ -629,9 +639,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "either" @@ -645,7 +655,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" dependencies = [ - "log 0.4.27", + "log 0.4.28", ] [[package]] @@ -743,16 +753,10 @@ dependencies = [ ] [[package]] -name = "filetime" -version = "0.2.25" +name = "find-msvc-tools" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" [[package]] name = "fixedbitset" @@ -762,9 +766,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "miniz_oxide", @@ -784,9 +788,9 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -817,33 +821,33 @@ checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets 0.52.6", + "r-efi", + "wasi 0.14.5+wasi-0.2.4", ] [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "globset" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5" dependencies = [ "aho-corasick", "bstr", - "log 0.4.27", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "log 0.4.28", + "regex-automata", + "regex-syntax", ] [[package]] @@ -860,9 +864,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -875,7 +879,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.5", ] [[package]] @@ -907,14 +911,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log 0.4.28", "wasm-bindgen", "windows-core", ] @@ -1022,9 +1027,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1054,13 +1059,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.9.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.15.5", "serde", + "serde_core", ] [[package]] @@ -1075,7 +1081,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "inotify-sys", "libc", ] @@ -1089,6 +1095,15 @@ dependencies = [ "libc", ] +[[package]] +name = "intrusive-collections" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" +dependencies = [ + "memoffset", +] + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -1121,10 +1136,11 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom", "libc", ] @@ -1136,9 +1152,9 @@ checksum = "a037eddb7d28de1d0fc42411f501b53b75838d313908078d6698d064f3029b24" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" dependencies = [ "once_cell", "wasm-bindgen", @@ -1146,9 +1162,9 @@ dependencies = [ [[package]] name = "kqueue" -version = "1.0.8" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" +checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a" dependencies = [ "kqueue-sys", "libc", @@ -1178,20 +1194,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.174" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.9.1", - "libc", - "redox_syscall", -] +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "line-index" @@ -1211,9 +1216,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -1225,22 +1230,22 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" dependencies = [ - "log 0.4.27", + "log 0.4.28", ] [[package]] name = "log" -version = "0.4.27" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] @@ -1260,32 +1265,32 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "log 0.4.27", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "log 0.4.28", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] name = "miow" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" +checksum = "536bfad37a309d62069485248eeaba1e8d9853aaf951caaeaed0585a95346f08" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.0", ] [[package]] @@ -1306,21 +1311,20 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "notify" -version = "8.0.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fee8403b3d66ac7b26aee6e40a897d85dc5ce26f44da36b8b73e987cc52e943" +checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.9.1", - "filetime", + "bitflags 2.9.4", "fsevent-sys", "inotify", "kqueue", "libc", - "log 0.4.27", + "log 0.4.28", "mio", "notify-types", "walkdir", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -1331,12 +1335,11 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1366,9 +1369,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "oorandom" @@ -1387,24 +1396,28 @@ dependencies = [ [[package]] name = "os_str_bytes" -version = "7.0.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ac44c994af577c799b1b4bd80dc214701e349873ad894d6cdf96f4f7526e0b9" +checksum = "63eceb7b5d757011a87d08eb2123db15d87fb0c281f65d101ce30a1e96c3ad5c" dependencies = [ "memchr", ] [[package]] -name = "overload" -version = "0.1.1" +name = "papaya" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "f92dd0b07c53a0a0c764db2ace8c541dc47320dad97c2200c2a637ab9dd2328f" +dependencies = [ + "equivalent", + "seize", +] [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -1412,9 +1425,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", @@ -1448,9 +1461,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "perf-event" @@ -1478,7 +1491,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.9.0", + "indexmap 2.11.4", ] [[package]] @@ -1495,15 +1508,15 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -1516,18 +1529,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] @@ -1547,20 +1560,26 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] [[package]] -name = "ra-ap-rustc_abi" -version = "0.116.0" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a967e3a9cd3e38b543f503978e0eccee461e3aea3f7b10e944959bff41dbe612" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "ra-ap-rustc_abi" +version = "0.123.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f18c877575c259d127072e9bfc41d985202262fb4d6bfdae3d1252147c2562c2" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "ra-ap-rustc_hashes", "ra-ap-rustc_index", "tracing", @@ -1568,18 +1587,18 @@ dependencies = [ [[package]] name = "ra-ap-rustc_hashes" -version = "0.116.0" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ea4c755ecbbffa5743c251344f484ebe571ec7bc5b36d80b2a8ae775d1a7a40" +checksum = "2439ed1df3472443133b66949f81080dff88089b42f825761455463709ee1cad" dependencies = [ "rustc-stable-hash", ] [[package]] name = "ra-ap-rustc_index" -version = "0.116.0" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aca7ad7cf911538c619caa2162339fe98637e9e46f11bb0484ef96735df4d64a" +checksum = "57a24fe0be21be1f8ebc21dcb40129214fb4cefb0f2753f3d46b6dbe656a1a45" dependencies = [ "ra-ap-rustc_index_macros", "smallvec", @@ -1587,9 +1606,9 @@ dependencies = [ [[package]] name = "ra-ap-rustc_index_macros" -version = "0.116.0" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8767ba551c9355bc3031be072cc4bb0381106e5e7cd275e72b7a8c76051c4070" +checksum = "844a27ddcad0116facae2df8e741fd788662cf93dc13029cd864f2b8013b81f9" dependencies = [ "proc-macro2", "quote", @@ -1598,9 +1617,20 @@ dependencies = [ [[package]] name = "ra-ap-rustc_lexer" -version = "0.116.0" +version = "0.121.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6101374afb267e6c27e4e2eb0b1352e9f3504c1a8f716f619cd39244e2ed92ab" +checksum = "22944e31fb91e9b3e75bcbc91e37d958b8c0825a6160927f2856831d2ce83b36" +dependencies = [ + "memchr", + "unicode-properties", + "unicode-xid", +] + +[[package]] +name = "ra-ap-rustc_lexer" +version = "0.123.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b734cfcb577d09877799a22742f1bd398be6c00bc428d9de56d48d11ece5771" dependencies = [ "memchr", "unicode-properties", @@ -1609,19 +1639,19 @@ dependencies = [ [[package]] name = "ra-ap-rustc_parse_format" -version = "0.116.0" +version = "0.121.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd88a19f00da4f43e6727d5013444cbc399804b5046dfa2bbcd28ebed3970ce" +checksum = "81057891bc2063ad9e353f29462fbc47a0f5072560af34428ae9313aaa5e9d97" dependencies = [ - "ra-ap-rustc_lexer", - "rustc-literal-escaper 0.0.2", + "ra-ap-rustc_lexer 0.121.0", + "rustc-literal-escaper", ] [[package]] name = "ra-ap-rustc_pattern_analysis" -version = "0.116.0" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb332dd32d7850a799862533b1c021e6062558861a4ad57817bf522499fbb892" +checksum = "75b0ee1f059b9dea0818c6c7267478926eee95ba4c7dcf89c8db32fa165d3904" dependencies = [ "ra-ap-rustc_index", "rustc-hash 2.1.1", @@ -1632,12 +1662,12 @@ dependencies = [ [[package]] name = "ra_ap_base_db" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf27fccb119fe85faf51f51847df9695d3cca30c2427fed9b4d71e6adebb54f" +checksum = "e876bb2c3e52a8d4e6684526a2d4e81f9d028b939ee4dc5dc775fe10deb44d59" dependencies = [ "dashmap", - "indexmap 2.9.0", + "indexmap 2.11.4", "la-arena", "ra_ap_cfg", "ra_ap_intern", @@ -1655,9 +1685,9 @@ dependencies = [ [[package]] name = "ra_ap_cfg" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cea86a5d6e84fd73824c26f52442807af911db038db821124b2ac65fac24209" +checksum = "3a0b56eb4536ce6d2431932c4d337aeeaf7bb22c9249b38cbe80677b5881228f" dependencies = [ "ra_ap_intern", "ra_ap_tt", @@ -1667,19 +1697,19 @@ dependencies = [ [[package]] name = "ra_ap_edition" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5538d534eeb8526071610664dc64b71ca336b78f6933ff7241d10c1f37e91b" +checksum = "1bdc6cbe42c63ca78611bae82bfc8db24864f33dccc813697c5fde43a0907285" [[package]] name = "ra_ap_hir" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44796828650900565917ddcc944fecdf6c7d5c3a8a31141f17268ea8c1d2e6f0" +checksum = "ebffdc134eccabc17209d7760cfff7fd12ed18ab6e21188c5e084b97aa38504c" dependencies = [ "arrayvec", "either", - "indexmap 2.9.0", + "indexmap 2.11.4", "itertools 0.14.0", "ra_ap_base_db", "ra_ap_cfg", @@ -1699,17 +1729,17 @@ dependencies = [ [[package]] name = "ra_ap_hir_def" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8949b2fb362a1e4eab4d90c7299f0fad3f2c887d9f7d9c286ac6530da4141f85" +checksum = "81d2337ef59550392d42aa997aa1105a3d6d1c2b3a583c777786bc4a0a074fd5" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "cov-mark", "drop_bomb", "either", "fst", - "indexmap 2.9.0", + "indexmap 2.11.4", "itertools 0.14.0", "la-arena", "ra-ap-rustc_abi", @@ -1737,9 +1767,9 @@ dependencies = [ [[package]] name = "ra_ap_hir_expand" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22457a431b5eeb67517e03266fddefe48839b060a674a6b18bd84269012ede1e" +checksum = "97cf8ececb2743a819d8299a408e17f164dd1a1004d65936b3d5493b55330326" dependencies = [ "cov-mark", "either", @@ -1765,20 +1795,20 @@ dependencies = [ [[package]] name = "ra_ap_hir_ty" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4b7a7531414203e11ae447627e2909250eff392c06278ab53ae2a022ecc9fc" +checksum = "bc004e1099ba766a61500c27d34eb5cd336430d0a89a9620315a90d7a202a73a" dependencies = [ "arrayvec", - "bitflags 2.9.1", - "chalk-derive", - "chalk-ir", + "bitflags 2.9.4", + "chalk-derive 0.103.0", + "chalk-ir 0.103.0", "chalk-recursive", "chalk-solve", "cov-mark", "either", "ena", - "indexmap 2.9.0", + "indexmap 2.11.4", "itertools 0.14.0", "la-arena", "oorandom", @@ -1806,17 +1836,17 @@ dependencies = [ [[package]] name = "ra_ap_ide_db" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77741ceb096d4f5ecf5384210ea5a2b46878125047c6b0df2bdcfac08a20ea0c" +checksum = "d2acb572d6dbeb1c96d0339890ba91298b8f5f0ab22648da4ee2b4ab77dbc3fe" dependencies = [ "arrayvec", - "bitflags 2.9.1", + "bitflags 2.9.4", "cov-mark", "crossbeam-channel", "either", "fst", - "indexmap 2.9.0", + "indexmap 2.11.4", "itertools 0.14.0", "line-index", "memchr", @@ -1840,9 +1870,9 @@ dependencies = [ [[package]] name = "ra_ap_intern" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1872cd5a425db6d5247a7deca11526e3104757f6732447ac6ee93c3e795725" +checksum = "14586c2c4781b69fdd0c505972d9bff8c162a8740537a3ee506faff686d9a20d" dependencies = [ "dashmap", "hashbrown 0.14.5", @@ -1852,9 +1882,9 @@ dependencies = [ [[package]] name = "ra_ap_load-cargo" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30f5433f056594b02f1879c5c2ce76ea9fd395f21e2a55df6ce3229db993caa" +checksum = "50ce5546b3e3414507ab4d12348d0a28748062e33a1448895c68466d0b015503" dependencies = [ "anyhow", "crossbeam-channel", @@ -1873,13 +1903,13 @@ dependencies = [ [[package]] name = "ra_ap_mbe" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a993acaec35e90c08357aecd530b7170cc3a7f13b3ddfd15a200029ccd555" +checksum = "67333c6405797cb64aafb994b9a179157b30beeda2352e203e800be2b184a22d" dependencies = [ "arrayvec", "cov-mark", - "ra-ap-rustc_lexer", + "ra-ap-rustc_lexer 0.123.0", "ra_ap_intern", "ra_ap_parser", "ra_ap_span", @@ -1892,33 +1922,33 @@ dependencies = [ [[package]] name = "ra_ap_parser" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c5693f5efd27832e1ac572ea756a1a4a3f7eba07f1287268ca111710971c2e5" +checksum = "3a3b92b8b147c0826b83e70ad44e3c98e94201fc93e1f09396c43b4d7958c22a" dependencies = [ "drop_bomb", - "ra-ap-rustc_lexer", + "ra-ap-rustc_lexer 0.123.0", "ra_ap_edition", - "rustc-literal-escaper 0.0.3", + "rustc-literal-escaper", "tracing", ] [[package]] name = "ra_ap_paths" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39418eff64e59d4bf90dd825ac7d242576e9554669824ebc55a6628bde0aaf10" +checksum = "d4991f3d57fac0def7822bebfeb159c8d7b58c824bf82044b765c54f2c0971e2" dependencies = [ "camino", ] [[package]] name = "ra_ap_proc_macro_api" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14a315af8c4a9379c26abe7baa143d62e3975ff26f27c65332f9a5edccc56d38" +checksum = "45db9e2df587d56f0738afa89fb2c100ff7c1e9cbe49e07f6a8b62342832211b" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.11.4", "ra_ap_intern", "ra_ap_paths", "ra_ap_span", @@ -1933,9 +1963,9 @@ dependencies = [ [[package]] name = "ra_ap_profile" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08274a0adbf8255f8b2672302452e31bbb2ed4d38324da9c72a7bf9cf1428483" +checksum = "19981637b8ee4160e228c815a7fef3944b5c0555d6af41a931be92d68978bc6c" dependencies = [ "cfg-if", "libc", @@ -1945,9 +1975,9 @@ dependencies = [ [[package]] name = "ra_ap_project_model" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33deecb3724faf91f13b0f1b5115af7c4f5c9dc1dfbbf45f55261aa28f874838" +checksum = "5bda0769fd6ca949fdd5917acb68ddc2c143745614ddd94ef38b376838611cf8" dependencies = [ "anyhow", "cargo_metadata", @@ -1965,15 +1995,16 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "temp-dir", "tracing", "triomphe", ] [[package]] name = "ra_ap_query-group-macro" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fdefdc9c8d6fd7d85ac572649378e83266262e09400bfdb7c8a7407d3cc2a3e" +checksum = "5f182a4b05f004eabaa83250a5de7ea3a13a92c88f3cbe98bfa1880cd9fbce0a" dependencies = [ "proc-macro2", "quote", @@ -1982,9 +2013,9 @@ dependencies = [ [[package]] name = "ra_ap_span" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20071c89e1f7dd63c803130634f4bb6ce7783dc0e7ff90839d1d0f4e625b7a8" +checksum = "ca6f9fa2de07f5cccf431674b90e82c1fe1ea2339db3b3869eec44d135de09a4" dependencies = [ "hashbrown 0.14.5", "la-arena", @@ -1998,9 +2029,9 @@ dependencies = [ [[package]] name = "ra_ap_stdx" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552df390b26624eca7936aea1dbbb3786d7a12477e26ef917ffabba19f75ad44" +checksum = "aa770adb32896fcba934b464ac3bd179163ba2b0766e275eed5b4e262e08492b" dependencies = [ "crossbeam-channel", "crossbeam-utils", @@ -2014,9 +2045,9 @@ dependencies = [ [[package]] name = "ra_ap_syntax" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78db1a9966c0fa05446b8185da35a325680741119366c6246e4a9800f29143a" +checksum = "6e9e1393281ad5c635239d353ed3cfbf28c8d0af03d0c61a3b24b31d1143b17f" dependencies = [ "either", "itertools 0.14.0", @@ -2024,7 +2055,7 @@ dependencies = [ "ra_ap_stdx", "rowan", "rustc-hash 2.1.1", - "rustc-literal-escaper 0.0.3", + "rustc-literal-escaper", "smol_str", "tracing", "triomphe", @@ -2032,9 +2063,9 @@ dependencies = [ [[package]] name = "ra_ap_syntax-bridge" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e69ef7fad8598d5c9f14a375d56ec12200fa927bc805b600af419611f4642fdb" +checksum = "684e6ff1008ee5340335888f0453d94bb38950f110059a51f1818c7f6a56a807" dependencies = [ "ra_ap_intern", "ra_ap_parser", @@ -2047,9 +2078,9 @@ dependencies = [ [[package]] name = "ra_ap_toolchain" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628f3f190def67b1116d8bdd6ec4f6f206fada2c93b84ba71086d60c63429282" +checksum = "61969c5f72af03a9837e077c2d939d87a5c863623725c461777c352664a3bb03" dependencies = [ "camino", "home", @@ -2057,12 +2088,12 @@ dependencies = [ [[package]] name = "ra_ap_tt" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e050f4ad13df59e90e38332860304a3e85ff2fa8d4585b8cc44fc982923c82b1" +checksum = "fb87c7b35572c18a580ea811e970b94875fad5ac7cfa8644266a59081044f959" dependencies = [ "arrayvec", - "ra-ap-rustc_lexer", + "ra-ap-rustc_lexer 0.123.0", "ra_ap_intern", "ra_ap_stdx", "text-size", @@ -2070,13 +2101,13 @@ dependencies = [ [[package]] name = "ra_ap_vfs" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62082190f0b3551e4d941bcaaac51a7c39c85b2e193bcc50d0807e1701da4083" +checksum = "6c174d6b9b7a7f54687df7e00c3e75ed6f082a7943a9afb1d54f33c0c12773de" dependencies = [ "crossbeam-channel", "fst", - "indexmap 2.9.0", + "indexmap 2.11.4", "nohash-hasher", "ra_ap_paths", "ra_ap_stdx", @@ -2086,9 +2117,9 @@ dependencies = [ [[package]] name = "ra_ap_vfs-notify" -version = "0.0.288" +version = "0.0.301" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd7cfa1095b81bd1994ab70e5543c97a8733987eb0ddf390cf3ad58d4e2dc57" +checksum = "04f6fce8d47c7ce9b8f2cd0e5a55f8fc4878d6043e61f46cde4391d3a5c6086f" dependencies = [ "crossbeam-channel", "notify", @@ -2103,9 +2134,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", "rand_core", @@ -2123,19 +2154,18 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom", - "zerocopy 0.8.20", ] [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -2143,9 +2173,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2153,11 +2183,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", ] [[package]] @@ -2182,47 +2212,32 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "rowan" @@ -2259,21 +2274,15 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc-literal-escaper" -version = "0.0.2" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0041b6238913c41fe704213a4a9329e2f685a156d1781998128b4149c230ad04" - -[[package]] -name = "rustc-literal-escaper" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78744cd17f5d01c75b709e49807d1363e02a940ccee2e9e72435843fdb0d076e" +checksum = "ab03008eb631b703dd16978282ae36c73282e7922fe101a4bd072a40ecea7b8b" [[package]] name = "rustc-stable-hash" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2febf9acc5ee5e99d1ad0afcdbccc02d87aa3f857a1f01f825b80eacf8edfcd1" +checksum = "781442f29170c5c93b7185ad559492601acdc71d5bb0706f5868094f45cfcd08" [[package]] name = "rustc_apfloat" @@ -2281,28 +2290,36 @@ version = "0.2.3+llvm-462a31f5a5ab" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "486c2179b4796f65bfe2ee33679acf0927ac83ecf583ad6c91c3b4570911b9ad" dependencies = [ - "bitflags 2.9.1", + "bitflags 2.9.4", "smallvec", ] [[package]] -name = "ryu" -version = "1.0.19" +name = "rustversion" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "salsa" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8fff508e3d6ef42a32607f7538e17171a877a12015e32036f46e99d00c95781" +checksum = "2e235afdb8e510f38a07138fbe5a0b64691894358a9c0cbd813b1aade110efc9" dependencies = [ "boxcar", "crossbeam-queue", - "dashmap", - "hashbrown 0.15.2", + "crossbeam-utils", + "hashbrown 0.15.5", "hashlink", - "indexmap 2.9.0", + "indexmap 2.11.4", + "intrusive-collections", + "papaya", "parking_lot", "portable-atomic", "rayon", @@ -2316,17 +2333,16 @@ dependencies = [ [[package]] name = "salsa-macro-rules" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea72b3c06f2ce6350fe3a0eeb7aaaf842d1d8352b706973c19c4f02e298a87c" +checksum = "2edb86a7e9c91f6d30c9ce054312721dbe773a162db27bbfae834d16177b30ce" [[package]] name = "salsa-macros" -version = "0.22.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce92025bc160b27814a207cb78d680973af17f863c7f4fc56cf3a535e22f378" +checksum = "d0778d6e209051bc4e75acfe83bcd7848601ec3dbe9c3dbb982829020e9128af" dependencies = [ - "heck", "proc-macro2", "quote", "syn", @@ -2354,6 +2370,18 @@ dependencies = [ "serde_json", ] +[[package]] +name = "schemars" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -2366,6 +2394,16 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4b8d813387d566f627f3ea1b914c068aac94c40ae27ec43f5f33bde65abefe7" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "semver" version = "1.0.26" @@ -2377,18 +2415,19 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.219" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ + "serde_core", "serde_derive", ] [[package]] name = "serde-untagged" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "299d9c19d7d466db4ab10addd5703e4c615dec2a5a16dbbafe191045e87ee66e" +checksum = "34836a629bcbc6f1afdf0907a744870039b1e14c0561cb26094fa683b158eff3" dependencies = [ "erased-serde", "serde", @@ -2406,10 +2445,19 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "serde_core" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -2418,14 +2466,16 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ + "indexmap 2.11.4", "itoa", "memchr", "ryu", "serde", + "serde_core", ] [[package]] @@ -2438,17 +2488,27 @@ dependencies = [ ] [[package]] -name = "serde_with" -version = "3.13.0" +name = "serde_spanned" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42" +checksum = "5417783452c2be558477e104686f7de5dae53dba813c28435e0e70f82d9b04ee" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_with" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.9.0", - "schemars", + "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", "serde", "serde_derive", "serde_json", @@ -2458,9 +2518,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.13.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ "darling", "proc-macro2", @@ -2474,7 +2534,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.11.4", "itoa", "ryu", "serde", @@ -2532,9 +2592,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.103" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -2543,15 +2603,21 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "temp-dir" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964" + [[package]] name = "text-size" version = "1.1.1" @@ -2566,38 +2632,18 @@ checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" [[package]] name = "thiserror" -version = "1.0.69" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 1.0.69", -] - -[[package]] -name = "thiserror" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" -dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.69" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -2606,22 +2652,20 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", ] [[package]] name = "time" -version = "0.3.37" +version = "0.3.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" dependencies = [ "deranged", - "itoa", "num-conv", "powerfmt", "serde", @@ -2631,15 +2675,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -2662,11 +2706,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_edit", ] +[[package]] +name = "toml" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e5e5d9bf2475ac9d4f0d9edab68cc573dc2fd644b0dba36b0c30a92dd9eaa0" +dependencies = [ + "indexmap 2.11.4", + "serde_core", + "serde_spanned 1.0.2", + "toml_datetime 0.7.2", + "toml_parser", + "toml_writer", + "winnow", +] + [[package]] name = "toml_datetime" version = "0.6.11" @@ -2676,26 +2735,50 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_datetime" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" +dependencies = [ + "serde_core", +] + [[package]] name = "toml_edit" version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ - "indexmap 2.9.0", + "indexmap 2.11.4", "serde", - "serde_spanned", - "toml_datetime", + "serde_spanned 0.6.9", + "toml_datetime 0.6.11", "toml_write", "winnow", ] +[[package]] +name = "toml_parser" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" +dependencies = [ + "winnow", +] + [[package]] name = "toml_write" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" +[[package]] +name = "toml_writer" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d163a63c116ce562a22cda521fcc4d79152e7aba014456fb5eb442f6d6a10109" + [[package]] name = "tracing" version = "0.1.41" @@ -2709,9 +2792,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", @@ -2720,9 +2803,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -2745,21 +2828,21 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "log 0.4.27", + "log 0.4.28", "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -2770,22 +2853,23 @@ dependencies = [ [[package]] name = "tree-sitter" -version = "0.24.6" +version = "0.25.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2434c86ba59ed15af56039cc5bf1acf8ba76ce301e32ef08827388ef285ec5" +checksum = "ccd2a058a86cfece0bf96f7cce1021efef9c8ed0e892ab74639173e5ed7a34fa" dependencies = [ "cc", "regex", - "regex-syntax 0.8.5", + "regex-syntax", + "serde_json", "streaming-iterator", "tree-sitter-language", ] [[package]] name = "tree-sitter-embedded-template" -version = "0.23.2" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790063ef14e5b67556abc0b3be0ed863fb41d65ee791cf8c0b20eb42a1fa46af" +checksum = "833d528e8fcb4e49ddb04d4d6450ddb8ac08f282a58fec94ce981c9c5dbf7e3a" dependencies = [ "cc", "tree-sitter-language", @@ -2803,9 +2887,9 @@ dependencies = [ [[package]] name = "tree-sitter-language" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c199356c799a8945965bb5f2c55b2ad9d9aa7c4b4f6e587fe9dea0bc715e5f9c" +checksum = "c4013970217383f67b18aef68f6fb2e8d409bc5755227092d32efb0422ba24b8" [[package]] name = "tree-sitter-ql" @@ -2866,9 +2950,9 @@ checksum = "a3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68f" [[package]] name = "unicode-ident" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "unicode-properties" @@ -2890,13 +2974,14 @@ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -2913,9 +2998,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "version_check" @@ -2935,38 +3020,49 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.13.3+wasi-0.2.2" +version = "0.14.5+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "a4494f6290a82f5fe584817a676a34b9d6763e8d9d18204009fb31dceca98fd4" dependencies = [ - "wit-bindgen-rt", + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.0+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03fa2761397e5bd52002cd7e73110c71af2109aca4e521a9f40473fe685b0a24" +dependencies = [ + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" dependencies = [ "bumpalo", - "log 0.4.27", + "log 0.4.28", "proc-macro2", "quote", "syn", @@ -2975,9 +3071,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2985,9 +3081,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", @@ -2998,63 +3094,85 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "unicode-ident", ] -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.0", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "windows-core" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result", + "windows-strings", +] [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows-targets 0.52.6", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-link" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.48.5", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", ] [[package]] @@ -3081,22 +3199,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.2", + "windows-targets 0.53.3", ] [[package]] -name = "windows-targets" -version = "0.48.5" +name = "windows-sys" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-link 0.2.0", ] [[package]] @@ -3117,10 +3229,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.2" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link 0.1.3", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -3131,12 +3244,6 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -3149,12 +3256,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -3167,12 +3268,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -3197,12 +3292,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -3215,12 +3304,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -3233,12 +3316,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -3251,12 +3328,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -3271,21 +3342,18 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" +name = "wit-bindgen" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags 2.9.1", -] +checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36" [[package]] name = "writeable" @@ -3325,39 +3393,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c" -dependencies = [ - "zerocopy-derive 0.8.20", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -3398,9 +3445,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -3438,9 +3485,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.15+zstd.1.5.7" +version = "2.0.16+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 7866a65d209..58a755340b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,3 @@ members = [ "rust/ast-generator", "rust/autobuild", ] -exclude = ["mad-generation-build"] diff --git a/MODULE.bazel b/MODULE.bazel index 52c07a395b5..dfd2c469a5e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -14,21 +14,21 @@ local_path_override( # see https://registry.bazel.build/ for a list of available packages -bazel_dep(name = "platforms", version = "0.0.11") +bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "rules_go", version = "0.56.1") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1") bazel_dep(name = "rules_python", version = "0.40.0") -bazel_dep(name = "rules_shell", version = "0.3.0") -bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "rules_shell", version = "0.5.0") +bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "10.0.0") bazel_dep(name = "rules_kotlin", version = "2.1.3-codeql.1") bazel_dep(name = "gazelle", version = "0.40.0") -bazel_dep(name = "rules_dotnet", version = "0.17.4") +bazel_dep(name = "rules_dotnet", version = "0.19.2-codeql.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") -bazel_dep(name = "rules_rust", version = "0.63.0") +bazel_dep(name = "rules_rust", version = "0.66.0") bazel_dep(name = "zstd", version = "1.5.5.bcr.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) @@ -89,8 +89,8 @@ use_repo( "vendor_py__cc-1.2.14", "vendor_py__clap-4.5.30", "vendor_py__regex-1.11.1", - "vendor_py__tree-sitter-0.20.4", - "vendor_py__tree-sitter-graph-0.7.0", + "vendor_py__tree-sitter-0.24.7", + "vendor_py__tree-sitter-graph-0.12.0", ) # deps for ruby+rust @@ -98,54 +98,54 @@ use_repo( tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r") use_repo( tree_sitter_extractors_deps, - "vendor_ts__anyhow-1.0.98", + "vendor_ts__anyhow-1.0.100", "vendor_ts__argfile-0.2.1", - "vendor_ts__chalk-ir-0.103.0", - "vendor_ts__chrono-0.4.41", - "vendor_ts__clap-4.5.40", + "vendor_ts__chalk-ir-0.104.0", + "vendor_ts__chrono-0.4.42", + "vendor_ts__clap-4.5.48", "vendor_ts__dunce-1.0.5", "vendor_ts__either-1.15.0", "vendor_ts__encoding-0.2.33", "vendor_ts__figment-0.10.19", - "vendor_ts__flate2-1.1.0", - "vendor_ts__glob-0.3.2", - "vendor_ts__globset-0.4.15", + "vendor_ts__flate2-1.1.2", + "vendor_ts__glob-0.3.3", + "vendor_ts__globset-0.4.16", "vendor_ts__itertools-0.14.0", "vendor_ts__lazy_static-1.5.0", "vendor_ts__mustache-0.9.0", "vendor_ts__num-traits-0.2.19", "vendor_ts__num_cpus-1.17.0", - "vendor_ts__proc-macro2-1.0.95", - "vendor_ts__quote-1.0.40", - "vendor_ts__ra_ap_base_db-0.0.288", - "vendor_ts__ra_ap_cfg-0.0.288", - "vendor_ts__ra_ap_hir-0.0.288", - "vendor_ts__ra_ap_hir_def-0.0.288", - "vendor_ts__ra_ap_hir_expand-0.0.288", - "vendor_ts__ra_ap_hir_ty-0.0.288", - "vendor_ts__ra_ap_ide_db-0.0.288", - "vendor_ts__ra_ap_intern-0.0.288", - "vendor_ts__ra_ap_load-cargo-0.0.288", - "vendor_ts__ra_ap_parser-0.0.288", - "vendor_ts__ra_ap_paths-0.0.288", - "vendor_ts__ra_ap_project_model-0.0.288", - "vendor_ts__ra_ap_span-0.0.288", - "vendor_ts__ra_ap_stdx-0.0.288", - "vendor_ts__ra_ap_syntax-0.0.288", - "vendor_ts__ra_ap_vfs-0.0.288", - "vendor_ts__rand-0.9.1", - "vendor_ts__rayon-1.10.0", - "vendor_ts__regex-1.11.1", - "vendor_ts__serde-1.0.219", - "vendor_ts__serde_json-1.0.140", - "vendor_ts__serde_with-3.13.0", - "vendor_ts__syn-2.0.103", - "vendor_ts__toml-0.8.23", + "vendor_ts__proc-macro2-1.0.101", + "vendor_ts__quote-1.0.41", + "vendor_ts__ra_ap_base_db-0.0.301", + "vendor_ts__ra_ap_cfg-0.0.301", + "vendor_ts__ra_ap_hir-0.0.301", + "vendor_ts__ra_ap_hir_def-0.0.301", + "vendor_ts__ra_ap_hir_expand-0.0.301", + "vendor_ts__ra_ap_hir_ty-0.0.301", + "vendor_ts__ra_ap_ide_db-0.0.301", + "vendor_ts__ra_ap_intern-0.0.301", + "vendor_ts__ra_ap_load-cargo-0.0.301", + "vendor_ts__ra_ap_parser-0.0.301", + "vendor_ts__ra_ap_paths-0.0.301", + "vendor_ts__ra_ap_project_model-0.0.301", + "vendor_ts__ra_ap_span-0.0.301", + "vendor_ts__ra_ap_stdx-0.0.301", + "vendor_ts__ra_ap_syntax-0.0.301", + "vendor_ts__ra_ap_vfs-0.0.301", + "vendor_ts__rand-0.9.2", + "vendor_ts__rayon-1.11.0", + "vendor_ts__regex-1.11.3", + "vendor_ts__serde-1.0.228", + "vendor_ts__serde_json-1.0.145", + "vendor_ts__serde_with-3.14.1", + "vendor_ts__syn-2.0.106", + "vendor_ts__toml-0.9.7", "vendor_ts__tracing-0.1.41", "vendor_ts__tracing-flame-0.2.0", - "vendor_ts__tracing-subscriber-0.3.19", - "vendor_ts__tree-sitter-0.24.6", - "vendor_ts__tree-sitter-embedded-template-0.23.2", + "vendor_ts__tracing-subscriber-0.3.20", + "vendor_ts__tree-sitter-0.25.9", + "vendor_ts__tree-sitter-embedded-template-0.25.0", "vendor_ts__tree-sitter-json-0.24.8", "vendor_ts__tree-sitter-ql-0.23.1", "vendor_ts__tree-sitter-ruby-0.23.1", @@ -172,7 +172,7 @@ http_archive( ) dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") -dotnet.toolchain(dotnet_version = "9.0.100") +dotnet.toolchain(dotnet_version = "9.0.300") use_repo(dotnet, "dotnet_toolchains") register_toolchains("@dotnet_toolchains//:all") @@ -273,19 +273,19 @@ lfs_archive = use_repo_rule("//misc/bazel:lfs.bzl", "lfs_archive") lfs_archive( name = "ripunzip-linux", - src = "//misc/ripunzip:ripunzip-Linux.zip", + src = "//misc/ripunzip:ripunzip-Linux.tar.zst", build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) lfs_archive( name = "ripunzip-windows", - src = "//misc/ripunzip:ripunzip-Windows.zip", + src = "//misc/ripunzip:ripunzip-Windows.tar.zst", build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) lfs_archive( name = "ripunzip-macos", - src = "//misc/ripunzip:ripunzip-macOS.zip", + src = "//misc/ripunzip:ripunzip-macOS.tar.zst", build_file = "//misc/ripunzip:BUILD.ripunzip.bazel", ) diff --git a/actions/extractor/codeql-extractor.yml b/actions/extractor/codeql-extractor.yml index ab737491005..376abe32597 100644 --- a/actions/extractor/codeql-extractor.yml +++ b/actions/extractor/codeql-extractor.yml @@ -1,14 +1,17 @@ name: "actions" -aliases: [] display_name: "GitHub Actions" version: 0.0.1 column_kind: "utf16" unicode_newlines: true build_modes: - none -file_coverage_languages: [] +default_queries: + - codeql/actions-queries +# Actions workflows are not reported separately by the GitHub API, so we can't +# associate them with a specific language. github_api_languages: [] -scc_languages: [] +scc_languages: + - YAML file_types: - name: workflow display_name: GitHub Actions workflow files diff --git a/actions/extractor/tools/baseline-config.json b/actions/extractor/tools/baseline-config.json new file mode 100644 index 00000000000..fde0bd1ecdf --- /dev/null +++ b/actions/extractor/tools/baseline-config.json @@ -0,0 +1,10 @@ +{ + "paths": [ + ".github/workflows/*.yml", + ".github/workflows/*.yaml", + ".github/reusable_workflows/**/*.yml", + ".github/reusable_workflows/**/*.yaml", + "**/action.yml", + "**/action.yaml" + ] +} diff --git a/actions/extractor/tools/configure-baseline.cmd b/actions/extractor/tools/configure-baseline.cmd new file mode 100755 index 00000000000..b9c1b3f7a02 --- /dev/null +++ b/actions/extractor/tools/configure-baseline.cmd @@ -0,0 +1,2 @@ +@echo off +type "%CODEQL_EXTRACTOR_ACTIONS_ROOT%\tools\baseline-config.json" diff --git a/actions/extractor/tools/configure-baseline.sh b/actions/extractor/tools/configure-baseline.sh new file mode 100755 index 00000000000..6fd7605ef3f --- /dev/null +++ b/actions/extractor/tools/configure-baseline.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +cat "$CODEQL_EXTRACTOR_ACTIONS_ROOT/tools/baseline-config.json" diff --git a/actions/ql/integration-tests/query-suite/actions-code-scanning.qls.expected b/actions/ql/integration-tests/query-suite/actions-code-scanning.qls.expected index 4a12174ffbd..90ee8a79483 100644 --- a/actions/ql/integration-tests/query-suite/actions-code-scanning.qls.expected +++ b/actions/ql/integration-tests/query-suite/actions-code-scanning.qls.expected @@ -1,3 +1,4 @@ +ql/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql ql/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql diff --git a/actions/ql/integration-tests/query-suite/actions-security-and-quality.qls.expected b/actions/ql/integration-tests/query-suite/actions-security-and-quality.qls.expected index d071a33c186..111fc3e4524 100644 --- a/actions/ql/integration-tests/query-suite/actions-security-and-quality.qls.expected +++ b/actions/ql/integration-tests/query-suite/actions-security-and-quality.qls.expected @@ -1,4 +1,5 @@ ql/actions/ql/src/Debug/SyntaxError.ql +ql/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql ql/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.ql ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql diff --git a/actions/ql/integration-tests/query-suite/actions-security-extended.qls.expected b/actions/ql/integration-tests/query-suite/actions-security-extended.qls.expected index 06a9c6745e4..6ee3140d070 100644 --- a/actions/ql/integration-tests/query-suite/actions-security-extended.qls.expected +++ b/actions/ql/integration-tests/query-suite/actions-security-extended.qls.expected @@ -1,3 +1,4 @@ +ql/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql ql/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql ql/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.ql ql/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index dffad0539b0..ffe1cba8281 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,27 @@ +## 0.4.20 + +No user-facing changes. + +## 0.4.19 + +No user-facing changes. + +## 0.4.18 + +No user-facing changes. + +## 0.4.17 + +No user-facing changes. + +## 0.4.16 + +No user-facing changes. + +## 0.4.15 + +No user-facing changes. + ## 0.4.14 No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.15.md b/actions/ql/lib/change-notes/released/0.4.15.md new file mode 100644 index 00000000000..364e11a8706 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.15.md @@ -0,0 +1,3 @@ +## 0.4.15 + +No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.16.md b/actions/ql/lib/change-notes/released/0.4.16.md new file mode 100644 index 00000000000..d2472bd981f --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.16.md @@ -0,0 +1,3 @@ +## 0.4.16 + +No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.17.md b/actions/ql/lib/change-notes/released/0.4.17.md new file mode 100644 index 00000000000..30a27b84b73 --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.17.md @@ -0,0 +1,3 @@ +## 0.4.17 + +No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.18.md b/actions/ql/lib/change-notes/released/0.4.18.md new file mode 100644 index 00000000000..a6a7b2e276b --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.18.md @@ -0,0 +1,3 @@ +## 0.4.18 + +No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.19.md b/actions/ql/lib/change-notes/released/0.4.19.md new file mode 100644 index 00000000000..fb592c5a34f --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.19.md @@ -0,0 +1,3 @@ +## 0.4.19 + +No user-facing changes. diff --git a/actions/ql/lib/change-notes/released/0.4.20.md b/actions/ql/lib/change-notes/released/0.4.20.md new file mode 100644 index 00000000000..874725a8c2d --- /dev/null +++ b/actions/ql/lib/change-notes/released/0.4.20.md @@ -0,0 +1,3 @@ +## 0.4.20 + +No user-facing changes. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 3841668fe04..380b2d09423 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.14 +lastReleaseVersion: 0.4.20 diff --git a/actions/ql/lib/codeql/Locations.qll b/actions/ql/lib/codeql/Locations.qll index 96b5d45f18e..24c6ae9cda1 100644 --- a/actions/ql/lib/codeql/Locations.qll +++ b/actions/ql/lib/codeql/Locations.qll @@ -70,8 +70,8 @@ class Location extends TLocation, TBaseLocation { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `p`. * For more information, see * [Providing locations in CodeQL queries](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/actions/ql/lib/codeql/actions/Ast.qll b/actions/ql/lib/codeql/actions/Ast.qll index ae19a7a7e8c..6e76e4cd665 100644 --- a/actions/ql/lib/codeql/actions/Ast.qll +++ b/actions/ql/lib/codeql/actions/Ast.qll @@ -261,7 +261,7 @@ class If extends AstNode instanceof IfImpl { } /** - * An Environemnt node representing a deployment environment. + * An Environment node representing a deployment environment. */ class Environment extends AstNode instanceof EnvironmentImpl { string getName() { result = super.getName() } diff --git a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll index b0cbb8a1d79..b922214e21c 100644 --- a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll +++ b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll @@ -125,12 +125,11 @@ abstract class AstNodeImpl extends TAstNode { * Gets the enclosing Step. */ StepImpl getEnclosingStep() { - if this instanceof StepImpl - then result = this - else - if this instanceof ScalarValueImpl - then result.getAChildNode*() = this.getParentNode() - else none() + this instanceof StepImpl and + result = this + or + this instanceof ScalarValueImpl and + result.getAChildNode*() = this.getParentNode() } /** @@ -1416,9 +1415,8 @@ class ExternalJobImpl extends JobImpl, UsesImpl { override string getVersion() { exists(YamlString name | n.lookup("uses") = name and - if not name.getValue().matches("\\.%") - then result = name.getValue().regexpCapture(repoUsesParser(), 4) - else none() + not name.getValue().matches("\\.%") and + result = name.getValue().regexpCapture(repoUsesParser(), 4) ) } } diff --git a/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll b/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll index af5e0f62552..2dcfd81a47d 100644 --- a/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll +++ b/actions/ql/lib/codeql/actions/controlflow/BasicBlocks.qll @@ -286,7 +286,7 @@ private module Cached { /** * Holds if `cfn` is the `i`th node in basic block `bb`. * - * In other words, `i` is the shortest distance from a node `bb` + * In other words, `i` is the shortest distance from a node `bbStart` * that starts a basic block to `cfn` along the `intraBBSucc` relation. */ cached diff --git a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll index 06295e3d88d..38ce9e7e03d 100644 --- a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll +++ b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll @@ -3,6 +3,8 @@ private import codeql.controlflow.Cfg as CfgShared private import codeql.Locations module Completion { + import codeql.controlflow.SuccessorType + private newtype TCompletion = TSimpleCompletion() or TBooleanCompletion(boolean b) { b in [false, true] } or @@ -25,7 +27,7 @@ module Completion { override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) } - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } } class BooleanCompletion extends NormalCompletion, TBooleanCompletion { @@ -49,34 +51,6 @@ module Completion { override ReturnSuccessor getAMatchingSuccessorType() { any() } } - - cached - private newtype TSuccessorType = - TNormalSuccessor() or - TBooleanSuccessor(boolean b) { b in [false, true] } or - TReturnSuccessor() - - class SuccessorType extends TSuccessorType { - string toString() { none() } - } - - class NormalSuccessor extends SuccessorType, TNormalSuccessor { - override string toString() { result = "successor" } - } - - class BooleanSuccessor extends SuccessorType, TBooleanSuccessor { - boolean value; - - BooleanSuccessor() { this = TBooleanSuccessor(value) } - - override string toString() { result = value.toString() } - - boolean getValue() { result = value } - } - - class ReturnSuccessor extends SuccessorType, TReturnSuccessor { - override string toString() { result = "return" } - } } module CfgScope { @@ -127,14 +101,8 @@ private module Implementation implements CfgShared::InputSig { last(scope.(CompositeAction), e, c) } - predicate successorTypeIsSimple(SuccessorType t) { t instanceof NormalSuccessor } - - predicate successorTypeIsCondition(SuccessorType t) { t instanceof BooleanSuccessor } - SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - predicate isAbnormalExitType(SuccessorType t) { none() } - int idOfAstNode(AstNode node) { none() } int idOfCfgScope(CfgScope scope) { none() } diff --git a/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll b/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll index 2914dac5f0a..9667c6e525e 100644 --- a/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll +++ b/actions/ql/lib/codeql/actions/dataflow/ExternalFlow.qll @@ -63,10 +63,10 @@ predicate madSource(DataFlow::Node source, string kind, string fieldName) { ( if fieldName.trim().matches("env.%") then source.asExpr() = uses.getInScopeEnvVarExpr(fieldName.trim().replaceAll("env.", "")) - else - if fieldName.trim().matches("output.%") - then source.asExpr() = uses - else none() + else ( + fieldName.trim().matches("output.%") and + source.asExpr() = uses + ) ) ) } diff --git a/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll b/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll index df3d513d005..18cc4322c81 100644 --- a/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll +++ b/actions/ql/lib/codeql/actions/dataflow/FlowSources.qll @@ -31,14 +31,14 @@ abstract class RemoteFlowSource extends SourceNode { class GitHubCtxSource extends RemoteFlowSource { string flag; string event; - GitHubExpression e; GitHubCtxSource() { - this.asExpr() = e and - // github.head_ref - e.getFieldName() = "head_ref" and - flag = "branch" and - ( + exists(GitHubExpression e | + this.asExpr() = e and + // github.head_ref + e.getFieldName() = "head_ref" and + flag = "branch" + | event = e.getATriggerEvent().getName() and event = "pull_request_target" or @@ -148,7 +148,6 @@ class GhCLICommandSource extends RemoteFlowSource, CommandSource { class GitHubEventPathSource extends RemoteFlowSource, CommandSource { string cmd; string flag; - string access_path; Run run; // Examples @@ -163,7 +162,7 @@ class GitHubEventPathSource extends RemoteFlowSource, CommandSource { run.getScript().getACommand() = cmd and cmd.matches("jq%") and cmd.matches("%GITHUB_EVENT_PATH%") and - exists(string regexp | + exists(string regexp, string access_path | untrustedEventPropertiesDataModel(regexp, flag) and not flag = "json" and access_path = "github.event" + cmd.regexpCapture(".*\\s+([^\\s]+)\\s+.*", 1) and diff --git a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll index 1d461cca3df..7d3334adcf3 100644 --- a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll @@ -1,6 +1,7 @@ private import actions private import codeql.actions.TaintTracking private import codeql.actions.dataflow.ExternalFlow +private import codeql.actions.security.ControlChecks import codeql.actions.dataflow.FlowSources import codeql.actions.DataFlow @@ -18,7 +19,6 @@ abstract class ArgumentInjectionSink extends DataFlow::Node { */ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { string command; - string argument; ArgumentInjectionFromEnvVarSink() { exists(Run run, string var | @@ -27,7 +27,7 @@ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { exists(run.getInScopeEnvVarExpr(var)) or var = "GITHUB_HEAD_REF" ) and - run.getScript().getAnEnvReachingArgumentInjectionSink(var, command, argument) + run.getScript().getAnEnvReachingArgumentInjectionSink(var, command, _) ) } @@ -43,13 +43,12 @@ class ArgumentInjectionFromEnvVarSink extends ArgumentInjectionSink { */ class ArgumentInjectionFromCommandSink extends ArgumentInjectionSink { string command; - string argument; ArgumentInjectionFromCommandSink() { exists(CommandSource source, Run run | run = source.getEnclosingRun() and this.asExpr() = run.getScript() and - run.getScript().getACmdReachingArgumentInjectionSink(source.getCommand(), command, argument) + run.getScript().getACmdReachingArgumentInjectionSink(source.getCommand(), command, _) ) } @@ -65,6 +64,16 @@ class ArgumentInjectionFromMaDSink extends ArgumentInjectionSink { override string getCommand() { result = "unknown" } } +/** + * Gets the event that is relevant for the given node in the context of argument injection. + * + * This is used to highlight the event in the query results when an alert is raised. + */ +Event getRelevantEventInPrivilegedContext(DataFlow::Node node) { + inPrivilegedContext(node.asExpr(), result) and + not exists(ControlCheck check | check.protects(node.asExpr(), result, "argument-injection")) +} + /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a code script. @@ -88,6 +97,14 @@ private module ArgumentInjectionConfig implements DataFlow::ConfigSig { run.getScript().getAnEnvReachingArgumentInjectionSink(var, _, _) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantEventInPrivilegedContext(sink).getLocation() + } } /** Tracks flow of unsafe user input that is used to construct and evaluate a code script. */ diff --git a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll index f0649bb8174..af3b9d62367 100644 --- a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll +++ b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll @@ -4,6 +4,7 @@ import codeql.actions.DataFlow import codeql.actions.dataflow.FlowSources import codeql.actions.security.PoisonableSteps import codeql.actions.security.UntrustedCheckoutQuery +import codeql.actions.security.ControlChecks string unzipRegexp() { result = "(unzip|tar)\\s+.*" } @@ -124,8 +125,6 @@ class LegitLabsDownloadArtifactActionStep extends UntrustedArtifactDownloadStep, } class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, UsesStep { - string script; - ActionsGitHubScriptDownloadStep() { // eg: // - uses: actions/github-script@v6 @@ -148,12 +147,14 @@ class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, Use // var fs = require('fs'); // fs.writeFileSync('${{github.workspace}}/test-results.zip', Buffer.from(download.data)); this.getCallee() = "actions/github-script" and - this.getArgument("script") = script and - script.matches("%listWorkflowRunArtifacts(%") and - script.matches("%downloadArtifact(%") and - script.matches("%writeFileSync(%") and - // Filter out artifacts that were created by pull-request. - not script.matches("%exclude_pull_requests: true%") + exists(string script | + this.getArgument("script") = script and + script.matches("%listWorkflowRunArtifacts(%") and + script.matches("%downloadArtifact(%") and + script.matches("%writeFileSync(%") and + // Filter out artifacts that were created by pull-request. + not script.matches("%exclude_pull_requests: true%") + ) } override string getPath() { @@ -170,10 +171,10 @@ class ActionsGitHubScriptDownloadStep extends UntrustedArtifactDownloadStep, Use .getScript() .getACommand() .regexpCapture(unzipRegexp() + unzipDirArgRegexp(), 3))) - else - if this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) - then result = "GITHUB_WORKSPACE/" - else none() + else ( + this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) and + result = "GITHUB_WORKSPACE/" + ) } } @@ -206,12 +207,13 @@ class GHRunArtifactDownloadStep extends UntrustedArtifactDownloadStep, Run { .getScript() .getACommand() .regexpCapture(unzipRegexp() + unzipDirArgRegexp(), 3))) - else - if + else ( + ( this.getAFollowingStep().(Run).getScript().getACommand().regexpMatch(unzipRegexp()) or this.getScript().getACommand().regexpMatch(unzipRegexp()) - then result = "GITHUB_WORKSPACE/" - else none() + ) and + result = "GITHUB_WORKSPACE/" + ) } } @@ -258,15 +260,15 @@ class DirectArtifactDownloadStep extends UntrustedArtifactDownloadStep, Run { class ArtifactPoisoningSink extends DataFlow::Node { UntrustedArtifactDownloadStep download; - PoisonableStep poisonable; ArtifactPoisoningSink() { - download.getAFollowingStep() = poisonable and - // excluding artifacts downloaded to the temporary directory - not download.getPath().regexpMatch("^/tmp.*") and - not download.getPath().regexpMatch("^\\$\\{\\{\\s*runner\\.temp\\s*}}.*") and - not download.getPath().regexpMatch("^\\$RUNNER_TEMP.*") and - ( + exists(PoisonableStep poisonable | + download.getAFollowingStep() = poisonable and + // excluding artifacts downloaded to the temporary directory + not download.getPath().regexpMatch("^/tmp.*") and + not download.getPath().regexpMatch("^\\$\\{\\{\\s*runner\\.temp\\s*}}.*") and + not download.getPath().regexpMatch("^\\$RUNNER_TEMP.*") + | poisonable.(Run).getScript() = this.asExpr() and ( // Check if the poisonable step is a local script execution step @@ -292,6 +294,16 @@ class ArtifactPoisoningSink extends DataFlow::Node { string getPath() { result = download.getPath() } } +/** + * Gets the event that is relevant for the given node in the context of artifact poisoning. + * + * This is used to highlight the event in the query results when an alert is raised. + */ +Event getRelevantEventInPrivilegedContext(DataFlow::Node node) { + inPrivilegedContext(node.asExpr(), result) and + not exists(ControlCheck check | check.protects(node.asExpr(), result, "artifact-poisoning")) +} + /** * A taint-tracking configuration for unsafe artifacts * that is used may lead to artifact poisoning @@ -318,6 +330,14 @@ private module ArtifactPoisoningConfig implements DataFlow::ConfigSig { exists(run.getScript().getAFileReadCommand()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantEventInPrivilegedContext(sink).getLocation() + } } /** Tracks flow of unsafe artifacts that is used in an insecure way. */ diff --git a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll index fac498f72da..0f77acc2444 100644 --- a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll @@ -3,6 +3,8 @@ private import codeql.actions.TaintTracking private import codeql.actions.dataflow.ExternalFlow import codeql.actions.dataflow.FlowSources import codeql.actions.DataFlow +import codeql.actions.security.ControlChecks +import codeql.actions.security.CachePoisoningQuery class CodeInjectionSink extends DataFlow::Node { CodeInjectionSink() { @@ -11,6 +13,46 @@ class CodeInjectionSink extends DataFlow::Node { } } +/** + * Get the relevant event for the sink in CodeInjectionCritical.ql. + */ +Event getRelevantCriticalEventForSink(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | check.protects(sink.asExpr(), result, "code-injection")) and + // exclude cases where the sink is a JS script and the expression uses toJson + not exists(UsesStep script | + script.getCallee() = "actions/github-script" and + script.getArgumentExpr("script") = sink.asExpr() and + exists(getAToJsonReferenceExpression(sink.asExpr().(Expression).getExpression(), _)) + ) +} + +/** + * Get the relevant event for the sink in CachePoisoningViaCodeInjection.ql. + */ +Event getRelevantCachePoisoningEventForSink(DataFlow::Node sink) { + exists(LocalJob job | + job = sink.asExpr().getEnclosingJob() and + job.getATriggerEvent() = result and + // job can be triggered by an external user + result.isExternallyTriggerable() and + // excluding privileged workflows since they can be exploited in easier circumstances + // which is covered by `actions/code-injection/critical` + not job.isPrivilegedExternallyTriggerable(result) and + ( + // the workflow runs in the context of the default branch + runsOnDefaultBranch(result) + or + // the workflow caller runs in the context of the default branch + result.getName() = "workflow_call" and + exists(ExternalJob caller | + caller.getCallee() = job.getLocation().getFile().getRelativePath() and + runsOnDefaultBranch(caller.getATriggerEvent()) + ) + ) + ) +} + /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a code script. @@ -35,6 +77,16 @@ private module CodeInjectionConfig implements DataFlow::ConfigSig { exists(run.getScript().getAFileReadCommand()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantCriticalEventForSink(sink).getLocation() + or + result = getRelevantCachePoisoningEventForSink(sink).getLocation() + } } /** Tracks flow of unsafe user input that is used to construct and evaluate a code script. */ diff --git a/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll index 59d523cd582..ffa16b0f940 100644 --- a/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll @@ -3,11 +3,20 @@ private import codeql.actions.TaintTracking private import codeql.actions.dataflow.ExternalFlow import codeql.actions.dataflow.FlowSources import codeql.actions.DataFlow +import codeql.actions.security.ControlChecks private class CommandInjectionSink extends DataFlow::Node { CommandInjectionSink() { madSink(this, "command-injection") } } +/** Get the relevant event for the sink in CommandInjectionCritical.ql. */ +Event getRelevantEventInPrivilegedContext(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | + check.protects(sink.asExpr(), result, ["command-injection", "code-injection"]) + ) +} + /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate a system command. @@ -16,6 +25,16 @@ private module CommandInjectionConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } predicate isSink(DataFlow::Node sink) { sink instanceof CommandInjectionSink } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantEventInPrivilegedContext(sink).getLocation() + } } /** Tracks flow of unsafe user input that is used to construct and evaluate a system command. */ diff --git a/actions/ql/lib/codeql/actions/security/ControlChecks.qll b/actions/ql/lib/codeql/actions/security/ControlChecks.qll index 244c04310d6..41f512abbc3 100644 --- a/actions/ql/lib/codeql/actions/security/ControlChecks.qll +++ b/actions/ql/lib/codeql/actions/security/ControlChecks.qll @@ -159,11 +159,8 @@ abstract class CommentVsHeadDateCheck extends ControlCheck { /* Specific implementations of control checks */ class LabelIfCheck extends LabelCheck instanceof If { - string condition; - LabelIfCheck() { - condition = normalizeExpr(this.getCondition()) and - ( + exists(string condition | condition = normalizeExpr(this.getCondition()) | // eg: contains(github.event.pull_request.labels.*.name, 'safe to test') condition.regexpMatch(".*(^|[^!])contains\\(\\s*github\\.event\\.pull_request\\.labels\\b.*") or diff --git a/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll index 33efc9b1bc8..e97bbbb2b80 100644 --- a/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll @@ -72,6 +72,25 @@ class EnvPathInjectionFromMaDSink extends EnvPathInjectionSink { EnvPathInjectionFromMaDSink() { madSink(this, "envpath-injection") } } +/** + * Get the relevant event for a sink in EnvPathInjectionCritical.ql where the source type is "artifact". + */ +Event getRelevantArtifactEventInPrivilegedContext(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | + check.protects(sink.asExpr(), result, ["untrusted-checkout", "artifact-poisoning"]) + ) and + sink instanceof EnvPathInjectionFromFileReadSink +} + +/** + * Get the relevant event for a sink in EnvPathInjectionCritical.ql where the source type is not "artifact". + */ +Event getRelevantNonArtifactEventInPrivilegedContext(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | check.protects(sink.asExpr(), result, "code-injection")) +} + /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate an environment variable. @@ -108,6 +127,16 @@ private module EnvPathInjectionConfig implements DataFlow::ConfigSig { exists(run.getScript().getAFileReadCommand()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantArtifactEventInPrivilegedContext(sink).getLocation() + or + result = getRelevantNonArtifactEventInPrivilegedContext(sink).getLocation() + } } /** Tracks flow of unsafe user input that is used to construct and evaluate the PATH environment variable. */ diff --git a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll index 656ea1207b5..40810477d92 100644 --- a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll +++ b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll @@ -55,12 +55,8 @@ class EnvVarInjectionFromFileReadSink extends EnvVarInjectionSink { * echo "COMMIT_MESSAGE=${COMMIT_MESSAGE}" >> $GITHUB_ENV */ class EnvVarInjectionFromCommandSink extends EnvVarInjectionSink { - CommandSource inCommand; - string injectedVar; - string command; - EnvVarInjectionFromCommandSink() { - exists(Run run | + exists(Run run, CommandSource inCommand, string injectedVar, string command | this.asExpr() = inCommand.getEnclosingRun().getScript() and run = inCommand.getEnclosingRun() and run.getScript().getACmdReachingGitHubEnvWrite(inCommand.getCommand(), injectedVar) and @@ -86,12 +82,8 @@ class EnvVarInjectionFromCommandSink extends EnvVarInjectionSink { * echo "FOO=$BODY" >> $GITHUB_ENV */ class EnvVarInjectionFromEnvVarSink extends EnvVarInjectionSink { - string inVar; - string injectedVar; - string command; - EnvVarInjectionFromEnvVarSink() { - exists(Run run | + exists(Run run, string inVar, string injectedVar, string command | run.getScript() = this.asExpr() and exists(run.getInScopeEnvVarExpr(inVar)) and run.getScript().getAnEnvReachingGitHubEnvWrite(inVar, injectedVar) and @@ -126,6 +118,32 @@ class EnvVarInjectionFromMaDSink extends EnvVarInjectionSink { EnvVarInjectionFromMaDSink() { madSink(this, "envvar-injection") } } +/** + * Get the relevant event for a sink in EnvVarInjectionCritical.ql where the source type is "artifact". + */ +Event getRelevantArtifactEventInPrivilegedContext(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | + check + .protects(sink.asExpr(), result, + ["envvar-injection", "untrusted-checkout", "artifact-poisoning"]) + ) and + ( + sink instanceof EnvVarInjectionFromFileReadSink or + madSink(sink, "envvar-injection") + ) +} + +/** + * Get the relevant event for a sink in EnvVarInjectionCritical.ql where the source type is not "artifact". + */ +Event getRelevantNonArtifactEventInPrivilegedContext(DataFlow::Node sink) { + inPrivilegedContext(sink.asExpr(), result) and + not exists(ControlCheck check | + check.protects(sink.asExpr(), result, ["envvar-injection", "code-injection"]) + ) +} + /** * A taint-tracking configuration for unsafe user input * that is used to construct and evaluate an environment variable. @@ -163,6 +181,16 @@ private module EnvVarInjectionConfig implements DataFlow::ConfigSig { exists(run.getScript().getAFileReadCommand()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = getRelevantArtifactEventInPrivilegedContext(sink).getLocation() + or + result = getRelevantNonArtifactEventInPrivilegedContext(sink).getLocation() + } } /** Tracks flow of unsafe user input that is used to construct and evaluate an environment variable. */ diff --git a/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll b/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll index c67d2876b09..22b4879df12 100644 --- a/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll +++ b/actions/ql/lib/codeql/actions/security/OutputClobberingQuery.qll @@ -99,18 +99,14 @@ class OutputClobberingFromEnvVarSink extends OutputClobberingSink { * echo $BODY */ class WorkflowCommandClobberingFromEnvVarSink extends OutputClobberingSink { - string clobbering_var; - string clobbered_value; - WorkflowCommandClobberingFromEnvVarSink() { - exists(Run run, string workflow_cmd_stmt, string clobbering_stmt | + exists(Run run, string workflow_cmd_stmt, string clobbering_stmt, string clobbering_var | run.getScript() = this.asExpr() and run.getScript().getAStmt() = clobbering_stmt and clobbering_stmt.regexpMatch("echo\\s+(-e\\s+)?(\"|')?\\$(\\{)?" + clobbering_var + ".*") and exists(run.getInScopeEnvVarExpr(clobbering_var)) and run.getScript().getAStmt() = workflow_cmd_stmt and - clobbered_value = - trimQuotes(workflow_cmd_stmt.regexpCapture(".*::set-output\\s+name=.*::(.*)", 1)) + exists(trimQuotes(workflow_cmd_stmt.regexpCapture(".*::set-output\\s+name=.*::(.*)", 1))) ) } } @@ -216,8 +212,6 @@ private module OutputClobberingConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } /** Tracks flow of unsafe user input that is used to construct and evaluate an environment variable. */ diff --git a/actions/ql/lib/codeql/actions/security/RequestForgeryQuery.qll b/actions/ql/lib/codeql/actions/security/RequestForgeryQuery.qll index d96a12e2608..fb89ebdc8ba 100644 --- a/actions/ql/lib/codeql/actions/security/RequestForgeryQuery.qll +++ b/actions/ql/lib/codeql/actions/security/RequestForgeryQuery.qll @@ -18,8 +18,6 @@ private module RequestForgeryConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof RequestForgerySink } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } /** Tracks flow of unsafe user input that is used to construct and evaluate a system command. */ diff --git a/actions/ql/lib/codeql/actions/security/SecretExfiltrationQuery.qll b/actions/ql/lib/codeql/actions/security/SecretExfiltrationQuery.qll index 15cd726c4bb..b3d59210053 100644 --- a/actions/ql/lib/codeql/actions/security/SecretExfiltrationQuery.qll +++ b/actions/ql/lib/codeql/actions/security/SecretExfiltrationQuery.qll @@ -17,8 +17,6 @@ private module SecretExfiltrationConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof SecretExfiltrationSink } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } /** Tracks flow of unsafe user input that is used in a context where it may lead to a secret exfiltration. */ diff --git a/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll b/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll index ef258fce2e5..8595cd1086d 100644 --- a/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll +++ b/actions/ql/lib/codeql/actions/security/UseOfUnversionedImmutableAction.qll @@ -1,10 +1,8 @@ import actions class UnversionedImmutableAction extends UsesStep { - string immutable_action; - UnversionedImmutableAction() { - isImmutableAction(this, immutable_action) and + isImmutableAction(this, _) and not isSemVer(this.getVersion()) } } diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index dd2723b0315..295d925c318 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.15-dev +version: 0.4.21-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index 09fb20778fc..c7253227b7c 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,29 @@ +## 0.6.12 + +No user-facing changes. + +## 0.6.11 + +No user-facing changes. + +## 0.6.10 + +No user-facing changes. + +## 0.6.9 + +### Minor Analysis Improvements + +* Actions analysis now reports file coverage information on the CodeQL status page. + +## 0.6.8 + +No user-facing changes. + +## 0.6.7 + +No user-facing changes. + ## 0.6.6 No user-facing changes. diff --git a/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql b/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql new file mode 100644 index 00000000000..eebf889a388 --- /dev/null +++ b/actions/ql/src/Diagnostics/SuccessfullyExtractedFiles.ql @@ -0,0 +1,13 @@ +/** + * @id actions/diagnostics/successfully-extracted-files + * @name Extracted files + * @description List all files that were extracted. + * @kind diagnostic + * @tags successfully-extracted-files + */ + +private import codeql.Locations + +from File f +where exists(f.getRelativePath()) +select f, "" diff --git a/actions/ql/src/Models/CompositeActionsSinks.ql b/actions/ql/src/Models/CompositeActionsSinks.ql index 65d3fdce9dc..82f0754f03e 100644 --- a/actions/ql/src/Models/CompositeActionsSinks.ql +++ b/actions/ql/src/Models/CompositeActionsSinks.ql @@ -26,8 +26,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Models/CompositeActionsSources.ql b/actions/ql/src/Models/CompositeActionsSources.ql index 2f3e98b3401..c9974cd7361 100644 --- a/actions/ql/src/Models/CompositeActionsSources.ql +++ b/actions/ql/src/Models/CompositeActionsSources.ql @@ -36,8 +36,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Models/CompositeActionsSummaries.ql b/actions/ql/src/Models/CompositeActionsSummaries.ql index 1979c381f5d..814498f639e 100644 --- a/actions/ql/src/Models/CompositeActionsSummaries.ql +++ b/actions/ql/src/Models/CompositeActionsSummaries.ql @@ -27,8 +27,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Models/ReusableWorkflowsSinks.ql b/actions/ql/src/Models/ReusableWorkflowsSinks.ql index 2b08f2445d9..8d02debbdb4 100644 --- a/actions/ql/src/Models/ReusableWorkflowsSinks.ql +++ b/actions/ql/src/Models/ReusableWorkflowsSinks.ql @@ -26,8 +26,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Models/ReusableWorkflowsSources.ql b/actions/ql/src/Models/ReusableWorkflowsSources.ql index 831191e4bfb..a7112bf3758 100644 --- a/actions/ql/src/Models/ReusableWorkflowsSources.ql +++ b/actions/ql/src/Models/ReusableWorkflowsSources.ql @@ -36,8 +36,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Models/ReusableWorkflowsSummaries.ql b/actions/ql/src/Models/ReusableWorkflowsSummaries.ql index fd2d4b396a0..a05bec744f8 100644 --- a/actions/ql/src/Models/ReusableWorkflowsSummaries.ql +++ b/actions/ql/src/Models/ReusableWorkflowsSummaries.ql @@ -27,8 +27,6 @@ private module MyConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module MyFlow = TaintTracking::Global; diff --git a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql index 3e6d63a4604..30bb0fd366f 100644 --- a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql +++ b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql @@ -21,18 +21,12 @@ import codeql.actions.security.ControlChecks from EnvPathInjectionFlow::PathNode source, EnvPathInjectionFlow::PathNode sink, Event event where EnvPathInjectionFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and ( not source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, "code-injection") - ) + event = getRelevantNonArtifactEventInPrivilegedContext(sink.getNode()) or source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, ["untrusted-checkout", "artifact-poisoning"]) - ) and - sink.getNode() instanceof EnvPathInjectionFromFileReadSink + event = getRelevantArtifactEventInPrivilegedContext(sink.getNode()) ) select sink.getNode(), source, sink, "Potential PATH environment variable injection in $@, which may be controlled by an external user ($@).", diff --git a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql index 28ad3b5b5d2..6f0d9729d6d 100644 --- a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql +++ b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql @@ -22,26 +22,15 @@ import codeql.actions.security.ControlChecks from EnvVarInjectionFlow::PathNode source, EnvVarInjectionFlow::PathNode sink, Event event where EnvVarInjectionFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and // exclude paths to file read sinks from non-artifact sources ( // source is text not source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, ["envvar-injection", "code-injection"]) - ) + event = getRelevantNonArtifactEventInPrivilegedContext(sink.getNode()) or // source is an artifact or a file from an untrusted checkout source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and - not exists(ControlCheck check | - check - .protects(sink.getNode().asExpr(), event, - ["envvar-injection", "untrusted-checkout", "artifact-poisoning"]) - ) and - ( - sink.getNode() instanceof EnvVarInjectionFromFileReadSink or - madSink(sink.getNode(), "envvar-injection") - ) + event = getRelevantArtifactEventInPrivilegedContext(sink.getNode()) ) select sink.getNode(), source, sink, "Potential environment variable injection in $@, which may be controlled by an external user ($@).", diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql index c4ab00837ca..ed30e4da71c 100644 --- a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql +++ b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql @@ -22,15 +22,8 @@ import codeql.actions.security.ControlChecks from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event where CodeInjectionFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and - source.getNode().(RemoteFlowSource).getEventName() = event.getName() and - not exists(ControlCheck check | check.protects(sink.getNode().asExpr(), event, "code-injection")) and - // exclude cases where the sink is a JS script and the expression uses toJson - not exists(UsesStep script | - script.getCallee() = "actions/github-script" and - script.getArgumentExpr("script") = sink.getNode().asExpr() and - exists(getAToJsonReferenceExpression(sink.getNode().asExpr().(Expression).getExpression(), _)) - ) + event = getRelevantCriticalEventForSink(sink.getNode()) and + source.getNode().(RemoteFlowSource).getEventName() = event.getName() select sink.getNode(), source, sink, "Potential code injection in $@, which may be controlled by an external user ($@).", sink, sink.getNode().asExpr().(Expression).getRawExpression(), event, event.getName() diff --git a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql index 23e1f223073..2fe792aba1e 100644 --- a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql +++ b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql @@ -18,30 +18,13 @@ import codeql.actions.security.CachePoisoningQuery import CodeInjectionFlow::PathGraph import codeql.actions.security.ControlChecks -from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, LocalJob job, Event event +from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event where CodeInjectionFlow::flowPath(source, sink) and - job = sink.getNode().asExpr().getEnclosingJob() and - job.getATriggerEvent() = event and - // job can be triggered by an external user - event.isExternallyTriggerable() and + event = getRelevantCachePoisoningEventForSink(sink.getNode()) and // the checkout is not controlled by an access check not exists(ControlCheck check | check.protects(source.getNode().asExpr(), event, "code-injection") - ) and - // excluding privileged workflows since they can be exploited in easier circumstances - // which is covered by `actions/code-injection/critical` - not job.isPrivilegedExternallyTriggerable(event) and - ( - // the workflow runs in the context of the default branch - runsOnDefaultBranch(event) - or - // the workflow caller runs in the context of the default branch - event.getName() = "workflow_call" and - exists(ExternalJob caller | - caller.getCallee() = job.getLocation().getFile().getRelativePath() and - runsOnDefaultBranch(caller.getATriggerEvent()) - ) ) select sink.getNode(), source, sink, "Unprivileged code injection in $@, which may lead to cache poisoning ($@).", sink, diff --git a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql index afef7bdd82b..24ecb4b0339 100644 --- a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql +++ b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql @@ -19,10 +19,7 @@ import codeql.actions.security.ControlChecks from ArtifactPoisoningFlow::PathNode source, ArtifactPoisoningFlow::PathNode sink, Event event where ArtifactPoisoningFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, "artifact-poisoning") - ) + event = getRelevantEventInPrivilegedContext(sink.getNode()) select sink.getNode(), source, sink, "Potential artifact poisoning in $@, which may be controlled by an external user ($@).", sink, sink.getNode().toString(), event, event.getName() diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md index de3307550ad..6060354b134 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md @@ -32,7 +32,7 @@ jobs: - uses: actions/setup-node@v1 - run: | - npm install # scripts in package.json from PR would be executed here + npm install # scripts in package.json from PR would be executed here npm build - uses: completely/fakeaction@v2 diff --git a/actions/ql/src/change-notes/released/0.6.10.md b/actions/ql/src/change-notes/released/0.6.10.md new file mode 100644 index 00000000000..048cd0c98ba --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.10.md @@ -0,0 +1,3 @@ +## 0.6.10 + +No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.11.md b/actions/ql/src/change-notes/released/0.6.11.md new file mode 100644 index 00000000000..3c83e3ac112 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.11.md @@ -0,0 +1,3 @@ +## 0.6.11 + +No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.12.md b/actions/ql/src/change-notes/released/0.6.12.md new file mode 100644 index 00000000000..da7e7709ef7 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.12.md @@ -0,0 +1,3 @@ +## 0.6.12 + +No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.7.md b/actions/ql/src/change-notes/released/0.6.7.md new file mode 100644 index 00000000000..c185761a60f --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.7.md @@ -0,0 +1,3 @@ +## 0.6.7 + +No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.8.md b/actions/ql/src/change-notes/released/0.6.8.md new file mode 100644 index 00000000000..9984c422a37 --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.8.md @@ -0,0 +1,3 @@ +## 0.6.8 + +No user-facing changes. diff --git a/actions/ql/src/change-notes/released/0.6.9.md b/actions/ql/src/change-notes/released/0.6.9.md new file mode 100644 index 00000000000..fd1d956946b --- /dev/null +++ b/actions/ql/src/change-notes/released/0.6.9.md @@ -0,0 +1,5 @@ +## 0.6.9 + +### Minor Analysis Improvements + +* Actions analysis now reports file coverage information on the CodeQL status page. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index f4cae0a77ad..28c22ccab7c 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.6.6 +lastReleaseVersion: 0.6.12 diff --git a/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql b/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql index 7d45b25b1a2..2ed98d714da 100644 --- a/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql +++ b/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql @@ -21,10 +21,7 @@ import codeql.actions.security.ControlChecks from CommandInjectionFlow::PathNode source, CommandInjectionFlow::PathNode sink, Event event where CommandInjectionFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, ["command-injection", "code-injection"]) - ) + event = getRelevantEventInPrivilegedContext(sink.getNode()) select sink.getNode(), source, sink, "Potential command injection in $@, which may be controlled by an external user ($@).", sink, sink.getNode().asExpr().(Expression).getRawExpression(), event, event.getName() diff --git a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql index 6930e2f684a..ecab01dd114 100644 --- a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql +++ b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql @@ -20,10 +20,7 @@ import codeql.actions.security.ControlChecks from ArgumentInjectionFlow::PathNode source, ArgumentInjectionFlow::PathNode sink, Event event where ArgumentInjectionFlow::flowPath(source, sink) and - inPrivilegedContext(sink.getNode().asExpr(), event) and - not exists(ControlCheck check | - check.protects(sink.getNode().asExpr(), event, "argument-injection") - ) + event = getRelevantEventInPrivilegedContext(sink.getNode()) select sink.getNode(), source, sink, "Potential argument injection in $@ command, which may be controlled by an external user ($@).", sink, sink.getNode().(ArgumentInjectionSink).getCommand(), event, event.getName() diff --git a/actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql b/actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql index 2e583a98989..2b4ed1a30b4 100644 --- a/actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql +++ b/actions/ql/src/experimental/Security/CWE-200/SecretExfiltration.ql @@ -19,5 +19,5 @@ import SecretExfiltrationFlow::PathGraph from SecretExfiltrationFlow::PathNode source, SecretExfiltrationFlow::PathNode sink where SecretExfiltrationFlow::flowPath(source, sink) select sink.getNode(), source, sink, - "Potential secret exfiltration in $@, which may be be leaked to an attacker-controlled resource.", + "Potential secret exfiltration in $@, which may be leaked to an attacker-controlled resource.", sink, sink.getNode().asExpr().(Expression).getRawExpression() diff --git a/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql b/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql index 519437ddb22..517a9d1eaad 100644 --- a/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql +++ b/actions/ql/src/experimental/Security/CWE-829/ArtifactPoisoningPathTraversal.ql @@ -37,8 +37,6 @@ where ) or // upload artifact is not used in the same workflow - not exists(UsesStep upload | - download.getEnclosingWorkflow().getAJob().(LocalJob).getAStep() = upload - ) + not download.getEnclosingWorkflow().getAJob().(LocalJob).getAStep() instanceof UsesStep ) select download, "Potential artifact poisoning" diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 911d1e19168..b612696b816 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.7-dev +version: 0.6.13-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/actions/ql/test/query-tests/Security/CWE-200/SecretExfiltration.expected b/actions/ql/test/query-tests/Security/CWE-200/SecretExfiltration.expected index 259746eaec9..59b58e03be7 100644 --- a/actions/ql/test/query-tests/Security/CWE-200/SecretExfiltration.expected +++ b/actions/ql/test/query-tests/Security/CWE-200/SecretExfiltration.expected @@ -3,4 +3,4 @@ nodes | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | semmle.label | github.event.pull_request.title | subpaths #select -| .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | Potential secret exfiltration in $@, which may be be leaked to an attacker-controlled resource. | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | ${{ github.event.pull_request.title }} | +| .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | Potential secret exfiltration in $@, which may be leaked to an attacker-controlled resource. | .github/workflows/test1.yml:15:11:16:75 | github.event.pull_request.title | ${{ github.event.pull_request.title }} | diff --git a/config/add-overlay-annotations.py b/config/add-overlay-annotations.py index 85b42026d8d..0a30eee5799 100644 --- a/config/add-overlay-annotations.py +++ b/config/add-overlay-annotations.py @@ -177,6 +177,12 @@ def insert_overlay_caller_annotations(lines): out_lines.append(line) return out_lines +explicitly_global = set([ + "java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll", + "java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll", + "java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll", + "java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll", +]) def annotate_as_appropriate(filename, lines): ''' @@ -196,6 +202,9 @@ def annotate_as_appropriate(filename, lines): ((filename.endswith("Query.qll") or filename.endswith("Config.qll")) and any("implements DataFlow::ConfigSig" in line for line in lines))): return None + elif filename in explicitly_global: + # These files are explicitly global and should not be annotated. + return None elif not any(line for line in lines if line.strip()): return None diff --git a/config/dbscheme-fragments.json b/config/dbscheme-fragments.json index c2a9a5e734b..a626025de0b 100644 --- a/config/dbscheme-fragments.json +++ b/config/dbscheme-fragments.json @@ -9,6 +9,7 @@ "fragments": [ "/*- Compilations -*/", "/*- External data -*/", + "/*- Overlay support -*/", "/*- Files and folders -*/", "/*- Diagnostic messages -*/", "/*- Diagnostic messages: severity -*/", diff --git a/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme new file mode 100644 index 00000000000..2121ffec11f --- /dev/null +++ b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme @@ -0,0 +1,2437 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..c16b29b27f7 --- /dev/null +++ b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme @@ -0,0 +1,2436 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties new file mode 100644 index 00000000000..a951593a337 --- /dev/null +++ b/cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/upgrade.properties @@ -0,0 +1,2 @@ +description: Fix decltype qualifier issue +compatibility: full diff --git a/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme new file mode 100644 index 00000000000..c16b29b27f7 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme @@ -0,0 +1,2436 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..5340d6d5f42 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme @@ -0,0 +1,2423 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties new file mode 100644 index 00000000000..c0351e51e29 --- /dev/null +++ b/cpp/downgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties @@ -0,0 +1,4 @@ +description: Link PCH creations and uses +compatibility: full +pch_uses.rel: delete +pch_creations.rel: delete diff --git a/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected b/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected index c307f26d3db..33c02079fff 100644 --- a/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected +++ b/cpp/ql/integration-tests/query-suite/cpp-code-scanning.qls.expected @@ -7,12 +7,10 @@ ql/cpp/ql/src/Diagnostics/ExtractedFiles.ql ql/cpp/ql/src/Diagnostics/ExtractionWarnings.ql ql/cpp/ql/src/Diagnostics/FailedExtractorInvocations.ql ql/cpp/ql/src/Likely Bugs/Arithmetic/BadAdditionOverflowCheck.ql -ql/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql ql/cpp/ql/src/Likely Bugs/Arithmetic/SignedOverflowCheck.ql ql/cpp/ql/src/Likely Bugs/Conversion/CastArrayPointerArithmetic.ql ql/cpp/ql/src/Likely Bugs/Format/SnprintfOverflow.ql ql/cpp/ql/src/Likely Bugs/Format/WrongNumberOfFormatArguments.ql -ql/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql ql/cpp/ql/src/Likely Bugs/Memory Management/AllocaInLoop.ql ql/cpp/ql/src/Likely Bugs/Memory Management/PointerOverflow.ql ql/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -30,7 +28,6 @@ ql/cpp/ql/src/Security/CWE/CWE-120/VeryLikelyOverrunWrite.ql ql/cpp/ql/src/Security/CWE/CWE-131/NoSpaceForZeroTerminator.ql ql/cpp/ql/src/Security/CWE/CWE-134/UncontrolledFormatString.ql ql/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql -ql/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql ql/cpp/ql/src/Security/CWE/CWE-191/UnsignedDifferenceExpressionComparedZero.ql ql/cpp/ql/src/Security/CWE/CWE-253/HResultBooleanConversion.ql ql/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql @@ -43,7 +40,6 @@ ql/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql ql/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql ql/cpp/ql/src/Security/CWE/CWE-416/UseOfStringAfterLifetimeEnds.ql ql/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql -ql/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql ql/cpp/ql/src/Security/CWE/CWE-497/ExposedSystemData.ql ql/cpp/ql/src/Security/CWE/CWE-611/XXE.ql ql/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index def048bdd3c..0f158cd3fb5 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,50 @@ +## 6.0.1 + +No user-facing changes. + +## 6.0.0 + +### Breaking Changes + +* The "Guards" libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been totally rewritten to recognize many more guards. The API remains unchanged, but the `GuardCondition` class now extends `Element` instead of `Expr`. + +### New Features + +* C/C++ `build-mode: none` support is now generally available. + +## 5.6.1 + +No user-facing changes. + +## 5.6.0 + +### Deprecated APIs + +* The predicate `getAContructorCall` in the class `SslContextClass` has been deprecated. Use `getAConstructorCall` instead. + +### New Features + +* Added predicates `getTransitiveNumberOfVlaDimensionStmts`, `getTransitiveVlaDimensionStmt`, and `getParentVlaDecl` to `VlaDeclStmt` for handling `VlaDeclStmt`s whose base type is defined in terms of another `VlaDeclStmt` via a `typedef`. + +## 5.5.0 + +### New Features + +* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. + +### Minor Analysis Improvements + +* Added flow summaries for the `Microsoft::WRL::ComPtr` member functions. +* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. + +## 5.4.1 + +### Minor Analysis Improvements + +* The guards libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards. +* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables. +* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number. + ## 5.4.0 ### New Features @@ -212,8 +259,8 @@ No user-facing changes. ### Breaking Changes -* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. -* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. * Deleted the deprecated `hasQualifiedName` and `isDefined` predicates from the `Declaration` class, use `hasGlobalName` and `hasDefinition` respectively instead. * Deleted the `getFullSignature` predicate from the `Function` class, use `getIdentityString(Declaration)` from `semmle.code.cpp.Print` instead. * Deleted the deprecated `freeCall` predicate from `Alloc.qll`. Use `DeallocationExpr` instead. @@ -247,7 +294,7 @@ No user-facing changes. * A `getTemplateClass` predicate was added to the `DeductionGuide` class to get the class template for which the deduction guide is a guide. * An `isExplicit` predicate was added to the `Function` class that determines whether the function was declared as explicit. * A `getExplicitExpr` predicate was added to the `Function` class that yields the constant boolean expression (if any) that conditionally determines whether the function is explicit. -* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete. +* A `isDestroyingDeleteDeallocation` predicate was added to the `NewOrNewArrayExpr` and `DeleteOrDeleteArrayExpr` classes to indicate whether the deallocation function is a destroying delete. ### Minor Analysis Improvements @@ -325,9 +372,9 @@ No user-facing changes. ### New Features * Added a `TaintInheritingContent` class that can be extended to model taint flowing from a qualifier to a field. -* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.comparesEq/4` to query whether an expression is compared to a constant. * Added a predicate `GuardCondition.ensuresEq/4` to query whether a basic block is guarded by an expression being equal to a constant. -* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. +* Added a predicate `GuardCondition.comparesLt/4` to query whether an expression is compared to a constant. * Added a predicate `GuardCondition.ensuresLt/4` to query whether a basic block is guarded by an expression being less than a constant. * Added a predicate `GuardCondition.valueControls` to query whether a basic block is guarded by a particular `case` of a `switch` statement. @@ -443,7 +490,7 @@ No user-facing changes. * Functions that do not return due to calling functions that don't return (e.g. `exit`) are now detected as non-returning in the IR and dataflow. * Treat functions that reach the end of the function as returning in the IR. - They used to be treated as unreachable but it is allowed in C. + They used to be treated as unreachable but it is allowed in C. * The `DataFlow::asDefiningArgument` predicate now takes its argument from the range starting at `1` instead of `2`. Queries that depend on the single-parameter version of `DataFlow::asDefiningArgument` should have their arguments updated accordingly. ## 0.9.3 @@ -492,7 +539,7 @@ No user-facing changes. ### New Features -* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. +* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. Hence it is no longer needed to provide `none()` implementations of these predicates if they are not needed. ### Minor Analysis Improvements @@ -686,7 +733,7 @@ No user-facing changes. ### Deprecated APIs -* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features @@ -703,7 +750,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features @@ -802,7 +849,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. +* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features diff --git a/cpp/ql/lib/Customizations.qll b/cpp/ql/lib/Customizations.qll new file mode 100644 index 00000000000..c9d899e07e0 --- /dev/null +++ b/cpp/ql/lib/Customizations.qll @@ -0,0 +1,11 @@ +/** + * Contains customizations to the standard library. + * + * This module is imported by `cpp.qll`, so any customizations defined here automatically + * apply to all queries. + * + * Typical examples of customizations include adding new subclasses of abstract classes such as + * the `RemoteFlowSource` class to model frameworks that are not covered by the standard library. + */ + +import cpp diff --git a/cpp/ql/lib/Options.qll b/cpp/ql/lib/Options.qll index a0a13881a94..c4652e3f6ca 100644 --- a/cpp/ql/lib/Options.qll +++ b/cpp/ql/lib/Options.qll @@ -35,7 +35,7 @@ class CustomOptions extends Options { override predicate returnsNull(Call call) { Options.super.returnsNull(call) } /** - * Holds if a call to this function will never return. + * Holds if a call to the function `f` will never return. * * By default, this holds for `exit`, `_exit`, `abort`, `__assert_fail`, * `longjmp`, `error`, `__builtin_unreachable` and any function with a diff --git a/cpp/ql/lib/change-notes/2025-08-02-gvn.md b/cpp/ql/lib/change-notes/2025-08-02-gvn.md deleted file mode 100644 index 70c9f7dbb15..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-02-gvn.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md b/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md deleted file mode 100644 index c140570df31..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2025-08-13-guards.md b/cpp/ql/lib/change-notes/2025-08-13-guards.md deleted file mode 100644 index 4181a6cbeb2..00000000000 --- a/cpp/ql/lib/change-notes/2025-08-13-guards.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The guards libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/5.4.1.md b/cpp/ql/lib/change-notes/released/5.4.1.md new file mode 100644 index 00000000000..ae345bbf8d8 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.4.1.md @@ -0,0 +1,7 @@ +## 5.4.1 + +### Minor Analysis Improvements + +* The guards libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards. +* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables. +* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number. diff --git a/cpp/ql/lib/change-notes/released/5.5.0.md b/cpp/ql/lib/change-notes/released/5.5.0.md new file mode 100644 index 00000000000..aad060fdd59 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.5.0.md @@ -0,0 +1,10 @@ +## 5.5.0 + +### New Features + +* Added a new class `PchFile` representing precompiled header (PCH) files used during project compilation. + +### Minor Analysis Improvements + +* Added flow summaries for the `Microsoft::WRL::ComPtr` member functions. +* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. diff --git a/cpp/ql/lib/change-notes/released/5.6.0.md b/cpp/ql/lib/change-notes/released/5.6.0.md new file mode 100644 index 00000000000..a21fadb3bf3 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.6.0.md @@ -0,0 +1,9 @@ +## 5.6.0 + +### Deprecated APIs + +* The predicate `getAContructorCall` in the class `SslContextClass` has been deprecated. Use `getAConstructorCall` instead. + +### New Features + +* Added predicates `getTransitiveNumberOfVlaDimensionStmts`, `getTransitiveVlaDimensionStmt`, and `getParentVlaDecl` to `VlaDeclStmt` for handling `VlaDeclStmt`s whose base type is defined in terms of another `VlaDeclStmt` via a `typedef`. diff --git a/cpp/ql/lib/change-notes/released/5.6.1.md b/cpp/ql/lib/change-notes/released/5.6.1.md new file mode 100644 index 00000000000..368d902c7fe --- /dev/null +++ b/cpp/ql/lib/change-notes/released/5.6.1.md @@ -0,0 +1,3 @@ +## 5.6.1 + +No user-facing changes. diff --git a/cpp/ql/lib/change-notes/released/6.0.0.md b/cpp/ql/lib/change-notes/released/6.0.0.md new file mode 100644 index 00000000000..574e05442ec --- /dev/null +++ b/cpp/ql/lib/change-notes/released/6.0.0.md @@ -0,0 +1,9 @@ +## 6.0.0 + +### Breaking Changes + +* The "Guards" libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been totally rewritten to recognize many more guards. The API remains unchanged, but the `GuardCondition` class now extends `Element` instead of `Expr`. + +### New Features + +* C/C++ `build-mode: none` support is now generally available. diff --git a/cpp/ql/lib/change-notes/released/6.0.1.md b/cpp/ql/lib/change-notes/released/6.0.1.md new file mode 100644 index 00000000000..35b17912c81 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/6.0.1.md @@ -0,0 +1,3 @@ +## 6.0.1 + +No user-facing changes. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index afb2156eaa2..d1f3c68c812 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.4.0 +lastReleaseVersion: 6.0.1 diff --git a/cpp/ql/lib/cpp.qll b/cpp/ql/lib/cpp.qll index ccd32c368e4..46c651daf57 100644 --- a/cpp/ql/lib/cpp.qll +++ b/cpp/ql/lib/cpp.qll @@ -13,7 +13,9 @@ * https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf */ +import Customizations import semmle.code.cpp.File +import semmle.code.cpp.PchFile import semmle.code.cpp.Linkage import semmle.code.cpp.Location import semmle.code.cpp.Compilation diff --git a/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll b/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll index 0bb22d688ed..296b97f66f2 100644 --- a/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll +++ b/cpp/ql/lib/experimental/cryptography/CryptoArtifact.qll @@ -127,7 +127,7 @@ abstract class CryptographicAlgorithm extends CryptographicArtifact { /** * Normalizes a raw name into a normalized name as found in `CryptoAlgorithmNames.qll`. * Subclassess should override for more api-specific normalization. - * By deafult, converts a raw name to upper-case with no hyphen, underscore, hash, or space. + * By default, converts a raw name to upper-case with no hyphen, underscore, hash, or space. */ bindingset[s] string normalizeName(string s) { diff --git a/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll b/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll index 0a52fa5bb81..6b6338a4926 100644 --- a/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll +++ b/cpp/ql/lib/experimental/cryptography/modules/OpenSSL.qll @@ -652,14 +652,14 @@ module KeyGeneration { * Trace from EVP_PKEY_CTX* at algorithm sink to keygen, * users can then extrapolatae the matching algorithm from the alg sink to the keygen */ - module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSize implements DataFlow::ConfigSig { + module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSizeConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isEVP_PKEY_CTX_Source(source, _) } predicate isSink(DataFlow::Node sink) { isKeyGen_EVP_PKEY_CTX_Sink(sink, _) } } module EVP_PKEY_CTX_Ptr_Source_to_KeyGenOperationWithNoSize_Flow = - DataFlow::Global; + DataFlow::Global; /** * UNKNOWN key sizes to general purpose key generation functions (i.e., that take in no key size and assume diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll index 2c46a7c0674..1e0f3b6dfbf 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/CryptoFunction.qll @@ -59,7 +59,7 @@ private string privateNormalizeFunctionName(Function f, string algType) { * * The predicate attempts to restrict normalization to what looks like an openssl * library by looking for functions only in an openssl path (see `isPossibleOpenSSLFunction`). - * This may give false postive functions if a directory erronously appears to be openssl; + * This may give false positive functions if a directory erronously appears to be openssl; * however, we take the stance that if a function * exists strongly mapping to a known function name in a directory such as these, * regardless of whether its actually a part of openSSL or not, we will analyze it as though it were. diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll index ba83de34597..54121c36766 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/DataBuilders.qll @@ -49,7 +49,7 @@ private string privateNormalizeFunctionName(Function f, string algType) { * * The predicate attempts to restrict normalization to what looks like an openssl * library by looking for functions only in an openssl path (see `isPossibleOpenSSLFunction`). - * This may give false postive functions if a directory erronously appears to be openssl; + * This may give false positive functions if a directory erronously appears to be openssl; * however, we take the stance that if a function * exists strongly mapping to a known function name in a directory such as these, * regardless of whether its actually a part of openSSL or not, we will analyze it as though it were. diff --git a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll index f772f85afb1..e1e64f78e3e 100644 --- a/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll +++ b/cpp/ql/lib/experimental/cryptography/utils/OpenSSL/PassthroughFunction.qll @@ -31,7 +31,7 @@ predicate knownPassthroughFunction(Function f, int inInd, int outInd) { /** * `c` is a call to a function that preserves the algorithm but changes its form. - * `onExpr` is the input argument passing through to, `outExpr` is the next expression in a dataflow step associated with `c` + * `inExpr` is the input argument passing through to, `outExpr` is the next expression in a dataflow step associated with `c` */ predicate knownPassthoughCall(Call c, Expr inExpr, Expr outExpr) { exists(int inInd, int outInd | diff --git a/cpp/ql/lib/experimental/quantum/Language.qll b/cpp/ql/lib/experimental/quantum/Language.qll index 53cf7292b12..d3feb3fe0d9 100644 --- a/cpp/ql/lib/experimental/quantum/Language.qll +++ b/cpp/ql/lib/experimental/quantum/Language.qll @@ -14,8 +14,8 @@ module CryptoInput implements InputSig { result = node.asExpr() or result = node.asParameter() or result = node.asVariable() or - result = node.asDefiningArgument() - // TODO: do we need asIndirectExpr()? + result = node.asDefiningArgument() or + result = node.asIndirectExpr() } string locationToFileBaseNameAndLineNumberString(Location location) { @@ -53,7 +53,7 @@ module ArtifactFlowConfig implements DataFlow::ConfigSig { } } -module ArtifactFlow = DataFlow::Global; +module ArtifactFlow = TaintTracking::Global; /** * An artifact output to node input configuration @@ -93,7 +93,13 @@ module GenericDataSourceFlow = TaintTracking::Global; - import OpenSSL.OpenSSL diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll index f802e58d0a7..eafc839fbb8 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll @@ -14,9 +14,13 @@ private import PaddingAlgorithmInstance */ module KnownOpenSslAlgorithmToAlgorithmValueConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { - source.asExpr() instanceof KnownOpenSslAlgorithmExpr and + ( + source.asExpr() instanceof KnownOpenSslAlgorithmExpr or + source.asIndirectExpr() instanceof KnownOpenSslAlgorithmExpr + ) and // No need to flow direct operations to AVCs - not source.asExpr() instanceof OpenSslDirectAlgorithmOperationCall + not source.asExpr() instanceof OpenSslDirectAlgorithmOperationCall and + not source.asIndirectExpr() instanceof OpenSslDirectAlgorithmOperationCall } predicate isSink(DataFlow::Node sink) { @@ -46,10 +50,12 @@ module KnownOpenSslAlgorithmToAlgorithmValueConsumerConfig implements DataFlow:: } module KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow = - DataFlow::Global; + TaintTracking::Global; module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr() instanceof OpenSslPaddingLiteral } + predicate isSource(DataFlow::Node source) { + source.asExpr() instanceof OpenSslSpecialPaddingLiteral + } predicate isSink(DataFlow::Node sink) { exists(PaddingAlgorithmValueConsumer c | c.getInputNode() = sink) @@ -61,7 +67,7 @@ module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerConfig implements DataF } module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow = - DataFlow::Global; + TaintTracking::Global; class OpenSslAlgorithmAdditionalFlowStep extends AdditionalFlowInputStep { OpenSslAlgorithmAdditionalFlowStep() { exists(AlgorithmPassthroughCall c | c.getInNode() = this) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll index 4bd4b449766..a0cbad2c57d 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll @@ -53,7 +53,8 @@ class KnownOpenSslBlockModeConstantAlgorithmInstance extends OpenSslAlgorithmIns // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll index 47ffd67924a..23efacae69b 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll @@ -2,12 +2,10 @@ import cpp private import experimental.quantum.Language private import KnownAlgorithmConstants private import Crypto::KeyOpAlg as KeyOpAlg -private import OpenSSLAlgorithmInstanceBase -private import PaddingAlgorithmInstance -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumerBase -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.DirectAlgorithmValueConsumer +private import experimental.quantum.OpenSSL.Operations.OpenSSLOperationBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers +private import OpenSSLAlgorithmInstances private import AlgToAVCFlow -private import BlockAlgorithmInstance /** * Given a `KnownOpenSslCipherAlgorithmExpr`, converts this to a cipher family type. @@ -79,7 +77,8 @@ class KnownOpenSslCipherConstantAlgorithmInstance extends OpenSslAlgorithmInstan // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) @@ -97,10 +96,13 @@ class KnownOpenSslCipherConstantAlgorithmInstance extends OpenSslAlgorithmInstan } override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { - //TODO: the padding is either self, or it flows through getter ctx to a set padding call - // like EVP_PKEY_CTX_set_rsa_padding result = this - // TODO or trace through getter ctx to set padding + or + exists(OperationStep s | + this.getAvc().(AvcContextCreationStep).flowsToOperationStep(s) and + s.getAlgorithmValueConsumerForInput(PaddingAlgorithmIO()) = + result.(OpenSslAlgorithmInstance).getAvc() + ) } override string getRawAlgorithmName() { @@ -117,7 +119,7 @@ class KnownOpenSslCipherConstantAlgorithmInstance extends OpenSslAlgorithmInstan knownOpenSslConstantToCipherFamilyType(this, result) or not knownOpenSslConstantToCipherFamilyType(this, _) and - result = Crypto::KeyOpAlg::TUnknownKeyOperationAlgorithmType() + result = Crypto::KeyOpAlg::TOtherKeyOperationAlgorithmType() } override OpenSslAlgorithmValueConsumer getAvc() { result = getterCall } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll index 82a2b1357f2..76746eceba4 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll @@ -21,7 +21,8 @@ class KnownOpenSslEllipticCurveConstantAlgorithmInstance extends OpenSslAlgorith // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) @@ -39,7 +40,7 @@ class KnownOpenSslEllipticCurveConstantAlgorithmInstance extends OpenSslAlgorith result = this.(Call).getTarget().getName() } - override Crypto::EllipticCurveFamilyType getEllipticCurveFamilyType() { + override Crypto::EllipticCurveType getEllipticCurveType() { if Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getParsedEllipticCurveName(), _, _) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll index 2be84b68f61..0facc99519d 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll @@ -59,7 +59,8 @@ class KnownOpenSslHashConstantAlgorithmInstance extends OpenSslAlgorithmInstance // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) @@ -71,7 +72,7 @@ class KnownOpenSslHashConstantAlgorithmInstance extends OpenSslAlgorithmInstance override OpenSslAlgorithmValueConsumer getAvc() { result = getterCall } - override Crypto::THashType getHashFamily() { + override Crypto::THashType getHashType() { knownOpenSslConstantToHashFamilyType(this, result) or not knownOpenSslConstantToHashFamilyType(this, _) and result = Crypto::OtherHashType() diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KeyAgreementAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KeyAgreementAlgorithmInstance.qll index 1addda3a9ef..542c56666d9 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KeyAgreementAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KeyAgreementAlgorithmInstance.qll @@ -37,7 +37,8 @@ class KnownOpenSslKeyAgreementConstantAlgorithmInstance extends OpenSslAlgorithm // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll index 4328253f1a4..dcc7ad08ae5 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll @@ -171,9 +171,15 @@ class KnownOpenSslKeyAgreementAlgorithmExpr extends Expr instanceof KnownOpenSsl } predicate knownOpenSslAlgorithmOperationCall(Call c, string normalized, string algType) { - c.getTarget().getName() in ["EVP_RSA_gen", "RSA_generate_key_ex", "RSA_generate_key", "RSA_new"] and + c.getTarget().getName() in [ + "EVP_RSA_gen", "RSA_generate_key_ex", "RSA_generate_key", "RSA_new", "RSA_sign", "RSA_verify" + ] and normalized = "RSA" and algType = "ASYMMETRIC_ENCRYPTION" + or + c.getTarget().getName() in ["DSA_do_sign", "DSA_do_verify"] and + normalized = "DSA" and + algType = "SIGNATURE" } /** diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll index 97b183b7e7d..5590f74082c 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll @@ -2,12 +2,13 @@ import cpp private import experimental.quantum.Language private import KnownAlgorithmConstants private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -private import experimental.quantum.OpenSSL.AlgorithmInstances.OpenSSLAlgorithmInstanceBase +private import experimental.quantum.OpenSSL.AlgorithmInstances.OpenSSLAlgorithmInstances private import experimental.quantum.OpenSSL.Operations.OpenSSLOperations +private import Crypto::KeyOpAlg as KeyOpAlg private import AlgToAVCFlow class KnownOpenSslMacConstantAlgorithmInstance extends OpenSslAlgorithmInstance, - Crypto::MacAlgorithmInstance instanceof KnownOpenSslMacAlgorithmExpr + Crypto::KeyOperationAlgorithmInstance instanceof KnownOpenSslMacAlgorithmExpr { OpenSslAlgorithmValueConsumer getterCall; @@ -21,7 +22,8 @@ class KnownOpenSslMacConstantAlgorithmInstance extends OpenSslAlgorithmInstance, // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) @@ -33,17 +35,34 @@ class KnownOpenSslMacConstantAlgorithmInstance extends OpenSslAlgorithmInstance, override OpenSslAlgorithmValueConsumer getAvc() { result = getterCall } - override string getRawMacAlgorithmName() { + override string getRawAlgorithmName() { result = this.(Literal).getValue().toString() or result = this.(Call).getTarget().getName() } - override Crypto::MacType getMacType() { - this instanceof KnownOpenSslHMacAlgorithmExpr and result = Crypto::HMAC() - or - this instanceof KnownOpenSslCMacAlgorithmExpr and result = Crypto::CMAC() + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + if this instanceof KnownOpenSslHMacAlgorithmExpr + then result = KeyOpAlg::TMac(KeyOpAlg::HMAC()) + else + if this instanceof KnownOpenSslCMacAlgorithmExpr + then result = KeyOpAlg::TMac(KeyOpAlg::CMAC()) + else result = KeyOpAlg::TMac(KeyOpAlg::OtherMacAlgorithmType()) } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // TODO: trace to any key size initializer? + none() + } + + override int getKeySizeFixed() { + // TODO: are there known fixed key sizes to consider? + none() + } + + override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() } + + override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() } } class KnownOpenSslHMacConstantAlgorithmInstance extends Crypto::HmacAlgorithmInstance, @@ -60,9 +79,13 @@ class KnownOpenSslHMacConstantAlgorithmInstance extends Crypto::HmacAlgorithmIns // where the current AVC traces to a HashAlgorithmIO consuming operation step. // TODO: need to consider getting reset values, tracing down to the first set for now exists(OperationStep s, AvcContextCreationStep avc | - avc = this.getAvc() and + avc = super.getAvc() and avc.flowsToOperationStep(s) and s.getAlgorithmValueConsumerForInput(HashAlgorithmIO()) = result ) } + + override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() } + + override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll index d487e05d066..3a3b2d66c28 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll @@ -1,10 +1,10 @@ import cpp private import experimental.quantum.Language private import OpenSSLAlgorithmInstanceBase +private import experimental.quantum.OpenSSL.Operations.OpenSSLOperationBase private import experimental.quantum.OpenSSL.AlgorithmInstances.KnownAlgorithmConstants private import AlgToAVCFlow -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.DirectAlgorithmValueConsumer -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumerBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers private import codeql.quantum.experimental.Standardization::Types::KeyOpAlg as KeyOpAlg /** @@ -18,13 +18,14 @@ private import codeql.quantum.experimental.Standardization::Types::KeyOpAlg as K * # define RSA_PKCS1_WITH_TLS_PADDING 7 * # define RSA_PKCS1_NO_IMPLICIT_REJECT_PADDING 8 */ -class OpenSslPaddingLiteral extends Literal { +class OpenSslSpecialPaddingLiteral extends Literal { // TODO: we can be more specific about where the literal is in a larger expression // to avoid literals that are clealy not representing an algorithm, e.g., array indices. - OpenSslPaddingLiteral() { this.getValue().toInt() in [0, 1, 3, 4, 5, 6, 7, 8] } + OpenSslSpecialPaddingLiteral() { this.getValue().toInt() in [0, 1, 3, 4, 5, 6, 7, 8] } } /** + * Holds if `e` has the given `type`. * Given a `KnownOpenSslPaddingAlgorithmExpr`, converts this to a padding family type. * Does not bind if there is no mapping (no mapping to 'unknown' or 'other'). */ @@ -45,9 +46,6 @@ predicate knownOpenSslConstantToPaddingFamilyType( ) } -//abstract class OpenSslPaddingAlgorithmInstance extends OpenSslAlgorithmInstance, Crypto::PaddingAlgorithmInstance{} -// TODO: need to alter this to include known padding constants which don't have the -// same mechanics as those with known nids class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInstance, Crypto::PaddingAlgorithmInstance instanceof Expr { @@ -66,7 +64,8 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) and isPaddingSpecificConsumer = false @@ -79,12 +78,13 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta isPaddingSpecificConsumer = false or // Possibility 3: padding-specific literal - this instanceof OpenSslPaddingLiteral and + this instanceof OpenSslSpecialPaddingLiteral and exists(DataFlow::Node src, DataFlow::Node sink | // Sink is an argument to a CipherGetterCall sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a padding-specific consumer RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow::flow(src, sink) ) and @@ -124,44 +124,6 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta } } -// // Values used for EVP_PKEY_CTX_set_rsa_padding, these are -// // not the same as 'typical' constants found in the set of known algorithm constants -// // they do not have an NID -// // TODO: what about setting the padding directly? -// class KnownRSAPaddingConstant extends OpenSslPaddingAlgorithmInstance, Crypto::PaddingAlgorithmInstance instanceof Literal -// { -// KnownRSAPaddingConstant() { -// // from rsa.h in openssl: -// // # define RSA_PKCS1_PADDING 1 -// // # define RSA_NO_PADDING 3 -// // # define RSA_PKCS1_OAEP_PADDING 4 -// // # define RSA_X931_PADDING 5 -// // /* EVP_PKEY_ only */ -// // # define RSA_PKCS1_PSS_PADDING 6 -// // # define RSA_PKCS1_WITH_TLS_PADDING 7 -// // /* internal RSA_ only */ -// // # define RSA_PKCS1_NO_IMPLICIT_REJECT_PADDING 8 -// this instanceof Literal and -// this.getValue().toInt() in [0, 1, 3, 4, 5, 6, 7, 8] -// // TODO: trace to padding-specific consumers -// RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow -// } -// override string getRawPaddingAlgorithmName() { result = this.(Literal).getValue().toString() } -// override Crypto::TPaddingType getPaddingType() { -// if this.(Literal).getValue().toInt() in [1, 6, 7, 8] -// then result = Crypto::PKCS1_v1_5() -// else -// if this.(Literal).getValue().toInt() = 3 -// then result = Crypto::NoPadding() -// else -// if this.(Literal).getValue().toInt() = 4 -// then result = Crypto::OAEP() -// else -// if this.(Literal).getValue().toInt() = 5 -// then result = Crypto::ANSI_X9_23() -// else result = Crypto::OtherPadding() -// } -// } class OaepPaddingAlgorithmInstance extends Crypto::OaepPaddingAlgorithmInstance, KnownOpenSslPaddingConstantAlgorithmInstance { @@ -170,10 +132,18 @@ class OaepPaddingAlgorithmInstance extends Crypto::OaepPaddingAlgorithmInstance, } override Crypto::HashAlgorithmInstance getOaepEncodingHashAlgorithm() { - none() //TODO + exists(OperationStep s | + this.getAvc().(AvcContextCreationStep).flowsToOperationStep(s) and + s.getAlgorithmValueConsumerForInput(HashAlgorithmOaepIO()) = + result.(OpenSslAlgorithmInstance).getAvc() + ) } override Crypto::HashAlgorithmInstance getMgf1HashAlgorithm() { - none() //TODO + exists(OperationStep s | + this.getAvc().(AvcContextCreationStep).flowsToOperationStep(s) and + s.getAlgorithmValueConsumerForInput(HashAlgorithmMgf1IO()) = + result.(OpenSslAlgorithmInstance).getAvc() + ) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll index cc2e5771ffc..dda7aea22dc 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll @@ -47,7 +47,8 @@ class KnownOpenSslSignatureConstantAlgorithmInstance extends OpenSslAlgorithmIns // Sink is an argument to a signature getter call sink = getterCall.getInputNode() and // Source is `this` - src.asExpr() = this and + // NOTE: src literals can be ints or strings, so need to consider asExpr and asIndirectExpr + this = [src.asExpr(), src.asIndirectExpr()] and // This traces to a getter KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow::flow(src, sink) ) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/CipherAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/CipherAlgorithmValueConsumer.qll index b06e55c0817..a2de555d7f4 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/CipherAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/CipherAlgorithmValueConsumer.qll @@ -12,15 +12,17 @@ class EvpCipherAlgorithmValueConsumer extends CipherAlgorithmValueConsumer { DataFlow::Node resultNode; EvpCipherAlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asIndirectExpr() = this and ( - this.(Call).getTarget().getName() in [ - "EVP_get_cipherbyname", "EVP_get_cipherbyobj", "EVP_get_cipherbynid" - ] and + this.(Call).getTarget().getName() in ["EVP_get_cipherbyname", "EVP_get_cipherbyobj"] and + valueArgNode.asIndirectExpr() = this.(Call).getArgument(0) + or + this.(Call).getTarget().getName() = "EVP_get_cipherbynid" and + // algorithm is an NID (int), use asExpr() valueArgNode.asExpr() = this.(Call).getArgument(0) or this.(Call).getTarget().getName() in ["EVP_CIPHER_fetch", "EVP_ASYM_CIPHER_fetch"] and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll index d200cf2a096..3269c41cad6 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll @@ -23,7 +23,7 @@ class DirectAlgorithmValueConsumer extends OpenSslAlgorithmValueConsumer instanc */ override DataFlow::Node getResultNode() { this instanceof OpenSslDirectAlgorithmFetchCall and - result.asExpr() = this + result.asIndirectExpr() = this // NOTE: if instanceof OpenSslDirectAlgorithmOperationCall then there is no algorithm generated // the algorithm is directly used } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/EllipticCurveAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/EllipticCurveAlgorithmValueConsumer.qll index daf6baf2f03..94272f8abcc 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/EllipticCurveAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/EllipticCurveAlgorithmValueConsumer.qll @@ -12,14 +12,19 @@ class EvpEllipticCurveAlgorithmConsumer extends EllipticCurveValueConsumer { DataFlow::Node resultNode; EvpEllipticCurveAlgorithmConsumer() { - resultNode.asExpr() = this.(Call) and // in all cases the result is the return + resultNode.asIndirectExpr() = this.(Call) and // in all cases the result is the return ( - this.(Call).getTarget().getName() in ["EVP_EC_gen", "EC_KEY_new_by_curve_name"] and + this.(Call).getTarget().getName() = "EVP_EC_gen" and + valueArgNode.asIndirectExpr() = this.(Call).getArgument(0) + or + this.(Call).getTarget().getName() = "EC_KEY_new_by_curve_name" and + // algorithm is an NID (int), use asExpr() valueArgNode.asExpr() = this.(Call).getArgument(0) or this.(Call).getTarget().getName() in [ "EC_KEY_new_by_curve_name_ex", "EVP_PKEY_CTX_set_ec_paramgen_curve_nid" ] and + // algorithm is an NID (int), use asExpr valueArgNode.asExpr() = this.(Call).getArgument(2) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll index 114cf78a112..da8a76c27d9 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll @@ -9,11 +9,11 @@ abstract class HashAlgorithmValueConsumer extends OpenSslAlgorithmValueConsumer /** * An EVP_Q_Digest directly consumes algorithm constant values */ -class Evp_Q_Digest_Algorithm_Consumer extends HashAlgorithmValueConsumer { - Evp_Q_Digest_Algorithm_Consumer() { this.(Call).getTarget().getName() = "EVP_Q_digest" } +class Evp_Q_Digest_Algorithm_Consumer extends HashAlgorithmValueConsumer instanceof Call { + Evp_Q_Digest_Algorithm_Consumer() { super.getTarget().getName() = "EVP_Q_digest" } override Crypto::ConsumerInputDataFlowNode getInputNode() { - result.asExpr() = this.(Call).getArgument(1) + result.asIndirectExpr() = super.getArgument(1) } override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { @@ -42,7 +42,7 @@ class EvpPkeySetCtxALgorithmConsumer extends HashAlgorithmValueConsumer { "EVP_PKEY_CTX_set_rsa_mgf1_md_name", "EVP_PKEY_CTX_set_rsa_oaep_md_name", "EVP_PKEY_CTX_set_dsa_paramgen_md_props" ] and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) } override DataFlow::Node getResultNode() { none() } @@ -64,18 +64,18 @@ class EvpDigestAlgorithmValueConsumer extends HashAlgorithmValueConsumer { DataFlow::Node resultNode; EvpDigestAlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asIndirectExpr() = this and ( this.(Call).getTarget().getName() in [ "EVP_get_digestbyname", "EVP_get_digestbynid", "EVP_get_digestbyobj" ] and - valueArgNode.asExpr() = this.(Call).getArgument(0) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(0) or this.(Call).getTarget().getName() = "EVP_MD_fetch" and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) or this.(Call).getTarget().getName() = "EVP_DigestSignInit_ex" and - valueArgNode.asExpr() = this.(Call).getArgument(2) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(2) ) } @@ -87,3 +87,21 @@ class EvpDigestAlgorithmValueConsumer extends HashAlgorithmValueConsumer { exists(OpenSslAlgorithmInstance i | i.getAvc() = this and result = i) } } + +class RsaSignOrVerifyHashAlgorithmValueConsumer extends HashAlgorithmValueConsumer { + DataFlow::Node valueArgNode; + + RsaSignOrVerifyHashAlgorithmValueConsumer() { + this.(Call).getTarget().getName() in ["RSA_sign", "RSA_verify"] and + // arg 0 is an int, use asExpr + valueArgNode.asExpr() = this.(Call).getArgument(0) + } + + override DataFlow::Node getResultNode() { none() } + + override Crypto::ConsumerInputDataFlowNode getInputNode() { result = valueArgNode } + + override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { + exists(OpenSslAlgorithmInstance i | i.getAvc() = this and result = i) + } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KEMAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KEMAlgorithmValueConsumer.qll index 830adece0f3..918dc57ff97 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KEMAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KEMAlgorithmValueConsumer.qll @@ -11,10 +11,10 @@ class EvpKemAlgorithmValueConsumer extends KemAlgorithmValueConsumer { DataFlow::Node resultNode; EvpKemAlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asIndirectExpr() = this and ( this.(Call).getTarget().getName() = "EVP_KEM_fetch" and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KeyExchangeAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KeyExchangeAlgorithmValueConsumer.qll index 88c36a37eb5..b4634b625f9 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KeyExchangeAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/KeyExchangeAlgorithmValueConsumer.qll @@ -11,10 +11,10 @@ class EvpKeyExchangeAlgorithmValueConsumer extends KeyExchangeAlgorithmValueCons DataFlow::Node resultNode; EvpKeyExchangeAlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asIndirectExpr() = this and ( this.(Call).getTarget().getName() = "EVP_KEYEXCH_fetch" and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PKeyAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PKeyAlgorithmValueConsumer.qll index f7c8fef3794..ba5cb8146ad 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PKeyAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PKeyAlgorithmValueConsumer.qll @@ -11,7 +11,7 @@ class EvpPKeyAlgorithmConsumer extends PKeyValueConsumer { DataFlow::Node resultNode; EvpPKeyAlgorithmConsumer() { - resultNode.asExpr() = this.(Call) and // in all cases the result is the return + resultNode.asIndirectExpr() = this.(Call) and // in all cases the result is the return ( // NOTE: some of these consumers are themselves key gen operations, // in these cases, the operation will be created separately for the same function. @@ -19,6 +19,7 @@ class EvpPKeyAlgorithmConsumer extends PKeyValueConsumer { "EVP_PKEY_CTX_new_id", "EVP_PKEY_new_raw_private_key", "EVP_PKEY_new_raw_public_key", "EVP_PKEY_new_mac_key" ] and + // Algorithm is an int, use asExpr valueArgNode.asExpr() = this.(Call).getArgument(0) or this.(Call).getTarget().getName() in [ @@ -26,7 +27,8 @@ class EvpPKeyAlgorithmConsumer extends PKeyValueConsumer { "EVP_PKEY_new_raw_public_key_ex", "EVP_PKEY_CTX_ctrl", "EVP_PKEY_CTX_ctrl_uint64", "EVP_PKEY_CTX_ctrl_str", "EVP_PKEY_CTX_set_group_name" ] and - valueArgNode.asExpr() = this.(Call).getArgument(1) + // AAlgorithm is a char*, use asIndirectExpr + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) or // argInd 2 is 'type' which can be RSA, or EC // if RSA argInd 3 is the key size, else if EC argInd 3 is the curve name @@ -38,10 +40,10 @@ class EvpPKeyAlgorithmConsumer extends PKeyValueConsumer { // Elliptic curve case // If the argInd 3 is a derived type (pointer or array) then assume it is a curve name if this.(Call).getArgument(3).getType().getUnderlyingType() instanceof DerivedType - then valueArgNode.asExpr() = this.(Call).getArgument(3) + then valueArgNode.asIndirectExpr() = this.(Call).getArgument(3) else // All other cases - valueArgNode.asExpr() = this.(Call).getArgument(2) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(2) ) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PaddingAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PaddingAlgorithmValueConsumer.qll index f080fc0f12a..e279f7f1e09 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PaddingAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/PaddingAlgorithmValueConsumer.qll @@ -14,8 +14,9 @@ class Evp_PKey_Ctx_set_rsa_padding_AlgorithmValueConsumer extends PaddingAlgorit DataFlow::Node resultNode; Evp_PKey_Ctx_set_rsa_padding_AlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asDefiningArgument() = this.(Call).getArgument(0) and this.(Call).getTarget().getName() = "EVP_PKEY_CTX_set_rsa_padding" and + // algorithm is an int, use asExpr valueArgNode.asExpr() = this.(Call).getArgument(1) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/SignatureAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/SignatureAlgorithmValueConsumer.qll index c6f3fb8959c..bcc596bb1ee 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/SignatureAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/SignatureAlgorithmValueConsumer.qll @@ -12,13 +12,13 @@ class EvpSignatureAlgorithmValueConsumer extends SignatureAlgorithmValueConsumer DataFlow::Node resultNode; EvpSignatureAlgorithmValueConsumer() { - resultNode.asExpr() = this and + resultNode.asIndirectExpr() = this and ( // EVP_SIGNATURE this.(Call).getTarget().getName() = "EVP_SIGNATURE_fetch" and - valueArgNode.asExpr() = this.(Call).getArgument(1) + valueArgNode.asIndirectExpr() = this.(Call).getArgument(1) // EVP_PKEY_get1_DSA, EVP_PKEY_get1_RSA - // DSA_SIG_new, DSA_SIG_get0, RSA_sign ? + // DSA_SIG_new, DSA_SIG_get0 ? ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/ArtifactPassthrough.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/ArtifactPassthrough.qll new file mode 100644 index 00000000000..19027137215 --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/ArtifactPassthrough.qll @@ -0,0 +1,107 @@ +private import experimental.quantum.Language + +/** + * A call to `BN_bn2bin`. + * Commonly used to extract partial bytes from a signature, + * e.g., a signature from DSA_do_sign, passed to DSA_do_verify + * - int BN_bn2bin(const BIGNUM *a, unsigned char *to); + */ +class BnBn2BinCalStep extends AdditionalFlowInputStep { + Call call; + + BnBn2BinCalStep() { + call.getTarget().getName() = "BN_bn2bin" and + call.getArgument(0) = this.asIndirectExpr() + } + + override DataFlow::Node getOutput() { result.asDefiningArgument() = call.getArgument(1) } +} + +/** + * A call to `BN_bin2bn`. + * Commonly used to convert to a signature for DSA_do_verify + * - BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); + */ +class BnBin2BnCallStep extends AdditionalFlowInputStep { + Call call; + + BnBin2BnCallStep() { + call.getTarget().getName() = "BN_bin2bn" and + call.getArgument(0) = this.asIndirectExpr() + } + + override DataFlow::Node getOutput() { result.asDefiningArgument() = call.getArgument(2) } +} + +/** + * A call to `RSA_set0_key` or `DSA_SIG_set0`. + * Often used in combination with BN_bin2bn, to construct a signature. + */ +class RsaSet0KeyCallStep extends AdditionalFlowInputStep { + Call call; + + RsaSet0KeyCallStep() { + (call.getTarget().getName() = "RSA_set0_key" or call.getTarget().getName() = "DSA_SIG_set0") and + this.asIndirectExpr() in [call.getArgument(1), call.getArgument(2), call.getArgument(3)] + } + + override DataFlow::Node getOutput() { result.asDefiningArgument() = call.getArgument(0) } +} + +/** + * A call to `d2i_DSA_SIG`. This is a pass through of a signature of one form to another. + * - DSA_SIG *d2i_DSA_SIG(DSA_SIG **sig, const unsigned char **pp, long length); + */ +class D2iDsaSigCallStep extends AdditionalFlowInputStep { + Call call; + + D2iDsaSigCallStep() { + call.getTarget().getName() = "d2i_DSA_SIG" and + this.asIndirectExpr() = call.getArgument(1) + } + + override DataFlow::Node getOutput() { + // If arg 0 specified, the same pointer is returned, if not specified + // a new allocation is returned. + result.asDefiningArgument() = call.getArgument(0) or + result.asIndirectExpr() = call + } +} + +/** + * A call to `DSA_SIG_get0`. + * Converts a DSA_Sig into its components, which are commonly used with BN_bn2Bin to + * construct a char* signature. + * - void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); + */ +class DsaSigGet0CallStep extends AdditionalFlowInputStep { + Call call; + + DsaSigGet0CallStep() { + call.getTarget().getName() = "DSA_SIG_get0" and + this.asIndirectExpr() = call.getArgument(0) + } + + override DataFlow::Node getOutput() { + result.asDefiningArgument() = call.getArgument(1) + or + result.asDefiningArgument() = call.getArgument(2) + } +} + +/** + * A call to `EVP_PKEY_get1_RSA` or `EVP_PKEY_get1_DSA` + * - RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); + * - DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); + * A key input is converted into a key output, a key is not generated. + */ +class EvpPkeyGet1RsaOrDsa extends AdditionalFlowInputStep { + Call c; + + EvpPkeyGet1RsaOrDsa() { + c.getTarget().getName() = ["EVP_PKEY_get1_RSA", "EVP_PKEY_get1_DSA"] and + this.asIndirectExpr() = c.getArgument(0) + } + + override DataFlow::Node getOutput() { result.asIndirectExpr() = c } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AvcFlow.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AvcFlow.qll index 10aa145804b..1ad988d2ea6 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AvcFlow.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AvcFlow.qll @@ -1,4 +1,4 @@ -import semmle.code.cpp.dataflow.new.DataFlow +import semmle.code.cpp.dataflow.new.TaintTracking private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers /** @@ -13,7 +13,9 @@ module AvcToCallArgConfig implements DataFlow::ConfigSig { * Trace to any call accepting the algorithm. * NOTE: users must restrict this set to the operations they are interested in. */ - predicate isSink(DataFlow::Node sink) { exists(Call c | c.getAnArgument() = sink.asExpr()) } + predicate isSink(DataFlow::Node sink) { + exists(Call c | c.getAnArgument() = [sink.asIndirectExpr(), sink.asExpr()]) + } } -module AvcToCallArgFlow = DataFlow::Global; +module AvcToCallArgFlow = TaintTracking::Global; diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/OpenSSL.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/OpenSSL.qll index 706cac65f8c..2b326690225 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/OpenSSL.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/OpenSSL.qll @@ -4,4 +4,5 @@ module OpenSslModel { import Operations.OpenSSLOperations import Random import GenericSourceCandidateLiteral + import ArtifactPassthrough } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll index 44e30ddf9fc..13d6a4ae457 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll @@ -3,24 +3,48 @@ private import OpenSSLOperationBase private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers import EVPPKeyCtxInitializer +/** + * A base class for all final cipher operation steps. + */ +abstract class FinalCipherOperationStep extends OperationStep { + override OperationStepType getStepType() { result = FinalStep() } +} + +/** + * A base configuration for all EVP cipher operations. + */ +abstract class EvpCipherOperationFinalStep extends FinalCipherOperationStep { + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } +} + /** * A base class for all EVP cipher operations. */ abstract class EvpCipherInitializer extends OperationStep { override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and + result.asIndirectExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() and // Constants that are not equal to zero or // non-constants (e.g., variable accesses, which require data-flow to determine the value) // A zero (null) value typically indicates use of this operation step to initialize // other out parameters in a multi-step initialization. - (exists(result.asExpr().getValue()) implies result.asExpr().getValue().toInt() != 0) + ( + exists(result.asIndirectExpr().getValue()) + implies + result.asIndirectExpr().getValue().toInt() != 0 + ) } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -38,11 +62,15 @@ abstract class EvpEXInitializer extends EvpCipherInitializer { // non-constants (e.g., variable accesses, which require data-flow to determine the value) // A zero (null) value typically indicates use of this operation step to initialize // other out parameters in a multi-step initialization. - result.asExpr() = this.getArgument(3) and type = KeyIO() + result.asIndirectExpr() = this.getArgument(3) and type = KeyIO() or - result.asExpr() = this.getArgument(4) and type = IVorNonceIO() + result.asIndirectExpr() = this.getArgument(4) and type = IVorNonceIO() ) and - (exists(result.asExpr().getValue()) implies result.asExpr().getValue().toInt() != 0) + ( + exists(result.asIndirectExpr().getValue()) + implies + result.asIndirectExpr().getValue().toInt() != 0 + ) } } @@ -53,9 +81,9 @@ abstract class EvpEX2Initializer extends EvpCipherInitializer { override DataFlow::Node getInput(IOType type) { result = super.getInput(type) or - result.asExpr() = this.getArgument(2) and type = KeyIO() + result.asIndirectExpr() = this.getArgument(2) and type = KeyIO() or - result.asExpr() = this.getArgument(3) and type = IVorNonceIO() + result.asIndirectExpr() = this.getArgument(3) and type = IVorNonceIO() } } @@ -90,6 +118,7 @@ class Evp_Cipher_EX2_or_Simple_Init_Call extends EvpEX2Initializer { result = super.getInput(type) or this.getTarget().getName().toLowerCase().matches("%cipherinit%") and + // the key op subtype is an int, use asExpr result.asExpr() = this.getArgument(4) and type = KeyOperationSubtypeIO() } @@ -107,13 +136,13 @@ class EvpPkeyEncryptDecryptInit extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = OsslParamIO() + result.asIndirectExpr() = this.getArgument(1) and type = OsslParamIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -125,6 +154,7 @@ class EvpCipherInitSKeyCall extends EvpEX2Initializer { override DataFlow::Node getInput(IOType type) { result = super.getInput(type) or + // the key op subtype is an int, use asExpr result.asExpr() = this.getArgument(5) and type = KeyOperationSubtypeIO() } @@ -141,35 +171,20 @@ class EvpCipherUpdateCall extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(1) and type = CiphertextIO() + result.asDefiningArgument() = this.getArgument(1) and type = CiphertextIO() or - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = UpdateStep() } } -/** - * A base configuration for all EVP cipher operations. - */ -abstract class EvpCipherOperationFinalStep extends OperationStep { - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = FinalStep() } -} - /** * A Call to EVP_Cipher. */ @@ -179,13 +194,13 @@ class EvpCipherCall extends EvpCipherOperationFinalStep { override DataFlow::Node getInput(IOType type) { super.getInput(type) = result or - result.asExpr() = this.getArgument(2) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(2) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { super.getOutput(type) = result or - result.asExpr() = this.getArgument(1) and type = CiphertextIO() + result.asDefiningArgument() = this.getArgument(1) and type = CiphertextIO() } } @@ -216,28 +231,50 @@ class EvpCipherFinalCall extends EvpCipherOperationFinalStep { */ class EvpPKeyCipherOperation extends EvpCipherOperationFinalStep { EvpPKeyCipherOperation() { - this.getTarget().getName() in ["EVP_PKEY_encrypt", "EVP_PKEY_decrypt"] + this.getTarget().getName() in ["EVP_PKEY_encrypt", "EVP_PKEY_decrypt"] and + // TODO: for now ignore this operation entirely if it is setting the cipher text to null + // this needs to be re-evalauted if this scenario sets other values worth tracking + ( + exists(this.(Call).getArgument(1).getValue()) + implies + this.(Call).getArgument(1).getValue().toInt() != 0 + ) } override DataFlow::Node getInput(IOType type) { super.getInput(type) = result or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { super.getOutput(type) = result or - result.asExpr() = this.getArgument(1) and type = CiphertextIO() + result.asDefiningArgument() = this.getArgument(1) and + type = CiphertextIO() and + this.getStepType() = FinalStep() // TODO: could indicate text lengths here, as well } + + override OperationStepType getStepType() { + // When the output buffer is null, the step is not a final step + // it is used to get the buffer size, if 0 consider it an initialization step + // NOTE/TODO: not tracing 0 to the arg, just looking for 0 directly in param + // the assumption is this is the common case, but we may want to make this more + // robust and support a dataflow. + result = FinalStep() and + (exists(super.getArgument(1).getValue()) implies super.getArgument(1).getValue().toInt() != 0) + or + result = InitializerStep() and + super.getArgument(1).getValue().toInt() = 0 + } } /** * An EVP cipher operation instance. * Any operation step that is a final operation step for EVP cipher operation steps. */ -class EvpCipherOperationInstance extends Crypto::KeyOperationInstance instanceof EvpCipherOperationFinalStep +class OpenSslCipherOperationInstance extends Crypto::KeyOperationInstance instanceof FinalCipherOperationStep { override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { super.getPrimaryAlgorithmValueConsumer() = result diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll index 2208407e53c..32823cada5a 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll @@ -1,5 +1,10 @@ /** * Initializers for EVP PKey + * These are used to create a Pkey context or set properties on a Pkey context + * e.g., key size, hash algorithms, curves, padding schemes, etc. + * Meant to capture more general purpose initializers that aren't necessarily + * tied to a specific operation. If tied to an operation (i.e., in the docs) + * we recommend defining defining all together in the same operation definition qll. * including: * https://docs.openssl.org/3.0/man3/EVP_PKEY_CTX_ctrl/ * https://docs.openssl.org/3.0/man3/EVP_EncryptInit/#synopsis @@ -26,14 +31,16 @@ class EvpNewKeyCtx extends OperationStep instanceof Call { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = keyArg and type = KeyIO() + result.asIndirectExpr() = keyArg and type = KeyIO() or this.getTarget().getName() = "EVP_PKEY_CTX_new_from_pkey" and - result.asExpr() = this.getArgument(0) and + result.asIndirectExpr() = this.getArgument(0) and type = OsslLibContextIO() } - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = ContextIO() } + override DataFlow::Node getOutput(IOType type) { + result.asIndirectExpr() = this and type = ContextIO() + } override OperationStepType getStepType() { result = ContextCreationStep() } } @@ -47,13 +54,13 @@ class EvpCtxSetEcParamgenCurveNidInitializer extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() + result.asIndirectExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -71,23 +78,46 @@ class EvpCtxSetEcParamgenCurveNidInitializer extends OperationStep { * - `EVP_PKEY_CTX_set_ecdh_kdf_md` */ class EvpCtxSetHashInitializer extends OperationStep { + boolean isOaep; + boolean isMgf1; + EvpCtxSetHashInitializer() { this.getTarget().getName() in [ - "EVP_PKEY_CTX_set_signature_md", "EVP_PKEY_CTX_set_rsa_mgf1_md_name", - "EVP_PKEY_CTX_set_rsa_mgf1_md", "EVP_PKEY_CTX_set_rsa_oaep_md_name", - "EVP_PKEY_CTX_set_rsa_oaep_md", "EVP_PKEY_CTX_set_dsa_paramgen_md", + "EVP_PKEY_CTX_set_signature_md", "EVP_PKEY_CTX_set_dsa_paramgen_md", "EVP_PKEY_CTX_set_dh_kdf_md", "EVP_PKEY_CTX_set_ecdh_kdf_md" - ] + ] and + isOaep = false and + isMgf1 = false + or + this.getTarget().getName() in [ + "EVP_PKEY_CTX_set_rsa_mgf1_md_name", "EVP_PKEY_CTX_set_rsa_mgf1_md" + ] and + isOaep = false and + isMgf1 = true + or + this.getTarget().getName() in [ + "EVP_PKEY_CTX_set_rsa_oaep_md_name", + "EVP_PKEY_CTX_set_rsa_oaep_md" + ] and + isOaep = true and + isMgf1 = false } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = HashAlgorithmIO() + result.asIndirectExpr() = this.getArgument(1) and + type = HashAlgorithmIO() and + isOaep = false and + isMgf1 = false + or + result.asIndirectExpr() = this.getArgument(1) and type = HashAlgorithmOaepIO() and isOaep = true + or + result.asIndirectExpr() = this.getArgument(1) and type = HashAlgorithmMgf1IO() and isMgf1 = true } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -106,13 +136,13 @@ class EvpCtxSetKeySizeInitializer extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or result.asExpr() = this.getArgument(1) and type = KeySizeIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -122,16 +152,16 @@ class EvpCtxSetMacKeyInitializer extends OperationStep { EvpCtxSetMacKeyInitializer() { this.getTarget().getName() = "EVP_PKEY_CTX_set_mac_key" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or result.asExpr() = this.getArgument(2) and type = KeySizeIO() or // the raw key that is configured into the output key - result.asExpr() = this.getArgument(1) and type = KeyIO() + result.asIndirectExpr() = this.getArgument(1) and type = KeyIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -143,13 +173,14 @@ class EvpCtxSetPaddingInitializer extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or + // The algorithm is an int: use asExpr result.asExpr() = this.getArgument(1) and type = PaddingAlgorithmIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -161,13 +192,13 @@ class EvpCtxSetSaltLengthInitializer extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or result.asExpr() = this.getArgument(1) and type = SaltLengthIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll index 1878bfbe09f..5b15dc6d76a 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll @@ -6,6 +6,13 @@ private import experimental.quantum.Language private import OpenSSLOperationBase private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers +/** + * A base class for final digest operations. + */ +abstract class FinalDigestOperation extends OperationStep { + override OperationStepType getStepType() { result = FinalStep() } +} + /** * A call to and EVP digest initializer, such as: * - `EVP_DigestInit` @@ -18,13 +25,13 @@ class EvpDigestInitVariantCalls extends OperationStep instanceof Call { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() + result.asIndirectExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } @@ -38,56 +45,49 @@ class EvpDigestUpdateCall extends OperationStep instanceof Call { EvpDigestUpdateCall() { this.getTarget().getName() = "EVP_DigestUpdate" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = UpdateStep() } } -/** - * A base class for final digest operations. - */ -abstract class EvpFinalDigestOperationStep extends OperationStep { - override OperationStepType getStepType() { result = FinalStep() } -} - /** * A call to `EVP_Q_digest` * https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis */ -class EvpQDigestOperation extends EvpFinalDigestOperationStep instanceof Call { +class EvpQDigestOperation extends FinalDigestOperation instanceof Call { EvpQDigestOperation() { this.getTarget().getName() = "EVP_Q_digest" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() + result.asIndirectExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() or - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or result.asDefiningArgument() = this.getArgument(5) and type = DigestIO() } } -class EvpDigestOperation extends EvpFinalDigestOperationStep instanceof Call { +class EvpDigestOperation extends FinalDigestOperation instanceof Call { EvpDigestOperation() { this.getTarget().getName() = "EVP_Digest" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(4) and type = PrimaryAlgorithmIO() + result.asIndirectExpr() = this.getArgument(4) and type = PrimaryAlgorithmIO() or - result.asExpr() = this.getArgument(0) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(0) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { @@ -98,27 +98,28 @@ class EvpDigestOperation extends EvpFinalDigestOperationStep instanceof Call { /** * A call to EVP_DigestFinal variants */ -class EvpDigestFinalCall extends EvpFinalDigestOperationStep instanceof Call { +class EvpDigestFinalCall extends FinalDigestOperation instanceof Call { EvpDigestFinalCall() { this.getTarget().getName() in ["EVP_DigestFinal", "EVP_DigestFinal_ex", "EVP_DigestFinalXOF"] } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or result.asDefiningArgument() = this.getArgument(1) and type = DigestIO() + //result.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = this.getArgument(1) } } /** * An openssl digest final hash operation instance */ -class EvpDigestFinalOperationInstance extends Crypto::HashOperationInstance instanceof EvpFinalDigestOperationStep +class OpenSslDigestFinalOperationInstance extends Crypto::HashOperationInstance instanceof FinalDigestOperation { override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { super.getPrimaryAlgorithmValueConsumer() = result diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll index 2c146aec97f..e19d65c65ae 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll @@ -13,10 +13,12 @@ class ECKeyGen extends OperationStep instanceof Call { ECKeyGen() { this.(Call).getTarget().getName() = "EC_KEY_generate_key" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.(Call).getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.(Call).getArgument(0) and type = ContextIO() } - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this and type = KeyIO() + } override OperationStepType getStepType() { result = ContextCreationStep() } } @@ -33,16 +35,19 @@ class EvpKeyGenInitialize extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } } +/** + * A base class for final key generation operation steps. + */ abstract class KeyGenFinalOperationStep extends OperationStep { override OperationStepType getStepType() { result = FinalStep() } } @@ -54,26 +59,26 @@ class EvpPKeyQKeyGen extends KeyGenFinalOperationStep instanceof Call { EvpPKeyQKeyGen() { this.getTarget().getName() = "EVP_PKEY_Q_keygen" } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this and type = KeyIO() + result.asDefiningArgument() = this and type = KeyIO() } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or // When arg 3 is a derived type, it is a curve name, otherwise it is a key size for RSA if provided // and arg 2 is the algorithm type this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(3) and + result.asIndirectExpr() = this.getArgument(3) and type = PrimaryAlgorithmIO() or not this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(2) and + result.asIndirectExpr() = this.getArgument(2) and type = PrimaryAlgorithmIO() or not this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(3) and + result.asIndirectExpr() = this.getArgument(3) and type = KeySizeIO() } } @@ -84,7 +89,9 @@ class EvpPKeyQKeyGen extends KeyGenFinalOperationStep instanceof Call { class EvpRsaGen extends KeyGenFinalOperationStep instanceof Call { EvpRsaGen() { this.getTarget().getName() = "EVP_RSA_gen" } - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this and type = KeyIO() + } override DataFlow::Node getInput(IOType type) { result.asExpr() = this.getArgument(0) and type = KeySizeIO() @@ -97,7 +104,9 @@ class EvpRsaGen extends KeyGenFinalOperationStep instanceof Call { class RsaGenerateKey extends KeyGenFinalOperationStep instanceof Call { RsaGenerateKey() { this.getTarget().getName() = "RSA_generate_key" } - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this and type = KeyIO() + } override DataFlow::Node getInput(IOType type) { result.asExpr() = this.getArgument(0) and type = KeySizeIO() @@ -117,7 +126,7 @@ class RsaGenerateKeyEx extends KeyGenFinalOperationStep instanceof Call { override DataFlow::Node getInput(IOType type) { // arg 0 comes in as a blank RSA key, which we consider a context, // on output it is considered a key - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() } } @@ -128,13 +137,13 @@ class EvpPkeyGen extends KeyGenFinalOperationStep instanceof Call { EvpPkeyGen() { this.getTarget().getName() in ["EVP_PKEY_generate", "EVP_PKEY_keygen"] } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() } override DataFlow::Node getOutput(IOType type) { result.asDefiningArgument() = this.getArgument(1) and type = KeyIO() or - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } } @@ -146,18 +155,14 @@ class EvpNewMacKey extends KeyGenFinalOperationStep { EvpNewMacKey() { this.getTarget().getName() = "EVP_PKEY_new_mac_key" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or // the raw key that is configured into the output key - result.asExpr() = this.getArgument(2) and type = KeyIO() + result.asIndirectExpr() = this.getArgument(2) and type = KeyIO() or result.asExpr() = this.getArgument(3) and type = KeySizeIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this and type = KeyIO() - or - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this and type = KeyIO() } } @@ -165,7 +170,7 @@ class EvpNewMacKey extends KeyGenFinalOperationStep { /** * An `KeyGenerationOperationInstance` for the for all key gen final operation steps. */ -class KeyGenOperationInstance extends Crypto::KeyGenerationOperationInstance instanceof KeyGenFinalOperationStep +class OpenSslKeyGenOperationInstance extends Crypto::KeyGenerationOperationInstance instanceof KeyGenFinalOperationStep { override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { super.getPrimaryAlgorithmValueConsumer() = result diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index f1ab394ad78..5c0aa98dd0c 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -1,6 +1,6 @@ private import experimental.quantum.Language private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -import semmle.code.cpp.dataflow.new.DataFlow +import semmle.code.cpp.dataflow.new.TaintTracking // Importing these intializers here to ensure the are part of any model that is // using OpenSslOperationBase. This further ensures that initializers are tied to opeartions // even if only importing the operation by itself. @@ -58,7 +58,11 @@ newtype TIOType = // For OSSL_PARAM and OSSL_LIB_CTX use of OsslParamIO and OsslLibContextIO ContextIO() or DigestIO() or + // For OAEP and MGF1 hashes, there is a special IO type for these hashes + // it is recommended to set the most explicit type known, not both HashAlgorithmIO() or + HashAlgorithmOaepIO() or + HashAlgorithmMgf1IO() or IVorNonceIO() or KeyIO() or KeyOperationSubtypeIO() or @@ -71,11 +75,13 @@ newtype TIOType = PaddingAlgorithmIO() or // Plaintext also includes a message for digest, signature, verification, and mac generation PlaintextIO() or + PlaintextSizeIO() or PrimaryAlgorithmIO() or RandomSourceIO() or SaltLengthIO() or SeedIO() or - SignatureIO() + SignatureIO() or + SignatureSizeIO() private string ioTypeToString(TIOType t) { t = CiphertextIO() and result = "CiphertextIO" @@ -104,6 +110,8 @@ private string ioTypeToString(TIOType t) { or t = PlaintextIO() and result = "PlaintextIO" or + t = PlaintextSizeIO() and result = "PlaintextSizeIO" + or t = PrimaryAlgorithmIO() and result = "PrimaryAlgorithmIO" or t = RandomSourceIO() and result = "RandomSourceIO" @@ -113,6 +121,8 @@ private string ioTypeToString(TIOType t) { t = SeedIO() and result = "SeedIO" or t = SignatureIO() and result = "SignatureIO" + or + t = SignatureSizeIO() and result = "SignatureSizeIO" } class IOType extends TIOType { @@ -123,13 +133,13 @@ class IOType extends TIOType { } } -//TODO: add more initializers as needed /** * The type of step in an `OperationStep`. * - `ContextCreationStep`: the creation of a context from an algorithm or key. * for example `EVP_MD_CTX_create(EVP_sha256())` or `EVP_PKEY_CTX_new(pkey, NULL)` - * - `InitializerStep`: the initialization of an operation through some sort of shared/accumulated context - * for example `EVP_DigestInit_ex(ctx, EVP_sha256(), NULL)` + * - `InitializerStep`: the initialization of an operation or state through some sort of shared/accumulated context + * for example `EVP_DigestInit_ex(ctx, EVP_sha256(), NULL)`, may also be used for pass through + * configuration, for example `EVP_PKEY_get1_RSA(key)` where a pkey is input into an RSA key return. * - `UpdateStep`: any operation that has and update/final paradigm, the update represents an intermediate step in an operation, * such as `EVP_DigestUpdate(ctx, data, len)` * - `FinalStep`: an ultimate operation step. This may be an explicit 'final' in an update/final paradigm, but not necessarily. @@ -189,7 +199,7 @@ abstract class OperationStep extends Call { */ predicate flowsToOperationStep(OperationStep sink) { sink = this or - OperationStepFlow::flow(this.getAnOutput(), sink.getAnInput()) + OperationStepCtxFlow::flow(this.getAnOutput(), [sink.getAnInput(), sink.getAnOutput()]) } /** @@ -198,7 +208,7 @@ abstract class OperationStep extends Call { */ predicate flowsFromOperationStep(OperationStep source) { source = this or - OperationStepFlow::flow(source.getAnOutput(), this.getAnInput()) + OperationStepCtxFlow::flow(source.getAnOutput(), [this.getAnInput(), this.getAnOutput()]) } /** @@ -220,10 +230,13 @@ abstract class OperationStep extends Call { result.setsValue(type) and ( // Do not consider a 'reset' to occur on updates + // but only for resets that are part of the same update/finalize + // progression (e.g., an update for an unrelated finalize is ignored) result.getStepType() = UpdateStep() or not exists(OperationStep reset | result != reset and + result != this and reset.setsValue(type) and reset.flowsToOperationStep(this) and result.flowsToOperationStep(reset) @@ -245,8 +258,11 @@ abstract class OperationStep extends Call { /** * Gets an AVC for the primary algorithm for this operation. - * A primary algorithm is an AVC that flows to a ctx input directly or - * an AVC that flows to a primary algorithm input directly. + * A primary algorithm is an AVC that either: + * 0) `this` is an AVC (consider direct algorithm consumers like RSA_sign (algorithm is implicit) or EVP_PKEY_new_mac_key (NID is first arg) ) + * 1) flows to a ctx input directly or + * 2) flows to a primary algorithm input directly or + * 3) flows to a key input directly (algorithm held in a key will be considered primary) * See `AvcContextCreationStep` for details about resetting scenarios. * Gets the first OperationStep an AVC flows to. If a context input, * the AVC is considered primary. @@ -254,19 +270,24 @@ abstract class OperationStep extends Call { * operation step (dominating operation step, see `getDominatingInitializersToStep`). */ Crypto::AlgorithmValueConsumer getPrimaryAlgorithmValueConsumer() { - exists(DataFlow::Node src, DataFlow::Node sink, IOType t, OperationStep avcSucc | - (t = PrimaryAlgorithmIO() or t = ContextIO()) and - avcSucc.flowsToOperationStep(this) and - src.asExpr() = result and - sink = avcSucc.getInput(t) and + this instanceof Crypto::AlgorithmValueConsumer and result = this + or + exists( + DataFlow::Node src, DataFlow::Node sink, IOType srcIntype, OperationStep avcConsumingPred + | + (srcIntype = ContextIO() or srcIntype = PrimaryAlgorithmIO() or srcIntype = KeyIO()) and + avcConsumingPred.flowsToOperationStep(this) and + src.asIndirectExpr() = result and + sink = avcConsumingPred.getInput(srcIntype) and AvcToOperationStepFlow::flow(src, sink) and ( - // Case 1: the avcSucc step is a dominating initialization step - t = PrimaryAlgorithmIO() and - avcSucc = this.getDominatingInitializersToStep(PrimaryAlgorithmIO()) + // Case 1: the avcConsumingPred step is a dominating primary algorithm initialization step + // or dominating key initialization step + (srcIntype = PrimaryAlgorithmIO() or srcIntype = KeyIO()) and + avcConsumingPred = this.getDominatingInitializersToStep(srcIntype) or - // Case 2: the succ is a context input (any avcSucc is valid) - t = ContextIO() + // Case 2: the pred is a context input + srcIntype = ContextIO() ) ) } @@ -277,9 +298,11 @@ abstract class OperationStep extends Call { * TODO: generalize to use this for `getPrimaryAlgorithmValueConsumer` */ Crypto::AlgorithmValueConsumer getAlgorithmValueConsumerForInput(IOType type) { + result = this and this.setsValue(type) + or exists(DataFlow::Node src, DataFlow::Node sink | AvcToOperationStepFlow::flow(src, sink) and - src.asExpr() = result and + src.asIndirectExpr() = result and sink = this.getInput(type) ) } @@ -357,7 +380,7 @@ private class CtxCopyOutArgCall extends CtxPassThroughCall { CtxCopyOutArgCall() { this.getTarget().getName().toLowerCase().matches("%copy%") and - n1.asExpr() = this.getAnArgument() and + n1.asIndirectExpr() = this.getAnArgument() and n1.getType() instanceof CtxType and n2.asDefiningArgument() = this.getAnArgument() and n2.getType() instanceof CtxType and @@ -378,16 +401,18 @@ private class CtxCopyReturnCall extends CtxPassThroughCall, CtxPointerExpr { CtxCopyReturnCall() { this.getTarget().getName().toLowerCase().matches("%dup%") and - n1.asExpr() = this.getAnArgument() and + n1.asIndirectExpr() = this.getAnArgument() and n1.getType() instanceof CtxType } override DataFlow::Node getNode1() { result = n1 } - override DataFlow::Node getNode2() { result.asExpr() = this } + override DataFlow::Node getNode2() { result.asIndirectExpr() = this } } -// TODO: is this still needed? +// TODO: is this still needed? It appears to be (tests fail without it) but +// I don't know why as EVP_PKEY_paramgen is an operation step and we pass through +// operation steps already. /** * A call to `EVP_PKEY_paramgen` acts as a kind of pass through. * It's output pkey is eventually used in a new operation generating @@ -401,34 +426,10 @@ private class CtxParamGenCall extends CtxPassThroughCall { CtxParamGenCall() { this.getTarget().getName() = "EVP_PKEY_paramgen" and - n1.asExpr() = this.getArgument(0) and - ( - n2.asExpr() = this.getArgument(1) - or - n2.asDefiningArgument() = this.getArgument(1) - ) - } - - override DataFlow::Node getNode1() { result = n1 } - - override DataFlow::Node getNode2() { result = n2 } -} - -//TODO: I am not sure CallArgToCtxRet is needed anymore -/** - * If the current node is an argument to a function - * that returns a pointer type, immediately flow through. - * NOTE: this passthrough is required if we allow - * intermediate steps to go into variables that are not a CTX type. - * See for example `CtxParamGenCall`. - */ -private class CallArgToCtxRet extends CtxPassThroughCall, CtxPointerExpr { - DataFlow::Node n1; - DataFlow::Node n2; - - CallArgToCtxRet() { - this.getAnArgument() = n1.asExpr() and - n2.asExpr() = this + //Arg 0 is *ctx + n1.asIndirectExpr() = this.getArgument(0) and + //Arg 1 is **pkey + n2.asDefiningArgument() = this.getArgument(1) } override DataFlow::Node getNode1() { result = n1 } @@ -439,7 +440,7 @@ private class CallArgToCtxRet extends CtxPassThroughCall, CtxPointerExpr { /** * A flow configuration from any non-final `OperationStep` to any other `OperationStep`. */ -module OperationStepFlowConfig implements DataFlow::ConfigSig { +module OperationStepCtxFlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { exists(OperationStep s | s.getAnOutput() = source or @@ -455,22 +456,39 @@ module OperationStepFlowConfig implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { - exists(CtxClearCall c | c.getAnArgument() = node.asExpr()) + exists(CtxClearCall c | c.getAnArgument() = [node.asExpr(), node.asIndirectExpr()]) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or exists(CtxPassThroughCall c | c.getNode1() = node1 and c.getNode2() = node2) or - // Flow out through all outputs from an operation step if more than one output - // is defined. - exists(OperationStep s | s.getAnInput() = node1 and s.getAnOutput() = node2) + // Flow only through context and key inputs and outputs + // keys and context generally hold unifying context that link multiple steps + // Flow only out of finalize operations through key outputs, otherwise stop at final operations + exists(OperationStep s, IOType inType, IOType outType | + (s.getStepType() = FinalStep() implies outType = KeyIO()) and + ( + inType = ContextIO() + or + inType = KeyIO() + ) and + ( + outType = ContextIO() + or + outType = KeyIO() + ) and + s.getInput(inType) = node1 and + s.getOutput(outType) = node2 + ) // TODO: consideration for additional alises defined as follows: // if an output from an operation step itself flows from the output of another operation step // then the source of that flow's outputs (all of them) are potential aliases } } -module OperationStepFlow = DataFlow::Global; +module OperationStepCtxFlow = TaintTracking::Global; /** * A flow from AVC to the first `OperationStep` the AVC reaches as an input. @@ -483,7 +501,7 @@ module AvcToOperationStepFlowConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(OperationStep s | s.getAnInput() = sink) } predicate isBarrier(DataFlow::Node node) { - exists(CtxClearCall c | c.getAnArgument() = node.asExpr()) + exists(CtxClearCall c | c.getAnArgument() = [node.asExpr(), node.asIndirectExpr()]) } /** @@ -496,7 +514,7 @@ module AvcToOperationStepFlowConfig implements DataFlow::ConfigSig { } } -module AvcToOperationStepFlow = DataFlow::Global; +module AvcToOperationStepFlow = TaintTracking::Global; module EncValToInitEncArgConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr().getValue().toInt() in [0, 1] } @@ -506,7 +524,7 @@ module EncValToInitEncArgConfig implements DataFlow::ConfigSig { } } -module EncValToInitEncArgFlow = DataFlow::Global; +module EncValToInitEncArgFlow = TaintTracking::Global; private Crypto::KeyOperationSubtype intToCipherOperationSubtype(int i) { i = 0 and diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll index b9b498ee8df..f5e9ad354ad 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll @@ -6,12 +6,25 @@ private import experimental.quantum.Language private import experimental.quantum.OpenSSL.AvcFlow private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers private import experimental.quantum.OpenSSL.Operations.OpenSSLOperations +private import experimental.quantum.OpenSSL.AlgorithmInstances.OpenSSLAlgorithmInstances -// TODO: verification functions /** * A base class for final signature operations. + * The operation must be known to always be a signature operation, + * and not a MAC operation. Used for both verification and signing. + * NOTE: even an operation that may be a mac or signature but is known to take in + * only signature configurations should extend `SignatureOrMacFinalOperation`. */ -abstract class EvpSignatureFinalOperation extends OperationStep { +abstract class SignatureFinalOperation extends OperationStep { + override OperationStepType getStepType() { result = FinalStep() } +} + +/** + * A base class for final signature or MAC operations. + * The operation must be known to always be a signature or MAC operation. + * Used for both verification or signing. + */ +abstract class SignatureOrMacFinalOperation extends OperationStep { override OperationStepType getStepType() { result = FinalStep() } } @@ -24,36 +37,32 @@ class EvpSignatureDigestInitializer extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(3) and + result.asIndirectExpr() = this.getArgument(3) and type = OsslLibContextIO() or - result.asExpr() = this.getArgument(2) and type = HashAlgorithmIO() + result.asIndirectExpr() = this.getArgument(2) and type = HashAlgorithmIO() or this.getTarget().getName() = "EVP_DigestSignInit" and - result.asExpr() = this.getArgument(4) and + result.asIndirectExpr() = this.getArgument(4) and type = KeyIO() or this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(5) and + result.asIndirectExpr() = this.getArgument(5) and type = KeyIO() or this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(6) and + result.asIndirectExpr() = this.getArgument(6) and type = OsslParamIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or // EVP_PKEY_CTX - result.asExpr() = this.getArgument(1) and type = ContextIO() - or - this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(6) and - type = ContextIO() + result.asDefiningArgument() = this.getArgument(1) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -66,13 +75,13 @@ class EvpSignInit extends OperationStep { EvpSignInit() { this.getTarget().getName() in ["EVP_SignInit", "EVP_SignInit_ex"] } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = HashAlgorithmIO() + result.asIndirectExpr() = this.getArgument(1) and type = HashAlgorithmIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -94,22 +103,22 @@ class EvpPkeySignInit extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or this.getTarget().getName() in ["EVP_PKEY_sign_init_ex2", "EVP_PKEY_sign_message_init"] and - result.asExpr() = this.getArgument(1) and + result.asIndirectExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() or this.getTarget().getName() = "EVP_PKEY_sign_init_ex" and - result.asExpr() = this.getArgument(1) and + result.asIndirectExpr() = this.getArgument(1) and type = OsslParamIO() or // Argument 2 (0 based) only exists for EVP_PKEY_sign_init_ex2 and EVP_PKEY_sign_message_init - result.asExpr() = this.getArgument(2) and type = OsslParamIO() + result.asIndirectExpr() = this.getArgument(2) and type = OsslParamIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = InitializerStep() } @@ -126,13 +135,13 @@ class EvpSignatureUpdateCall extends OperationStep { } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() } override OperationStepType getStepType() { result = UpdateStep() } @@ -141,73 +150,496 @@ class EvpSignatureUpdateCall extends OperationStep { /** * A call to EVP_SignFinal or EVP_SignFinal_ex. */ -class EvpSignFinal extends EvpSignatureFinalOperation { +class EvpSignFinal extends SignatureFinalOperation { EvpSignFinal() { this.getTarget().getName() in ["EVP_SignFinal_ex", "EVP_SignFinal"] } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(3) and type = KeyIO() + result.asIndirectExpr() = this.getArgument(3) and type = KeyIO() or // params above 3 (0-based) only exist for EVP_SignFinal_ex - result.asExpr() = this.getArgument(4) and + result.asIndirectExpr() = this.getArgument(4) and type = OsslLibContextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = SignatureIO() + result.asDefiningArgument() = this.getArgument(1) and type = SignatureIO() + or + result.asDefiningArgument() = this.getArgument(2) and type = SignatureSizeIO() } } /** - * A call to EVP_DigestSign or EVP_PKEY_sign. + * A call to EVP_PKEY_sign. */ -class EvpDigestSign extends EvpSignatureFinalOperation { - EvpDigestSign() { this.getTarget().getName() in ["EVP_DigestSign", "EVP_PKEY_sign"] } +class EvpPkeySign extends SignatureFinalOperation { + EvpPkeySign() { + this.getTarget().getName() = "EVP_PKEY_sign" and + // Setting signature to NULL is not a final sign step but an + // intermediary step used to get the required buffer size. + // not tracking these calls. + ( + exists(this.(Call).getArgument(1).getValue()) + implies + this.(Call).getArgument(1).getValue().toInt() != 0 + ) + } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = SignatureIO() + result.asDefiningArgument() = this.getArgument(1) and type = SignatureIO() } } /** - * A call to EVP_DigestSignFinal or EVP_PKEY_sign_message_final. + * A call to EVP_DigestSign. + * This is a mac or sign operation. */ -class EvpDigestAndPkeySignFinal extends EvpSignatureFinalOperation { - EvpDigestAndPkeySignFinal() { - this.getTarget().getName() in [ - "EVP_DigestSignFinal", - "EVP_PKEY_sign_message_final" - ] - } +class EvpDigestSign extends SignatureOrMacFinalOperation { + EvpDigestSign() { this.getTarget().getName() = "EVP_DigestSign" } override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() } override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() or - result.asExpr() = this.getArgument(1) and type = SignatureIO() + result.asDefiningArgument() = this.getArgument(1) and type = SignatureIO() + } +} + +/** + * A call to EVP_PKEY_sign_message_final. + */ +class EvpPkeySignFinal extends SignatureFinalOperation { + EvpPkeySignFinal() { + this.getTarget().getName() = "EVP_PKEY_sign_message_final" and + // Setting signature to NULL is not a final sign step but an + // intermediary step used to get the required buffer size. + // not tracking these calls. + ( + exists(this.(Call).getArgument(1).getValue()) + implies + this.(Call).getArgument(1).getValue().toInt() != 0 + ) + } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + or + result.asDefiningArgument() = this.getArgument(1) and type = SignatureIO() + or + result.asExpr() = this.getArgument(2) and type = SignatureSizeIO() + } +} + +/** + * A call to EVP_DigestSignFinal. + * This is a mac or sign operation. + */ +class EvpDigestSignFinal extends SignatureOrMacFinalOperation { + EvpDigestSignFinal() { + this.getTarget().getName() = "EVP_DigestSignFinal" and + // Setting signature to NULL is not a final sign step but an + // intermediary step used to get the required buffer size. + // not tracking these calls. + ( + exists(this.(Call).getArgument(1).getValue()) + implies + this.(Call).getArgument(1).getValue().toInt() != 0 + ) + } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + or + result.asDefiningArgument() = this.getArgument(1) and type = SignatureIO() } override OperationStepType getStepType() { result = FinalStep() } } /** - * An EVP signature operation instance. + * A call to EVP_DigestVerifyInit or EVP_DigestVerifyInit_ex. */ -class EvpSignatureOperationInstance extends Crypto::SignatureOperationInstance instanceof EvpSignatureFinalOperation +class EvpDigestVerifyInit extends OperationStep { + EvpDigestVerifyInit() { + this.getTarget().getName() in ["EVP_DigestVerifyInit", "EVP_DigestVerifyInit_ex"] + } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(2) and type = HashAlgorithmIO() + or + this.getTarget().getName() = "EVP_DigestVerifyInit_ex" and + result.asIndirectExpr() = this.getArgument(3) and + type = OsslLibContextIO() + or + this.getTarget().getName() = "EVP_DigestVerifyInit_ex" and + result.asIndirectExpr() = this.getArgument(5) and + type = KeyIO() + or + this.getTarget().getName() = "EVP_DigestVerifyInit" and + result.asIndirectExpr() = this.getArgument(4) and + type = KeyIO() + or + this.getTarget().getName() = "EVP_DigestVerifyInit_ex" and + result.asIndirectExpr() = this.getArgument(6) and + type = OsslParamIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + or + result.asDefiningArgument() = this.getArgument(1) and type = ContextIO() + } + + override OperationStepType getStepType() { result = InitializerStep() } +} + +/** + * A call to EVP_DigestVerifyUpdate. + */ +class EvpDigestVerifyUpdate extends OperationStep { + EvpDigestVerifyUpdate() { this.getTarget().getName() = "EVP_DigestVerifyUpdate" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = UpdateStep() } +} + +/** + * A call to EVP_DigestVerifyFinal + */ +class EvpDigestVerifyFinal extends SignatureFinalOperation { + EvpDigestVerifyFinal() { this.getTarget().getName() = "EVP_DigestVerifyFinal" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = SignatureIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } +} + +/** + * A call to EVP_DigestVerify + */ +class EvpDigestVerify extends SignatureFinalOperation { + EvpDigestVerify() { this.getTarget().getName() = "EVP_DigestVerify" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = SignatureIO() + or + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } +} + +/** + * A call to `EVP_PKEY_verify_init`, `EVP_PKEY_verify_init_ex`, + * `EVP_PKEY_verify_init_ex2`, or `EVP_PKEY_verify_message_init` + * https://docs.openssl.org/master/man3/EVP_PKEY_verify/#synopsis + */ +class EvpVerifyInit extends OperationStep { + EvpVerifyInit() { + this.getTarget().getName() in [ + "EVP_PKEY_verify_init", "EVP_PKEY_verify_init_ex", "EVP_PKEY_verify_init_ex2", + "EVP_PKEY_verify_message_init" + ] + } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + this.getTarget().getName() = "EVP_PKEY_verify_init_ex" and + result.asIndirectExpr() = this.getArgument(1) and + type = OsslParamIO() + or + this.getTarget().getName() in ["EVP_PKEY_verify_init_ex2", "EVP_PKEY_verify_message_init"] and + result.asIndirectExpr() = this.getArgument(1) and + type = PrimaryAlgorithmIO() + or + this.getTarget().getName() in ["EVP_PKEY_verify_init_ex2", "EVP_PKEY_verify_message_init"] and + result.asIndirectExpr() = this.getArgument(2) and + type = OsslParamIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = InitializerStep() } +} + +/** + * A call to `EVP_PKEY_CTX_set_signature` + * https://docs.openssl.org/master/man3/EVP_PKEY_verify/ + */ +class EvpCtxSetSignatureInitializer extends OperationStep { + EvpCtxSetSignatureInitializer() { this.getTarget().getName() = "EVP_PKEY_CTX_set_signature" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = SignatureIO() + or + result.asExpr() = this.getArgument(2) and type = SignatureSizeIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = InitializerStep() } +} + +/** + * A call to `EVP_PKEY_verify_message_update`. + */ +class EvpVerifyMessageUpdate extends OperationStep { + EvpVerifyMessageUpdate() { this.getTarget().getName() = "EVP_PKEY_verify_message_update" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() + or + result.asExpr() = this.getArgument(2) and type = PlaintextSizeIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = UpdateStep() } +} + +/** + * A call to `EVP_PKEY_verify_message_final`. + */ +class EvpVerifyMessageFinal extends SignatureFinalOperation { + EvpVerifyMessageFinal() { this.getTarget().getName() = "EVP_PKEY_verify_message_final" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } +} + +/** + * A call to `EVP_PKEY_verify` + */ +class EvpVerify extends SignatureFinalOperation { + EvpVerify() { this.getTarget().getName() = "EVP_PKEY_verify" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = SignatureIO() + or + result.asExpr() = this.getArgument(2) and type = SignatureSizeIO() + or + result.asIndirectExpr() = this.getArgument(3) and type = PlaintextIO() + or + result.asExpr() = this.getArgument(4) and type = PlaintextSizeIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } +} + +/** + * A call to `RSA_sign` or `RSA_verify`. + * https://docs.openssl.org/3.0/man3/RSA_sign/ + */ +class RsaSignorVerify extends SignatureFinalOperation { + RsaSignorVerify() { this.getTarget().getName() in ["RSA_sign", "RSA_verify"] } + + override DataFlow::Node getInput(IOType type) { + // Arg 0 is an NID (so asExpr not asIndirectExpr) + result.asExpr() = this.getArgument(0) and type = HashAlgorithmIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() + or + result.asExpr() = this.getArgument(2) and type = PlaintextSizeIO() + or + this.getTarget().getName() = "RSA_verify" and + result.asIndirectExpr() = this.getArgument(3) and + type = SignatureIO() + or + this.getTarget().getName() = "RSA_verify" and + result.asIndirectExpr() = this.getArgument(4) and + type = SignatureSizeIO() + or + result.asIndirectExpr() = this.getArgument(5) and type = KeyIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + or + this.getTarget().getName() = "RSA_sign" and + result.asDefiningArgument() = this.getArgument(3) and + type = SignatureIO() + or + this.getTarget().getName() = "RSA_sign" and + type = SignatureSizeIO() and + result.asDefiningArgument() = this.getArgument(4) + } +} + +/** + * A call to `DSA_do_sign` or `DSA_do_verify` + */ +class DsaDoSignOrVerify extends SignatureFinalOperation { + DsaDoSignOrVerify() { this.getTarget().getName() in ["DSA_do_sign", "DSA_do_verify"] } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = PlaintextIO() + or + result.asExpr() = this.getArgument(1) and type = PlaintextSizeIO() + or + this.getTarget().getName() = "DSA_do_sign" and + result.asIndirectExpr() = this.getArgument(2) and + type = KeyIO() + or + this.getTarget().getName() = "DSA_do_verify" and + result.asIndirectExpr() = this.getArgument(2) and + type = SignatureIO() + or + this.getTarget().getName() = "DSA_do_verify" and + result.asIndirectExpr() = this.getArgument(3) and + type = KeyIO() + } + + override DataFlow::Node getOutput(IOType type) { + this.getTarget().getName() = "DSA_do_sign" and + result.asIndirectExpr() = this and + type = SignatureIO() + } +} + +/** + * A Call to `EVP_VerifyInit` or `EVP_VerifyInit_ex` + * - int EVP_VerifyInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); + * - int EVP_VerifyInit(EVP_MD_CTX *ctx, const EVP_MD *type); + */ +class EVP_VerifyInitCall extends OperationStep { + EVP_VerifyInitCall() { this.getTarget().getName() in ["EVP_VerifyInit", "EVP_VerifyInit_ex"] } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = HashAlgorithmIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = InitializerStep() } +} + +/** + * A call to `EVP_VerifyUpdate` + * - int EVP_VerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt); + */ +class EVP_VerifyUpdateCall extends OperationStep { + EVP_VerifyUpdateCall() { this.getTarget().getName() = "EVP_VerifyUpdate" } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = PlaintextIO() + or + result.asIndirectExpr() = this.getArgument(2) and type = PlaintextSizeIO() + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = UpdateStep() } +} + +/** + * A call to `EVP_VerifyFinal` or `EVP_VerifyFinal_ex` + * - int EVP_VerifyFinal_ex(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + * unsigned int siglen, EVP_PKEY *pkey, + * OSSL_LIB_CTX *libctx, const char *propq); + *- int EVP_VerifyFinal(EVP_MD_CTX *ctx, unsigned char *sigbuf, unsigned int siglen, + * EVP_PKEY *pkey); * + */ +class EVP_VerifyFinalCall extends SignatureFinalOperation { + EVP_VerifyFinalCall() { this.getTarget().getName() in ["EVP_VerifyFinal", "EVP_VerifyFinal_ex"] } + + override DataFlow::Node getInput(IOType type) { + result.asIndirectExpr() = this.getArgument(0) and type = ContextIO() + or + result.asIndirectExpr() = this.getArgument(1) and type = SignatureIO() + or + result.asExpr() = this.getArgument(2) and type = SignatureSizeIO() + or + result.asIndirectExpr() = this.getArgument(3) and type = KeyIO() + or + result.asIndirectExpr() = this.getArgument(4) and type = OsslLibContextIO() + // TODO: arg 5 propq? + } + + override DataFlow::Node getOutput(IOType type) { + result.asDefiningArgument() = this.getArgument(0) and type = ContextIO() + } + + override OperationStepType getStepType() { result = FinalStep() } +} + +/** + * An instance of a signature operation. + * This is an OpenSSL specific class that extends the base SignatureOperationInstance. + */ +class OpenSslSignatureOperationInstance extends Crypto::SignatureOperationInstance instanceof SignatureFinalOperation { override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { super.getPrimaryAlgorithmValueConsumer() = result @@ -217,7 +649,7 @@ class EvpSignatureOperationInstance extends Crypto::SignatureOperationInstance i * Signing, verification or unknown. */ override Crypto::KeyOperationSubtype getKeyOperationSubtype() { - // TODO: if this KeyOperationSubtype does not match initialization call's KeyOperationSubtype then we found a bug + // NOTE: if this KeyOperationSubtype does not match initialization call's KeyOperationSubtype then we found a bug if super.getTarget().getName().toLowerCase().matches("%sign%") then result instanceof Crypto::TSignMode else @@ -227,14 +659,70 @@ class EvpSignatureOperationInstance extends Crypto::SignatureOperationInstance i } override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { - // TODO: some signing operations may have explicit nonce generators - none() + // some signing operations may have explicit nonce generators + super.getDominatingInitializersToStep(IVorNonceIO()).getInput(IVorNonceIO()) = result + } + + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { + super.getDominatingInitializersToStep(KeyIO()).getInput(KeyIO()) = result + } + + override Crypto::ConsumerInputDataFlowNode getSignatureConsumer() { + super.getDominatingInitializersToStep(SignatureIO()).getInput(SignatureIO()) = result + } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + super.getOutputStepFlowingToStep(SignatureIO()).getOutput(SignatureIO()) = result + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + super.getDominatingInitializersToStep(PlaintextIO()).getInput(PlaintextIO()) = result + } + + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + super + .getDominatingInitializersToStep(HashAlgorithmIO()) + .getAlgorithmValueConsumerForInput(HashAlgorithmIO()) = result + or + // Handle cases where the hash is set through the primary algorithm + // RSA-SHA256 for example + // NOTE: assuming the hash would not be overridden, or if it is it is undefined + // i.e., if the above dominating initializer exists and the primary algorithm + // specifies a hash, consider both valid hash AVCs. + // TODO: can this behavior be build into the get dominating initializers? + super.getPrimaryAlgorithmValueConsumer() = result and + exists(OpenSslAlgorithmInstance i | + i.getAvc() = result and i instanceof Crypto::HashAlgorithmInstance + ) + } + + override predicate hasHashAlgorithmConsumer() { + exists(super.getDominatingInitializersToStep(HashAlgorithmIO())) + } +} + +/** + * A class for signature or MAC operation instances. + * This is an OpenSSL specific class that extends the base SignatureOrMacOperationInstance. + */ +class OpenSslSignatureOrMacOperationInstance extends Crypto::SignatureOrMacOperationInstance instanceof SignatureOrMacFinalOperation +{ + override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { + super.getPrimaryAlgorithmValueConsumer() = result } /** - * Keys provided in the initialization call or in a context are found by this method. - * Keys in explicit arguments are found by overridden methods in extending classes. + * Signing, verification or unknown. */ + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { + result instanceof Crypto::TSignMode or result instanceof Crypto::TMacMode + } + + override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { + // some signing operations may have explicit nonce generators + super.getDominatingInitializersToStep(IVorNonceIO()).getInput(IVorNonceIO()) = result + } + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { super.getDominatingInitializersToStep(KeyIO()).getInput(KeyIO()) = result } @@ -247,14 +735,24 @@ class EvpSignatureOperationInstance extends Crypto::SignatureOperationInstance i super.getDominatingInitializersToStep(PlaintextIO()).getInput(PlaintextIO()) = result } - /** - * TODO: only signing operations for now, change when verificaiton is added - */ - override Crypto::ConsumerInputDataFlowNode getSignatureConsumer() { none() } - override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { super .getDominatingInitializersToStep(HashAlgorithmIO()) .getAlgorithmValueConsumerForInput(HashAlgorithmIO()) = result + or + // Handle cases where the hash is set through the primary algorithm + // RSA-SHA256 for example + // NOTE: assuming the hash would not be overridden, or if it is it is undefined + // i.e., if the above dominating initializer exists and the primary algorithm + // specifies a hash, consider both valid hash AVCs. + // TODO: can this behavior be build into the get dominating initializers? + super.getPrimaryAlgorithmValueConsumer() = result and + exists(OpenSslAlgorithmInstance i | + i.getAvc() = result and i instanceof Crypto::HashAlgorithmInstance + ) + } + + override predicate hasHashAlgorithmConsumer() { + exists(super.getDominatingInitializersToStep(HashAlgorithmIO())) } } diff --git a/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll b/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll index e5de44b396d..093d03ee002 100644 --- a/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll +++ b/cpp/ql/lib/experimental/semmle/code/cpp/rangeanalysis/RangeAnalysis.qll @@ -298,10 +298,11 @@ private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, bool else if strictlyNegative(x) then upper = true and delta = -1 - else - if negative(x) - then upper = true and delta = 0 - else none() + else ( + negative(x) and + upper = true and + delta = 0 + ) ) or exists(Operand x | @@ -321,10 +322,11 @@ private predicate boundFlowStep(Instruction i, NonPhiOperand op, int delta, bool else if strictlyNegative(x) then upper = false and delta = 1 - else - if negative(x) - then upper = false and delta = 0 - else none() + else ( + negative(x) and + upper = false and + delta = 0 + ) ) or i.(RemInstruction).getRightOperand() = op and positive(op) and delta = -1 and upper = true @@ -410,7 +412,7 @@ private predicate boundFlowStepPhi( or exists(IRGuardCondition guard, boolean testIsTrue | guard = boundFlowCond(valueNumberOfOperand(op2), op1, delta, upper, testIsTrue) and - guard.controlsEdge(op2.getPredecessorBlock(), op2.getUse().getBlock(), testIsTrue) and + guard.controlsBranchEdge(op2.getPredecessorBlock(), op2.getUse().getBlock(), testIsTrue) and reason = TCondReason(guard) ) } diff --git a/cpp/ql/lib/ext/ComPtr.model.yml b/cpp/ql/lib/ext/ComPtr.model.yml new file mode 100644 index 00000000000..49be2c49a4b --- /dev/null +++ b/cpp/ql/lib/ext/ComPtr.model.yml @@ -0,0 +1,31 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(T *)", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(const ComPtr &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(ComPtr &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "As", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "AsIID", "", "", "Argument[-1]", "Argument[*1]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "AsWeak", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "Attach", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(REFIID,void **)", "", "Argument[-1].Element[@]", "Argument[**@1]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "Detach", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "Get", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "GetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "ReleaseAndGetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator&", "", "", "Argument[-1]", "ReturnValue.Element", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator->", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(T *)", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(T *)", "", "Argument[*@0]", "ReturnValue[*].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(U *)", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(U *)", "", "Argument[*@0]", "ReturnValue[*].Element[@]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(const ComPtr &)", "", "Argument[*0]", "Argument[-1]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(const ComPtr &)", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(ComPtr &&)", "", "Argument[*0]", "Argument[-1]", "value", "manual"] + - ["Microsoft::WRL", "ComPtr", True, "operator=", "(ComPtr &&)", "", "Argument[*0]", "ReturnValue[*]", "value", "manual"] diff --git a/cpp/ql/lib/ext/ComPtrRef.model.yml b/cpp/ql/lib/ext/ComPtrRef.model.yml new file mode 100644 index 00000000000..710d9e6def3 --- /dev/null +++ b/cpp/ql/lib/ext/ComPtrRef.model.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["Microsoft::WRL::Details", "ComPtrRef", True, "ComPtrRef", "", "", "Argument[*0]", "Argument[-1].Element[@]", "value", "manual"] + - ["Microsoft::WRL::Details", "ComPtrRef", True, "GetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"] + # TODO: We cannot yet model https://learn.microsoft.com/en-us/cpp/cppcx/wrl/comptrref-class?view=msvc-170#operator-interfacetype-star-star + - ["Microsoft::WRL::Details", "ComPtrRef", True, "operator*", "", "", "Argument[-1].Element[@]", "ReturnValue[*@]", "value", "manual"] + # TODO: We cannot yet model https://learn.microsoft.com/en-us/cpp/cppcx/wrl/comptrref-class?view=msvc-170#operator-t-star + - ["Microsoft::WRL::Details", "ComPtrRef", True, "operator void**", "", "", "Argument[-1].Element[@]", "ReturnValue[**@]", "value", "manual"] + - ["Microsoft::WRL::Details", "ComPtrRef", True, "ReleaseAndGetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**@]", "value", "manual"] \ No newline at end of file diff --git a/cpp/ql/lib/ext/cctype.model.yml b/cpp/ql/lib/ext/cctype.model.yml new file mode 100644 index 00000000000..d5fa3861c05 --- /dev/null +++ b/cpp/ql/lib/ext/cctype.model.yml @@ -0,0 +1,9 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["", "", False, "tolower", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["std", "", False, "tolower", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["", "", False, "toupper", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["std", "", False, "toupper", "", "", "Argument[0]", "ReturnValue", "taint", "manual"] \ No newline at end of file diff --git a/cpp/ql/lib/ext/iconv.model.yml b/cpp/ql/lib/ext/iconv.model.yml new file mode 100644 index 00000000000..8db5a65841b --- /dev/null +++ b/cpp/ql/lib/ext/iconv.model.yml @@ -0,0 +1,7 @@ +extensions: + - addsTo: + pack: codeql/cpp-all + extensible: summaryModel + data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance + - ["", "", False, "iconv", "", "", "Argument[**1]", "Argument[**3]", "value", "manual"] + \ No newline at end of file diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 7c1fb8aad1c..8b211353323 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.4.1-dev +version: 6.0.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Concept.qll b/cpp/ql/lib/semmle/code/cpp/Concept.qll index 1770c1965ed..6e66bca9823 100644 --- a/cpp/ql/lib/semmle/code/cpp/Concept.qll +++ b/cpp/ql/lib/semmle/code/cpp/Concept.qll @@ -198,7 +198,7 @@ class ConceptIdExpr extends Expr, @concept_id { final Locatable getATemplateArgumentKind() { result = this.getTemplateArgumentKind(_) } /** - * Gets the `i`th template argument passed to the concept. + * Gets template argument at index `index` passed to the concept, if any. * * For example, if: * ```cpp @@ -219,7 +219,7 @@ class ConceptIdExpr extends Expr, @concept_id { } /** - * Gets the kind of the `i`th template argument value passed to the concept. + * Gets the kind of the template argument value at index `index` passed to the concept, if any. * * For example, if: * ```cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Declaration.qll b/cpp/ql/lib/semmle/code/cpp/Declaration.qll index cedacca4dfe..6f791234b63 100644 --- a/cpp/ql/lib/semmle/code/cpp/Declaration.qll +++ b/cpp/ql/lib/semmle/code/cpp/Declaration.qll @@ -223,8 +223,8 @@ class Declaration extends Locatable, @declaration { final Locatable getATemplateArgumentKind() { result = this.getTemplateArgumentKind(_) } /** - * Gets the `i`th template argument used to instantiate this declaration from a - * template. + * Gets the template argument at index `index` used to instantiate this declaration from a + * template, if any. * * For example: * @@ -245,9 +245,9 @@ class Declaration extends Locatable, @declaration { } /** - * Gets the `i`th template argument value used to instantiate this declaration - * from a template. When called on a template, this will return the `i`th template - * parameter value if it exists. + * Gets the template argument value at index `index` used to instantiate this declaration + * from a template. When called on a template, this will return the template + * parameter value at index `index` if it exists. * * For example: * diff --git a/cpp/ql/lib/semmle/code/cpp/Element.qll b/cpp/ql/lib/semmle/code/cpp/Element.qll index 1cf75aa8a84..b30503d2c94 100644 --- a/cpp/ql/lib/semmle/code/cpp/Element.qll +++ b/cpp/ql/lib/semmle/code/cpp/Element.qll @@ -87,6 +87,7 @@ class ElementBase extends @element { */ class Element extends ElementBase { /** Gets the primary file where this element occurs. */ + pragma[nomagic] File getFile() { result = this.getLocation().getFile() } /** diff --git a/cpp/ql/lib/semmle/code/cpp/NameQualifiers.qll b/cpp/ql/lib/semmle/code/cpp/NameQualifiers.qll index 12434f17f01..2efca72d098 100644 --- a/cpp/ql/lib/semmle/code/cpp/NameQualifiers.qll +++ b/cpp/ql/lib/semmle/code/cpp/NameQualifiers.qll @@ -144,14 +144,14 @@ class NameQualifiableElement extends Element, @namequalifiableelement { class NameQualifyingElement extends Element, @namequalifyingelement { /** * Gets a name qualifier for which this is the qualifying namespace or - * user-defined type. For example: class `X` is the + * user-defined type, or decltype. For example: class `X` is the * `NameQualifyingElement` and `X::` is the `NameQualifier`. */ NameQualifier getANameQualifier() { namequalifiers(unresolveElement(result), _, underlyingElement(this), _) } - /** Gets the name of this namespace or user-defined type. */ + /** Gets the name of this namespace, user-defined type, or decltype. */ string getName() { none() } } diff --git a/cpp/ql/lib/semmle/code/cpp/PchFile.qll b/cpp/ql/lib/semmle/code/cpp/PchFile.qll new file mode 100644 index 00000000000..6522edf6593 --- /dev/null +++ b/cpp/ql/lib/semmle/code/cpp/PchFile.qll @@ -0,0 +1,26 @@ +/** + * Provides the `PchFile` class representing precompiled header (PCH) files created and + * used during the build process. + */ + +import semmle.code.cpp.File + +/** + * A precompiled header (PCH) file created during the build process. + */ +class PchFile extends @pch { + /** + * Gets a textual representation of this element. + */ + string toString() { result = "PCH for " + this.getHeaderFile() } + + /** + * Gets the header file from which the PCH file was created. + */ + File getHeaderFile() { pch_creations(this, _, result) } + + /** + * Gets a source file that includes the PCH. + */ + File getAUse() { pch_uses(this, _, result) } +} diff --git a/cpp/ql/lib/semmle/code/cpp/Type.qll b/cpp/ql/lib/semmle/code/cpp/Type.qll index 35b56882d7b..d9a61865c96 100644 --- a/cpp/ql/lib/semmle/code/cpp/Type.qll +++ b/cpp/ql/lib/semmle/code/cpp/Type.qll @@ -1146,7 +1146,7 @@ class DerivedType extends Type, @derivedtype { * decltype(a) b; * ``` */ -class Decltype extends Type { +class Decltype extends Type, NameQualifyingElement { Decltype() { decltypes(underlyingElement(this), _, 0, _, _) } override string getAPrimaryQlClass() { result = "Decltype" } @@ -1187,7 +1187,7 @@ class Decltype extends Type { override string toString() { result = "decltype(...)" } - override string getName() { none() } + override string getName() { result = "decltype(...)" } override int getSize() { result = this.getBaseType().getSize() } @@ -1247,7 +1247,7 @@ class TypeofType extends Type { override string toString() { result = "typeof(...)" } - override string getName() { none() } + override string getName() { result = "typeof(...)" } override int getSize() { result = this.getBaseType().getSize() } @@ -1311,8 +1311,6 @@ class TypeofTypeType extends TypeofType { Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) } override string getAPrimaryQlClass() { result = "TypeofTypeType" } - - override string toString() { result = "typeof(...)" } } /** @@ -1394,7 +1392,7 @@ class IntrinsicTransformedType extends Type { override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() } - override string getName() { none() } + override string getName() { result = this.getIntrinsicName() + "(...)" } override int getSize() { result = this.getBaseType().getSize() } diff --git a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll index 51d2e294b36..023ce09c5c1 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/Printf.qll @@ -877,7 +877,7 @@ class FormatLiteral extends Literal instanceof StringLiteral { } /** - * Gets the char type required by the nth conversion specifier. + * Gets the char type required by the `n`th conversion specifier. * - in the base case this is the default for the formatting function * (e.g. `char` for `printf`, `char` or `wchar_t` for `wprintf`). * - the `%C` format character reverses wideness. @@ -922,7 +922,7 @@ class FormatLiteral extends Literal instanceof StringLiteral { } /** - * Gets the string type required by the nth conversion specifier. + * Gets the string type required by the `n`th conversion specifier. * - in the base case this is the default for the formatting function * (e.g. `char *` for `printf`, `char *` or `wchar_t *` for `wprintf`). * - the `%S` format character reverses wideness on some platforms. diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll index 424e615f3ea..a8a4b867ba6 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/Dominance.qll @@ -101,7 +101,7 @@ predicate postDominates(ControlFlowNode postDominator, ControlFlowNode node) { */ /** - * Holds if `dominator` is an immediate dominator of `node` in the control-flow + * Holds if `dom` is an immediate dominator of `node` in the control-flow * graph of basic blocks. */ predicate bbIDominates(BasicBlock dom, BasicBlock node) = @@ -117,7 +117,7 @@ private predicate bb_predecessor(BasicBlock succ, BasicBlock pred) { bb_successo private predicate bb_exit(ExitBasicBlock exit) { any() } /** - * Holds if `postDominator` is an immediate post-dominator of `node` in the control-flow + * Holds if `pDom` is an immediate post-dominator of `node` in the control-flow * graph of basic blocks. */ predicate bbIPostDominates(BasicBlock pDom, BasicBlock node) = diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll index 533df517af5..d5287494df9 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll @@ -3,12 +3,438 @@ * flow elements controlled by those guards. */ -import cpp +import cpp as Cpp import semmle.code.cpp.ir.IR +private import codeql.util.Void +private import codeql.controlflow.Guards as SharedGuards private import semmle.code.cpp.ir.ValueNumbering private import semmle.code.cpp.ir.implementation.raw.internal.TranslatedExpr private import semmle.code.cpp.ir.implementation.raw.internal.InstructionTag +private class BasicBlock = IRCfg::BasicBlock; + +/** + * INTERNAL: Do not use. + */ +module GuardsInput implements SharedGuards::InputSig { + private import cpp as Cpp + + class NormalExitNode = ExitFunctionInstruction; + + class AstNode = Instruction; + + /** The `Guards` library uses `Instruction`s as expressions. */ + class Expr extends Instruction { + Instruction getControlFlowNode() { result = this } + + IRCfg::BasicBlock getBasicBlock() { result = this.getBlock() } + } + + /** + * The constant values that can be inferred. + */ + class ConstantValue = Void; + + private class EqualityExpr extends CompareInstruction { + EqualityExpr() { + this instanceof CompareEQInstruction + or + this instanceof CompareNEInstruction + } + + boolean getPolarity() { + result = true and + this instanceof CompareEQInstruction + or + result = false and + this instanceof CompareNEInstruction + } + } + + /** A constant expression. */ + abstract class ConstantExpr extends Expr { + /** Holds if this expression is the null constant. */ + predicate isNull() { none() } + + /** Holds if this expression is a boolean constant. */ + boolean asBooleanValue() { none() } + + /** Holds if this expression is an integer constant. */ + int asIntegerValue() { none() } + + /** + * Holds if this expression is a C/C++ specific constant value. + * This currently never holds in C/C++. + */ + ConstantValue asConstantValue() { none() } + } + + private class NullConstant extends ConstantExpr instanceof ConstantInstruction { + NullConstant() { + this.getValue() = "0" and + this.getResultIRType() instanceof IRAddressType + } + + override predicate isNull() { any() } + } + + private class BooleanConstant extends ConstantExpr instanceof ConstantInstruction { + BooleanConstant() { this.getResultIRType() instanceof IRBooleanType } + + override boolean asBooleanValue() { + super.getValue() = "0" and + result = false + or + super.getValue() = "1" and + result = true + } + } + + private class IntegerConstant extends ConstantExpr { + int value; + + IntegerConstant() { + this.(ConstantInstruction).getValue().toInt() = value and + this.getResultIRType() instanceof IRIntegerType + or + // In order to have an integer constant for a switch case + // we misuse the first instruction (which is always a NoOp instruction) + // as a constant with the switch case's value. + // Even worse, since we need a case range to generate an `TIntRange` + // guard value we must ensure that there exists `ConstantExpr`s whose + // integer value is the end-points. So we let this constant expression + // have both end-point values. Luckily, these `NoOp` instructions do not + // interact with SSA in any way. So this should not break anything. + exists(CaseEdge edge | this = any(SwitchInstruction switch).getSuccessor(edge) | + value = edge.getMaxValue().toInt() + or + value = edge.getMinValue().toInt() + ) + } + + override int asIntegerValue() { result = value } + } + + private predicate nonNullExpr(Instruction i) { + i instanceof VariableAddressInstruction + or + i.(PointerConstantInstruction).getValue() != "0" + or + i instanceof TypeidInstruction + or + nonNullExpr(i.(FieldAddressInstruction).getObjectAddress()) + or + nonNullExpr(i.(PointerAddInstruction).getLeft()) + or + nonNullExpr(i.(CopyInstruction).getSourceValue()) + or + nonNullExpr(i.(ConvertInstruction).getUnary()) + or + nonNullExpr(i.(CheckedConvertOrThrowInstruction).getUnary()) + or + nonNullExpr(i.(CompleteObjectAddressInstruction).getUnary()) + or + nonNullExpr(i.(InheritanceConversionInstruction).getUnary()) + or + nonNullExpr(i.(BitOrInstruction).getAnInput()) + } + + /** + * An expression that is guaranteed to not be `null`. + */ + class NonNullExpr extends Expr { + NonNullExpr() { nonNullExpr(this) } + } + + /** A `case` in a `switch` instruction. */ + class Case extends Expr { + SwitchInstruction switch; + SwitchEdge edge; + + Case() { switch.getSuccessor(edge) = this } + + /** + * Gets the edge for which control flows from the `Switch` instruction to + * the target case. + */ + SwitchEdge getEdge() { result = edge } + + /** + * Holds if this case takes control-flow from `bb1` to `bb2` when + * the case matches the scrutinee. + */ + predicate matchEdge(BasicBlock bb1, BasicBlock bb2) { + switch.getBlock() = bb1 and + this.getBasicBlock() = bb2 + } + + /** + * Holds if case takes control-flow from `bb1` to `bb2` when the + * case does not match the scrutinee. + * + * This predicate never holds for C/C++. + */ + predicate nonMatchEdge(BasicBlock bb1, BasicBlock bb2) { none() } + + /** + * Gets the scrutinee expression. + */ + Expr getSwitchExpr() { result = switch.getExpression() } + + /** + * Holds if this case is the default case. + */ + predicate isDefaultCase() { edge.isDefault() } + + /** + * Gets the constant expression of this case. + */ + ConstantExpr asConstantCase() { + // Note: This only has a value if there is a unique value for the case. + // So the will not be a result when using the GCC case range extension. + // Instead, we model these using the `LogicInput_v1::rangeGuard` predicate. + result = this and exists(this.getEdge().getValue()) + } + } + + abstract private class BinExpr extends Expr instanceof BinaryInstruction { + Expr getAnOperand() { result = super.getAnInput() } + } + + /** + * A bitwise "AND" expression. + * + * This does not include logical AND expressions since these are desugared as + * part of IR generation. + */ + class AndExpr extends BinExpr instanceof BitAndInstruction { } + + /** + * A bitwise "OR" expression. + * + * This does not include logical OR expressions since these are desugared as + * part of IR generation. + */ + class OrExpr extends BinExpr instanceof BitOrInstruction { } + + /** A (bitwise or logical) "NOT" expression. */ + class NotExpr extends Expr instanceof UnaryInstruction { + NotExpr() { + this instanceof LogicalNotInstruction + or + this instanceof BitComplementInstruction + } + + /** Gets the operand of this expression. */ + Expr getOperand() { result = super.getUnary() } + } + + private predicate isBoolToIntConversion(ConvertInstruction convert, Instruction unary) { + convert.getUnary() = unary and + unary.getResultIRType() instanceof IRBooleanType and + convert.getResultIRType() instanceof IRIntegerType + } + + /** + * A value preserving expression. + */ + class IdExpr extends Expr { + IdExpr() { + this instanceof CopyInstruction + or + not isBoolToIntConversion(this, _) and + this instanceof ConvertInstruction + or + this instanceof InheritanceConversionInstruction + } + + /** Get the child expression that defines the value of this expression. */ + Expr getEqualChildExpr() { + result = this.(CopyInstruction).getSourceValue() + or + result = this.(ConvertInstruction).getUnary() + or + result = this.(InheritanceConversionInstruction).getUnary() + } + } + + /** + * Holds if `eqtest` tests the equality (or inequality) of `left` and + * `right.` + * + * If `polarity` is `true` then `eqtest` is an equality test, and otherwise + * `eqtest` is an inequality test. + */ + pragma[nomagic] + predicate equalityTest(Expr eqtest, Expr left, Expr right, boolean polarity) { + exists(EqualityExpr eq | eqtest = eq | + eq.getLeft() = left and + eq.getRight() = right and + polarity = eq.getPolarity() + ) + } + + /** + * A conditional expression (i.e., `b ? e1 : e2`). This expression is desugared + * as part of IR generation. + */ + class ConditionalExpr extends Expr { + ConditionalExpr() { none() } + + /** Gets the condition of this conditional expression. */ + Expr getCondition() { none() } + + /** Gets the true branch of this conditional expression. */ + Expr getThen() { none() } + + /** Gets the false branch of this conditional expression. */ + Expr getElse() { none() } + } + + private import semmle.code.cpp.dataflow.new.DataFlow::DataFlow as DataFlow + private import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate as Private + + class Parameter = Cpp::Parameter; + + /** + * A (direct) parameter position. The value `-1` represents the position of + * the implicit `this` parameter. + */ + private int parameterPosition() { result in [-1, any(Cpp::Parameter p).getIndex()] } + + /** A parameter position represented by an integer. */ + class ParameterPosition extends int { + ParameterPosition() { this = parameterPosition() } + } + + /** An argument position represented by an integer. */ + class ArgumentPosition extends int { + ArgumentPosition() { this = parameterPosition() } + } + + /** Holds if arguments at position `apos` match parameters at position `ppos`. */ + overlay[caller?] + pragma[inline] + predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } + + final private class FinalMethod = Cpp::Function; + + /** + * A non-overridable function. + * + * This function is non-overridable either because it is not a member function, or + * because it is a final member function. + */ + class NonOverridableMethod extends FinalMethod { + NonOverridableMethod() { + not this instanceof Cpp::MemberFunction + or + exists(Cpp::MemberFunction mf | this = mf | + not mf.isVirtual() + or + mf.isFinal() + ) + } + + /** Gets the `Parameter` at `pos` of this function, if any. */ + Parameter getParameter(ParameterPosition ppos) { super.getParameter(ppos) = result } + + /** Gets an expression returned from this function. */ + GuardsInput::Expr getAReturnExpr() { + exists(StoreInstruction store | + // A write to the `IRVariable` which represents the return value. + store.getDestinationAddress().(VariableAddressInstruction).getIRVariable() instanceof + IRReturnVariable and + store.getEnclosingFunction() = this and + result = store + ) + } + } + + private predicate nonOverridableMethodCall(CallInstruction call, NonOverridableMethod m) { + call.getStaticCallTarget() = m + } + + /** + * A call to a `NonOverridableMethod`. + */ + class NonOverridableMethodCall extends GuardsInput::Expr instanceof CallInstruction { + NonOverridableMethodCall() { nonOverridableMethodCall(this, _) } + + /** Gets the function that is called. */ + NonOverridableMethod getMethod() { nonOverridableMethodCall(this, result) } + + /** Gets the argument at `apos`, if any. */ + GuardsInput::Expr getArgument(ArgumentPosition apos) { result = super.getArgument(apos) } + } +} + +private module GuardsImpl = SharedGuards::Make; + +private module LogicInput_v1 implements GuardsImpl::LogicInputSig { + private import semmle.code.cpp.dataflow.new.DataFlow::DataFlow::Ssa + + final private class FinalBaseSsaVariable = Definition; + + class SsaDefinition extends FinalBaseSsaVariable { + GuardsInput::Expr getARead() { result = this.getAUse().getDef() } + } + + class SsaExplicitWrite extends SsaDefinition instanceof ExplicitDefinition { + GuardsInput::Expr getValue() { result = super.getAssignedInstruction() } + } + + class SsaPhiDefinition extends SsaDefinition instanceof PhiNode { + predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { + super.hasInputFromBlock(inp, bb) + } + } + + class SsaParameterInit extends SsaDefinition { + SsaParameterInit() { this.isParameterDefinition(_) } + + GuardsInput::Parameter getParameter() { this.isParameterDefinition(result) } + } + + predicate additionalImpliesStep( + GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 + ) { + // The `ConditionalBranch` instruction is the instruction for which there are + // conditional successors out of. However, the condition that controls + // which conditional successor is taken is given by the condition of the + // `ConditionalBranch` instruction. So this step either needs to be here, + // or we need `ConditionalBranch` instructions to be `IdExpr`s. Modeling + // them as `IdExpr`s would be a bit weird since the result type is + // `IRVoidType`. Including them here is fine as long as `ConditionalBranch` + // instructions cannot be assigned to SSA variables (which they cannot + // since they produce no value). + g1.(ConditionalBranchInstruction).getCondition() = g2 and + v1.asBooleanValue() = v2.asBooleanValue() + } + + predicate rangeGuard( + GuardsImpl::PreGuard guard, GuardValue val, GuardsInput::Expr e, int k, boolean upper + ) { + exists(SwitchInstruction switch, string minValue, string maxValue | + switch.getSuccessor(EdgeKind::caseEdge(minValue, maxValue)) = guard and + e = switch.getExpression() and + minValue != maxValue and + val.asBooleanValue() = true + | + upper = false and + k = minValue.toInt() + or + upper = true and + k = maxValue.toInt() + ) + } +} + +class GuardValue = GuardsImpl::GuardValue; + +/** INTERNAL: Don't use. */ +module Guards_v1 = GuardsImpl::Logic; + /** * Holds if `block` consists of an `UnreachedInstruction`. * @@ -21,56 +447,49 @@ private predicate isUnreachedBlock(IRBlock block) { block.getFirstInstruction() instanceof UnreachedInstruction } -private newtype TAbstractValue = - TBooleanValue(boolean b) { b = true or b = false } or - TMatchValue(CaseEdge c) - /** + * DEPRECATED: Use `GuardValue` instead. + * * An abstract value. This is either a boolean value, or a `switch` case. */ -abstract class AbstractValue extends TAbstractValue { - /** Gets an abstract value that represents the dual of this value, if any. */ - abstract AbstractValue getDualValue(); +deprecated class AbstractValue extends GuardValue { } - /** Gets a textual representation of this abstract value. */ - abstract string toString(); -} +/** + * DEPRECATED: Use `GuardValue` instead. + * + * A Boolean value. + */ +deprecated class BooleanValue extends AbstractValue { + BooleanValue() { exists(this.asBooleanValue()) } -/** A Boolean value. */ -class BooleanValue extends AbstractValue, TBooleanValue { /** Gets the underlying Boolean value. */ - boolean getValue() { this = TBooleanValue(result) } - - override BooleanValue getDualValue() { result.getValue() = this.getValue().booleanNot() } - - override string toString() { result = this.getValue().toString() } + boolean getValue() { result = this.asBooleanValue() } } -/** A value that represents a match against a specific `switch` case. */ -class MatchValue extends AbstractValue, TMatchValue { +/** + * DEPRECATED: Use `GuardValue` instead. + * + * A value that represents a match against a specific `switch` case. + */ +deprecated class MatchValue extends AbstractValue { + MatchValue() { exists(this.asIntValue()) } + /** Gets the case. */ - CaseEdge getCase() { this = TMatchValue(result) } - - override MatchValue getDualValue() { - // A `MatchValue` has no dual. - none() - } - - override string toString() { result = this.getCase().toString() } + CaseEdge getCase() { result.getValue().toInt() = this.asIntValue() } } /** * A Boolean condition in the AST that guards one or more basic blocks. This includes * operands of logical operators but not switch statements. */ -abstract private class GuardConditionImpl extends Expr { +private class GuardConditionImpl extends Cpp::Element { /** * Holds if this condition controls `controlled`, meaning that `controlled` is only * entered if the value of this condition is `v`. * * For details on what "controls" mean, see the QLDoc for `controls`. */ - abstract predicate valueControls(BasicBlock controlled, AbstractValue v); + abstract predicate valueControls(Cpp::BasicBlock controlled, GuardValue v); /** * Holds if this condition controls `controlled`, meaning that `controlled` is only @@ -98,8 +517,22 @@ abstract private class GuardConditionImpl extends Expr { * being short-circuited) then it will only control blocks dominated by the * true (for `&&`) or false (for `||`) branch. */ - final predicate controls(BasicBlock controlled, boolean testIsTrue) { - this.valueControls(controlled, any(BooleanValue bv | bv.getValue() = testIsTrue)) + final predicate controls(Cpp::BasicBlock controlled, boolean testIsTrue) { + this.valueControls(controlled, any(GuardValue bv | bv.asBooleanValue() = testIsTrue)) + } + + /** + * Holds if the control-flow edge `(pred, succ)` may be taken only if + * the value of this condition is `v`. + */ + abstract predicate valueControlsEdge(Cpp::BasicBlock pred, Cpp::BasicBlock succ, GuardValue v); + + /** + * Holds if the control-flow edge `(pred, succ)` may be taken only if + * this the value of this condition is `testIsTrue`. + */ + final predicate controlsEdge(Cpp::BasicBlock pred, Cpp::BasicBlock succ, boolean testIsTrue) { + this.valueControlsEdge(pred, succ, any(GuardValue bv | bv.asBooleanValue() = testIsTrue)) } /** @@ -108,7 +541,9 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue); + abstract predicate comparesLt( + Cpp::Expr left, Cpp::Expr right, int k, boolean isLessThan, boolean testIsTrue + ); /** * Holds if (determined by this guard) `left < right + k` must be `isLessThan` in `block`. @@ -116,7 +551,9 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan); + abstract predicate ensuresLt( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean isLessThan + ); /** * Holds if (determined by this guard) `e < k` evaluates to `isLessThan` if @@ -124,7 +561,7 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value); + abstract predicate comparesLt(Cpp::Expr e, int k, boolean isLessThan, GuardValue value); /** * Holds if (determined by this guard) `e < k` must be `isLessThan` in `block`. @@ -132,7 +569,7 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan); + abstract predicate ensuresLt(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean isLessThan); /** * Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this @@ -145,7 +582,9 @@ abstract private class GuardConditionImpl extends Expr { * necessarily integer). */ pragma[inline] - abstract predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue); + abstract predicate comparesEq( + Cpp::Expr left, Cpp::Expr right, int k, boolean areEqual, boolean testIsTrue + ); /** * Holds if (determined by this guard) `left == right + k` must be `areEqual` in `block`. @@ -153,7 +592,9 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual); + abstract predicate ensuresEq( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean areEqual + ); /** * Holds if (determined by this guard) `e == k` evaluates to `areEqual` if this expression @@ -166,7 +607,7 @@ abstract private class GuardConditionImpl extends Expr { * necessarily integer). */ pragma[inline] - abstract predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value); + abstract predicate comparesEq(Cpp::Expr e, int k, boolean areEqual, GuardValue value); /** * Holds if (determined by this guard) `e == k` must be `areEqual` in `block`. @@ -174,7 +615,65 @@ abstract private class GuardConditionImpl extends Expr { * ("unary") and a 5-argument ("binary") version of this predicate (see `comparesEq`). */ pragma[inline] - abstract predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual); + abstract predicate ensuresEq(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean areEqual); + + /** + * Holds if (determined by this guard) `left == right + k` must be `areEqual` on the edge from + * `pred` to `succ`. If `areEqual = false` then this implies `left != right + k`. + */ + pragma[inline] + final predicate ensuresEqEdge( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock pred, Cpp::BasicBlock succ, + boolean areEqual + ) { + exists(boolean testIsTrue | + this.comparesEq(left, right, k, areEqual, testIsTrue) and + this.controlsEdge(pred, succ, testIsTrue) + ) + } + + /** + * Holds if (determined by this guard) `e == k` must be `areEqual` on the edge from + * `pred` to `succ`. If `areEqual = false` then this implies `e != k`. + */ + pragma[inline] + final predicate ensuresEqEdge( + Cpp::Expr e, int k, Cpp::BasicBlock pred, Cpp::BasicBlock succ, boolean areEqual + ) { + exists(GuardValue v | + this.comparesEq(e, k, areEqual, v) and + this.valueControlsEdge(pred, succ, v) + ) + } + + /** + * Holds if (determined by this guard) `left < right + k` must be `isLessThan` on the edge from + * `pred` to `succ`. If `isLessThan = false` then this implies `left >= right + k`. + */ + pragma[inline] + final predicate ensuresLtEdge( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock pred, Cpp::BasicBlock succ, + boolean isLessThan + ) { + exists(boolean testIsTrue | + this.comparesLt(left, right, k, isLessThan, testIsTrue) and + this.controlsEdge(pred, succ, testIsTrue) + ) + } + + /** + * Holds if (determined by this guard) `e < k` must be `isLessThan` on the edge from + * `pred` to `succ`. If `isLessThan = false` then this implies `e >= k`. + */ + pragma[inline] + final predicate ensuresLtEdge( + Cpp::Expr e, int k, Cpp::BasicBlock pred, Cpp::BasicBlock succ, boolean isLessThan + ) { + exists(GuardValue v | + this.comparesLt(e, k, isLessThan, v) and + this.valueControlsEdge(pred, succ, v) + ) + } } final class GuardCondition = GuardConditionImpl; @@ -182,13 +681,10 @@ final class GuardCondition = GuardConditionImpl; /** * A binary logical operator in the AST that guards one or more basic blocks. */ -private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl { - GuardConditionFromBinaryLogicalOperator() { - this.(BinaryLogicalOperation).getAnOperand() instanceof GuardCondition - } - - override predicate valueControls(BasicBlock controlled, AbstractValue v) { - exists(BinaryLogicalOperation binop, GuardCondition lhs, GuardCondition rhs | +private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl instanceof Cpp::BinaryLogicalOperation +{ + override predicate valueControls(Cpp::BasicBlock controlled, GuardValue v) { + exists(Cpp::BinaryLogicalOperation binop, GuardCondition lhs, GuardCondition rhs | this = binop and lhs = binop.getLeftOperand() and rhs = binop.getRightOperand() and @@ -197,64 +693,86 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl ) } - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { + override predicate valueControlsEdge(Cpp::BasicBlock pred, Cpp::BasicBlock succ, GuardValue v) { + exists(Cpp::BinaryLogicalOperation binop, GuardCondition lhs, GuardCondition rhs | + this = binop and + lhs = binop.getLeftOperand() and + rhs = binop.getRightOperand() and + lhs.valueControlsEdge(pred, succ, v) and + rhs.valueControlsEdge(pred, succ, v) + ) + } + + pragma[nomagic] + override predicate comparesLt( + Cpp::Expr left, Cpp::Expr right, int k, boolean isLessThan, boolean testIsTrue + ) { exists(boolean partIsTrue, GuardCondition part | - this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) + this.(Cpp::BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) | part.comparesLt(left, right, k, isLessThan, partIsTrue) ) } - override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { - exists(BooleanValue partValue, GuardCondition part | - this.(BinaryLogicalOperation) - .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) + pragma[nomagic] + override predicate comparesLt(Cpp::Expr e, int k, boolean isLessThan, GuardValue value) { + exists(GuardValue partValue, GuardCondition part | + this.(Cpp::BinaryLogicalOperation) + .impliesValue(part, partValue.asBooleanValue(), value.asBooleanValue()) | part.comparesLt(e, k, isLessThan, partValue) ) } pragma[inline] - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { + override predicate ensuresLt( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean isLessThan + ) { exists(boolean testIsTrue | this.comparesLt(left, right, k, isLessThan, testIsTrue) and this.controls(block, testIsTrue) ) } pragma[inline] - override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { - exists(AbstractValue value | + override predicate ensuresLt(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean isLessThan) { + exists(GuardValue value | this.comparesLt(e, k, isLessThan, value) and this.valueControls(block, value) ) } - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { + pragma[nomagic] + override predicate comparesEq( + Cpp::Expr left, Cpp::Expr right, int k, boolean areEqual, boolean testIsTrue + ) { exists(boolean partIsTrue, GuardCondition part | - this.(BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) + this.(Cpp::BinaryLogicalOperation).impliesValue(part, partIsTrue, testIsTrue) | part.comparesEq(left, right, k, areEqual, partIsTrue) ) } pragma[inline] - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { + override predicate ensuresEq( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean areEqual + ) { exists(boolean testIsTrue | this.comparesEq(left, right, k, areEqual, testIsTrue) and this.controls(block, testIsTrue) ) } - override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { - exists(BooleanValue partValue, GuardCondition part | - this.(BinaryLogicalOperation) - .impliesValue(part, partValue.getValue(), value.(BooleanValue).getValue()) + pragma[nomagic] + override predicate comparesEq(Cpp::Expr e, int k, boolean areEqual, GuardValue value) { + exists(GuardValue partValue, GuardCondition part | + this.(Cpp::BinaryLogicalOperation) + .impliesValue(part, partValue.asBooleanValue(), value.asBooleanValue()) | part.comparesEq(e, k, areEqual, partValue) ) } pragma[inline] - override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { - exists(AbstractValue value | + override predicate ensuresEq(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean areEqual) { + exists(GuardValue value | this.comparesEq(e, k, areEqual, value) and this.valueControls(block, value) ) } @@ -266,7 +784,7 @@ private class GuardConditionFromBinaryLogicalOperator extends GuardConditionImpl * predicate does not necessarily hold for binary logical operations like * `&&` and `||`. See the detailed explanation on predicate `controls`. */ -private predicate controlsBlock(IRGuardCondition ir, BasicBlock controlled, AbstractValue v) { +private predicate controlsBlock(IRGuardCondition ir, Cpp::BasicBlock controlled, GuardValue v) { exists(IRBlock irb | ir.valueControls(irb, v) and nonExcludedIRAndBasicBlock(irb, controlled) and @@ -274,6 +792,25 @@ private predicate controlsBlock(IRGuardCondition ir, BasicBlock controlled, Abst ) } +/** + * Holds if `ir` controls the `(pred, succ)` edge, meaning that the edge + * `(pred, succ)` is only taken if the value of this condition is `v`. This + * helper predicate does not necessarily hold for binary logical operations + * like `&&` and `||`. + * See the detailed explanation on predicate `controlsEdge`. + */ +private predicate controlsEdge( + IRGuardCondition ir, Cpp::BasicBlock pred, Cpp::BasicBlock succ, GuardValue v +) { + exists(IRBlock irPred, IRBlock irSucc | + ir.valueControlsBranchEdge(irPred, irSucc, v) and + nonExcludedIRAndBasicBlock(irPred, pred) and + nonExcludedIRAndBasicBlock(irSucc, succ) and + not isUnreachedBlock(irPred) and + not isUnreachedBlock(irSucc) + ) +} + private class GuardConditionFromNotExpr extends GuardConditionImpl { IRGuardCondition ir; @@ -283,20 +820,27 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { // comparison against 0 so it's not included as a normal // `IRGuardCondition`. So to align with user expectations we make that `x` // a `GuardCondition`. - exists(NotExpr notExpr | - this = notExpr.getOperand() and + exists(Cpp::NotExpr notExpr | this = notExpr.getOperand() | ir.getUnconvertedResultExpression() = notExpr + or + ir.(ConditionalBranchInstruction).getCondition().getUnconvertedResultExpression() = notExpr ) } - override predicate valueControls(BasicBlock controlled, AbstractValue v) { + override predicate valueControls(Cpp::BasicBlock controlled, GuardValue v) { // This condition must determine the flow of control; that is, this // node must be a top-level condition. controlsBlock(ir, controlled, v.getDualValue()) } + override predicate valueControlsEdge(Cpp::BasicBlock pred, Cpp::BasicBlock succ, GuardValue v) { + controlsEdge(ir, pred, succ, v.getDualValue()) + } + pragma[inline] - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { + override predicate comparesLt( + Cpp::Expr left, Cpp::Expr right, int k, boolean isLessThan, boolean testIsTrue + ) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -305,7 +849,7 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + override predicate comparesLt(Cpp::Expr e, int k, boolean isLessThan, GuardValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and ir.comparesLt(i.getAUse(), k, isLessThan, value.getDualValue()) @@ -313,7 +857,9 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { + override predicate ensuresLt( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean isLessThan + ) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -323,8 +869,8 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { - exists(Instruction i, AbstractValue value | + override predicate ensuresLt(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean isLessThan) { + exists(Instruction i, GuardValue value | i.getUnconvertedResultExpression() = e and ir.comparesLt(i.getAUse(), k, isLessThan, value.getDualValue()) and this.valueControls(block, value) @@ -332,7 +878,9 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { + override predicate comparesEq( + Cpp::Expr left, Cpp::Expr right, int k, boolean areEqual, boolean testIsTrue + ) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -341,7 +889,9 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { + override predicate ensuresEq( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean areEqual + ) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -351,7 +901,7 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + override predicate comparesEq(Cpp::Expr e, int k, boolean areEqual, GuardValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and ir.comparesEq(i.getAUse(), k, areEqual, value.getDualValue()) @@ -359,8 +909,8 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { } pragma[inline] - override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { - exists(Instruction i, AbstractValue value | + override predicate ensuresEq(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean areEqual) { + exists(Instruction i, GuardValue value | i.getUnconvertedResultExpression() = e and ir.comparesEq(i.getAUse(), k, areEqual, value.getDualValue()) and this.valueControls(block, value) @@ -375,16 +925,28 @@ private class GuardConditionFromNotExpr extends GuardConditionImpl { private class GuardConditionFromIR extends GuardConditionImpl { IRGuardCondition ir; - GuardConditionFromIR() { this = ir.getUnconvertedResultExpression() } + GuardConditionFromIR() { + ir.(InitializeParameterInstruction).getParameter() = this + or + ir.(ConditionalBranchInstruction).getCondition().getUnconvertedResultExpression() = this + or + ir.getUnconvertedResultExpression() = this + } - override predicate valueControls(BasicBlock controlled, AbstractValue v) { + override predicate valueControls(Cpp::BasicBlock controlled, GuardValue v) { // This condition must determine the flow of control; that is, this // node must be a top-level condition. controlsBlock(ir, controlled, v) } + override predicate valueControlsEdge(Cpp::BasicBlock pred, Cpp::BasicBlock succ, GuardValue v) { + controlsEdge(ir, pred, succ, v) + } + pragma[inline] - override predicate comparesLt(Expr left, Expr right, int k, boolean isLessThan, boolean testIsTrue) { + override predicate comparesLt( + Cpp::Expr left, Cpp::Expr right, int k, boolean isLessThan, boolean testIsTrue + ) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -393,7 +955,7 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate comparesLt(Expr e, int k, boolean isLessThan, AbstractValue value) { + override predicate comparesLt(Cpp::Expr e, int k, boolean isLessThan, GuardValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and ir.comparesLt(i.getAUse(), k, isLessThan, value) @@ -401,7 +963,9 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate ensuresLt(Expr left, Expr right, int k, BasicBlock block, boolean isLessThan) { + override predicate ensuresLt( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean isLessThan + ) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -411,8 +975,8 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate ensuresLt(Expr e, int k, BasicBlock block, boolean isLessThan) { - exists(Instruction i, AbstractValue value | + override predicate ensuresLt(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean isLessThan) { + exists(Instruction i, GuardValue value | i.getUnconvertedResultExpression() = e and ir.comparesLt(i.getAUse(), k, isLessThan, value) and this.valueControls(block, value) @@ -420,7 +984,9 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate comparesEq(Expr left, Expr right, int k, boolean areEqual, boolean testIsTrue) { + override predicate comparesEq( + Cpp::Expr left, Cpp::Expr right, int k, boolean areEqual, boolean testIsTrue + ) { exists(Instruction li, Instruction ri | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -429,7 +995,9 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate ensuresEq(Expr left, Expr right, int k, BasicBlock block, boolean areEqual) { + override predicate ensuresEq( + Cpp::Expr left, Cpp::Expr right, int k, Cpp::BasicBlock block, boolean areEqual + ) { exists(Instruction li, Instruction ri, boolean testIsTrue | li.getUnconvertedResultExpression() = left and ri.getUnconvertedResultExpression() = right and @@ -439,7 +1007,7 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate comparesEq(Expr e, int k, boolean areEqual, AbstractValue value) { + override predicate comparesEq(Cpp::Expr e, int k, boolean areEqual, GuardValue value) { exists(Instruction i | i.getUnconvertedResultExpression() = e and ir.comparesEq(i.getAUse(), k, areEqual, value) @@ -447,8 +1015,8 @@ private class GuardConditionFromIR extends GuardConditionImpl { } pragma[inline] - override predicate ensuresEq(Expr e, int k, BasicBlock block, boolean areEqual) { - exists(Instruction i, AbstractValue value | + override predicate ensuresEq(Cpp::Expr e, int k, Cpp::BasicBlock block, boolean areEqual) { + exists(Instruction i, GuardValue value | i.getUnconvertedResultExpression() = e and ir.comparesEq(i.getAUse(), k, areEqual, value) and this.valueControls(block, value) @@ -478,23 +1046,20 @@ private predicate excludeAsControlledInstruction(Instruction instr) { * the `irb` be ignored. */ pragma[nomagic] -private predicate nonExcludedIRAndBasicBlock(IRBlock irb, BasicBlock controlled) { +private predicate nonExcludedIRAndBasicBlock(IRBlock irb, Cpp::BasicBlock controlled) { exists(Instruction instr | instr = irb.getAnInstruction() and - instr.getAst().(ControlFlowNode).getBasicBlock() = controlled and + instr.getAst() = controlled.getANode() and not excludeAsControlledInstruction(instr) ) } /** - * A Boolean condition in the IR that guards one or more basic blocks. - * - * Note that `&&` and `||` don't have an explicit representation in the IR, - * and therefore will not appear as IRGuardConditions. + * A guard. This may be any expression whose value determines subsequent + * control flow. It may also be a switch case, which as a guard is considered + * to evaluate to either true or false depending on whether the case matches. */ -class IRGuardCondition extends Instruction { - Instruction branch; - +final class IRGuardCondition extends Guards_v1::Guard { /* * An `IRGuardCondition` supports reasoning about four different kinds of * relations: @@ -522,119 +1087,12 @@ class IRGuardCondition extends Instruction { * `e1 + k1 == e2 + k2` into canonical the form `e1 == e2 + (k2 - k1)`. */ - IRGuardCondition() { branch = getBranchForCondition(this) } - - /** - * Holds if this condition controls `controlled`, meaning that `controlled` is only - * entered if the value of this condition is `v`. - * - * For details on what "controls" mean, see the QLDoc for `controls`. - */ - predicate valueControls(IRBlock controlled, AbstractValue v) { - // This condition must determine the flow of control; that is, this - // node must be a top-level condition. - this.controlsBlock(controlled, v) - or - exists(IRGuardCondition ne | - this = ne.(LogicalNotInstruction).getUnary() and - ne.valueControls(controlled, v.getDualValue()) - ) - } - - /** - * Holds if this condition controls `controlled`, meaning that `controlled` is only - * entered if the value of this condition is `testIsTrue`. - * - * Illustration: - * - * ``` - * [ (testIsTrue) ] - * [ this ----------------succ ---- controlled ] - * [ | | ] - * [ (testIsFalse) | ------ ... ] - * [ other ] - * ``` - * - * The predicate holds if all paths to `controlled` go via the `testIsTrue` - * edge of the control-flow graph. In other words, the `testIsTrue` edge - * must dominate `controlled`. This means that `controlled` must be - * dominated by both `this` and `succ` (the target of the `testIsTrue` - * edge). It also means that any other edge into `succ` must be a back-edge - * from a node which is dominated by `succ`. - * - * The short-circuit boolean operations have slightly surprising behavior - * here: because the operation itself only dominates one branch (due to - * being short-circuited) then it will only control blocks dominated by the - * true (for `&&`) or false (for `||`) branch. - */ - predicate controls(IRBlock controlled, boolean testIsTrue) { - this.valueControls(controlled, any(BooleanValue bv | bv.getValue() = testIsTrue)) - } - - /** - * Holds if the control-flow edge `(pred, succ)` may be taken only if - * the value of this condition is `v`. - */ - predicate valueControlsEdge(IRBlock pred, IRBlock succ, AbstractValue v) { - pred.getASuccessor() = succ and - this.valueControls(pred, v) - or - succ = this.getBranchSuccessor(v) and - ( - branch.(ConditionalBranchInstruction).getCondition() = this and - branch.getBlock() = pred - or - branch.(SwitchInstruction).getExpression() = this and - branch.getBlock() = pred - ) - } - - /** - * Holds if the control-flow edge `(pred, succ)` may be taken only if - * the value of this condition is `testIsTrue`. - */ - final predicate controlsEdge(IRBlock pred, IRBlock succ, boolean testIsTrue) { - this.valueControlsEdge(pred, succ, any(BooleanValue bv | bv.getValue() = testIsTrue)) - } - - /** - * Gets the block to which `branch` jumps directly when the value of this condition is `v`. - * - * This predicate is intended to help with situations in which an inference can only be made - * based on an edge between a block with multiple successors and a block with multiple - * predecessors. For example, in the following situation, an inference can be made about the - * value of `x` at the end of the `if` statement, but there is no block which is controlled by - * the `if` statement when `x >= y`. - * ``` - * if (x < y) { - * x = y; - * } - * return x; - * ``` - */ - private IRBlock getBranchSuccessor(AbstractValue v) { - branch.(ConditionalBranchInstruction).getCondition() = this and - exists(BooleanValue bv | bv = v | - bv.getValue() = true and - result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getTrueSuccessor() - or - bv.getValue() = false and - result.getFirstInstruction() = branch.(ConditionalBranchInstruction).getFalseSuccessor() - ) - or - exists(SwitchInstruction switch, CaseEdge kind | switch = branch | - switch.getExpression() = this and - result.getFirstInstruction() = switch.getSuccessor(kind) and - kind = v.(MatchValue).getCase() - ) - } - /** Holds if (determined by this guard) `left < right + k` evaluates to `isLessThan` if this expression evaluates to `testIsTrue`. */ pragma[inline] predicate comparesLt(Operand left, Operand right, int k, boolean isLessThan, boolean testIsTrue) { - exists(BooleanValue value | + exists(GuardValue value | compares_lt(valueNumber(this), left, right, k, isLessThan, value) and - value.getValue() = testIsTrue + value.asBooleanValue() = testIsTrue ) } @@ -643,8 +1101,8 @@ class IRGuardCondition extends Instruction { * this expression evaluates to `value`. */ pragma[inline] - predicate comparesLt(Operand op, int k, boolean isLessThan, AbstractValue value) { - compares_lt(valueNumber(this), op, k, isLessThan, value) + predicate comparesLt(Operand op, int k, boolean isLessThan, GuardValue value) { + unary_compares_lt(valueNumber(this), op, k, isLessThan, value) } /** @@ -653,7 +1111,7 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresLt(Operand left, Operand right, int k, IRBlock block, boolean isLessThan) { - exists(AbstractValue value | + exists(GuardValue value | compares_lt(valueNumber(this), left, right, k, isLessThan, value) and this.valueControls(block, value) ) @@ -665,8 +1123,8 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresLt(Operand op, int k, IRBlock block, boolean isLessThan) { - exists(AbstractValue value | - compares_lt(valueNumber(this), op, k, isLessThan, value) and + exists(GuardValue value | + unary_compares_lt(valueNumber(this), op, k, isLessThan, value) and this.valueControls(block, value) ) } @@ -679,9 +1137,9 @@ class IRGuardCondition extends Instruction { predicate ensuresLtEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean isLessThan ) { - exists(AbstractValue value | + exists(GuardValue value | compares_lt(valueNumber(this), left, right, k, isLessThan, value) and - this.valueControlsEdge(pred, succ, value) + this.valueControlsBranchEdge(pred, succ, value) ) } @@ -691,24 +1149,24 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresLtEdge(Operand left, int k, IRBlock pred, IRBlock succ, boolean isLessThan) { - exists(AbstractValue value | - compares_lt(valueNumber(this), left, k, isLessThan, value) and - this.valueControlsEdge(pred, succ, value) + exists(GuardValue value | + unary_compares_lt(valueNumber(this), left, k, isLessThan, value) and + this.valueControlsBranchEdge(pred, succ, value) ) } /** Holds if (determined by this guard) `left == right + k` evaluates to `areEqual` if this expression evaluates to `testIsTrue`. */ pragma[inline] predicate comparesEq(Operand left, Operand right, int k, boolean areEqual, boolean testIsTrue) { - exists(BooleanValue value | + exists(GuardValue value | compares_eq(valueNumber(this), left, right, k, areEqual, value) and - value.getValue() = testIsTrue + value.asBooleanValue() = testIsTrue ) } /** Holds if (determined by this guard) `op == k` evaluates to `areEqual` if this expression evaluates to `value`. */ pragma[inline] - predicate comparesEq(Operand op, int k, boolean areEqual, AbstractValue value) { + predicate comparesEq(Operand op, int k, boolean areEqual, GuardValue value) { unary_compares_eq(valueNumber(this), op, k, areEqual, value) } @@ -718,7 +1176,7 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresEq(Operand left, Operand right, int k, IRBlock block, boolean areEqual) { - exists(AbstractValue value | + exists(GuardValue value | compares_eq(valueNumber(this), left, right, k, areEqual, value) and this.valueControls(block, value) ) @@ -730,7 +1188,7 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresEq(Operand op, int k, IRBlock block, boolean areEqual) { - exists(AbstractValue value | + exists(GuardValue value | unary_compares_eq(valueNumber(this), op, k, areEqual, value) and this.valueControls(block, value) ) @@ -744,9 +1202,9 @@ class IRGuardCondition extends Instruction { predicate ensuresEqEdge( Operand left, Operand right, int k, IRBlock pred, IRBlock succ, boolean areEqual ) { - exists(AbstractValue value | + exists(GuardValue value | compares_eq(valueNumber(this), left, right, k, areEqual, value) and - this.valueControlsEdge(pred, succ, value) + this.valueControlsBranchEdge(pred, succ, value) ) } @@ -756,102 +1214,18 @@ class IRGuardCondition extends Instruction { */ pragma[inline] predicate ensuresEqEdge(Operand op, int k, IRBlock pred, IRBlock succ, boolean areEqual) { - exists(AbstractValue value | + exists(GuardValue value | unary_compares_eq(valueNumber(this), op, k, areEqual, value) and - this.valueControlsEdge(pred, succ, value) + this.valueControlsBranchEdge(pred, succ, value) ) } /** - * Holds if this condition controls `block`, meaning that `block` is only - * entered if the value of this condition is `v`. This helper - * predicate does not necessarily hold for binary logical operations like - * `&&` and `||`. See the detailed explanation on predicate `controls`. + * DEPRECATED: Use `controlsBranchEdge` instead. */ - private predicate controlsBlock(IRBlock controlled, AbstractValue v) { - not isUnreachedBlock(controlled) and - // - // For this block to control the block `controlled` with `testIsTrue` the - // following must hold: Execution must have passed through the test; that - // is, `this` must strictly dominate `controlled`. Execution must have - // passed through the `testIsTrue` edge leaving `this`. - // - // Although "passed through the true edge" implies that - // `getBranchSuccessor(true)` dominates `controlled`, the reverse is not - // true, as flow may have passed through another edge to get to - // `getBranchSuccessor(true)`, so we need to assert that - // `getBranchSuccessor(true)` dominates `controlled` *and* that all - // predecessors of `getBranchSuccessor(true)` are either `this` or - // dominated by `getBranchSuccessor(true)`. - // - // For example, in the following snippet: - // - // if (x) - // controlled; - // false_successor; - // uncontrolled; - // - // `false_successor` dominates `uncontrolled`, but not all of its - // predecessors are `this` (`if (x)`) or dominated by itself. Whereas in - // the following code: - // - // if (x) - // while (controlled) - // also_controlled; - // false_successor; - // uncontrolled; - // - // the block `while (controlled)` is controlled because all of its - // predecessors are `this` (`if (x)`) or (in the case of `also_controlled`) - // dominated by itself. - // - // The additional constraint on the predecessors of the test successor implies - // that `this` strictly dominates `controlled` so that isn't necessary to check - // directly. - exists(IRBlock succ | - succ = this.getBranchSuccessor(v) and - this.hasDominatingEdgeTo(succ) and - succ.dominates(controlled) - ) + deprecated predicate controlsEdge(IRBlock bb1, IRBlock bb2, boolean branch) { + this.controlsBranchEdge(bb1, bb2, branch) } - - /** - * Holds if `(this, succ)` is an edge that dominates `succ`, that is, all other - * predecessors of `succ` are dominated by `succ`. This implies that `this` is the - * immediate dominator of `succ`. - * - * This is a necessary and sufficient condition for an edge to dominate anything, - * and in particular `bb1.hasDominatingEdgeTo(bb2) and bb2.dominates(bb3)` means - * that the edge `(bb1, bb2)` dominates `bb3`. - */ - private predicate hasDominatingEdgeTo(IRBlock succ) { - exists(IRBlock branchBlock | branchBlock = this.getBranchBlock() | - branchBlock.immediatelyDominates(succ) and - branchBlock.getASuccessor() = succ and - forall(IRBlock pred | pred = succ.getAPredecessor() and pred != branchBlock | - succ.dominates(pred) - or - // An unreachable `pred` is vacuously dominated by `succ` since all - // paths from the entry to `pred` go through `succ`. Such vacuous - // dominance is not included in the `dominates` predicate since that - // could cause quadratic blow-up. - not pred.isReachableFromFunctionEntry() - ) - ) - } - - pragma[noinline] - private IRBlock getBranchBlock() { result = branch.getBlock() } -} - -private Instruction getBranchForCondition(Instruction guard) { - result.(ConditionalBranchInstruction).getCondition() = guard - or - result.(SwitchInstruction).getExpression() = guard - or - exists(LogicalNotInstruction cond | - result = getBranchForCondition(cond) and cond.getUnary() = guard - ) } cached @@ -1014,10 +1388,10 @@ private module Cached { */ cached predicate compares_eq( - ValueNumber test, Operand left, Operand right, int k, boolean areEqual, AbstractValue value + ValueNumber test, Operand left, Operand right, int k, boolean areEqual, GuardValue value ) { /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(AbstractValue v | simple_comparison_eq(test, left, right, k, v) | + exists(GuardValue v | simple_comparison_eq(test, left, right, k, v) | areEqual = true and value = v or areEqual = false and value = v.getDualValue() @@ -1032,15 +1406,15 @@ private module Cached { complex_eq(test, left, right, k, areEqual, value) or /* (x is true => (left == right + k)) => (!x is false => (left == right + k)) */ - exists(AbstractValue dual | value = dual.getDualValue() | + exists(GuardValue dual | value = dual.getDualValue() | compares_eq(test.(LogicalNotValueNumber).getUnary(), left, right, k, areEqual, dual) ) or compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), left, right, k, areEqual, value) or - exists(Operand l, BooleanValue bv | + exists(Operand l, GuardValue bv | // 1. test = value -> int(l) = 0 is !bv - unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and + unary_compares_eq(test, l, 0, bv.asBooleanValue().booleanNot(), value) and // 2. l = bv -> left + right is areEqual compares_eq(valueNumber(BooleanInstruction::get(l.getDef())), left, right, k, areEqual, bv) @@ -1057,10 +1431,10 @@ private module Cached { */ cached predicate unary_compares_eq( - ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, GuardValue value ) { /* The simple case where the test *is* the comparison so areEqual = testIsTrue xor eq. */ - exists(AbstractValue v | unary_simple_comparison_eq(test, op, k, v) | + exists(GuardValue v | unary_simple_comparison_eq(test, op, k, v) | areEqual = true and value = v or areEqual = false and value = v.getDualValue() @@ -1069,7 +1443,7 @@ private module Cached { unary_complex_eq(test, op, k, areEqual, value) or /* (x is true => (op == k)) => (!x is false => (op == k)) */ - exists(AbstractValue dual | + exists(GuardValue dual | value = dual.getDualValue() and unary_compares_eq(test.(LogicalNotValueNumber).getUnary(), op, k, areEqual, dual) ) @@ -1083,18 +1457,18 @@ private module Cached { ) or // See argument for why this is correct in compares_eq - exists(Operand l, BooleanValue bv | - unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and + exists(Operand l, GuardValue bv | + unary_compares_eq(test, l, 0, bv.asBooleanValue().booleanNot(), value) and unary_compares_eq(valueNumber(BooleanInstruction::get(l.getDef())), op, k, areEqual, bv) ) or unary_compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, areEqual, value) or - exists(BinaryLogicalOperation logical, Expr operand, boolean b | + exists(Cpp::BinaryLogicalOperation logical, Cpp::Expr operand, boolean b | test.getAnInstruction().getUnconvertedResultExpression() = logical and op.getDef().getUnconvertedResultExpression() = operand and - logical.impliesValue(operand, b, value.(BooleanValue).getValue()) + logical.impliesValue(operand, b, value.asBooleanValue()) | k = 1 and areEqual = b @@ -1106,17 +1480,17 @@ private module Cached { /** Rearrange various simple comparisons into `left == right + k` form. */ private predicate simple_comparison_eq( - CompareValueNumber cmp, Operand left, Operand right, int k, AbstractValue value + CompareValueNumber cmp, Operand left, Operand right, int k, GuardValue value ) { cmp instanceof CompareEQValueNumber and cmp.hasOperands(left, right) and k = 0 and - value.(BooleanValue).getValue() = true + value.asBooleanValue() = true or cmp instanceof CompareNEValueNumber and cmp.hasOperands(left, right) and k = 0 and - value.(BooleanValue).getValue() = false + value.asBooleanValue() = false } /** @@ -1152,35 +1526,33 @@ private module Cached { } /** Rearrange various simple comparisons into `op == k` form. */ - private predicate unary_simple_comparison_eq( - ValueNumber test, Operand op, int k, AbstractValue value - ) { - exists(CaseEdge case, SwitchConditionValueNumber condition | + private predicate unary_simple_comparison_eq(ValueNumber test, Operand op, int k, GuardValue value) { + exists(SwitchConditionValueNumber condition, CaseEdge edge | condition = test and op = condition.getExpressionOperand() and - case = value.(MatchValue).getCase() and - exists(condition.getSuccessor(case)) and - case.getValue().toInt() = k + value.asIntValue() = k and + edge.getValue().toInt() = k and + exists(condition.getSuccessor(edge)) ) or exists(Instruction const | int_value(const) = k | - value.(BooleanValue).getValue() = true and + value.asBooleanValue() = true and test.(CompareEQValueNumber).hasOperands(op, const.getAUse()) or - value.(BooleanValue).getValue() = false and + value.asBooleanValue() = false and test.(CompareNEValueNumber).hasOperands(op, const.getAUse()) ) or - exists(BooleanValue bv | + exists(GuardValue bv | bv = value and mayBranchOn(op.getDef()) and op = test.getAUse() | k = 0 and - bv.getValue() = false + bv.asBooleanValue() = false or k = 1 and - bv.getValue() = true + bv.asBooleanValue() = true ) } @@ -1199,7 +1571,7 @@ private module Cached { } private predicate complex_eq( - ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, GuardValue value ) { sub_eq(cmp, left, right, k, areEqual, value) or @@ -1207,7 +1579,7 @@ private module Cached { } private predicate unary_complex_eq( - ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, GuardValue value ) { unary_sub_eq(test, op, k, areEqual, value) or @@ -1222,11 +1594,11 @@ private module Cached { /** Holds if `left < right + k` evaluates to `isLt` given that test is `value`. */ cached predicate compares_lt( - ValueNumber test, Operand left, Operand right, int k, boolean isLt, AbstractValue value + ValueNumber test, Operand left, Operand right, int k, boolean isLt, GuardValue value ) { /* In the simple case, the test is the comparison, so isLt = testIsTrue */ simple_comparison_lt(test, left, right, k) and - value.(BooleanValue).getValue() = isLt + value.asBooleanValue() = isLt or complex_lt(test, left, right, k, isLt, value) or @@ -1234,15 +1606,15 @@ private module Cached { exists(boolean isGe | isLt = isGe.booleanNot() | compares_ge(test, left, right, k, isGe, value)) or /* (x is true => (left < right + k)) => (!x is false => (left < right + k)) */ - exists(AbstractValue dual | value = dual.getDualValue() | + exists(GuardValue dual | value = dual.getDualValue() | compares_lt(test.(LogicalNotValueNumber).getUnary(), left, right, k, isLt, dual) ) or compares_lt(test.(BuiltinExpectCallValueNumber).getCondition(), left, right, k, isLt, value) or // See argument for why this is correct in compares_eq - exists(Operand l, BooleanValue bv | - unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and + exists(Operand l, GuardValue bv | + unary_compares_eq(test, l, 0, bv.asBooleanValue().booleanNot(), value) and compares_lt(valueNumber(BooleanInstruction::get(l.getDef())), left, right, k, isLt, bv) ) @@ -1250,14 +1622,14 @@ private module Cached { /** Holds if `op < k` evaluates to `isLt` given that `test` evaluates to `value`. */ cached - predicate compares_lt(ValueNumber test, Operand op, int k, boolean isLt, AbstractValue value) { + predicate unary_compares_lt(ValueNumber test, Operand op, int k, boolean isLt, GuardValue value) { unary_simple_comparison_lt(test, op, k, isLt, value) or complex_lt(test, op, k, isLt, value) or /* (x is true => (op < k)) => (!x is false => (op < k)) */ - exists(AbstractValue dual | value = dual.getDualValue() | - compares_lt(test.(LogicalNotValueNumber).getUnary(), op, k, isLt, dual) + exists(GuardValue dual | value = dual.getDualValue() | + unary_compares_lt(test.(LogicalNotValueNumber).getUnary(), op, k, isLt, dual) ) or exists(int k1, int k2, Instruction const | @@ -1266,19 +1638,19 @@ private module Cached { k = k1 + k2 ) or - compares_lt(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, isLt, value) + unary_compares_lt(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, isLt, value) or // See argument for why this is correct in compares_eq - exists(Operand l, BooleanValue bv | - unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and - compares_lt(valueNumber(BooleanInstruction::get(l.getDef())), op, k, - isLt, bv) + exists(Operand l, GuardValue bv | + unary_compares_eq(test, l, 0, bv.asBooleanValue().booleanNot(), value) and + unary_compares_lt(valueNumber(BooleanInstruction::get(l.getDef())), + op, k, isLt, bv) ) } /** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */ private predicate compares_ge( - ValueNumber test, Operand left, Operand right, int k, boolean isGe, AbstractValue value + ValueNumber test, Operand left, Operand right, int k, boolean isGe, GuardValue value ) { exists(int onemk | k = 1 - onemk | compares_lt(test, right, left, onemk, isGe, value)) } @@ -1304,34 +1676,33 @@ private module Cached { /** Rearrange various simple comparisons into `op < k` form. */ private predicate unary_simple_comparison_lt( - SwitchConditionValueNumber test, Operand op, int k, boolean isLt, AbstractValue value + SwitchConditionValueNumber test, Operand op, int k, boolean isLt, GuardValue value ) { - exists(CaseEdge case | + exists(string minValue, string maxValue | test.getExpressionOperand() = op and - case = value.(MatchValue).getCase() and - exists(test.getSuccessor(case)) and - case.getMaxValue() > case.getMinValue() + exists(test.getSuccessor(EdgeKind::caseEdge(minValue, maxValue))) and + minValue < maxValue | // op <= k => op < k - 1 isLt = true and - case.getMaxValue().toInt() = k - 1 + maxValue.toInt() = k - 1 and + value.isIntRange(k - 1, true) or isLt = false and - case.getMinValue().toInt() = k + minValue.toInt() = k and + value.isIntRange(k, false) ) } private predicate complex_lt( - ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, GuardValue value ) { sub_lt(cmp, left, right, k, isLt, value) or add_lt(cmp, left, right, k, isLt, value) } - private predicate complex_lt( - ValueNumber test, Operand left, int k, boolean isLt, AbstractValue value - ) { + private predicate complex_lt(ValueNumber test, Operand left, int k, boolean isLt, GuardValue value) { sub_lt(test, left, k, isLt, value) or add_lt(test, left, k, isLt, value) @@ -1340,7 +1711,7 @@ private module Cached { // left - x < right + c => left < right + (c+x) // left < (right - x) + c => left < right + (c-x) private predicate sub_lt( - ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, GuardValue value ) { exists(SubInstruction lhs, int c, int x | compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and @@ -1371,16 +1742,16 @@ private module Cached { ) } - private predicate sub_lt(ValueNumber test, Operand left, int k, boolean isLt, AbstractValue value) { + private predicate sub_lt(ValueNumber test, Operand left, int k, boolean isLt, GuardValue value) { exists(SubInstruction lhs, int c, int x | - compares_lt(test, lhs.getAUse(), c, isLt, value) and + unary_compares_lt(test, lhs.getAUse(), c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x ) or exists(PointerSubInstruction lhs, int c, int x | - compares_lt(test, lhs.getAUse(), c, isLt, value) and + unary_compares_lt(test, lhs.getAUse(), c, isLt, value) and left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) and k = c + x @@ -1390,7 +1761,7 @@ private module Cached { // left + x < right + c => left < right + (c-x) // left < (right + x) + c => left < right + (c+x) private predicate add_lt( - ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean isLt, GuardValue value ) { exists(AddInstruction lhs, int c, int x | compares_lt(cmp, lhs.getAUse(), right, c, isLt, value) and @@ -1433,9 +1804,9 @@ private module Cached { ) } - private predicate add_lt(ValueNumber test, Operand left, int k, boolean isLt, AbstractValue value) { + private predicate add_lt(ValueNumber test, Operand left, int k, boolean isLt, GuardValue value) { exists(AddInstruction lhs, int c, int x | - compares_lt(test, lhs.getAUse(), c, isLt, value) and + unary_compares_lt(test, lhs.getAUse(), c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -1445,7 +1816,7 @@ private module Cached { ) or exists(PointerAddInstruction lhs, int c, int x | - compares_lt(test, lhs.getAUse(), c, isLt, value) and + unary_compares_lt(test, lhs.getAUse(), c, isLt, value) and ( left = lhs.getLeftOperand() and x = int_value(lhs.getRight()) or @@ -1458,7 +1829,7 @@ private module Cached { // left - x == right + c => left == right + (c+x) // left == (right - x) + c => left == right + (c-x) private predicate sub_eq( - ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, GuardValue value ) { exists(SubInstruction lhs, int c, int x | compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and @@ -1491,7 +1862,7 @@ private module Cached { // op - x == c => op == (c+x) private predicate unary_sub_eq( - ValueNumber test, Operand op, int k, boolean areEqual, AbstractValue value + ValueNumber test, Operand op, int k, boolean areEqual, GuardValue value ) { exists(SubInstruction sub, int c, int x | unary_compares_eq(test, sub.getAUse(), c, areEqual, value) and @@ -1511,7 +1882,7 @@ private module Cached { // left + x == right + c => left == right + (c-x) // left == (right + x) + c => left == right + (c+x) private predicate add_eq( - ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value + ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, GuardValue value ) { exists(AddInstruction lhs, int c, int x | compares_eq(cmp, lhs.getAUse(), right, c, areEqual, value) and @@ -1556,7 +1927,7 @@ private module Cached { // left + x == right + c => left == right + (c-x) private predicate unary_add_eq( - ValueNumber test, Operand left, int k, boolean areEqual, AbstractValue value + ValueNumber test, Operand left, int k, boolean areEqual, GuardValue value ) { exists(AddInstruction lhs, int c, int x | unary_compares_eq(test, lhs.getAUse(), c, areEqual, value) and @@ -1599,7 +1970,7 @@ private import Cached * To find the specific guard that performs the comparison * use `IRGuards.comparesLt`. */ -predicate comparesLt(Operand left, Operand right, int k, boolean isLt, AbstractValue value) { +predicate comparesLt(Operand left, Operand right, int k, boolean isLt, GuardValue value) { compares_lt(_, left, right, k, isLt, value) } @@ -1610,6 +1981,6 @@ predicate comparesLt(Operand left, Operand right, int k, boolean isLt, AbstractV * To find the specific guard that performs the comparison * use `IRGuards.comparesEq`. */ -predicate comparesEq(Operand left, Operand right, int k, boolean isLt, AbstractValue value) { +predicate comparesEq(Operand left, Operand right, int k, boolean isLt, GuardValue value) { compares_eq(_, left, right, k, isLt, value) } diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll index 05eafe28275..23ef5859221 100644 --- a/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll +++ b/cpp/ql/lib/semmle/code/cpp/controlflow/internal/CFG.qll @@ -1042,8 +1042,8 @@ private predicate subEdgeIncludingDestructors(Pos p1, Node n1, Node n2, Pos p2) * - `MicrosoftTryFinallyStmt`: On the edge following the `__finally` block for * the case where an exception was thrown and needs to be propagated. */ -DestructorCall getSynthesisedDestructorCallAfterNode(Node n, int i) { - synthetic_destructor_call(n, i, result) +DestructorCall getSynthesisedDestructorCallAfterNode(Node node, int index) { + synthetic_destructor_call(node, index, result) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index b279c4965f3..b71a46f6961 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -656,6 +656,7 @@ private string getTypeNameWithoutFunctionTemplates(Function f, int n, int remain * Normalize the `n`'th parameter of `f` by replacing template names * with `class:N` (where `N` is the index of the template). */ +pragma[nomagic] private string getTypeNameWithoutClassTemplates(Function f, int n, int remaining) { // If there is a declaring type then we start by expanding the function templates exists(Class template | @@ -727,6 +728,7 @@ private string getSignatureWithoutClassTemplateNames( * - The `remaining` number of template arguments in `partiallyNormalizedSignature` * with their index in `nameArgs`. */ +pragma[nomagic] private string getSignatureWithoutFunctionTemplateNames( string partiallyNormalizedSignature, string typeArgs, string nameArgs, int remaining ) { @@ -770,6 +772,7 @@ private string getSignatureWithoutFunctionTemplateNames( * ``` * In this case, `normalizedSignature` will be `"(const func:0 &,int,class:1,class:0 *)"`. */ +pragma[nomagic] private predicate elementSpecWithArguments( string signature, string type, string name, string normalizedSignature, string typeArgs, string nameArgs @@ -789,6 +792,35 @@ private string getSignatureParameterName(string signature, string type, string n ) } +/** + * Gets a `Function` identified by the `(namespace, type, name)` components. + * + * If `subtypes` is `true` then the result may be an override of the function + * identified by the components. + */ +pragma[nomagic] +private Function getFunction(string namespace, string type, boolean subtypes, string name) { + elementSpec(namespace, type, subtypes, name, _, _) and + ( + funcHasQualifiedName(result, namespace, name) and + subtypes = false and + type = "" + or + exists(Class namedClass, Class classWithMethod | + hasClassAndName(classWithMethod, result, name) and + classHasQualifiedName(namedClass, namespace, type) + | + // member declared in the named type or a subtype of it + subtypes = true and + classWithMethod = namedClass.getADerivedClass*() + or + // member declared directly in the named type + subtypes = false and + classWithMethod = namedClass + ) + ) +} + /** * Holds if the suffix containing the entries in `signature` starting at entry * `i` matches the suffix containing the parameters of `func` starting at entry `i`. @@ -812,13 +844,17 @@ private string getSignatureParameterName(string signature, string type, string n * is `func:n` then the signature name is compared with the `n`'th name * in `name`. */ -private predicate signatureMatches(Function func, string signature, string type, string name, int i) { +pragma[nomagic] +private predicate signatureMatches( + Function func, string namespace, string signature, string type, string name, int i +) { + func = getFunction(namespace, type, _, name) and exists(string s | s = getSignatureParameterName(signature, type, name, i) and s = getParameterTypeName(func, i) ) and if exists(getParameterTypeName(func, i + 1)) - then signatureMatches(func, signature, type, name, i + 1) + then signatureMatches(func, namespace, signature, type, name, i + 1) else i = count(signature.indexOf(",")) } @@ -833,7 +869,7 @@ module ExternalFlowDebug { * * Exposed for testing purposes. */ - predicate signatureMatches_debug = signatureMatches/5; + predicate signatureMatches_debug = signatureMatches/6; /** * INTERNAL: Do not use. @@ -883,6 +919,7 @@ private predicate parseParens(string s, string betweenParens) { s = "(" + betwee * - `signatureWithoutParens` equals `signature`, but with the surrounding * parentheses removed. */ +pragma[nomagic] private predicate elementSpecWithArguments0( string signature, string type, string name, string signatureWithoutParens, string typeArgs, string nameArgs @@ -909,7 +946,7 @@ private predicate elementSpecMatchesSignature( ) { elementSpec(namespace, pragma[only_bind_into](type), subtypes, pragma[only_bind_into](name), pragma[only_bind_into](signature), _) and - signatureMatches(func, signature, type, name, 0) + signatureMatches(func, namespace, signature, type, name, 0) } /** @@ -953,7 +990,7 @@ private predicate funcHasQualifiedName(Function func, string namespace, string n * Holds if `namedClass` is in namespace `namespace` and has * name `type` (excluding any template parameters). */ -bindingset[type, namespace] +bindingset[type] pragma[inline_late] private predicate classHasQualifiedName(Class namedClass, string namespace, string type) { exists(string typeWithoutArgs | @@ -969,17 +1006,14 @@ private predicate classHasQualifiedName(Class namedClass, string namespace, stri * are also returned. * 3. The element has name `name` * 4. If `signature` is non-empty, then the element has a list of parameter types described by `signature`. - * - * NOTE: `namespace` is currently not used (since we don't properly extract modules yet). */ pragma[nomagic] private Element interpretElement0( string namespace, string type, boolean subtypes, string name, string signature ) { + result = getFunction(namespace, type, subtypes, name) and ( // Non-member functions - funcHasQualifiedName(result, namespace, name) and - subtypes = false and type = "" and ( elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature) @@ -989,52 +1023,36 @@ private Element interpretElement0( ) or // Member functions - exists(Class namedClass, Class classWithMethod | - hasClassAndName(classWithMethod, result, name) and - classHasQualifiedName(namedClass, namespace, type) - | - ( - elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature) - or - signature = "" and - elementSpec(namespace, type, subtypes, name, "", _) - ) and - ( - // member declared in the named type or a subtype of it - subtypes = true and - classWithMethod = namedClass.getADerivedClass*() - or - // member declared directly in the named type - subtypes = false and - classWithMethod = namedClass - ) - ) + elementSpecMatchesSignature(result, namespace, type, subtypes, name, signature) or - elementSpec(namespace, type, subtypes, name, signature, _) and - // Member variables signature = "" and - exists(Class namedClass, Class classWithMember, MemberVariable member | - member.getName() = name and - member = classWithMember.getAMember() and - namedClass.hasQualifiedName(namespace, type) and - result = member - | - // field declared in the named type or a subtype of it (or an extension of any) - subtypes = true and - classWithMember = namedClass.getADerivedClass*() - or - // field declared directly in the named type (or an extension of it) - subtypes = false and - classWithMember = namedClass - ) - or - // Global or namespace variables - elementSpec(namespace, type, subtypes, name, signature, _) and - signature = "" and - type = "" and - subtypes = false and - result = any(GlobalOrNamespaceVariable v | v.hasQualifiedName(namespace, name)) + elementSpec(namespace, type, subtypes, name, signature, _) ) + or + // Member variables + elementSpec(namespace, type, subtypes, name, signature, _) and + signature = "" and + exists(Class namedClass, Class classWithMember, MemberVariable member | + member.getName() = name and + member = classWithMember.getAMember() and + namedClass.hasQualifiedName(namespace, type) and + result = member + | + // field declared in the named type or a subtype of it (or an extension of any) + subtypes = true and + classWithMember = namedClass.getADerivedClass*() + or + // field declared directly in the named type (or an extension of it) + subtypes = false and + classWithMember = namedClass + ) + or + // Global or namespace variables + elementSpec(namespace, type, subtypes, name, signature, _) and + signature = "" and + type = "" and + subtypes = false and + result = any(GlobalOrNamespaceVariable v | v.hasQualifiedName(namespace, name)) } cached diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll index 72e742f13aa..e6d53f8bf64 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowUtil.qll @@ -834,8 +834,10 @@ class ContentSet instanceof Content { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.hasLocationInfo(path, sl, sc, el, ec) + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll index 58c3dfdea16..d89ab06ed82 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/FlowSummaryImpl.qll @@ -104,7 +104,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { result.getStaticCallTarget().getUnderlyingCallable() = sc } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll index b5e899bf0aa..0d63558c956 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll @@ -1,218 +1,21 @@ private import cpp private import semmle.code.cpp.ir.IR -private import DataFlowPrivate +private import semmle.code.cpp.ir.dataflow.DataFlow +private import DataFlowPrivate as DataFlowPrivate private import DataFlowUtil private import DataFlowImplCommon as DataFlowImplCommon +private import codeql.typetracking.TypeTracking +private import SsaImpl as SsaImpl /** - * Gets a function that might be called by `call`. - * - * This predicate does not take additional call targets - * from `AdditionalCallTarget` into account. + * Holds if `f` has name `qualifiedName` and `nparams` parameter count. This is + * an approximation of its signature for the purpose of matching functions that + * might be the same across link targets. */ -cached -DataFlowCallable defaultViableCallable(DataFlowCall call) { - DataFlowImplCommon::forceCachingInSameStage() and - result = call.getStaticCallTarget() - or - // If the target of the call does not have a body in the snapshot, it might - // be because the target is just a header declaration, and the real target - // will be determined at run time when the caller and callee are linked - // together by the operating system's dynamic linker. In case a _unique_ - // function with the right signature is present in the database, we return - // that as a potential callee. - exists(string qualifiedName, int nparams | - callSignatureWithoutBody(qualifiedName, nparams, call.asCallInstruction()) and - functionSignatureWithBody(qualifiedName, nparams, result.getUnderlyingCallable()) and - strictcount(Function other | functionSignatureWithBody(qualifiedName, nparams, other)) = 1 - ) - or - // Virtual dispatch - result.asSourceCallable() = call.(VirtualDispatch::DataSensitiveCall).resolve() -} - -/** - * Gets a function that might be called by `call`. - */ -cached -DataFlowCallable viableCallable(DataFlowCall call) { - result = defaultViableCallable(call) - or - // Additional call targets - result.getUnderlyingCallable() = - any(AdditionalCallTarget additional) - .viableTarget(call.asCallInstruction().getUnconvertedResultExpression()) -} - -/** - * Provides virtual dispatch support compatible with the original - * implementation of `semmle.code.cpp.security.TaintTracking`. - */ -private module VirtualDispatch { - /** A call that may dispatch differently depending on the qualifier value. */ - abstract class DataSensitiveCall extends DataFlowCall { - /** - * Gets the node whose value determines the target of this call. This node - * could be the qualifier of a virtual dispatch or the function-pointer - * expression in a call to a function pointer. What they have in common is - * that we need to find out which data flows there, and then it's up to the - * `resolve` predicate to stitch that information together and resolve the - * call. - */ - abstract Node getDispatchValue(); - - /** Gets a candidate target for this call. */ - abstract Function resolve(); - - /** - * Whether `src` can flow to this call. - * - * Searches backwards from `getDispatchValue()` to `src`. The `allowFromArg` - * parameter is true when the search is allowed to continue backwards into - * a parameter; non-recursive callers should pass `_` for `allowFromArg`. - */ - predicate flowsFrom(Node src, boolean allowFromArg) { - src = this.getDispatchValue() and allowFromArg = true - or - exists(Node other, boolean allowOtherFromArg | this.flowsFrom(other, allowOtherFromArg) | - // Call argument - exists(DataFlowCall call, Position i | - other.(ParameterNode).isParameterOf(pragma[only_bind_into](call).getStaticCallTarget(), i) and - src.(ArgumentNode).argumentOf(call, pragma[only_bind_into](pragma[only_bind_out](i))) - ) and - allowOtherFromArg = true and - allowFromArg = true - or - // Call return - exists(DataFlowCall call, ReturnKind returnKind | - other = getAnOutNode(call, returnKind) and - returnNodeWithKindAndEnclosingCallable(src, returnKind, call.getStaticCallTarget()) - ) and - allowFromArg = false - or - // Local flow - localFlowStep(src, other) and - allowFromArg = allowOtherFromArg - or - // Flow from global variable to load. - exists(LoadInstruction load, GlobalOrNamespaceVariable var | - var = src.asVariable() and - other.asInstruction() = load and - addressOfGlobal(load.getSourceAddress(), var) and - // The `allowFromArg` concept doesn't play a role when `src` is a - // global variable, so we just set it to a single arbitrary value for - // performance. - allowFromArg = true - ) - or - // Flow from store to global variable. - exists(StoreInstruction store, GlobalOrNamespaceVariable var | - var = other.asVariable() and - store = src.asInstruction() and - storeIntoGlobal(store, var) and - // Setting `allowFromArg` to `true` like in the base case means we - // treat a store to a global variable like the dispatch itself: flow - // may come from anywhere. - allowFromArg = true - ) - ) - } - } - - pragma[noinline] - private predicate storeIntoGlobal(StoreInstruction store, GlobalOrNamespaceVariable var) { - addressOfGlobal(store.getDestinationAddress(), var) - } - - /** Holds if `addressInstr` is an instruction that produces the address of `var`. */ - private predicate addressOfGlobal(Instruction addressInstr, GlobalOrNamespaceVariable var) { - // Access directly to the global variable - addressInstr.(VariableAddressInstruction).getAstVariable() = var - or - // Access to a field on a global union - exists(FieldAddressInstruction fa | - fa = addressInstr and - fa.getObjectAddress().(VariableAddressInstruction).getAstVariable() = var and - fa.getField().getDeclaringType() instanceof Union - ) - } - - /** - * A ReturnNode with its ReturnKind and its enclosing callable. - * - * Used to fix a join ordering issue in flowsFrom. - */ - pragma[noinline] - private predicate returnNodeWithKindAndEnclosingCallable( - ReturnNode node, ReturnKind kind, DataFlowCallable callable - ) { - node.getKind() = kind and - node.getFunction() = callable.getUnderlyingCallable() - } - - /** Call through a function pointer. */ - private class DataSensitiveExprCall extends DataSensitiveCall { - DataSensitiveExprCall() { not exists(this.getStaticCallTarget()) } - - override Node getDispatchValue() { result.asOperand() = this.getCallTargetOperand() } - - override Function resolve() { - exists(FunctionInstruction fi | - this.flowsFrom(instructionNode(fi), _) and - result = fi.getFunctionSymbol() - ) and - ( - this.getNumberOfArguments() <= result.getEffectiveNumberOfParameters() and - this.getNumberOfArguments() >= result.getEffectiveNumberOfParameters() - or - result.isVarargs() - ) - } - } - - /** Call to a virtual function. */ - private class DataSensitiveOverriddenFunctionCall extends DataSensitiveCall { - DataSensitiveOverriddenFunctionCall() { - exists( - this.getStaticCallTarget() - .getUnderlyingCallable() - .(VirtualFunction) - .getAnOverridingFunction() - ) - } - - override Node getDispatchValue() { result.asInstruction() = this.getArgument(-1) } - - override MemberFunction resolve() { - exists(Class overridingClass | - this.overrideMayAffectCall(overridingClass, result) and - this.hasFlowFromCastFrom(overridingClass) - ) - } - - /** - * Holds if `this` is a virtual function call whose static target is - * overridden by `overridingFunction` in `overridingClass`. - */ - pragma[noinline] - private predicate overrideMayAffectCall(Class overridingClass, MemberFunction overridingFunction) { - overridingFunction.getAnOverriddenFunction+() = - this.getStaticCallTarget().getUnderlyingCallable().(VirtualFunction) and - overridingFunction.getDeclaringType() = overridingClass - } - - /** - * Holds if the qualifier of `this` has flow from an upcast from - * `derivedClass`. - */ - pragma[noinline] - private predicate hasFlowFromCastFrom(Class derivedClass) { - exists(ConvertToBaseInstruction toBase | - this.flowsFrom(instructionNode(toBase), _) and - derivedClass = toBase.getDerivedClass() - ) - } - } +private predicate functionSignature(Function f, string qualifiedName, int nparams) { + qualifiedName = f.getQualifiedName() and + nparams = f.getNumberOfParameters() and + not f.isStatic() } /** @@ -238,34 +41,319 @@ private predicate callSignatureWithoutBody(string qualifiedName, int nparams, Ca } /** - * Holds if `f` has name `qualifiedName` and `nparams` parameter count. This is - * an approximation of its signature for the purpose of matching functions that - * might be the same across link targets. + * Gets a function that might be called by `call`. + * + * This predicate does not take additional call targets + * from `AdditionalCallTarget` into account. */ -private predicate functionSignature(Function f, string qualifiedName, int nparams) { - qualifiedName = f.getQualifiedName() and - nparams = f.getNumberOfParameters() and - not f.isStatic() +cached +DataFlowPrivate::DataFlowCallable defaultViableCallable(DataFlowPrivate::DataFlowCall call) { + result = defaultViableCallableWithoutLambda(call) + or + result = DataFlowImplCommon::viableCallableLambda(call, _) +} + +private DataFlowPrivate::DataFlowCallable defaultViableCallableWithoutLambda( + DataFlowPrivate::DataFlowCall call +) { + DataFlowImplCommon::forceCachingInSameStage() and + result = call.getStaticCallTarget() + or + // If the target of the call does not have a body in the snapshot, it might + // be because the target is just a header declaration, and the real target + // will be determined at run time when the caller and callee are linked + // together by the operating system's dynamic linker. In case a _unique_ + // function with the right signature is present in the database, we return + // that as a potential callee. + exists(string qualifiedName, int nparams | + callSignatureWithoutBody(qualifiedName, nparams, call.asCallInstruction()) and + functionSignatureWithBody(qualifiedName, nparams, result.getUnderlyingCallable()) and + strictcount(Function other | functionSignatureWithBody(qualifiedName, nparams, other)) = 1 + ) +} + +/** + * Gets a function that might be called by `call`. + */ +private DataFlowPrivate::DataFlowCallable nonVirtualDispatch(DataFlowPrivate::DataFlowCall call) { + result = defaultViableCallableWithoutLambda(call) + or + // Additional call targets + result.getUnderlyingCallable() = + any(AdditionalCallTarget additional) + .viableTarget(call.asCallInstruction().getUnconvertedResultExpression()) +} + +private class RelevantNode extends Node { + RelevantNode() { this.getType().stripType() instanceof Class } +} + +private signature DataFlowPrivate::DataFlowCallable methodDispatchSig( + DataFlowPrivate::DataFlowCall c +); + +private predicate ignoreConstructor(Expr e) { + e instanceof ConstructorDirectInit or + e instanceof ConstructorVirtualInit or + e instanceof ConstructorDelegationInit or + exists(ConstructorFieldInit init | init.getExpr() = e) +} + +/** + * Holds if `n` is either: + * - the post-update node of a qualifier after a call to a constructor which + * constructs an object containing at least one virtual function. + * - a node which represents a derived-to-base instruction that converts from `c`. + */ +private predicate qualifierSourceImpl(RelevantNode n, Class c) { + // Object construction + exists(CallInstruction call, ThisArgumentOperand qualifier, Call e | + qualifier = call.getThisArgumentOperand() and + n.(PostUpdateNode).getPreUpdateNode().asOperand() = qualifier and + call.getStaticCallTarget() instanceof Constructor and + qualifier.getType().stripType() = c and + c.getABaseClass*().getAMemberFunction().isVirtual() and + e = call.getUnconvertedResultExpression() and + not ignoreConstructor(e) + | + exists(c.getABaseClass()) + or + exists(c.getADerivedClass()) + ) + or + // Conversion to a base class + exists(ConvertToBaseInstruction convert | + // Only keep the most specific cast + not convert.getUnary() instanceof ConvertToBaseInstruction and + n.asInstruction() = convert and + convert.getDerivedClass() = c and + c.getABaseClass*().getAMemberFunction().isVirtual() + ) +} + +private module TrackVirtualDispatch { + /** + * Gets a possible runtime target of `c` using both static call-target + * information, and call-target resolution from `virtualDispatch0`. + */ + private DataFlowPrivate::DataFlowCallable dispatch(DataFlowPrivate::DataFlowCall c) { + result = nonVirtualDispatch(c) or + result = virtualDispatch0(c) + } + + private module TtInput implements TypeTrackingInput { + final class Node = RelevantNode; + + class LocalSourceNode extends Node { + LocalSourceNode() { + this instanceof ParameterNode + or + this instanceof DataFlowPrivate::OutNode + or + DataFlowPrivate::readStep(_, _, this) + or + DataFlowPrivate::storeStep(_, _, this) + or + DataFlowPrivate::jumpStep(_, this) + or + qualifierSourceImpl(this, _) + } + } + + final private class ContentSetFinal = ContentSet; + + class Content extends ContentSetFinal { + Content() { + exists(DataFlow::Content c | + this.isSingleton(c) and + c.getIndirectionIndex() = 1 + ) + } + } + + class ContentFilter extends Content { + Content getAMatchingContent() { result = this } + } + + predicate compatibleContents(Content storeContents, Content loadContents) { + storeContents = loadContents + } + + predicate simpleLocalSmallStep(Node nodeFrom, Node nodeTo) { + nodeFrom.getFunction() instanceof Function and + simpleLocalFlowStep(nodeFrom, nodeTo, _) + } + + predicate levelStepNoCall(Node n1, LocalSourceNode n2) { none() } + + predicate levelStepCall(Node n1, LocalSourceNode n2) { none() } + + predicate storeStep(Node n1, Node n2, Content f) { DataFlowPrivate::storeStep(n1, f, n2) } + + predicate callStep(Node n1, LocalSourceNode n2) { + exists(DataFlowPrivate::DataFlowCall call, DataFlowPrivate::Position pos | + n1.(DataFlowPrivate::ArgumentNode).argumentOf(call, pos) and + n2.(ParameterNode).isParameterOf(dispatch(call), pos) + ) + } + + predicate returnStep(Node n1, LocalSourceNode n2) { + exists(DataFlowPrivate::DataFlowCallable callable, DataFlowPrivate::DataFlowCall call | + n1.(DataFlowPrivate::ReturnNode).getEnclosingCallable() = callable and + callable = dispatch(call) and + n2 = DataFlowPrivate::getAnOutNode(call, n1.(DataFlowPrivate::ReturnNode).getKind()) + ) + } + + predicate loadStep(Node n1, LocalSourceNode n2, Content f) { + DataFlowPrivate::readStep(n1, f, n2) + } + + predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() } + + predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + + predicate withoutContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + + predicate jumpStep(Node n1, LocalSourceNode n2) { DataFlowPrivate::jumpStep(n1, n2) } + + predicate hasFeatureBacktrackStoreTarget() { none() } + } + + private predicate qualifierSource(RelevantNode n) { qualifierSourceImpl(n, _) } + + /** + * Holds if `n` is the qualifier of `call` which targets the virtual member + * function `mf`. + */ + private predicate qualifierOfVirtualCallImpl( + RelevantNode n, CallInstruction call, MemberFunction mf + ) { + n.asOperand() = call.getThisArgumentOperand() and + call.getStaticCallTarget() = mf and + mf.isVirtual() + } + + private predicate qualifierOfVirtualCall(RelevantNode n) { qualifierOfVirtualCallImpl(n, _, _) } + + private import TypeTracking::TypeTrack::Graph + + private predicate edgePlus(PathNode n1, PathNode n2) = fastTC(edges/2)(n1, n2) + + /** + * Gets the most specific implementation of `mf` that may be called when the + * qualifier has runtime type `c`. + */ + private MemberFunction mostSpecific(MemberFunction mf, Class c) { + qualifierOfVirtualCallImpl(_, _, mf) and + mf.getAnOverridingFunction*() = result and + ( + result.getDeclaringType() = c + or + not c.getAMemberFunction().getAnOverriddenFunction*() = mf and + result = mostSpecific(mf, c.getABaseClass()) + ) + } + + /** + * Gets a possible pair of end-points `(p1, p2)` where: + * - `p1` is a derived-to-base conversion that converts from some + * class `derived`, and + * - `p2` is the qualifier of a call to a virtual function that may + * target `callable`, and + * - `callable` is the most specific implementation that may be called when + * the qualifier has type `derived`. + */ + private predicate pairCand( + PathNode p1, PathNode p2, DataFlowPrivate::DataFlowCallable callable, + DataFlowPrivate::DataFlowCall call + ) { + exists(Class derived, MemberFunction mf | + qualifierSourceImpl(p1.getNode(), derived) and + qualifierOfVirtualCallImpl(p2.getNode(), call.asCallInstruction(), mf) and + p1.isSource() and + p2.isSink() and + callable.asSourceCallable() = mostSpecific(mf, derived) + ) + } + + /** Gets a possible run-time target of `call`. */ + DataFlowPrivate::DataFlowCallable virtualDispatch(DataFlowPrivate::DataFlowCall call) { + exists(PathNode p1, PathNode p2 | p1 = p2 or edgePlus(p1, p2) | pairCand(p1, p2, result, call)) + } +} + +private DataFlowPrivate::DataFlowCallable noDisp(DataFlowPrivate::DataFlowCall call) { none() } + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d1(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d2(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d3(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d4(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d5(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +pragma[nomagic] +private DataFlowPrivate::DataFlowCallable d6(DataFlowPrivate::DataFlowCall call) { + result = TrackVirtualDispatch::virtualDispatch(call) +} + +/** Gets a function that might be called by `call`. */ +cached +DataFlowPrivate::DataFlowCallable viableCallable(DataFlowPrivate::DataFlowCall call) { + not exists(d6(call)) and + result = nonVirtualDispatch(call) + or + result = d6(call) } /** * Holds if the set of viable implementations that can be called by `call` * might be improved by knowing the call context. */ -predicate mayBenefitFromCallContext(DataFlowCall call) { mayBenefitFromCallContext(call, _, _) } +predicate mayBenefitFromCallContext(DataFlowPrivate::DataFlowCall call) { + mayBenefitFromCallContext(call, _, _) +} + +private predicate localLambdaFlowStep(Node nodeFrom, Node nodeTo) { + localFlowStep(nodeFrom, nodeTo) + or + DataFlowPrivate::additionalLambdaFlowStep(nodeFrom, nodeTo, _) +} /** * Holds if `call` is a call through a function pointer, and the pointer * value is given as the `arg`'th argument to `f`. */ private predicate mayBenefitFromCallContext( - VirtualDispatch::DataSensitiveCall call, DataFlowCallable f, int arg + DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCallable f, int arg ) { f = pragma[only_bind_out](call).getEnclosingCallable() and exists(InitializeParameterInstruction init | - not exists(call.getStaticCallTarget()) and + not exists(call.getStaticCallTarget()) + or + exists(call.getStaticCallSourceTarget().(VirtualFunction).getAnOverridingFunction()) + | init.getEnclosingFunction() = f.getUnderlyingCallable() and - call.flowsFrom(instructionNode(init), _) and + localLambdaFlowStep+(instructionNode(init), + operandNode(call.asCallInstruction().getCallTargetOperand())) and init.getParameter().getIndex() = arg ) } @@ -274,9 +362,11 @@ private predicate mayBenefitFromCallContext( * Gets a viable dispatch target of `call` in the context `ctx`. This is * restricted to those `call`s for which a context might make a difference. */ -DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { +DataFlowPrivate::DataFlowCallable viableImplInCallContext( + DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCall ctx +) { result = viableCallable(call) and - exists(int i, DataFlowCallable f | + exists(int i, DataFlowPrivate::DataFlowCallable f | mayBenefitFromCallContext(pragma[only_bind_into](call), f, i) and f = ctx.getStaticCallTarget() and result.asSourceCallable() = @@ -286,4 +376,8 @@ DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) { /** Holds if arguments at position `apos` match parameters at position `ppos`. */ pragma[inline] -predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } +predicate parameterMatch( + DataFlowPrivate::ParameterPosition ppos, DataFlowPrivate::ArgumentPosition apos +) { + ppos = apos +} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index a03042a77ff..582391e81cc 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1492,7 +1492,14 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) { } /** Extra data-flow steps needed for lambda flow analysis. */ -predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) { none() } +predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) { + preservesValue = false and + exists(ContentSet cs | cs.isSingleton(any(UnionContent uc)) | + storeStep(nodeFrom, cs, nodeTo) + or + readStep(nodeFrom, cs, nodeTo) + ) +} predicate knownSourceModel(Node source, string model) { External::sourceNode(source, _, model) } @@ -1873,9 +1880,7 @@ module IteratorFlow { } } - private module SsaInput implements SsaImpl::InputSig { - import Ssa::InputSigCommon - + private module SsaInput implements SsaImpl::InputSig { class SourceVariable = IteratorFlow::SourceVariable; /** A call to function that dereferences an iterator. */ @@ -1953,7 +1958,7 @@ module IteratorFlow { * Holds if `(bb, i)` contains a write to an iterator that may have been obtained * by calling `begin` (or related functions) on the variable `v`. */ - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { certain = false and exists(GetsIteratorCall beginCall, Instruction writeToDeref, IRBlock bbQual, int iQual | isIteratorStoreInstruction(beginCall, writeToDeref) and @@ -1964,12 +1969,12 @@ module IteratorFlow { } /** Holds if `(bb, i)` reads the container variable `v`. */ - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { Ssa::variableRead(bb, i, v, certain) } } - private module IteratorSsa = SsaImpl::Make; + private module IteratorSsa = SsaImpl::Make; private module DataFlowIntegrationInput implements IteratorSsa::DataFlowIntegrationInputSig { private import codeql.util.Void @@ -1982,7 +1987,7 @@ module IteratorFlow { ) } - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { bb.getInstruction(i) = this } + predicate hasCfgNode(IRCfg::BasicBlock bb, int i) { bb.getInstruction(i) = this } } predicate ssaDefHasSource(IteratorSsa::WriteDefinition def) { none() } @@ -1992,20 +1997,16 @@ module IteratorFlow { class GuardValue = Void; class Guard extends Void { - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue val - ) { + predicate hasValueBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue val) { none() } - predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue val - ) { + predicate valueControlsBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue val) { none() } } - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue val) { + predicate guardDirectlyControlsBlock(Guard guard, IRCfg::BasicBlock bb, GuardValue val) { none() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll index a0a99711552..82dcd43e136 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll @@ -795,7 +795,7 @@ class FinalGlobalValue extends Node, TFinalGlobalValue { override DataFlowType getType() { exists(int indirectionIndex | indirectionIndex = globalUse.getIndirectionIndex() and - result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex - 1) + result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex) ) } @@ -2273,8 +2273,10 @@ class ContentSet instanceof Content { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.hasLocationInfo(path, sl, sc, el, ec) + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll index b9f320e57b2..285e0dc8419 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll @@ -498,7 +498,9 @@ class FinalParameterUse extends UseImpl, TFinalParameterUse { int getArgumentIndex() { result = p.getIndex() } - override Node getNode() { finalParameterNodeHasParameterAndIndex(result, p, indirectionIndex) } + override FinalParameterNode getNode() { + finalParameterNodeHasParameterAndIndex(result, p, indirectionIndex) + } override int getIndirection() { result = indirectionIndex + 1 } @@ -756,9 +758,9 @@ private predicate modeledFlowBarrier(Node n) { partialFlowFunc = call.getStaticCallTarget() and not partialFlowFunc.isPartialWrite(output) | - call.getStaticCallTarget().(DataFlow::DataFlowFunction).hasDataFlow(_, output) + partialFlowFunc.(DataFlow::DataFlowFunction).hasDataFlow(_, output) or - call.getStaticCallTarget().(Taint::TaintFunction).hasTaintFlow(_, output) + partialFlowFunc.(Taint::TaintFunction).hasTaintFlow(_, output) ) or exists(Operand operand, Instruction instr, Node n0, int indirectionIndex | @@ -891,15 +893,14 @@ private predicate baseSourceVariableIsGlobal( ) } -private module SsaInput implements Ssa::InputSig { - import InputSigCommon +private module SsaInput implements Ssa::InputSig { import SourceVariables /** * Holds if the `i`'th write in block `bb` writes to the variable `v`. * `certain` is `true` if the write is guaranteed to overwrite the entire variable. */ - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { DataFlowImplCommon::forceCachingInSameStage() and ( exists(DefImpl def | def.hasIndexInBlock(v, bb, i) | @@ -917,7 +918,7 @@ private module SsaInput implements Ssa::InputSig { * Holds if the `i`'th read in block `bb` reads to the variable `v`. * `certain` is `true` if the read is guaranteed. For C++, this is always the case. */ - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(IRCfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(UseImpl use | use.hasIndexInBlock(bb, i, v) | if use.isCertain() then certain = true else certain = false ) @@ -965,7 +966,7 @@ class GlobalDef extends Definition { GlobalLikeVariable getVariable() { result = impl.getVariable() } } -private module SsaImpl = Ssa::Make; +private module SsaImpl = Ssa::Make; private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationInputSig { private import codeql.util.Boolean @@ -978,7 +979,7 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI ) } - predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { bb.getInstruction(i) = this } + predicate hasCfgNode(IRCfg::BasicBlock bb, int i) { bb.getInstruction(i) = this } } Expr getARead(SsaImpl::Definition def) { @@ -1001,30 +1002,28 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI result instanceof FalseEdge } - class GuardValue = Boolean; + class GuardValue = IRGuards::GuardValue; class Guard instanceof IRGuards::IRGuardCondition { string toString() { result = super.toString() } - predicate hasValueBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch - ) { + predicate hasValueBranchEdge(IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue branch) { exists(EdgeKind kind | super.getBlock() = bb1 and - kind = getConditionalEdge(branch) and + kind = getConditionalEdge(branch.asBooleanValue()) and bb1.getSuccessor(kind) = bb2 ) } predicate valueControlsBranchEdge( - SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, GuardValue branch + IRCfg::BasicBlock bb1, IRCfg::BasicBlock bb2, GuardValue branch ) { this.hasValueBranchEdge(bb1, bb2, branch) } } - predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, GuardValue branch) { - guard.(IRGuards::IRGuardCondition).controls(bb, branch) + predicate guardDirectlyControlsBlock(Guard guard, IRCfg::BasicBlock bb, GuardValue branch) { + guard.(IRGuards::IRGuardCondition).valueControls(bb, branch) } predicate keepAllPhiInputBackEdges() { any() } @@ -1051,25 +1050,35 @@ module BarrierGuardWithIntParam { ) } - private predicate guardChecks( - DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, - DataFlowIntegrationInput::GuardValue branch, int indirectionIndex + private predicate guardChecksInstr( + IRGuards::Guards_v1::Guard g, IRGuards::GuardsInput::Expr instr, boolean branch, + int indirectionIndex ) { - exists(UseImpl use | - guardChecksNode(g, use.getNode(), branch, indirectionIndex) and - ssaDefReachesCertainUse(def, use) + exists(Node node | + nodeHasInstruction(node, instr, indirectionIndex) and + guardChecksNode(g, node, branch, indirectionIndex) ) } + private predicate guardChecksWithWrappers( + DataFlowIntegrationInput::Guard g, SsaImpl::Definition def, IRGuards::GuardValue val, + int indirectionIndex + ) { + IRGuards::Guards_v1::ValidationWrapperWithState::guardChecksDef(g, def, + val, indirectionIndex) + } + Node getABarrierNode(int indirectionIndex) { // Only get the SynthNodes from the shared implementation, as the ExprNodes cannot // be matched on SourceVariable. result.(SsaSynthNode).getSynthNode() = - DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(indirectionIndex) + DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(indirectionIndex) or // Calculate the guarded UseImpls corresponding to ExprNodes directly. - exists(DataFlowIntegrationInput::Guard g, boolean branch, Definition def, IRBlock bb | - guardChecks(g, def, branch, indirectionIndex) and + exists( + DataFlowIntegrationInput::Guard g, IRGuards::GuardValue branch, Definition def, IRBlock bb + | + guardChecksWithWrappers(g, def, branch, indirectionIndex) and exists(UseImpl use | ssaDefReachesCertainUse(def, use) and use.getBlock() = bb and @@ -1127,7 +1136,15 @@ predicate ssaFlow(Node nodeFrom, Node nodeTo) { */ class PhiNode extends Definition instanceof SsaImpl::PhiNode { /** Gets a definition that is an input to this phi node. */ - final Definition getAnInput() { phiHasInputFromBlock(this, result, _) } + final Definition getAnInput() { this.hasInputFromBlock(result, _) } + + /** + * Holds if `input` is an input to this phi node along the edge originating + * in `bb`. + */ + final predicate hasInputFromBlock(Definition input, IRBlock bb) { + phiHasInputFromBlock(this, input, bb) + } } /** An static single assignment (SSA) definition. */ @@ -1152,10 +1169,53 @@ class Definition extends SsaImpl::Definition { exists(SourceVariable sv, IRBlock bb, int i, UseImpl use | ssaDefReachesRead(sv, this, bb, i) and use.hasIndexInBlock(bb, i, sv) and - result = use.getNode().asOperand() + use = TDirectUseImpl(result, 0) ) } + /** + * Holds if this definition defines the parameter `p` upon entry into the + * enclosing function. + */ + pragma[nomagic] + predicate isParameterDefinition(Parameter p) { + this.getIndirectionIndex() = 0 and + getDefImpl(this).getValue().asInstruction().(InitializeParameterInstruction).getParameter() = p + } + + /** + * Holds if this definition defines the `indirectionIndex`'th indirection of + * parameter `p` upon entry into the enclosing function. + */ + pragma[nomagic] + predicate isIndirectParameterDefinition(Parameter p, int indirectionIndex) { + this.getIndirectionIndex() = indirectionIndex and + indirectionIndex > 0 and + getDefImpl(this).getValue().asInstruction().(InitializeParameterInstruction).getParameter() = p + } + + /** + * Holds if this definition defines the implicit `this` parameter upon entry into + * the enclosing member function. + */ + pragma[nomagic] + predicate isThisDefinition() { + this.getIndirectionIndex() = 0 and + getDefImpl(this).getValue().asInstruction().(InitializeParameterInstruction).hasIndex(-1) + } + + /** + * Holds if this definition defines the implicit `*this` parameter (i.e., the + * indirection of the `this` parameter) upon entry into the enclosing member + * function. + */ + pragma[nomagic] + predicate isIndirectThisDefinition(int indirectionIndex) { + this.getIndirectionIndex() = indirectionIndex and + indirectionIndex > 0 and + getDefImpl(this).getValue().asInstruction().(InitializeParameterInstruction).hasIndex(-1) + } + /** * Gets an `Operand` that represents an indirect use of this definition. * @@ -1170,10 +1230,11 @@ class Definition extends SsaImpl::Definition { * value that was defined by the definition. */ Operand getAnIndirectUse(int indirectionIndex) { + indirectionIndex > 0 and exists(SourceVariable sv, IRBlock bb, int i, UseImpl use | ssaDefReachesRead(sv, this, bb, i) and use.hasIndexInBlock(bb, i, sv) and - result = use.getNode().asIndirectOperand(indirectionIndex) + use = TDirectUseImpl(result, indirectionIndex) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll index 617e2be8cc3..552f504b84b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImplCommon.qll @@ -768,21 +768,3 @@ private module Cached { } import Cached - -/** - * Inputs to the shared SSA library's parameterized module that is shared - * between the SSA pruning stage, and the final SSA stage. - */ -module InputSigCommon { - class BasicBlock extends IRBlock { - ControlFlowNode getNode(int i) { result = this.getInstruction(i) } - - int length() { result = this.getInstructionCount() } - } - - class ControlFlowNode = Instruction; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } -} diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll index 0a0703fe16f..b449b21c3e4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/EdgeKind.qll @@ -2,6 +2,7 @@ * Provides classes that specify the conditions under which control flows along a given edge. */ +private import codeql.controlflow.SuccessorType private import internal.EdgeKindInternal private newtype TEdgeKind = @@ -28,6 +29,21 @@ abstract private class EdgeKindImpl extends TEdgeKind { final class EdgeKind = EdgeKindImpl; +private SuccessorType getAMatchingSpecificSuccessorType(EdgeKind k) { + result.(BooleanSuccessor).getValue() = true and k instanceof TrueEdge + or + result.(BooleanSuccessor).getValue() = false and k instanceof FalseEdge + or + result instanceof ExceptionSuccessor and k instanceof ExceptionEdge +} + +SuccessorType getAMatchingSuccessorType(EdgeKind k) { + result = getAMatchingSpecificSuccessorType(k) + or + not exists(getAMatchingSpecificSuccessorType(k)) and + result instanceof DirectSuccessor +} + /** * A "goto" edge, representing the unconditional successor of an `Instruction` * or `IRBlock`. @@ -36,11 +52,18 @@ class GotoEdge extends EdgeKindImpl, TGotoEdge { final override string toString() { result = "Goto" } } +/** + * A "true" or "false" edge representing a successor of a conditional branch. + */ +abstract private class BooleanEdgeKindImpl extends EdgeKindImpl { } + +final class BooleanEdge = BooleanEdgeKindImpl; + /** * A "true" edge, representing the successor of a conditional branch when the * condition is non-zero. */ -class TrueEdge extends EdgeKindImpl, TTrueEdge { +class TrueEdge extends BooleanEdgeKindImpl, TTrueEdge { final override string toString() { result = "True" } } @@ -48,7 +71,7 @@ class TrueEdge extends EdgeKindImpl, TTrueEdge { * A "false" edge, representing the successor of a conditional branch when the * condition is zero. */ -class FalseEdge extends EdgeKindImpl, TFalseEdge { +class FalseEdge extends BooleanEdgeKindImpl, TFalseEdge { final override string toString() { result = "False" } } @@ -79,19 +102,48 @@ class SehExceptionEdge extends ExceptionEdgeImpl, TSehExceptionEdge { final override string toString() { result = "SEH Exception" } } +/** + * An edge from a `Switch` instruction to one of the cases, or to the default + * branch. + */ +abstract private class SwitchEdgeKindImpl extends EdgeKindImpl { + /** + * Gets the smallest value of the switch expression for which control will flow along this edge. + */ + string getMinValue() { none() } + + /** + * Gets the largest value of the switch expression for which control will flow along this edge. + */ + string getMaxValue() { none() } + + /** + * Gets the unique value of the switch expression for which control will + * flow along this edge, if any. + */ + final string getValue() { result = unique( | | [this.getMinValue(), this.getMaxValue()]) } + + /** Holds if this edge is the default edge. */ + predicate isDefault() { none() } +} + +final class SwitchEdge = SwitchEdgeKindImpl; + /** * A "default" edge, representing the successor of a `Switch` instruction when * none of the case values matches the condition value. */ -class DefaultEdge extends EdgeKindImpl, TDefaultEdge { +class DefaultEdge extends SwitchEdgeKindImpl, TDefaultEdge { final override string toString() { result = "Default" } + + final override predicate isDefault() { any() } } /** * A "case" edge, representing the successor of a `Switch` instruction when the * the condition value matches a corresponding `case` label. */ -class CaseEdge extends EdgeKindImpl, TCaseEdge { +class CaseEdge extends SwitchEdgeKindImpl, TCaseEdge { string minValue; string maxValue; @@ -103,24 +155,9 @@ class CaseEdge extends EdgeKindImpl, TCaseEdge { else result = "Case[" + minValue + ".." + maxValue + "]" } - /** - * Gets the smallest value of the switch expression for which control will flow along this edge. - */ - final string getMinValue() { result = minValue } + final override string getMinValue() { result = minValue } - /** - * Gets the largest value of the switch expression for which control will flow along this edge. - */ - final string getMaxValue() { result = maxValue } - - /** - * Gets the unique value of the switch expression for which control will - * flow along this edge, if any. - */ - final string getValue() { - minValue = maxValue and - result = minValue - } + final override string getMaxValue() { result = maxValue } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll index a564508e16b..8d3e960c3f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/Instruction.qll @@ -1084,6 +1084,12 @@ class BinaryInstruction extends Instruction { or op1 = this.getRightOperand() and op2 = this.getLeftOperand() } + + /** + * Gets the instruction whose result provides the value of the left or right + * operand of this binary instruction. + */ + Instruction getAnInput() { result = this.getLeft() or result = this.getRight() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll index 66d499112b8..f4b5a850a1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -41,7 +41,7 @@ newtype TValueNumber = ) { loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) } or - TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } + TUniqueValueNumber(Instruction instr) { uniqueValueNumber(instr) } /** * A `ConvertInstruction` which converts data of type `T` to data of type `U` @@ -129,12 +129,14 @@ private predicate filteredNumberableInstruction(Instruction instr) { count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 ) + or + count(instr.getEnclosingIRFunction()) != 1 } private predicate variableAddressValueNumber( VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -144,7 +146,7 @@ private predicate variableAddressValueNumber( private predicate initializeParameterValueNumber( InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -154,7 +156,7 @@ private predicate initializeParameterValueNumber( private predicate constantValueNumber( ConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getResultIRType()) = type and instr.getValue() = value } @@ -162,7 +164,7 @@ private predicate constantValueNumber( private predicate stringConstantValueNumber( StringConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and instr.getValue().getValue() = value } @@ -171,7 +173,7 @@ private predicate fieldAddressValueNumber( FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, TValueNumber objectAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getField()) = field and tvalueNumber(instr.getObjectAddress()) = objectAddress } @@ -182,7 +184,7 @@ private predicate binaryValueNumber0( TValueNumber valueNumber ) { not instr instanceof PointerArithmeticInstruction and - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and ( isLeft = true and @@ -206,7 +208,7 @@ private predicate pointerArithmeticValueNumber0( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, boolean isLeft, TValueNumber valueNumber ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and instr.getElementSize() = elementSize and ( @@ -229,7 +231,7 @@ private predicate pointerArithmeticValueNumber( private predicate unaryValueNumber( UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and @@ -242,7 +244,7 @@ private predicate inheritanceConversionValueNumber( InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand and unique( | | instr.getBaseClass()) = baseClass and @@ -254,7 +256,7 @@ private predicate loadTotalOverlapValueNumber0( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, boolean isAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and ( isAddress = true and @@ -277,8 +279,7 @@ private predicate loadTotalOverlapValueNumber( * Holds if `instr` should be assigned a unique value number because this library does not know how * to determine if two instances of that instruction are equivalent. */ -private predicate uniqueValueNumber(Instruction instr, IRFunction irFunc) { - instr.getEnclosingIRFunction() = irFunc and +private predicate uniqueValueNumber(Instruction instr) { not instr.getResultIRType() instanceof IRVoidType and ( not numberableInstruction(instr) @@ -294,10 +295,8 @@ cached TValueNumber tvalueNumber(Instruction instr) { result = nonUniqueValueNumber(instr) or - exists(IRFunction irFunc | - uniqueValueNumber(instr, irFunc) and - result = TUniqueValueNumber(irFunc, instr) - ) + uniqueValueNumber(instr) and + result = TUniqueValueNumber(instr) } /** @@ -311,68 +310,64 @@ TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef * value number. */ private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | - irFunc = instr.getEnclosingIRFunction() and - ( - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = - TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - or - // The value number of a type-preserving conversion is just the value - // number of the unconverted value. - result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) + exists(IRFunction irFunc | irFunc = instr.getEnclosingIRFunction() | + exists(Language::AST ast | + variableAddressValueNumber(instr, irFunc, ast) and + result = TVariableAddressValueNumber(irFunc, ast) ) + or + exists(Language::AST var | + initializeParameterValueNumber(instr, irFunc, var) and + result = TInitializeParameterValueNumber(irFunc, var) + ) + or + exists(string value, IRType type | + constantValueNumber(instr, irFunc, type, value) and + result = TConstantValueNumber(irFunc, type, value) + ) + or + exists(IRType type, string value | + stringConstantValueNumber(instr, irFunc, type, value) and + result = TStringConstantValueNumber(irFunc, type, value) + ) + or + exists(Language::Field field, TValueNumber objectAddress | + fieldAddressValueNumber(instr, irFunc, field, objectAddress) and + result = TFieldAddressValueNumber(irFunc, field, objectAddress) + ) + or + exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | + binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and + result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) + ) + or + exists(Opcode opcode, TValueNumber operand | + unaryValueNumber(instr, irFunc, opcode, operand) and + result = TUnaryValueNumber(irFunc, opcode, operand) + ) + or + exists( + Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand + | + inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and + result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) + ) + or + exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | + pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and + result = TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) + ) + or + exists(IRType type, TValueNumber memOperand, TValueNumber operand | + loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and + result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) + ) + or + // The value number of a copy is just the value number of its source value. + result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll index a564508e16b..8d3e960c3f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/Instruction.qll @@ -1084,6 +1084,12 @@ class BinaryInstruction extends Instruction { or op1 = this.getRightOperand() and op2 = this.getLeftOperand() } + + /** + * Gets the instruction whose result provides the value of the left or right + * operand of this binary instruction. + */ + Instruction getAnInput() { result = this.getLeft() or result = this.getRight() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll index 66d499112b8..f4b5a850a1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/internal/ValueNumberingInternal.qll @@ -41,7 +41,7 @@ newtype TValueNumber = ) { loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) } or - TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } + TUniqueValueNumber(Instruction instr) { uniqueValueNumber(instr) } /** * A `ConvertInstruction` which converts data of type `T` to data of type `U` @@ -129,12 +129,14 @@ private predicate filteredNumberableInstruction(Instruction instr) { count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 ) + or + count(instr.getEnclosingIRFunction()) != 1 } private predicate variableAddressValueNumber( VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -144,7 +146,7 @@ private predicate variableAddressValueNumber( private predicate initializeParameterValueNumber( InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -154,7 +156,7 @@ private predicate initializeParameterValueNumber( private predicate constantValueNumber( ConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getResultIRType()) = type and instr.getValue() = value } @@ -162,7 +164,7 @@ private predicate constantValueNumber( private predicate stringConstantValueNumber( StringConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and instr.getValue().getValue() = value } @@ -171,7 +173,7 @@ private predicate fieldAddressValueNumber( FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, TValueNumber objectAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getField()) = field and tvalueNumber(instr.getObjectAddress()) = objectAddress } @@ -182,7 +184,7 @@ private predicate binaryValueNumber0( TValueNumber valueNumber ) { not instr instanceof PointerArithmeticInstruction and - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and ( isLeft = true and @@ -206,7 +208,7 @@ private predicate pointerArithmeticValueNumber0( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, boolean isLeft, TValueNumber valueNumber ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and instr.getElementSize() = elementSize and ( @@ -229,7 +231,7 @@ private predicate pointerArithmeticValueNumber( private predicate unaryValueNumber( UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and @@ -242,7 +244,7 @@ private predicate inheritanceConversionValueNumber( InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand and unique( | | instr.getBaseClass()) = baseClass and @@ -254,7 +256,7 @@ private predicate loadTotalOverlapValueNumber0( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, boolean isAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and ( isAddress = true and @@ -277,8 +279,7 @@ private predicate loadTotalOverlapValueNumber( * Holds if `instr` should be assigned a unique value number because this library does not know how * to determine if two instances of that instruction are equivalent. */ -private predicate uniqueValueNumber(Instruction instr, IRFunction irFunc) { - instr.getEnclosingIRFunction() = irFunc and +private predicate uniqueValueNumber(Instruction instr) { not instr.getResultIRType() instanceof IRVoidType and ( not numberableInstruction(instr) @@ -294,10 +295,8 @@ cached TValueNumber tvalueNumber(Instruction instr) { result = nonUniqueValueNumber(instr) or - exists(IRFunction irFunc | - uniqueValueNumber(instr, irFunc) and - result = TUniqueValueNumber(irFunc, instr) - ) + uniqueValueNumber(instr) and + result = TUniqueValueNumber(instr) } /** @@ -311,68 +310,64 @@ TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef * value number. */ private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | - irFunc = instr.getEnclosingIRFunction() and - ( - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = - TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - or - // The value number of a type-preserving conversion is just the value - // number of the unconverted value. - result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) + exists(IRFunction irFunc | irFunc = instr.getEnclosingIRFunction() | + exists(Language::AST ast | + variableAddressValueNumber(instr, irFunc, ast) and + result = TVariableAddressValueNumber(irFunc, ast) ) + or + exists(Language::AST var | + initializeParameterValueNumber(instr, irFunc, var) and + result = TInitializeParameterValueNumber(irFunc, var) + ) + or + exists(string value, IRType type | + constantValueNumber(instr, irFunc, type, value) and + result = TConstantValueNumber(irFunc, type, value) + ) + or + exists(IRType type, string value | + stringConstantValueNumber(instr, irFunc, type, value) and + result = TStringConstantValueNumber(irFunc, type, value) + ) + or + exists(Language::Field field, TValueNumber objectAddress | + fieldAddressValueNumber(instr, irFunc, field, objectAddress) and + result = TFieldAddressValueNumber(irFunc, field, objectAddress) + ) + or + exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | + binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and + result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) + ) + or + exists(Opcode opcode, TValueNumber operand | + unaryValueNumber(instr, irFunc, opcode, operand) and + result = TUnaryValueNumber(irFunc, opcode, operand) + ) + or + exists( + Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand + | + inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and + result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) + ) + or + exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | + pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and + result = TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) + ) + or + exists(IRType type, TValueNumber memOperand, TValueNumber operand | + loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and + result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) + ) + or + // The value number of a copy is just the value number of its source value. + result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll index d864e86aa04..be3f680aa16 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/InstructionTag.qll @@ -97,7 +97,14 @@ newtype TInstructionTag = exists(Stmt s | exists(s.getImplicitDestructorCall(index))) } or CoAwaitBranchTag() or - BoolToIntConversionTag() + BoolToIntConversionTag() or + SizeofVlaBaseSizeTag() or + SizeofVlaConversionTag(int index) { + exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index))) + } or + SizeofVlaDimensionTag(int index) { + exists(VlaDeclStmt v | exists(v.getTransitiveVlaDimensionStmt(index))) + } class InstructionTag extends TInstructionTag { final string toString() { result = getInstructionTagId(this) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll index e1314035437..330362f5560 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll @@ -123,13 +123,16 @@ private predicate ignoreExprAndDescendants(Expr expr) { // or ignoreExprAndDescendants(getRealParent(expr)) // recursive case or - // va_start doesn't evaluate its argument, so we don't need to translate it. + // va_start does not evaluate its argument, so we do not need to translate it. exists(BuiltInVarArgsStart vaStartExpr | vaStartExpr.getLastNamedParameter().getFullyConverted() = expr ) or + // sizeof does not evaluate its argument, so we do not need to translate it. + exists(SizeofExprOperator sizeofExpr | sizeofExpr.getExprOperand().getFullyConverted() = expr) + or // The children of C11 _Generic expressions are just surface syntax. - exists(C11GenericExpr generic | generic.getAChild() = expr) + exists(C11GenericExpr generic | generic.getAChild().getFullyConverted() = expr) or // Do not translate implicit destructor calls for unnamed temporary variables that are // conditionally constructed (until we have a mechanism for calling these only when the diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll index f7786fcf290..6024a881c5f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll @@ -187,7 +187,7 @@ Variable getEnclosingVariable(Expr e) { } /** - * The IR translation of the "core" part of an expression. This is the part of + * The IR translation of the "core" part of an expression. This is the part of * the expression that produces the result value of the expression, before any * lvalue-to-rvalue conversion on the result. Every expression has a single * `TranslatedCoreExpr`. @@ -3884,7 +3884,7 @@ class TranslatedNewExpr extends TranslatedNewOrNewArrayExpr { final override Type getTargetType() { result = expr.getAllocatedType().getUnspecifiedType() } final override TranslatedInitialization getInitialization() { - result = getTranslatedInitialization(expr.getInitializer()) + result = getTranslatedInitialization(expr.getInitializer().getFullyConverted()) } } @@ -4094,6 +4094,155 @@ class TranslatedStmtExpr extends TranslatedNonConstantExpr { TranslatedStmt getStmt() { result = getTranslatedStmt(expr.getStmt()) } } +private VlaDeclStmt getVlaDeclStmt(Expr expr, int pointerDerefCount) { + expr.(VariableAccess).getTarget() = result.getVariable() and + pointerDerefCount = 0 + or + not expr.(PointerDereferenceExpr).getOperand() instanceof AddressOfExpr and + result = getVlaDeclStmt(expr.(PointerDereferenceExpr).getOperand(), pointerDerefCount - 1) + or + // Skip sequences of the form `*&...` + result = + getVlaDeclStmt(expr.(PointerDereferenceExpr).getOperand().(AddressOfExpr).getOperand(), + pointerDerefCount) + or + result = getVlaDeclStmt(expr.(ArrayExpr).getArrayBase(), pointerDerefCount - 1) +} + +/** + * The IR translation of `SizeofExprOperator` when its result is non-constant, i.e., + * when the operand expression refers to a variable length array. + */ +class TranslatedSizeofExpr extends TranslatedNonConstantExpr { + override SizeofExprOperator expr; + VlaDeclStmt vlaDeclStmt; + int vlaDimensions; + int pointerDerefCount; + + TranslatedSizeofExpr() { + vlaDeclStmt = getVlaDeclStmt(expr.getExprOperand(), pointerDerefCount) and + vlaDimensions = vlaDeclStmt.getTransitiveNumberOfVlaDimensionStmts() and + pointerDerefCount < vlaDimensions + } + + final override Instruction getFirstInstruction(EdgeKind kind) { + result = this.getInstruction(SizeofVlaBaseSizeTag()) and + kind instanceof GotoEdge + } + + override Instruction getALastInstructionInternal() { + result = this.getInstruction(SizeofVlaDimensionTag(vlaDimensions - 1)) + } + + final override TranslatedElement getChildInternal(int id) { none() } + + final override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) { + opcode instanceof Opcode::Constant and + tag = SizeofVlaBaseSizeTag() and + resultType = this.getResultType() + or + exists(int n, Type dimType | + pointerDerefCount <= n and + n < vlaDimensions and + dimType = this.getDimensionExpr(n).getUnderlyingType() and + tag = SizeofVlaConversionTag(n) + | + ( + expr.getUnderlyingType() = dimType and + opcode instanceof Opcode::CopyValue + or + not expr.getUnderlyingType() = dimType and + opcode instanceof Opcode::Convert + ) + ) and + resultType = this.getResultType() + or + opcode instanceof Opcode::Mul and + exists(int n | pointerDerefCount <= n and n < vlaDimensions | tag = SizeofVlaDimensionTag(n)) and + resultType = this.getResultType() + } + + final override Instruction getInstructionSuccessorInternal(InstructionTag tag, EdgeKind kind) { + tag = SizeofVlaBaseSizeTag() and + result = this.getInstruction(SizeofVlaConversionTag(pointerDerefCount)) and + kind instanceof GotoEdge + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaConversionTag(n) and + result = this.getInstruction(SizeofVlaDimensionTag(n)) + ) and + kind instanceof GotoEdge + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions - 1 | + tag = SizeofVlaDimensionTag(n) and + result = this.getInstruction(SizeofVlaConversionTag(n + 1)) + ) and + kind instanceof GotoEdge + or + tag = SizeofVlaDimensionTag(vlaDimensions - 1) and + result = this.getParent().getChildSuccessor(this, kind) + } + + override string getInstructionConstantValue(InstructionTag tag) { + tag = SizeofVlaBaseSizeTag() and + result = this.getBaseType(vlaDeclStmt).getSize().toString() + } + + private Type getBaseType(VlaDeclStmt v) { + not exists(v.getParentVlaDecl()) and + ( + result = + this.getBaseType(v.getVariable().getUnderlyingType(), v.getNumberOfVlaDimensionStmts()) + or + result = this.getBaseType(v.getType().getUnderlyingType(), v.getNumberOfVlaDimensionStmts()) + ) + or + result = this.getBaseType(v.getParentVlaDecl()) + } + + private Type getBaseType(Type type, int n) { + n = 0 and + result = type + or + result = this.getBaseType(type.(DerivedType).getBaseType(), n - 1) + } + + override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) { + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaConversionTag(n) and + ( + operandTag instanceof UnaryOperandTag and + result = getTranslatedExpr(this.getDimensionExpr(n)).getResult() + ) + ) + or + exists(int n | pointerDerefCount <= n and n < vlaDimensions | + tag = SizeofVlaDimensionTag(n) and + ( + operandTag instanceof LeftOperandTag and + ( + n - 1 >= pointerDerefCount and + result = this.getInstruction(SizeofVlaDimensionTag(n - 1)) + or + n - 1 < pointerDerefCount and + result = this.getInstruction(SizeofVlaBaseSizeTag()) + ) + or + operandTag instanceof RightOperandTag and + result = this.getInstruction(SizeofVlaConversionTag(n)) + ) + ) + } + + private Expr getDimensionExpr(int n) { + result = vlaDeclStmt.getTransitiveVlaDimensionStmt(n).getDimensionExpr().getFullyConverted() + } + + final override Instruction getResult() { + result = this.getInstruction(SizeofVlaDimensionTag(vlaDimensions - 1)) + } +} + class TranslatedErrorExpr extends TranslatedSingleInstructionExpr { override ErrorExpr expr; diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll index 83736ae98d0..26f5393db10 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll @@ -50,7 +50,7 @@ CppType getEllipsisVariablePRValueType() { CppType getEllipsisVariableGLValueType() { result = getTypeForGLValue(any(UnknownType t)) } /** - * Holds if the function returns a value, as opposed to returning `void`. + * Holds if the function `func` returns a value, as opposed to returning `void`. */ predicate hasReturnValue(Function func) { not func.getUnspecifiedType() instanceof VoidType } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll index 3914c5e8e59..9dccf7752aa 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll @@ -601,7 +601,7 @@ class TranslatedReturnVoidStmt extends TranslatedReturnStmt { * The IR translation of an implicit `return` statement generated by the extractor to handle control * flow that reaches the end of a non-`void`-returning function body. Such control flow * produces undefined behavior in C++ but not in C. However even in C using the return value is - * undefined behaviour. We make it return uninitialized memory to get as much flow as possible. + * undefined behavior. We make it return uninitialized memory to get as much flow as possible. */ class TranslatedNoValueReturnStmt extends TranslatedReturnStmt, TranslatedVariableInitialization { TranslatedNoValueReturnStmt() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll index 50395db47e7..7f7c5cd0a4d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRBlock.qll @@ -7,6 +7,7 @@ import Instruction private import internal.IRBlockImports as Imports import Imports::EdgeKind private import Cached +private import codeql.controlflow.BasicBlock as BB /** * Holds if `block` is a block in `func` and `sortOverride`, `sortKey1`, and `sortKey2` are the @@ -263,6 +264,54 @@ private predicate isEntryBlock(TIRBlock block) { block = MkIRBlock(any(EnterFunctionInstruction enter)) } +module IRCfg implements BB::CfgSig { + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Instruction; + + final private class FinalIRBlock = IRBlock; + + class BasicBlock extends FinalIRBlock { + ControlFlowNode getNode(int i) { result = this.getInstruction(i) } + + ControlFlowNode getLastNode() { result = super.getLastInstruction() } + + int length() { result = this.getInstructionCount() } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + exists(EdgeKind k | + result = super.getSuccessor(k) and + t = getAMatchingSuccessorType(k) + ) + } + + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + BasicBlock getImmediateDominator() { result.immediatelyDominates(this) } + + predicate inDominanceFrontier(BasicBlock df) { super.dominanceFrontier() = df } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { isEntryBlock(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } +} + cached private module Cached { cached diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll index a564508e16b..8d3e960c3f8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/Instruction.qll @@ -1084,6 +1084,12 @@ class BinaryInstruction extends Instruction { or op1 = this.getRightOperand() and op2 = this.getLeftOperand() } + + /** + * Gets the instruction whose result provides the value of the left or right + * operand of this binary instruction. + */ + Instruction getAnInput() { result = this.getLeft() or result = this.getRight() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll index 66d499112b8..f4b5a850a1f 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/internal/ValueNumberingInternal.qll @@ -41,7 +41,7 @@ newtype TValueNumber = ) { loadTotalOverlapValueNumber(_, irFunc, type, memOperand, operand) } or - TUniqueValueNumber(IRFunction irFunc, Instruction instr) { uniqueValueNumber(instr, irFunc) } + TUniqueValueNumber(Instruction instr) { uniqueValueNumber(instr) } /** * A `ConvertInstruction` which converts data of type `T` to data of type `U` @@ -129,12 +129,14 @@ private predicate filteredNumberableInstruction(Instruction instr) { count(instr.(InheritanceConversionInstruction).getBaseClass()) != 1 or count(instr.(InheritanceConversionInstruction).getDerivedClass()) != 1 ) + or + count(instr.getEnclosingIRFunction()) != 1 } private predicate variableAddressValueNumber( VariableAddressInstruction instr, IRFunction irFunc, Language::AST ast ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -144,7 +146,7 @@ private predicate variableAddressValueNumber( private predicate initializeParameterValueNumber( InitializeParameterInstruction instr, IRFunction irFunc, Language::AST var ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and // The underlying AST element is used as value-numbering key instead of the // `IRVariable` to work around a problem where a variable or expression with // multiple types gives rise to multiple `IRVariable`s. @@ -154,7 +156,7 @@ private predicate initializeParameterValueNumber( private predicate constantValueNumber( ConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getResultIRType()) = type and instr.getValue() = value } @@ -162,7 +164,7 @@ private predicate constantValueNumber( private predicate stringConstantValueNumber( StringConstantInstruction instr, IRFunction irFunc, IRType type, string value ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and instr.getValue().getValue() = value } @@ -171,7 +173,7 @@ private predicate fieldAddressValueNumber( FieldAddressInstruction instr, IRFunction irFunc, Language::Field field, TValueNumber objectAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and unique( | | instr.getField()) = field and tvalueNumber(instr.getObjectAddress()) = objectAddress } @@ -182,7 +184,7 @@ private predicate binaryValueNumber0( TValueNumber valueNumber ) { not instr instanceof PointerArithmeticInstruction and - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and ( isLeft = true and @@ -206,7 +208,7 @@ private predicate pointerArithmeticValueNumber0( PointerArithmeticInstruction instr, IRFunction irFunc, Opcode opcode, int elementSize, boolean isLeft, TValueNumber valueNumber ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and instr.getElementSize() = elementSize and ( @@ -229,7 +231,7 @@ private predicate pointerArithmeticValueNumber( private predicate unaryValueNumber( UnaryInstruction instr, IRFunction irFunc, Opcode opcode, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and not instr instanceof InheritanceConversionInstruction and not instr instanceof CopyInstruction and not instr instanceof FieldAddressInstruction and @@ -242,7 +244,7 @@ private predicate inheritanceConversionValueNumber( InheritanceConversionInstruction instr, IRFunction irFunc, Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getOpcode() = opcode and tvalueNumber(instr.getUnary()) = operand and unique( | | instr.getBaseClass()) = baseClass and @@ -254,7 +256,7 @@ private predicate loadTotalOverlapValueNumber0( LoadTotalOverlapInstruction instr, IRFunction irFunc, IRType type, TValueNumber valueNumber, boolean isAddress ) { - instr.getEnclosingIRFunction() = irFunc and + unique( | | instr.getEnclosingIRFunction()) = irFunc and instr.getResultIRType() = type and ( isAddress = true and @@ -277,8 +279,7 @@ private predicate loadTotalOverlapValueNumber( * Holds if `instr` should be assigned a unique value number because this library does not know how * to determine if two instances of that instruction are equivalent. */ -private predicate uniqueValueNumber(Instruction instr, IRFunction irFunc) { - instr.getEnclosingIRFunction() = irFunc and +private predicate uniqueValueNumber(Instruction instr) { not instr.getResultIRType() instanceof IRVoidType and ( not numberableInstruction(instr) @@ -294,10 +295,8 @@ cached TValueNumber tvalueNumber(Instruction instr) { result = nonUniqueValueNumber(instr) or - exists(IRFunction irFunc | - uniqueValueNumber(instr, irFunc) and - result = TUniqueValueNumber(irFunc, instr) - ) + uniqueValueNumber(instr) and + result = TUniqueValueNumber(instr) } /** @@ -311,68 +310,64 @@ TValueNumber tvalueNumberOfOperand(Operand op) { result = tvalueNumber(op.getDef * value number. */ private TValueNumber nonUniqueValueNumber(Instruction instr) { - exists(IRFunction irFunc | - irFunc = instr.getEnclosingIRFunction() and - ( - exists(Language::AST ast | - variableAddressValueNumber(instr, irFunc, ast) and - result = TVariableAddressValueNumber(irFunc, ast) - ) - or - exists(Language::AST var | - initializeParameterValueNumber(instr, irFunc, var) and - result = TInitializeParameterValueNumber(irFunc, var) - ) - or - exists(string value, IRType type | - constantValueNumber(instr, irFunc, type, value) and - result = TConstantValueNumber(irFunc, type, value) - ) - or - exists(IRType type, string value | - stringConstantValueNumber(instr, irFunc, type, value) and - result = TStringConstantValueNumber(irFunc, type, value) - ) - or - exists(Language::Field field, TValueNumber objectAddress | - fieldAddressValueNumber(instr, irFunc, field, objectAddress) and - result = TFieldAddressValueNumber(irFunc, field, objectAddress) - ) - or - exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | - binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and - result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) - ) - or - exists(Opcode opcode, TValueNumber operand | - unaryValueNumber(instr, irFunc, opcode, operand) and - result = TUnaryValueNumber(irFunc, opcode, operand) - ) - or - exists( - Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand - | - inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and - result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) - ) - or - exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | - pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and - result = - TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) - ) - or - exists(IRType type, TValueNumber memOperand, TValueNumber operand | - loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and - result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) - ) - or - // The value number of a copy is just the value number of its source value. - result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) - or - // The value number of a type-preserving conversion is just the value - // number of the unconverted value. - result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) + exists(IRFunction irFunc | irFunc = instr.getEnclosingIRFunction() | + exists(Language::AST ast | + variableAddressValueNumber(instr, irFunc, ast) and + result = TVariableAddressValueNumber(irFunc, ast) ) + or + exists(Language::AST var | + initializeParameterValueNumber(instr, irFunc, var) and + result = TInitializeParameterValueNumber(irFunc, var) + ) + or + exists(string value, IRType type | + constantValueNumber(instr, irFunc, type, value) and + result = TConstantValueNumber(irFunc, type, value) + ) + or + exists(IRType type, string value | + stringConstantValueNumber(instr, irFunc, type, value) and + result = TStringConstantValueNumber(irFunc, type, value) + ) + or + exists(Language::Field field, TValueNumber objectAddress | + fieldAddressValueNumber(instr, irFunc, field, objectAddress) and + result = TFieldAddressValueNumber(irFunc, field, objectAddress) + ) + or + exists(Opcode opcode, TValueNumber leftOperand, TValueNumber rightOperand | + binaryValueNumber(instr, irFunc, opcode, leftOperand, rightOperand) and + result = TBinaryValueNumber(irFunc, opcode, leftOperand, rightOperand) + ) + or + exists(Opcode opcode, TValueNumber operand | + unaryValueNumber(instr, irFunc, opcode, operand) and + result = TUnaryValueNumber(irFunc, opcode, operand) + ) + or + exists( + Opcode opcode, Language::Class baseClass, Language::Class derivedClass, TValueNumber operand + | + inheritanceConversionValueNumber(instr, irFunc, opcode, baseClass, derivedClass, operand) and + result = TInheritanceConversionValueNumber(irFunc, opcode, baseClass, derivedClass, operand) + ) + or + exists(Opcode opcode, int elementSize, TValueNumber leftOperand, TValueNumber rightOperand | + pointerArithmeticValueNumber(instr, irFunc, opcode, elementSize, leftOperand, rightOperand) and + result = TPointerArithmeticValueNumber(irFunc, opcode, elementSize, leftOperand, rightOperand) + ) + or + exists(IRType type, TValueNumber memOperand, TValueNumber operand | + loadTotalOverlapValueNumber(instr, irFunc, type, memOperand, operand) and + result = TLoadTotalOverlapValueNumber(irFunc, type, memOperand, operand) + ) + or + // The value number of a copy is just the value number of its source value. + result = tvalueNumber(instr.(CongruentCopyInstruction).getSourceValue()) + or + // The value number of a type-preserving conversion is just the value + // number of the unconverted value. + result = tvalueNumber(instr.(TypePreservingConvertInstruction).getUnary()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll index bfd850384ac..c42f734a62a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRUtilities.qll @@ -49,7 +49,8 @@ Type getVariableType(Variable v) { } /** - * Holds if the database contains a `case` label with the specified minimum and maximum value. + * Holds if the database contains a `switchCase` label with the specified minimum `minValue` + * and maximum `maxValue` value. */ predicate hasCaseEdge(SwitchCase switchCase, string minValue, string maxValue) { minValue = switchCase.getExpr().getFullyConverted().getValue() and diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll index 311847e8aec..dc1302d3b8f 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memcpy.qll @@ -12,8 +12,8 @@ import semmle.code.cpp.models.interfaces.Taint import semmle.code.cpp.models.interfaces.NonThrowing /** - * The standard functions `memcpy`, `memmove` and `bcopy`; and the gcc variant - * `__builtin___memcpy_chk`. + * The standard functions `memcpy`, `memmove` and `bcopy`; and variants such as + * `__builtin___memcpy_chk` and `__builtin___memmove_chk`. */ private class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffectFunction, AliasFunction, NonCppThrowingFunction @@ -27,7 +27,9 @@ private class MemcpyFunction extends ArrayFunction, DataFlowFunction, SideEffect // bcopy(src, dest, num) // mempcpy(dest, src, num) // memccpy(dest, src, c, n) - this.hasGlobalName(["bcopy", mempcpy(), "memccpy", "__builtin___memcpy_chk"]) + this.hasGlobalName([ + "bcopy", mempcpy(), "memccpy", "__builtin___memcpy_chk", "__builtin___memmove_chk" + ]) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll index 51234e50f94..f7d3f50234c 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Memset.qll @@ -19,7 +19,8 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias this.hasGlobalOrStdName("wmemset") or this.hasGlobalName([ - bzero(), "__builtin_memset", "__builtin_memset_chk", "RtlZeroMemory", "RtlSecureZeroMemory" + bzero(), "__builtin_memset", "__builtin_memset_chk", "__builtin___memset_chk", + "RtlZeroMemory", "RtlSecureZeroMemory" ]) } @@ -32,7 +33,7 @@ private class MemsetFunctionModel extends ArrayFunction, DataFlowFunction, Alias or this.hasGlobalOrStdName("wmemset") or - this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk"]) + this.hasGlobalName(["__builtin_memset", "__builtin_memset_chk", "__builtin___memset_chk"]) ) and result = 1 } diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll index 966c7425dc4..df16d220e02 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcat.qll @@ -30,7 +30,9 @@ class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, Sid "_mbsncat", // _mbsncat(dst, src, max_amount) "_mbsncat_l", // _mbsncat_l(dst, src, max_amount, locale) "_mbsnbcat", // _mbsnbcat(dest, src, count) - "_mbsnbcat_l" // _mbsnbcat_l(dest, src, count, locale) + "_mbsnbcat_l", // _mbsnbcat_l(dest, src, count, locale) + "__builtin___strcat_chk", // __builtin___strcat_chk (dest, src, magic) + "__builtin___strncat_chk" // __builtin___strncat_chk (dest, src, max_amount, magic) ]) } @@ -56,7 +58,7 @@ class StrcatFunction extends TaintFunction, DataFlowFunction, ArrayFunction, Sid override predicate hasTaintFlow(FunctionInput input, FunctionOutput output) { ( - this.getName() = ["strncat", "wcsncat", "_mbsncat", "_mbsncat_l"] and + this.getName() = ["strncat", "wcsncat", "_mbsncat", "_mbsncat_l", "__builtin___strncat_chk"] and input.isParameter(2) or this.getName() = ["_mbsncat_l", "_mbsnbcat_l"] and diff --git a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll index b7ed20f1bab..b3230a5a1c8 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/implementations/Strcpy.qll @@ -36,7 +36,11 @@ class StrcpyFunction extends ArrayFunction, DataFlowFunction, TaintFunction, Sid "_mbsnbcpy", // _mbsnbcpy(dest, src, max_amount) "stpcpy", // stpcpy(dest, src) "stpncpy", // stpncpy(dest, src, max_amount) - "strlcpy" // strlcpy(dst, src, dst_size) + "strlcpy", // strlcpy(dst, src, dst_size) + "__builtin___strcpy_chk", // __builtin___strcpy_chk (dest, src, magic) + "__builtin___stpcpy_chk", // __builtin___stpcpy_chk (dest, src, magic) + "__builtin___stpncpy_chk", // __builtin___stpncpy_chk(dest, src, max_amount, magic) + "__builtin___strncpy_chk" // __builtin___strncpy_chk (dest, src, max_amount, magic) ]) or ( diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll index ce65a65319a..757db13fe8c 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll @@ -170,6 +170,16 @@ abstract class FormattingFunction extends ArrayFunction, TaintFunction { output.isParameterDeref(this.getOutputParameterIndex(_)) ) } + + final override predicate isPartialWrite(FunctionOutput output) { + exists(int outputParameterIndex | + output.isParameterDeref(outputParameterIndex) and + // We require the output to be a stream since that definitely means that + // it's a partial write. If it's not a stream then it will most likely + // fill the whole buffer. + outputParameterIndex = this.getOutputParameterIndex(true) + ) + } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll index 9c8ee43b52a..d81bc960988 100644 --- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll +++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FunctionInputsAndOutputs.qll @@ -371,7 +371,7 @@ class FunctionOutput extends TFunctionOutput { /** * Holds if this is the output value pointed to by a pointer parameter to a function, or the * output value referred to by a reference parameter to a function, where the parameter has - * index `index`. + * index `i`. * * Example: * ``` @@ -389,7 +389,7 @@ class FunctionOutput extends TFunctionOutput { /** * Holds if this is the output value pointed to by a pointer parameter (through `ind` number * of indirections) to a function, or the output value referred to by a reference parameter to - * a function, where the parameter has index `index`. + * a function, where the parameter has index `i`. * * Example: * ``` diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/RangeAnalysisUtils.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/RangeAnalysisUtils.qll index 07c6ee1cd2b..2423a3a71a0 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/RangeAnalysisUtils.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/RangeAnalysisUtils.qll @@ -1,10 +1,10 @@ import cpp /** - * Describes whether a relation is 'strict' (that is, a `<` or `>` + * The strictness of a relation. Either 'strict' (that is, a `<` or `>` * relation) or 'non-strict' (a `<=` or `>=` relation). */ -newtype RelationStrictness = +newtype TRelationStrictness = /** * Represents that a relation is 'strict' (that is, a `<` or `>` relation). */ @@ -14,6 +14,19 @@ newtype RelationStrictness = */ Nonstrict() +/** + * The strictness of a relation. Either 'strict' (that is, a `<` or `>` + * relation) or 'non-strict' (a `<=` or `>=` relation). + */ +class RelationStrictness extends TRelationStrictness { + /** Gets the string representation of this relation strictness. */ + string toString() { + this = Strict() and result = "strict" + or + this = Nonstrict() and result = "non-strict" + } +} + /** * Describes whether a relation is 'greater' (that is, a `>` or `>=` * relation) or 'lesser' (a `<` or `<=` relation). @@ -105,10 +118,10 @@ predicate relOpWithSwap( * * This allows for the relation to be either as written, or with its * arguments reversed; for example, if `rel` is `x < 5` then - * `relOpWithSwapAndNegate(rel, x, 5, Lesser(), Strict(), true)`, - * `relOpWithSwapAndNegate(rel, 5, x, Greater(), Strict(), true)`, - * `relOpWithSwapAndNegate(rel, x, 5, Greater(), Nonstrict(), false)` and - * `relOpWithSwapAndNegate(rel, 5, x, Lesser(), Nonstrict(), false)` hold. + * - `relOpWithSwapAndNegate(rel, x, 5, Lesser(), Strict(), true)`, + * - `relOpWithSwapAndNegate(rel, 5, x, Greater(), Strict(), true)`, + * - `relOpWithSwapAndNegate(rel, x, 5, Greater(), Nonstrict(), false)` and + * - `relOpWithSwapAndNegate(rel, 5, x, Lesser(), Nonstrict(), false)` hold. */ predicate relOpWithSwapAndNegate( RelationalOperation rel, Expr a, Expr b, RelationDirection dir, RelationStrictness strict, diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 673d0c3c4ea..95cdb2624b5 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -99,25 +99,24 @@ private float wideningUpperBounds(ArithmeticType t) { * compilation units, which doesn't necessarily have a getValue() result from the extractor. */ private string getValue(Expr e) { - if exists(e.getValue()) - then result = e.getValue() - else - /* - * It should be safe to propagate the initialization value to a variable if: - * The type of v is const, and - * The type of v is not volatile, and - * Either: - * v is a local/global variable, or - * v is a static member variable - */ + result = e.getValue() + or + not exists(e.getValue()) and + /* + * It should be safe to propagate the initialization value to a variable if: + * The type of v is const, and + * The type of v is not volatile, and + * Either: + * v is a local/global variable, or + * v is a static member variable + */ - exists(VariableAccess access, StaticStorageDurationVariable v | - not v.getUnderlyingType().isVolatile() and - v.getUnderlyingType().isConst() and - e = access and - v = access.getTarget() and - result = getValue(v.getAnAssignedValue()) - ) + exists(StaticStorageDurationVariable v | + not v.getUnderlyingType().isVolatile() and + v.getUnderlyingType().isConst() and + v = e.(VariableAccess).getTarget() and + result = getValue(v.getAnAssignedValue()) + ) } /** @@ -890,7 +889,7 @@ private float getLowerBoundsImpl(Expr expr) { // equal to `min(-y + 1,y - 1)`. exists(float childLB | childLB = getFullyConvertedLowerBounds(remExpr.getAnOperand()) and - not childLB >= 0 + childLB < 0 | result = getFullyConvertedLowerBounds(remExpr.getRightOperand()) - 1 or @@ -1102,8 +1101,7 @@ private float getUpperBoundsImpl(Expr expr) { // adding `-rhsLB` to the set of upper bounds. exists(float rhsLB | rhsLB = getFullyConvertedLowerBounds(remExpr.getRightOperand()) and - not rhsLB >= 0 - | + rhsLB < 0 and result = -rhsLB + 1 ) ) @@ -1248,8 +1246,7 @@ private float getPhiLowerBounds(StackVariable v, RangeSsaDefinition phi) { exists(VariableAccess access, Expr guard, boolean branch, float defLB, float guardLB | phi.isGuardPhi(v, access, guard, branch) and lowerBoundFromGuard(guard, access, guardLB, branch) and - defLB = getFullyConvertedLowerBounds(access) - | + defLB = getFullyConvertedLowerBounds(access) and // Compute the maximum of `guardLB` and `defLB`. if guardLB > defLB then result = guardLB else result = defLB ) @@ -1273,8 +1270,7 @@ private float getPhiUpperBounds(StackVariable v, RangeSsaDefinition phi) { exists(VariableAccess access, Expr guard, boolean branch, float defUB, float guardUB | phi.isGuardPhi(v, access, guard, branch) and upperBoundFromGuard(guard, access, guardUB, branch) and - defUB = getFullyConvertedUpperBounds(access) - | + defUB = getFullyConvertedUpperBounds(access) and // Compute the minimum of `guardUB` and `defUB`. if guardUB < defUB then result = guardUB else result = defUB ) @@ -1438,8 +1434,7 @@ private predicate upperBoundFromGuard(Expr guard, VariableAccess v, float ub, bo } /** - * This predicate simplifies the results returned by - * `linearBoundFromGuard`. + * This predicate simplifies the results returned by `linearBoundFromGuard`. */ private predicate boundFromGuard( Expr guard, VariableAccess v, float boundValue, boolean isLowerBound, @@ -1447,22 +1442,10 @@ private predicate boundFromGuard( ) { exists(float p, float q, float r, boolean isLB | linearBoundFromGuard(guard, v, p, q, r, isLB, strictness, branch) and - boundValue = (r - q) / p - | + boundValue = (r - q) / p and // If the multiplier is negative then the direction of the comparison // needs to be flipped. - p > 0 and isLowerBound = isLB - or - p < 0 and isLowerBound = isLB.booleanNot() - ) - or - // When `!e` is true, we know that `0 <= e <= 0` - exists(float p, float q, Expr e | - linearAccess(e, v, p, q) and - eqZeroWithNegate(guard, e, true, branch) and - boundValue = (0.0 - q) / p and - isLowerBound = [false, true] and - strictness = Nonstrict() + if p < 0 then isLowerBound = isLB.booleanNot() else isLowerBound = isLB ) } @@ -1472,54 +1455,57 @@ private predicate boundFromGuard( * lower or upper bound for `v`. */ private predicate linearBoundFromGuard( - ComparisonOperation guard, VariableAccess v, float p, float q, float boundValue, + Expr guard, VariableAccess v, float p, float q, float r, boolean isLowerBound, // Is this a lower or an upper bound? RelationStrictness strictness, boolean branch // Which control-flow branch is this bound valid on? ) { - // For the comparison x < RHS, we create two bounds: - // - // 1. x < upperbound(RHS) - // 2. x >= typeLowerBound(RHS.getUnspecifiedType()) - // - exists(Expr lhs, Expr rhs, RelationDirection dir, RelationStrictness st | - linearAccess(lhs, v, p, q) and - relOpWithSwapAndNegate(guard, lhs, rhs, dir, st, branch) - | - isLowerBound = directionIsGreater(dir) and - strictness = st and - getBounds(rhs, boundValue, isLowerBound) + exists(Expr lhs | linearAccess(lhs, v, p, q) | + // For the comparison x < RHS, we create the following bounds: + // 1. x < upperbound(RHS) + // 2. x >= typeLowerBound(RHS.getUnspecifiedType()) + exists(Expr rhs, RelationDirection dir, RelationStrictness st | + relOpWithSwapAndNegate(guard, lhs, rhs, dir, st, branch) + | + isLowerBound = directionIsGreater(dir) and + strictness = st and + r = getBounds(rhs, isLowerBound) + or + isLowerBound = directionIsLesser(dir) and + strictness = Nonstrict() and + r = getExprTypeBounds(rhs, isLowerBound) + ) or - isLowerBound = directionIsLesser(dir) and - strictness = Nonstrict() and - exprTypeBounds(rhs, boundValue, isLowerBound) - ) - or - // For x == RHS, we create the following bounds: - // - // 1. x <= upperbound(RHS) - // 2. x >= lowerbound(RHS) - // - exists(Expr lhs, Expr rhs | - linearAccess(lhs, v, p, q) and - eqOpWithSwapAndNegate(guard, lhs, rhs, true, branch) and - getBounds(rhs, boundValue, isLowerBound) and + // For x == RHS, we create the following bounds: + // 1. x <= upperbound(RHS) + // 2. x >= lowerbound(RHS) + exists(Expr rhs | + eqOpWithSwapAndNegate(guard, lhs, rhs, true, branch) and + r = getBounds(rhs, isLowerBound) and + strictness = Nonstrict() + ) + or + // When `x` is equal to 0 we create the following bounds: + // 1. x <= 0 + // 2. x >= 0 + eqZeroWithNegate(guard, lhs, true, branch) and + r = 0.0 and + isLowerBound = [false, true] and strictness = Nonstrict() ) - // x != RHS and !x are handled elsewhere +} + +/** Get the fully converted lower or upper bounds of `expr` based on `isLowerBound`. */ +private float getBounds(Expr expr, boolean isLowerBound) { + isLowerBound = true and result = getFullyConvertedLowerBounds(expr) + or + isLowerBound = false and result = getFullyConvertedUpperBounds(expr) } /** Utility for `linearBoundFromGuard`. */ -private predicate getBounds(Expr expr, float boundValue, boolean isLowerBound) { - isLowerBound = true and boundValue = getFullyConvertedLowerBounds(expr) +private float getExprTypeBounds(Expr expr, boolean isLowerBound) { + isLowerBound = true and result = exprMinVal(expr.getFullyConverted()) or - isLowerBound = false and boundValue = getFullyConvertedUpperBounds(expr) -} - -/** Utility for `linearBoundFromGuard`. */ -private predicate exprTypeBounds(Expr expr, float boundValue, boolean isLowerBound) { - isLowerBound = true and boundValue = exprMinVal(expr.getFullyConverted()) - or - isLowerBound = false and boundValue = exprMaxVal(expr.getFullyConverted()) + isLowerBound = false and result = exprMaxVal(expr.getFullyConverted()) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll index 668d9b52659..f269d0dfff2 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExpr.qll @@ -307,13 +307,12 @@ class SemStoreExpr extends SemUnaryExpr { } class SemConditionalExpr extends SemKnownExpr { - SemExpr condition; SemExpr trueResult; SemExpr falseResult; SemConditionalExpr() { opcode instanceof Opcode::Conditional and - Specific::conditionalExpr(this, type, condition, trueResult, falseResult) + Specific::conditionalExpr(this, type, any(SemExpr condition), trueResult, falseResult) } final SemExpr getBranchExpr(boolean branch) { diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExprSpecific.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExprSpecific.qll index 224f968ce69..242c023118f 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExprSpecific.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/SemanticExprSpecific.qll @@ -259,7 +259,7 @@ module SemanticExprConfig { } predicate guardHasBranchEdge(Guard guard, BasicBlock bb1, BasicBlock bb2, boolean branch) { - guard.controlsEdge(bb1, bb2, branch) + guard.controlsBranchEdge(bb1, bb2, branch) } Guard comparisonGuard(Expr e) { getSemanticExpr(result) = e } diff --git a/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll b/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll index dc421e8f3ae..6c0552a7d18 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/FileWrite.qll @@ -21,7 +21,9 @@ class FileWrite extends Expr { Expr getDest() { fileWrite(this, _, result) } /** - * Gets the conversion character for this write, if it exists and is known. For example in the following code the write of `value1` has conversion character `"s"`, whereas the write of `value2` has no conversion specifier. + * Gets the conversion character from `source` for this write, if it exists and is known. + * For example in the following code the write of `value1` has conversion character `"s"`, whereas + * the write of `value2` has no conversion specifier. * ``` * fprintf(file, "%s", value1); * stream << value2; diff --git a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll index 559ebd444f3..984bd874ae5 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/boostorg/asio/protocols.qll @@ -191,11 +191,19 @@ module BoostorgAsio { class SslContextClass extends Class { SslContextClass() { this.getQualifiedName() = "boost::asio::ssl::context" } - ConstructorCall getAContructorCall() { + /** + * Gets a constructor call, if any. + */ + ConstructorCall getAConstructorCall() { this.getAConstructor().getACallToThisFunction() = result and not result.getLocation().getFile().toString().matches("%/boost/asio/%") and result.fromSource() } + + /** + * DEPRECATED: Use `getAConstructorCall` instead. + */ + deprecated ConstructorCall getAContructorCall() { result = this.getAConstructorCall() } } /** @@ -368,7 +376,7 @@ module BoostorgAsio { */ default predicate isSink(DataFlow::Node sink) { exists(ConstructorCall cc, SslContextClass c, Expr e | e = sink.asExpr() | - c.getAContructorCall() = cc and + c.getAConstructorCall() = cc and cc.getArgument(0) = e ) } @@ -468,7 +476,7 @@ module BoostorgAsio { predicate isSource(DataFlow::Node source) { exists(SslContextClass c, ConstructorCall cc | cc = source.asExpr() and - c.getAContructorCall() = cc + c.getAConstructorCall() = cc ) } diff --git a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll index 5305c8ca58f..bd3a54c6159 100644 --- a/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll +++ b/cpp/ql/lib/semmle/code/cpp/stmts/Stmt.qll @@ -2355,6 +2355,20 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { ) } + /** + * Gets the number of VLA dimension statements in this VLA declaration + * statement and transitively of the VLA declaration used to define its + * base type. if any. + */ + int getTransitiveNumberOfVlaDimensionStmts() { + not exists(this.getParentVlaDecl()) and + result = this.getNumberOfVlaDimensionStmts() + or + result = + this.getNumberOfVlaDimensionStmts() + + this.getParentVlaDecl().getTransitiveNumberOfVlaDimensionStmts() + } + /** * Gets the `i`th VLA dimension statement in this VLA * declaration statement. @@ -2367,6 +2381,19 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { ) } + /** + * Gets the `i`th VLA dimension statement in this VLA declaration + * statement or transitively of the VLA declaration used to define + * its base type. + */ + VlaDimensionStmt getTransitiveVlaDimensionStmt(int i) { + i < this.getNumberOfVlaDimensionStmts() and + result = this.getVlaDimensionStmt(i) + or + result = + this.getParentVlaDecl().getTransitiveVlaDimensionStmt(i - this.getNumberOfVlaDimensionStmts()) + } + /** * Gets the type that this VLA declaration statement relates to, * if any. @@ -2378,4 +2405,31 @@ class VlaDeclStmt extends Stmt, @stmt_vla_decl { * if any. */ Variable getVariable() { variable_vla(unresolveElement(result), underlyingElement(this)) } + + /** + * Get the VLA declaration used to define the base type of + * this VLA declaration, if any. + */ + VlaDeclStmt getParentVlaDecl() { + exists(Variable v, Type baseType | + v = this.getVariable() and + baseType = this.getBaseType(v.getType(), this.getNumberOfVlaDimensionStmts()) + | + result.getType() = baseType + ) + or + exists(Type t, Type baseType | + t = this.getType().(TypedefType).getBaseType() and + baseType = this.getBaseType(t, this.getNumberOfVlaDimensionStmts()) + | + result.getType() = baseType + ) + } + + private Type getBaseType(Type type, int n) { + n = 0 and + result = type + or + result = this.getBaseType(type.(DerivedType).getBaseType(), n - 1) + } } diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 5340d6d5f42..2121ffec11f 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -222,6 +222,19 @@ extractor_version( string frontend_version: string ref ) +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + /** An element for which line-count information is available. */ @sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; @@ -1314,7 +1327,8 @@ specialnamequalifyingelements( @namequalifiableelement = @expr | @namequalifier; @namequalifyingelement = @namespace | @specialnamequalifyingelement - | @usertype; + | @usertype + | @decltype; namequalifiers( unique int id: @namequalifier, diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index ef86a76e7ed..42cff5d8d16 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,7 +2,7 @@ @compilation - 12642 + 12643 @externalDataElement @@ -10,7 +10,7 @@ @file - 65211 + 65212 @folder @@ -22,11 +22,15 @@ @location_default - 46965929 + 46945087 + + + @pch + 249 @macro_expansion - 40257319 + 40256583 @other_macro_reference @@ -34,7 +38,7 @@ @normal_function - 2740505 + 2738022 @unknown_function @@ -42,19 +46,19 @@ @constructor - 698724 + 698728 @destructor - 86280 + 86202 @conversion_function - 10363 + 10354 @operator - 653036 + 652444 @user_defined_literal @@ -62,27 +66,27 @@ @deduction_guide - 5868 + 5863 @fun_decl - 4206778 + 4202967 @var_decl - 9391612 + 9383104 @type_decl - 1634963 + 1633482 @namespace_decl - 407321 + 407775 @using_declaration - 267931 + 267822 @using_directive @@ -94,27 +98,27 @@ @static_assert - 173266 + 173262 @parameter - 7026197 + 7019832 @membervariable - 1496815 + 1497674 @globalvariable - 488591 + 488148 @localvariable - 726232 + 726300 @enumconstant - 345733 + 347816 @errortype @@ -362,23 +366,23 @@ @pointer - 452880 + 452469 @type_with_specifiers - 693866 + 693238 @array - 90401 + 90319 @routineptr - 684109 + 684112 @reference - 968192 + 967314 @gnu_vector @@ -390,7 +394,7 @@ @rvalue_reference - 291306 + 291042 @block @@ -410,7 +414,7 @@ @underlying_type - 624 + 623 @bases @@ -486,23 +490,23 @@ @struct - 979865 + 979892 @union - 20977 + 20958 @enum - 41337 + 41550 @template_parameter - 867072 + 867095 @alias - 1762239 + 1762360 @unknown_usertype @@ -510,7 +514,7 @@ @class - 325269 + 324974 @template_template_parameter @@ -518,31 +522,31 @@ @proxy_class - 48438 + 48439 @scoped_enum - 11612 + 11601 @template_struct - 212078 + 212084 @template_class - 29342 + 29316 @template_union - 1373 + 1372 @mangledname - 6370039 + 6364268 @type_mention - 5902897 + 5903894 @concept_template @@ -550,15 +554,15 @@ @routinetype - 604319 + 604322 @ptrtomember - 9727 + 9728 @specifier - 7741 + 7734 @gnuattribute @@ -566,11 +570,11 @@ @stdattribute - 353114 + 352794 @declspec - 330047 + 330281 @msattribute @@ -578,7 +582,7 @@ @alignas - 2166 + 2164 @attribute_arg_token @@ -586,7 +590,7 @@ @attribute_arg_constant_expr - 71875 + 71856 @attribute_arg_expr @@ -606,15 +610,15 @@ @derivation - 476900 + 476902 @frienddecl - 700462 + 700465 @comment - 11241965 + 11233402 @namespace @@ -626,15 +630,15 @@ @namequalifier - 3041863 + 3041979 @value - 13474606 + 13474601 @initialiser - 2251035 + 2251321 @address_of @@ -646,11 +650,11 @@ @array_to_pointer - 1953751 + 1953750 @parexpr - 4915208 + 4915206 @arithnegexpr @@ -658,7 +662,7 @@ @unaryplusexpr - 4073 + 4069 @complementexpr @@ -670,7 +674,7 @@ @postincrexpr - 84581 + 84571 @postdecrexpr @@ -686,11 +690,11 @@ @conditionalexpr - 897880 + 897879 @addexpr - 571553 + 571552 @subexpr @@ -702,7 +706,7 @@ @divexpr - 52393 + 52387 @remexpr @@ -714,11 +718,11 @@ @psubexpr - 68024 + 68016 @pdiffexpr - 43951 + 43912 @lshiftexpr @@ -738,7 +742,7 @@ @xorexpr - 73961 + 73952 @eqexpr @@ -758,7 +762,7 @@ @geexpr - 81368 + 81358 @leexpr @@ -786,7 +790,7 @@ @assignremexpr - 874 + 873 @assignlshiftexpr @@ -822,19 +826,19 @@ @orlogicalexpr - 1103523 + 1103522 @commaexpr - 168440 + 168288 @subscriptexpr - 435143 + 435142 @callexpr - 239778 + 239780 @vastartexpr @@ -846,7 +850,7 @@ @vaendexpr - 2941 + 2940 @vacopyexpr @@ -854,7 +858,7 @@ @varaccess - 8254632 + 8254629 @runtime_sizeof @@ -870,11 +874,11 @@ @routineexpr - 5732226 + 5732444 @type_operand - 1405363 + 1405362 @offsetofexpr @@ -886,7 +890,7 @@ @literal - 7967630 + 7966299 @aggregateliteral @@ -894,11 +898,11 @@ @c_style_cast - 6026986 + 6026987 @temp_init - 992324 + 992173 @errorexpr @@ -906,11 +910,11 @@ @reference_to - 1902638 + 1903138 @ref_indirect - 2107314 + 2107325 @vacuous_destructor_call @@ -970,11 +974,11 @@ @thisaccess - 1558310 + 1558277 @new_expr - 46197 + 46198 @delete_expr @@ -982,11 +986,11 @@ @throw_expr - 24105 + 24178 @condition_decl - 408905 + 408920 @braced_init_list @@ -1058,11 +1062,11 @@ @isemptyexpr - 8865 + 8857 @isenumexpr - 2996 + 2994 @ispodexpr @@ -1086,7 +1090,7 @@ @uuidof - 26588 + 26677 @delete_array_expr @@ -1110,11 +1114,11 @@ @ctorfieldinit - 206399 + 206212 @ctordelegatinginit - 3621 + 3617 @dtordirectdestruct @@ -1126,15 +1130,15 @@ @dtorfielddestruct - 39826 + 39827 @static_cast - 348369 + 348053 @reinterpret_cast - 40089 + 40088 @const_cast @@ -1150,7 +1154,7 @@ @param_ref - 164014 + 164066 @noopexpr @@ -1158,7 +1162,7 @@ @istriviallyconstructibleexpr - 3745 + 3742 @isdestructibleexpr @@ -1174,15 +1178,15 @@ @istriviallyassignableexpr - 3745 + 3742 @isnothrowassignableexpr - 5119 + 5114 @istrivialexpr - 3368 + 3367 @isstandardlayoutexpr @@ -1190,7 +1194,7 @@ @istriviallycopyableexpr - 1373 + 1372 @isliteraltypeexpr @@ -1210,11 +1214,11 @@ @isconstructibleexpr - 3621 + 3617 @isnothrowconstructibleexpr - 20727 + 20708 @hasfinalizerexpr @@ -1254,7 +1258,7 @@ @noexceptexpr - 28356 + 28465 @builtinshufflevector @@ -1266,7 +1270,7 @@ @builtinaddressof - 15483 + 15469 @vec_fill @@ -1426,7 +1430,7 @@ @reuseexpr - 847007 + 847039 @istriviallycopyassignable @@ -1526,7 +1530,7 @@ @requires_expr - 16502 + 16503 @nested_requirement @@ -1538,15 +1542,15 @@ @concept_id - 90430 + 90433 @lambdacapture - 31966 + 31965 @stmt_expr - 2031614 + 2031613 @stmt_if @@ -1558,19 +1562,19 @@ @stmt_goto - 157904 + 157909 @stmt_label - 78022 + 78025 @stmt_return - 1241797 + 1241788 @stmt_block - 1729360 + 1728666 @stmt_end_test_while @@ -1582,11 +1586,11 @@ @stmt_switch_case - 836120 + 836152 @stmt_switch - 411852 + 411868 @stmt_asm @@ -1594,11 +1598,11 @@ @stmt_decl - 772441 + 772425 @stmt_empty - 429388 + 429404 @stmt_continue @@ -1606,11 +1610,11 @@ @stmt_break - 137937 + 137934 @stmt_try_block - 26698 + 26740 @stmt_microsoft_try @@ -1630,15 +1634,15 @@ @stmt_range_based_for - 6387 + 6384 @stmt_handler - 43746 + 43781 @stmt_constexpr_if - 106134 + 106037 @stmt_co_return @@ -1658,7 +1662,7 @@ @ppd_if - 591478 + 590942 @ppd_ifdef @@ -1666,35 +1670,35 @@ @ppd_ifndef - 158651 + 158633 @ppd_elif - 21916 + 21917 @ppd_else - 235118 + 234905 @ppd_endif - 889777 + 888971 @ppd_plain_include - 318555 + 318564 @ppd_define - 2752617 + 2750123 @ppd_undef - 100515 + 100424 @ppd_pragma - 406555 + 406187 @ppd_include_next @@ -1702,7 +1706,7 @@ @ppd_line - 18827 + 18812 @ppd_error @@ -1760,11 +1764,11 @@ compilations - 12642 + 12643 id - 12642 + 12643 cwd @@ -1782,7 +1786,7 @@ 1 2 - 12642 + 12643 @@ -1808,11 +1812,11 @@ compilation_args - 1012186 + 1012213 id - 12642 + 12643 num @@ -1820,7 +1824,7 @@ arg - 29267 + 29268 @@ -2179,7 +2183,7 @@ 1 2 - 19381 + 19382 2 @@ -2199,15 +2203,15 @@ compilation_build_mode - 12642 + 2 id - 12642 + 2 mode - 10 + 2 @@ -2221,7 +2225,7 @@ 1 2 - 12642 + 2 @@ -2235,9 +2239,9 @@ 12 - 1197 - 1198 - 10 + 1 + 2 + 2 @@ -2247,19 +2251,19 @@ compilation_compiling_files - 15739 + 15738 id - 2723 + 2722 num - 4520 + 4519 file - 13670 + 13668 @@ -2447,7 +2451,7 @@ 1 2 - 12308 + 12307 2 @@ -2473,7 +2477,7 @@ 1 2 - 12526 + 12525 2 @@ -2493,15 +2497,15 @@ compilation_time - 62959 + 62952 id - 2723 + 2722 num - 4520 + 4519 kind @@ -2509,7 +2513,7 @@ seconds - 13343 + 13396 @@ -2574,7 +2578,7 @@ 4 5 - 2723 + 2722 @@ -2587,20 +2591,15 @@ 12 - - 2 - 3 - 54 - 3 4 - 653 + 816 4 5 - 653 + 544 6 @@ -2619,24 +2618,24 @@ 11 - 14 + 15 217 - 16 - 18 + 15 + 19 + 217 + + + 19 + 26 + 217 + + + 42 + 92 163 - - 18 - 22 - 217 - - - 25 - 103 - 217 - @@ -2687,7 +2686,7 @@ 4 5 - 4520 + 4519 @@ -2700,6 +2699,11 @@ 12 + + 2 + 3 + 54 + 3 4 @@ -2708,38 +2712,43 @@ 4 5 - 1034 + 980 5 6 - 326 + 272 6 7 - 381 + 544 7 8 - 326 + 163 8 9 - 326 + 272 9 - 22 + 14 381 - 25 - 91 + 17 + 44 381 + + 49 + 87 + 108 + @@ -2794,13 +2803,13 @@ 54 - 148 - 149 + 144 + 145 54 - 154 - 155 + 149 + 150 54 @@ -2817,27 +2826,27 @@ 1 2 - 6644 + 6807 2 3 - 3267 + 3376 3 4 - 1797 + 1633 4 - 6 - 1198 + 5 + 1034 - 6 - 48 - 435 + 5 + 45 + 544 @@ -2853,17 +2862,17 @@ 1 2 - 5882 + 6208 2 3 - 2941 + 2668 3 4 - 1960 + 2069 4 @@ -2872,13 +2881,13 @@ 5 - 7 + 8 1198 - 7 - 73 - 435 + 8 + 74 + 326 @@ -2894,12 +2903,17 @@ 1 2 - 9857 + 10510 2 3 - 3485 + 2831 + + + 3 + 4 + 54 @@ -3155,15 +3169,15 @@ compilation_finished - 12642 + 12643 id - 12642 + 12643 cpu_seconds - 9579 + 9379 elapsed_seconds @@ -3181,7 +3195,7 @@ 1 2 - 12642 + 12643 @@ -3197,7 +3211,7 @@ 1 2 - 12642 + 12643 @@ -3213,17 +3227,17 @@ 1 2 - 8080 + 7763 2 3 - 1077 + 1172 3 - 25 - 422 + 29 + 443 @@ -3239,12 +3253,12 @@ 1 2 - 9051 + 8735 2 3 - 528 + 644 @@ -3260,48 +3274,48 @@ 1 2 - 73 + 63 2 + 3 + 21 + + + 3 5 21 - 6 - 8 + 8 + 9 + 31 + + + 12 + 15 21 - 11 - 12 + 15 + 37 + 21 + + + 51 + 177 + 21 + + + 241 + 286 + 21 + + + 326 + 327 10 - - 13 - 14 - 21 - - - 14 - 17 - 21 - - - 27 - 54 - 21 - - - 164 - 251 - 21 - - - 289 - 322 - 21 - @@ -3316,48 +3330,48 @@ 1 2 - 73 + 63 2 + 3 + 21 + + + 3 5 21 - 6 - 8 + 8 + 9 + 31 + + + 12 + 15 21 - 11 - 12 + 15 + 37 + 21 + + + 48 + 162 + 21 + + + 165 + 221 + 21 + + + 237 + 238 10 - - 13 - 14 - 21 - - - 14 - 17 - 21 - - - 26 - 53 - 21 - - - 154 - 161 - 21 - - - 227 - 246 - 21 - @@ -3593,31 +3607,31 @@ locations_default - 46965929 + 46945087 id - 46965929 + 46945087 file - 40955 + 40918 beginLine - 7507421 + 7500620 beginColumn - 21975 + 21956 endLine - 7508545 + 7501742 endColumn - 53441 + 53393 @@ -3631,7 +3645,7 @@ 1 2 - 46965929 + 46945087 @@ -3647,7 +3661,7 @@ 1 2 - 46965929 + 46945087 @@ -3663,7 +3677,7 @@ 1 2 - 46965929 + 46945087 @@ -3679,7 +3693,7 @@ 1 2 - 46965929 + 46945087 @@ -3695,7 +3709,7 @@ 1 2 - 46965929 + 46945087 @@ -3711,67 +3725,67 @@ 1 15 - 3121 + 3118 15 41 - 3121 + 3118 42 72 - 3121 + 3118 72 114 - 3371 + 3368 114 142 - 3121 + 3118 143 211 - 3121 + 3118 213 307 - 3121 + 3118 310 430 - 3121 + 3118 437 596 - 3121 + 3118 607 827 - 3121 + 3118 839 1298 - 3121 + 3118 1300 - 2722 - 3121 + 2855 + 3118 3114 30788 - 3121 + 3118 57880 @@ -3792,67 +3806,67 @@ 1 13 - 3371 + 3368 13 31 - 3371 + 3368 31 47 - 3121 + 3118 47 64 - 3121 + 3118 64 84 - 3121 + 3118 85 115 - 3121 + 3118 116 160 - 3246 + 3243 160 206 - 3121 + 3118 206 291 - 3121 + 3118 298 388 - 3121 + 3118 395 527 - 3121 + 3118 561 1339 - 3121 + 3118 1375 57764 - 2871 + 2869 @@ -3868,67 +3882,67 @@ 1 5 - 3745 + 3742 5 9 - 3121 + 3118 9 15 - 3246 + 3243 15 20 - 3246 + 3243 20 28 - 3246 + 3243 28 36 - 3246 + 3243 36 42 - 3121 + 3118 42 53 - 3371 + 3368 53 62 - 3246 + 3243 62 81 - 3121 + 3118 81 95 - 3121 + 3118 95 111 - 3121 + 3118 112 156 - 1997 + 1996 @@ -3944,67 +3958,67 @@ 1 13 - 3371 + 3368 13 31 - 3371 + 3368 31 46 - 3121 + 3118 46 63 - 3121 + 3118 63 84 - 3121 + 3118 84 114 - 3121 + 3118 118 160 - 3246 + 3243 160 206 - 3121 + 3118 207 291 - 3121 + 3118 300 390 - 3121 + 3118 395 562 - 3121 + 3118 564 1350 - 3121 + 3118 1420 57764 - 2871 + 2869 @@ -4020,67 +4034,67 @@ 1 12 - 3371 + 3368 13 26 - 3496 + 3493 26 34 - 3246 + 3243 34 42 - 3246 + 3243 42 50 - 3246 + 3243 50 61 - 3121 + 3118 61 67 - 3246 + 3243 67 76 - 3496 + 3493 76 88 - 3246 + 3243 89 102 - 3121 + 3118 102 116 - 3496 + 3493 116 133 - 3121 + 3118 136 363 - 1498 + 1497 @@ -4096,32 +4110,32 @@ 1 2 - 4961952 + 4957457 2 3 - 779772 + 779066 3 4 - 544405 + 543911 4 12 - 570876 + 570359 12 97 - 563134 + 563372 97 637 - 87279 + 86452 @@ -4137,27 +4151,27 @@ 1 2 - 5024010 + 5019458 2 3 - 1222414 + 1221306 3 6 - 640550 + 639969 6 57 - 563509 + 563248 57 329 - 56937 + 56636 @@ -4173,27 +4187,27 @@ 1 2 - 5646455 + 5641339 2 3 - 483596 + 483158 3 7 - 582613 + 582085 7 25 - 566256 + 565244 25 94 - 228500 + 228792 @@ -4209,12 +4223,12 @@ 1 2 - 7041180 + 7034552 2 85 - 466240 + 466067 @@ -4230,32 +4244,32 @@ 1 2 - 5031002 + 5026444 2 3 - 740066 + 739395 3 4 - 540284 + 539795 4 12 - 587483 + 586950 12 72 - 565257 + 564121 72 250 - 43327 + 43912 @@ -4271,67 +4285,67 @@ 1 2 - 1748 + 1746 2 6 - 1997 + 1996 6 12 - 1872 + 1871 12 40 - 1748 + 1746 49 128 - 1748 + 1746 129 253 - 1748 + 1746 316 707 - 1748 + 1746 791 1267 - 1748 + 1746 1281 1943 - 1748 + 1746 2017 2398 - 1748 + 1746 - 2491 - 3203 - 1748 + 2493 + 3212 + 1746 - 3252 + 3260 7915 - 1748 + 1746 - 10983 + 11053 121029 - 624 + 623 @@ -4347,62 +4361,62 @@ 1 2 - 1997 + 1996 2 4 - 1748 + 1746 4 7 - 1748 + 1746 7 18 - 1872 + 1871 19 43 - 1748 + 1746 44 60 - 1748 + 1746 66 93 - 1748 + 1746 96 117 - 1748 + 1746 117 150 - 1748 + 1746 150 169 - 1748 + 1746 169 181 - 1748 + 1746 182 217 - 1872 + 1871 243 @@ -4423,67 +4437,67 @@ 1 2 - 1872 + 1871 2 5 - 1872 + 1871 5 11 - 1748 + 1746 11 36 - 1748 + 1746 36 101 - 1748 + 1746 108 217 - 1748 + 1746 - 226 + 225 543 - 1748 + 1746 633 - 1057 - 1748 + 1059 + 1746 - 1072 - 1409 - 1748 + 1071 + 1410 + 1746 - 1416 - 1614 - 1748 + 1414 + 1610 + 1746 - 1615 - 1810 - 1748 + 1613 + 1807 + 1746 - 1826 - 3777 - 1748 + 1834 + 3791 + 1746 - 3834 + 3837 59554 - 749 + 748 @@ -4499,67 +4513,67 @@ 1 2 - 1872 + 1871 2 5 - 1872 + 1871 5 11 - 1748 + 1746 11 36 - 1748 + 1746 36 102 - 1748 + 1746 109 218 - 1748 + 1746 - 225 + 224 545 - 1748 + 1746 631 - 1055 - 1748 + 1057 + 1746 - 1074 + 1073 1407 - 1748 + 1746 - 1425 - 1611 - 1748 + 1423 + 1609 + 1746 - 1614 - 1807 - 1748 + 1612 + 1805 + 1746 - 1827 - 3760 - 1748 + 1835 + 3774 + 1746 - 3827 + 3830 59562 - 749 + 748 @@ -4575,67 +4589,67 @@ 1 2 - 2122 + 2120 2 5 - 1498 + 1497 5 8 - 1623 + 1621 8 13 - 1748 + 1746 13 23 - 1997 + 1996 23 33 - 1872 + 1871 34 44 - 1748 + 1746 45 57 - 1748 + 1746 58 - 74 - 1997 + 73 + 1497 - 77 - 86 - 1872 + 73 + 83 + 1746 - 86 - 98 - 1748 + 83 + 92 + 1746 - 98 - 160 - 1748 + 92 + 144 + 1746 - 258 + 147 299 - 249 + 873 @@ -4651,32 +4665,32 @@ 1 2 - 4959830 + 4955336 2 3 - 782270 + 781561 3 4 - 545279 + 544785 4 12 - 568378 + 567864 12 - 96 - 564757 + 95 + 563497 - 96 + 95 620 - 88028 + 88697 @@ -4692,27 +4706,27 @@ 1 2 - 5021138 + 5016589 2 3 - 1224911 + 1223801 3 6 - 633932 + 633357 6 52 - 564633 + 564121 52 329 - 63930 + 63872 @@ -4728,12 +4742,12 @@ 1 2 - 7057912 + 7051643 2 - 18 - 450632 + 15 + 450099 @@ -4749,27 +4763,27 @@ 1 2 - 5645580 + 5640466 2 3 - 480974 + 480538 3 7 - 587607 + 587075 7 25 - 569752 + 568862 25 89 - 224629 + 224800 @@ -4785,32 +4799,32 @@ 1 2 - 5029629 + 5025072 2 3 - 744436 + 743762 3 4 - 540034 + 539545 4 12 - 588107 + 587574 12 72 - 563509 + 562749 72 250 - 42828 + 43038 @@ -4826,52 +4840,52 @@ 1 2 - 15732 + 15718 2 3 - 5618 + 5613 3 7 - 4245 + 4241 7 17 - 4120 + 4116 17 33 - 4120 + 4116 33 106 - 4120 + 4116 114 689 - 4120 + 4116 721 - 2458 - 4120 + 2460 + 4116 - 2593 - 4731 - 4120 + 2595 + 4737 + 4116 4759 33780 - 3121 + 3118 @@ -4887,52 +4901,52 @@ 1 2 - 18604 + 18587 2 3 - 5618 + 5613 3 5 - 3621 + 3617 5 7 - 3745 + 3742 7 16 - 4370 + 4366 16 80 - 4120 + 4116 81 152 - 4245 + 4241 158 212 - 4245 + 4241 212 265 - 4120 + 4116 265 329 - 749 + 748 @@ -4948,52 +4962,52 @@ 1 2 - 15982 + 15968 2 3 - 5993 + 5988 3 8 - 4245 + 4241 8 18 - 4370 + 4366 18 42 - 4120 + 4116 43 218 - 4120 + 4116 - 235 - 759 - 4120 + 234 + 758 + 4116 - 768 - 2177 - 4120 + 767 + 2176 + 4116 - 2209 - 2884 - 4120 + 2206 + 2882 + 4116 - 2885 + 2890 30763 - 2247 + 2245 @@ -5009,52 +5023,52 @@ 1 2 - 17231 + 17215 2 3 - 6243 + 6237 3 4 - 3246 + 3243 4 7 - 4245 + 4241 7 14 - 4245 + 4241 14 28 - 4120 + 4491 28 - 45 - 4245 + 46 + 4116 - 45 - 69 - 4120 + 46 + 70 + 4116 - 69 - 81 - 4245 + 70 + 82 + 4241 - 81 + 82 117 - 1498 + 1247 @@ -5070,52 +5084,52 @@ 1 2 - 15982 + 15968 2 3 - 5993 + 5988 3 8 - 4245 + 4241 8 18 - 4370 + 4366 18 41 - 4120 + 4116 43 217 - 4120 + 4116 - 233 - 756 - 4120 + 232 + 755 + 4116 768 - 2177 - 4120 + 2176 + 4116 - 2208 - 2858 - 4120 + 2206 + 2862 + 4116 - 2868 + 2867 30757 - 2247 + 2245 @@ -5125,15 +5139,15 @@ files - 65211 + 65212 id - 65211 + 65212 name - 65211 + 65212 @@ -5147,7 +5161,7 @@ 1 2 - 65211 + 65212 @@ -5163,7 +5177,7 @@ 1 2 - 65211 + 65212 @@ -5221,7 +5235,7 @@ containerparent - 77579 + 77581 parent @@ -5229,7 +5243,7 @@ child - 77579 + 77581 @@ -5294,7 +5308,7 @@ 1 2 - 77579 + 77581 @@ -5304,23 +5318,23 @@ numlines - 808616 + 807883 element_id - 807492 + 806761 num_lines - 39456 + 39421 num_code - 34087 + 34056 num_comment - 18230 + 18338 @@ -5334,12 +5348,12 @@ 1 2 - 806368 + 805638 2 3 - 1123 + 1122 @@ -5355,12 +5369,12 @@ 1 2 - 806368 + 805638 2 3 - 1123 + 1122 @@ -5376,7 +5390,7 @@ 1 2 - 807242 + 806511 2 @@ -5397,27 +5411,27 @@ 1 2 - 26720 + 26696 2 3 - 3745 + 3742 3 5 - 3371 + 3368 5 35 - 2996 + 2994 39 1983 - 2622 + 2619 @@ -5433,27 +5447,27 @@ 1 2 - 27220 + 27195 2 3 - 4120 + 4116 3 4 - 2497 + 2495 4 7 - 3496 + 3493 7 12 - 2122 + 2120 @@ -5469,27 +5483,27 @@ 1 2 - 26845 + 26821 2 3 - 4120 + 4116 3 4 - 2372 + 2370 4 6 - 3246 + 3243 6 10 - 2871 + 2869 @@ -5505,32 +5519,32 @@ 1 2 - 21851 + 21831 2 3 - 3621 + 3617 3 4 - 2372 + 2370 4 13 - 2871 + 2869 14 198 - 2622 + 2619 204 2092 - 749 + 748 @@ -5546,32 +5560,32 @@ 1 2 - 22225 + 22205 2 3 - 3621 + 3617 3 4 - 2122 + 2120 4 6 - 1872 + 1871 6 9 - 2746 + 2744 9 13 - 1498 + 1497 @@ -5587,27 +5601,27 @@ 1 2 - 21975 + 21956 2 3 - 4245 + 4241 3 5 - 2871 + 2869 5 8 - 3121 + 3118 8 12 - 1872 + 1871 @@ -5623,32 +5637,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1123 + 1122 4 7 - 1498 + 1497 8 - 21 - 1373 + 22 + 1497 - 21 + 42 3651 - 998 + 873 @@ -5664,32 +5678,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1123 + 1122 4 7 - 1623 + 1621 8 - 21 - 1373 + 27 + 1497 - 26 + 30 48 - 874 + 748 @@ -5705,32 +5719,32 @@ 1 2 - 11112 + 11352 2 3 - 2122 + 1996 3 4 - 1373 + 1372 4 - 7 - 1373 + 8 + 1497 - 7 - 21 - 1373 + 8 + 31 + 1497 - 23 + 35 42 - 874 + 623 @@ -6343,13 +6357,395 @@ + + pch_uses + 4134 + + + pch + 162 + + + compilation + 4134 + + + id + 4134 + + + + + pch + compilation + + + 12 + + + 1 + 2 + 24 + + + 4 + 5 + 8 + + + 8 + 9 + 8 + + + 10 + 11 + 16 + + + 11 + 12 + 8 + + + 13 + 14 + 8 + + + 14 + 15 + 8 + + + 19 + 20 + 16 + + + 24 + 25 + 8 + + + 25 + 26 + 8 + + + 26 + 27 + 8 + + + 36 + 37 + 8 + + + 42 + 43 + 8 + + + 51 + 52 + 8 + + + 87 + 88 + 8 + + + 107 + 108 + 8 + + + + + + + pch + id + + + 12 + + + 1 + 2 + 24 + + + 4 + 5 + 8 + + + 8 + 9 + 8 + + + 10 + 11 + 16 + + + 11 + 12 + 8 + + + 13 + 14 + 8 + + + 14 + 15 + 8 + + + 19 + 20 + 16 + + + 24 + 25 + 8 + + + 25 + 26 + 8 + + + 26 + 27 + 8 + + + 36 + 37 + 8 + + + 42 + 43 + 8 + + + 51 + 52 + 8 + + + 87 + 88 + 8 + + + 107 + 108 + 8 + + + + + + + compilation + pch + + + 12 + + + 1 + 2 + 4134 + + + + + + + compilation + id + + + 12 + + + 1 + 2 + 4134 + + + + + + + id + pch + + + 12 + + + 1 + 2 + 4134 + + + + + + + id + compilation + + + 12 + + + 1 + 2 + 4134 + + + + + + + + + pch_creations + 249 + + + pch + 249 + + + compilation + 249 + + + from + 249 + + + + + pch + compilation + + + 12 + + + 1 + 2 + 249 + + + + + + + pch + from + + + 12 + + + 1 + 2 + 249 + + + + + + + compilation + pch + + + 12 + + + 1 + 2 + 249 + + + + + + + compilation + from + + + 12 + + + 1 + 2 + 249 + + + + + + + from + pch + + + 12 + + + 1 + 2 + 249 + + + + + + + from + compilation + + + 12 + + + 1 + 2 + 249 + + + + + + + fileannotations - 4200439 + 4200551 id - 5766 + 5767 kind @@ -6357,11 +6753,11 @@ name - 58715 + 58716 value - 39513 + 39514 @@ -6606,7 +7002,7 @@ 1 2 - 11026 + 11027 2 @@ -6651,7 +7047,7 @@ 47 128 - 4921 + 4922 128 @@ -6677,7 +7073,7 @@ 1 2 - 58715 + 58716 @@ -6693,7 +7089,7 @@ 1 2 - 11586 + 11587 2 @@ -6774,12 +7170,12 @@ 5 8 - 2460 + 2461 8 14 - 2967 + 2968 14 @@ -6840,7 +7236,7 @@ 1 2 - 39502 + 39503 2 @@ -6936,15 +7332,15 @@ inmacroexpansion - 149995963 + 149995903 id - 24670878 + 24670868 inv - 3705272 + 3705270 @@ -6968,22 +7364,22 @@ 5 6 - 1620369 + 1620368 6 7 - 6582545 + 6582542 7 8 - 8719001 + 8718997 8 9 - 3557049 + 3557047 9 @@ -7024,12 +7420,12 @@ 7 8 - 282153 + 282152 8 9 - 330247 + 330246 9 @@ -7064,15 +7460,15 @@ affectedbymacroexpansion - 48735840 + 48735823 id - 7044740 + 7044739 inv - 3803121 + 3803120 @@ -7091,7 +7487,7 @@ 2 3 - 766305 + 766304 3 @@ -7142,7 +7538,7 @@ 7 9 - 301088 + 301087 9 @@ -7202,19 +7598,19 @@ macroinvocations - 40338469 + 40337724 id - 40338469 + 40337724 macro_id - 182070 + 182049 location - 5912755 + 5912934 kind @@ -7232,7 +7628,7 @@ 1 2 - 40338469 + 40337724 @@ -7248,7 +7644,7 @@ 1 2 - 40338469 + 40337724 @@ -7264,7 +7660,7 @@ 1 2 - 40338469 + 40337724 @@ -7280,47 +7676,47 @@ 1 2 - 60781 + 60773 2 3 - 27558 + 27555 3 4 - 17972 + 17970 4 5 - 10021 + 10020 5 7 - 13779 + 13777 7 13 - 14705 + 14703 13 33 - 13779 + 13777 33 180 - 13670 + 13668 181 - 72144 - 9803 + 72152 + 9802 @@ -7336,42 +7732,42 @@ 1 2 - 77283 + 77274 2 3 - 30553 + 30550 3 4 - 14323 + 14322 4 5 - 10293 + 10292 5 8 - 14105 + 14104 8 18 - 14160 + 14158 18 88 - 13670 + 13668 89 - 12189 - 7679 + 12187 + 7678 @@ -7387,7 +7783,7 @@ 1 2 - 177495 + 177475 2 @@ -7408,17 +7804,17 @@ 1 2 - 5255927 + 5256183 2 4 - 422362 + 422313 4 - 72144 - 234464 + 72152 + 234437 @@ -7434,12 +7830,12 @@ 1 2 - 5890588 + 5890770 2 37 - 22166 + 22163 @@ -7455,7 +7851,7 @@ 1 2 - 5912755 + 5912934 @@ -7474,8 +7870,8 @@ 54 - 739164 - 739165 + 739237 + 739238 54 @@ -7516,8 +7912,8 @@ 54 - 107495 - 107496 + 107511 + 107512 54 @@ -7528,15 +7924,15 @@ macroparent - 33655984 + 33655149 id - 33655984 + 33655149 parent_id - 15926379 + 15926203 @@ -7550,7 +7946,7 @@ 1 2 - 33655984 + 33655149 @@ -7566,27 +7962,27 @@ 1 2 - 7806498 + 7806456 2 3 - 1595448 + 1595479 3 4 - 4702906 + 4702955 4 5 - 1295464 + 1295312 5 205 - 526061 + 525999 @@ -7596,15 +7992,15 @@ macrolocationbind - 6046191 + 6040022 id - 4227950 + 4221190 location - 2278566 + 2279306 @@ -7618,27 +8014,27 @@ 1 2 - 3302009 + 3294948 2 3 - 491104 + 491264 3 4 - 7893 + 7896 4 5 - 413756 + 413891 5 17 - 13185 + 13189 @@ -7654,27 +8050,27 @@ 1 2 - 1336578 + 1337013 2 3 - 481984 + 482141 3 4 - 7807 + 7810 4 5 - 428082 + 428221 5 522 - 24112 + 24119 @@ -7684,11 +8080,11 @@ macro_argument_unexpanded - 82497361 + 82495572 invocation - 26285935 + 26282637 argument_index @@ -7696,7 +8092,7 @@ text - 343260 + 343270 @@ -7710,22 +8106,22 @@ 1 2 - 9683509 + 9679766 2 3 - 9770372 + 9770635 3 4 - 5002131 + 5002265 4 67 - 1829922 + 1829971 @@ -7741,22 +8137,22 @@ 1 2 - 9866140 + 9862401 2 3 - 9787916 + 9788179 3 4 - 4845472 + 4845602 4 67 - 1786405 + 1786453 @@ -7781,7 +8177,7 @@ 646840 - 2488681 + 2488302 31 @@ -7824,12 +8220,12 @@ 1 2 - 39703 + 39704 2 3 - 62327 + 62329 3 @@ -7839,37 +8235,37 @@ 4 5 - 34580 + 34581 5 6 - 39249 + 39250 6 9 - 30873 + 30874 9 15 - 28982 + 28983 15 26 - 25887 + 25888 26 57 - 27144 + 27145 57 517 - 25993 + 25994 518 @@ -7890,12 +8286,12 @@ 1 2 - 243173 + 243180 2 3 - 89873 + 89876 3 @@ -7910,11 +8306,11 @@ macro_argument_expanded - 82497361 + 82495572 invocation - 26285935 + 26282637 argument_index @@ -7922,7 +8318,7 @@ text - 207927 + 207933 @@ -7936,22 +8332,22 @@ 1 2 - 9683509 + 9679766 2 3 - 9770372 + 9770635 3 4 - 5002131 + 5002265 4 67 - 1829922 + 1829971 @@ -7967,22 +8363,22 @@ 1 2 - 12642108 + 12638444 2 3 - 8428244 + 8428470 3 4 - 4225217 + 4225331 4 9 - 990364 + 990391 @@ -8007,7 +8403,7 @@ 646840 - 2488681 + 2488302 31 @@ -8055,17 +8451,17 @@ 2 3 - 26859 + 26860 3 4 - 43495 + 43496 4 5 - 15906 + 15907 5 @@ -8080,7 +8476,7 @@ 7 10 - 18969 + 18970 10 @@ -8090,7 +8486,7 @@ 19 51 - 15779 + 15780 51 @@ -8099,7 +8495,7 @@ 252 - 1169584 + 1169205 9495 @@ -8116,12 +8512,12 @@ 1 2 - 105083 + 105086 2 3 - 88912 + 88914 3 @@ -8136,19 +8532,19 @@ functions - 4053071 + 4049399 id - 4053071 + 4049399 name - 1694897 + 1693362 kind - 874 + 873 @@ -8162,7 +8558,7 @@ 1 2 - 4053071 + 4049399 @@ -8178,7 +8574,7 @@ 1 2 - 4053071 + 4049399 @@ -8194,17 +8590,17 @@ 1 2 - 1448542 + 1447229 2 4 - 139098 + 138971 4 3162 - 107257 + 107160 @@ -8220,12 +8616,12 @@ 1 2 - 1692026 + 1690493 2 3 - 2871 + 2869 @@ -8338,15 +8734,15 @@ function_entry_point - 1141555 + 1141561 id - 1137808 + 1137813 entry_point - 1141555 + 1141561 @@ -8360,7 +8756,7 @@ 1 2 - 1134605 + 1134611 2 @@ -8381,7 +8777,7 @@ 1 2 - 1141555 + 1141561 @@ -8391,15 +8787,15 @@ function_return_type - 4070552 + 4066864 id - 4053071 + 4049399 return_type - 619822 + 619261 @@ -8413,12 +8809,12 @@ 1 2 - 4035590 + 4031934 2 3 - 17480 + 17465 @@ -8434,27 +8830,27 @@ 1 2 - 310161 + 309880 2 3 - 213891 + 213697 3 5 - 48072 + 48028 5 365 - 46574 + 46531 432 9944 - 1123 + 1122 @@ -8734,59 +9130,59 @@ purefunctions - 131414 + 131703 id - 131414 + 131703 function_deleted - 88085 + 88088 id - 88085 + 88088 function_defaulted - 51680 + 51682 id - 51680 + 51682 function_prototyped - 4051572 + 4047902 id - 4051572 + 4047902 deduction_guide_for_class - 5868 + 5863 id - 5868 + 5863 class_template - 2247 + 2245 @@ -8800,7 +9196,7 @@ 1 2 - 5868 + 5863 @@ -8816,7 +9212,7 @@ 1 2 - 1123 + 1122 2 @@ -8851,15 +9247,15 @@ member_function_this_type - 674762 + 674151 id - 674762 + 674151 this_type - 176182 + 176022 @@ -8873,7 +9269,7 @@ 1 2 - 674762 + 674151 @@ -8889,37 +9285,37 @@ 1 2 - 47198 + 47155 2 3 - 36959 + 36926 3 4 - 32714 + 32684 4 5 - 20103 + 20084 5 6 - 12860 + 12849 6 10 - 14484 + 14471 10 65 - 11862 + 11851 @@ -8929,27 +9325,27 @@ fun_decls - 4212771 + 4208955 id - 4206778 + 4202967 function - 4028473 + 4024823 type_id - 611831 + 611277 name - 1693399 + 1691865 location - 2815798 + 2813247 @@ -8963,7 +9359,7 @@ 1 2 - 4206778 + 4202967 @@ -8979,12 +9375,12 @@ 1 2 - 4200784 + 4196979 2 3 - 5993 + 5988 @@ -9000,7 +9396,7 @@ 1 2 - 4206778 + 4202967 @@ -9016,7 +9412,7 @@ 1 2 - 4206778 + 4202967 @@ -9032,12 +9428,12 @@ 1 2 - 3864776 + 3861275 2 5 - 163696 + 163547 @@ -9053,12 +9449,12 @@ 1 2 - 4009993 + 4006360 2 3 - 18479 + 18463 @@ -9074,7 +9470,7 @@ 1 2 - 4028473 + 4024823 @@ -9090,12 +9486,12 @@ 1 2 - 3885254 + 3881734 2 4 - 143218 + 143088 @@ -9111,27 +9507,27 @@ 1 2 - 295427 + 295159 2 3 - 220758 + 220558 3 5 - 48447 + 48403 5 364 - 45949 + 45908 364 10292 - 1248 + 1247 @@ -9147,22 +9543,22 @@ 1 2 - 305541 + 305264 2 3 - 212018 + 211826 3 5 - 48072 + 48028 5 1163 - 45949 + 45908 1483 @@ -9183,22 +9579,22 @@ 1 2 - 491962 + 491516 2 3 - 52942 + 52894 3 7 - 50195 + 50149 7 2238 - 16731 + 16716 @@ -9214,22 +9610,22 @@ 1 2 - 455377 + 454964 2 3 - 69549 + 69485 3 6 - 56063 + 56012 6 4756 - 30841 + 30813 @@ -9245,22 +9641,22 @@ 1 2 - 1332543 + 1331336 2 3 - 194662 + 194485 3 11 - 129608 + 129490 11 3169 - 36585 + 36551 @@ -9276,17 +9672,17 @@ 1 2 - 1448042 + 1446730 2 4 - 139597 + 139470 4 3162 - 105759 + 105663 @@ -9302,12 +9698,12 @@ 1 2 - 1603497 + 1602045 2 1596 - 89901 + 89820 @@ -9323,17 +9719,17 @@ 1 2 - 1368504 + 1367264 2 3 - 208522 + 208333 3 1592 - 116372 + 116267 @@ -9349,17 +9745,17 @@ 1 2 - 2422477 + 2420283 2 3 - 251724 + 251496 3 211 - 141595 + 141466 @@ -9375,17 +9771,17 @@ 1 2 - 2441207 + 2438995 2 3 - 233494 + 233283 3 211 - 141095 + 140967 @@ -9401,12 +9797,12 @@ 1 2 - 2701298 + 2698851 2 211 - 114499 + 114396 @@ -9422,12 +9818,12 @@ 1 2 - 2776590 + 2774075 2 8 - 39207 + 39171 @@ -9437,11 +9833,11 @@ fun_def - 1423569 + 1422279 id - 1423569 + 1422279 @@ -9470,15 +9866,15 @@ fun_decl_specifiers - 4283569 + 4279688 id - 1749837 + 1748252 name - 1373 + 1372 @@ -9492,22 +9888,22 @@ 1 2 - 363228 + 362899 2 3 - 262463 + 262225 3 4 - 1101171 + 1100174 4 5 - 22974 + 22954 @@ -9704,22 +10100,22 @@ fun_decl_empty_throws - 420457 + 420911 fun_decl - 420457 + 420911 fun_decl_noexcept - 141829 + 141830 fun_decl - 141829 + 141830 constant @@ -9737,7 +10133,7 @@ 1 2 - 141829 + 141830 @@ -9768,22 +10164,22 @@ fun_decl_empty_noexcept - 1164727 + 1163672 fun_decl - 1164727 + 1163672 fun_decl_typedef_type - 2763 + 2761 fun_decl - 2763 + 2761 typedeftype_id @@ -9801,7 +10197,7 @@ 1 2 - 2763 + 2761 @@ -9877,7 +10273,7 @@ fun_requires - 29110 + 29111 id @@ -9889,7 +10285,7 @@ constraint - 28874 + 28875 @@ -9903,7 +10299,7 @@ 1 2 - 10047 + 10048 2 @@ -10007,7 +10403,7 @@ 1 2 - 28637 + 28638 2 @@ -10028,7 +10424,7 @@ 1 2 - 28874 + 28875 @@ -10038,19 +10434,19 @@ param_decl_bind - 7317004 + 7310375 id - 7317004 + 7310375 index - 7991 + 7984 fun_decl - 3534887 + 3531684 @@ -10064,7 +10460,7 @@ 1 2 - 7317004 + 7310375 @@ -10080,7 +10476,7 @@ 1 2 - 7317004 + 7310375 @@ -10096,27 +10492,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 16 20 - 624 + 623 25 147 - 624 + 623 343 16215 - 624 + 623 28310 @@ -10137,27 +10533,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 16 20 - 624 + 623 25 147 - 624 + 623 343 16215 - 624 + 623 28310 @@ -10178,27 +10574,27 @@ 1 2 - 1510349 + 1508981 2 3 - 977182 + 976296 3 4 - 602591 + 602045 4 5 - 290932 + 290668 5 65 - 153831 + 153692 @@ -10214,27 +10610,27 @@ 1 2 - 1510349 + 1508981 2 3 - 977182 + 976296 3 4 - 602591 + 602045 4 5 - 290932 + 290668 5 65 - 153831 + 153692 @@ -10244,27 +10640,27 @@ var_decls - 9398480 + 9389965 id - 9391612 + 9383104 variable - 9042868 + 9034676 type_id - 1457782 + 1456461 name - 853317 + 852544 location - 6280262 + 6274572 @@ -10278,7 +10674,7 @@ 1 2 - 9391612 + 9383104 @@ -10294,12 +10690,12 @@ 1 2 - 9384745 + 9376243 2 3 - 6867 + 6861 @@ -10315,7 +10711,7 @@ 1 2 - 9391612 + 9383104 @@ -10331,7 +10727,7 @@ 1 2 - 9391612 + 9383104 @@ -10347,12 +10743,12 @@ 1 2 - 8711605 + 8703713 2 5 - 331263 + 330962 @@ -10368,12 +10764,12 @@ 1 2 - 8989302 + 8981158 2 3 - 53566 + 53517 @@ -10389,12 +10785,12 @@ 1 2 - 8937359 + 8929262 2 4 - 105509 + 105414 @@ -10410,12 +10806,12 @@ 1 2 - 8791018 + 8783054 2 4 - 251849 + 251621 @@ -10431,27 +10827,27 @@ 1 2 - 850695 + 849924 2 3 - 284314 + 284056 3 5 - 127485 + 127370 5 11 - 113251 + 113148 11 2944 - 82035 + 81961 @@ -10467,27 +10863,27 @@ 1 2 - 871547 + 870758 2 3 - 269330 + 269086 3 5 - 122865 + 122754 5 11 - 113126 + 113023 11 2860 - 80911 + 80838 @@ -10503,22 +10899,22 @@ 1 2 - 1120525 + 1119510 2 3 - 192789 + 192614 3 7 - 115373 + 115269 7 1038 - 29093 + 29066 @@ -10534,27 +10930,27 @@ 1 2 - 986297 + 985403 2 3 - 219260 + 219061 3 6 - 133728 + 133607 6 95 - 109380 + 109281 97 2622 - 9115 + 9106 @@ -10570,32 +10966,32 @@ 1 2 - 466365 + 465942 2 3 - 165943 + 165793 3 4 - 59684 + 59630 4 7 - 65927 + 65868 7 25 - 64179 + 64121 25 27139 - 31215 + 31187 @@ -10611,32 +11007,32 @@ 1 2 - 479351 + 478916 2 3 - 165194 + 165044 3 4 - 54690 + 54640 4 8 - 71671 + 71606 8 45 - 64304 + 64246 45 26704 - 18105 + 18088 @@ -10652,22 +11048,22 @@ 1 2 - 655283 + 654690 2 3 - 110878 + 110778 3 11 - 65553 + 65493 11 3463 - 21601 + 21581 @@ -10683,27 +11079,27 @@ 1 2 - 494209 + 493762 2 3 - 183424 + 183258 3 4 - 51693 + 51646 4 8 - 65053 + 64994 8 22619 - 58935 + 58882 @@ -10719,17 +11115,17 @@ 1 2 - 5780059 + 5774822 2 21 - 472733 + 472305 21 2943 - 27469 + 27445 @@ -10745,12 +11141,12 @@ 1 2 - 5860970 + 5855660 2 2935 - 419291 + 418911 @@ -10766,12 +11162,12 @@ 1 2 - 5981463 + 5976045 2 2555 - 298798 + 298527 @@ -10787,12 +11183,12 @@ 1 2 - 6267900 + 6262222 2 5 - 12361 + 12350 @@ -10802,11 +11198,11 @@ var_def - 3770380 + 3766964 id - 3770380 + 3766964 @@ -10824,11 +11220,11 @@ var_decl_specifiers - 490339 + 489894 id - 490339 + 489894 name @@ -10846,7 +11242,7 @@ 1 2 - 490339 + 489894 @@ -10956,19 +11352,19 @@ type_decls - 1634963 + 1633482 id - 1634963 + 1633482 type_id - 1615984 + 1614520 location - 1548807 + 1547404 @@ -10982,7 +11378,7 @@ 1 2 - 1634963 + 1633482 @@ -10998,7 +11394,7 @@ 1 2 - 1634963 + 1633482 @@ -11014,12 +11410,12 @@ 1 2 - 1599627 + 1598177 2 10 - 16357 + 16342 @@ -11035,12 +11431,12 @@ 1 2 - 1599751 + 1598302 2 10 - 16232 + 16217 @@ -11056,12 +11452,12 @@ 1 2 - 1526706 + 1525323 2 64 - 22100 + 22080 @@ -11077,12 +11473,12 @@ 1 2 - 1526831 + 1525448 2 64 - 21975 + 21956 @@ -11092,22 +11488,22 @@ type_def - 1096551 + 1095558 id - 1096551 + 1095558 type_decl_top - 673602 + 673959 type_decl - 673602 + 673959 @@ -11118,7 +11514,7 @@ id - 2043 + 2044 constraint @@ -11187,11 +11583,11 @@ namespace_decls - 407321 + 407775 id - 407321 + 407775 namespace_id @@ -11199,11 +11595,11 @@ location - 407321 + 407775 bodylocation - 407321 + 407775 @@ -11217,7 +11613,7 @@ 1 2 - 407321 + 407775 @@ -11233,7 +11629,7 @@ 1 2 - 407321 + 407775 @@ -11249,7 +11645,7 @@ 1 2 - 407321 + 407775 @@ -11308,13 +11704,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11374,13 +11770,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11440,13 +11836,13 @@ 146 - 268 - 1868 + 270 + 1870 146 2205 - 12449 + 12461 32 @@ -11463,7 +11859,7 @@ 1 2 - 407321 + 407775 @@ -11479,7 +11875,7 @@ 1 2 - 407321 + 407775 @@ -11495,7 +11891,7 @@ 1 2 - 407321 + 407775 @@ -11511,7 +11907,7 @@ 1 2 - 407321 + 407775 @@ -11527,7 +11923,7 @@ 1 2 - 407321 + 407775 @@ -11543,7 +11939,7 @@ 1 2 - 407321 + 407775 @@ -11553,15 +11949,15 @@ usings - 272082 + 271973 id - 272082 + 271973 element_id - 59053 + 58938 location @@ -11583,7 +11979,7 @@ 1 2 - 272082 + 271973 @@ -11599,7 +11995,7 @@ 1 2 - 272082 + 271973 @@ -11615,7 +12011,7 @@ 1 2 - 272082 + 271973 @@ -11631,7 +12027,7 @@ 1 2 - 51321 + 51206 2 @@ -11657,7 +12053,7 @@ 1 2 - 51321 + 51206 2 @@ -11683,7 +12079,7 @@ 1 2 - 59053 + 58938 @@ -11704,12 +12100,12 @@ 2 4 - 2302 + 2292 4 132 - 1943 + 1954 145 @@ -11735,12 +12131,12 @@ 2 4 - 2302 + 2292 4 132 - 1943 + 1954 145 @@ -11780,8 +12176,8 @@ 10 - 25367 - 25368 + 25356 + 25357 10 @@ -11801,8 +12197,8 @@ 10 - 5377 - 5378 + 5366 + 5367 10 @@ -11834,15 +12230,15 @@ using_container - 580149 + 580049 parent - 21895 + 21874 child - 272082 + 271973 @@ -11871,7 +12267,7 @@ 6 7 - 2291 + 2270 7 @@ -11907,22 +12303,22 @@ 1 2 - 96601 + 96488 2 3 - 120282 + 120285 3 4 - 20099 + 20100 4 5 - 26711 + 26712 5 @@ -11937,23 +12333,23 @@ static_asserts - 173266 + 173262 id - 173266 + 173262 condition - 173266 + 173262 message - 38765 + 38764 location - 22648 + 22647 enclosing @@ -11971,7 +12367,7 @@ 1 2 - 173266 + 173262 @@ -11987,7 +12383,7 @@ 1 2 - 173266 + 173262 @@ -12003,7 +12399,7 @@ 1 2 - 173266 + 173262 @@ -12019,7 +12415,7 @@ 1 2 - 173266 + 173262 @@ -12035,7 +12431,7 @@ 1 2 - 173266 + 173262 @@ -12051,7 +12447,7 @@ 1 2 - 173266 + 173262 @@ -12067,7 +12463,7 @@ 1 2 - 173266 + 173262 @@ -12083,7 +12479,7 @@ 1 2 - 173266 + 173262 @@ -12099,7 +12495,7 @@ 1 2 - 28505 + 28504 2 @@ -12140,7 +12536,7 @@ 1 2 - 28505 + 28504 2 @@ -12181,7 +12577,7 @@ 1 2 - 35922 + 35921 2 @@ -12217,7 +12613,7 @@ 4 12 - 1909 + 1908 12 @@ -12258,7 +12654,7 @@ 5 6 - 4736 + 4735 6 @@ -12319,7 +12715,7 @@ 5 6 - 4736 + 4735 6 @@ -12391,12 +12787,12 @@ 1 2 - 5069 + 5068 2 3 - 8099 + 8098 3 @@ -12499,7 +12895,7 @@ 1 2 - 5857 + 5856 2 @@ -12545,23 +12941,23 @@ params - 7067152 + 7060750 id - 7026197 + 7019832 function - 3408025 + 3404938 index - 7991 + 7984 type_id - 1221415 + 1220308 @@ -12575,7 +12971,7 @@ 1 2 - 7026197 + 7019832 @@ -12591,7 +12987,7 @@ 1 2 - 7026197 + 7019832 @@ -12607,12 +13003,12 @@ 1 2 - 6985242 + 6978913 2 3 - 40955 + 40918 @@ -12628,27 +13024,27 @@ 1 2 - 1474513 + 1473177 2 3 - 927111 + 926272 3 4 - 579242 + 578717 4 5 - 281067 + 280813 5 65 - 146090 + 145958 @@ -12664,27 +13060,27 @@ 1 2 - 1474513 + 1473177 2 3 - 927111 + 926272 3 4 - 579242 + 578717 4 5 - 281067 + 280813 5 65 - 146090 + 145958 @@ -12700,22 +13096,22 @@ 1 2 - 1783301 + 1781685 2 3 - 1031622 + 1030688 3 4 - 437896 + 437499 4 11 - 155205 + 155064 @@ -12731,27 +13127,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 14 18 - 624 + 623 23 138 - 624 + 623 320 15486 - 624 + 623 27294 @@ -12772,27 +13168,27 @@ 2 3 - 3995 + 3992 6 7 - 1997 + 1996 14 18 - 624 + 623 23 138 - 624 + 623 320 15486 - 624 + 623 27294 @@ -12813,27 +13209,27 @@ 1 2 - 3995 + 3992 2 3 - 1997 + 1996 4 7 - 624 + 623 9 55 - 624 + 623 116 2703 - 624 + 623 7497 @@ -12854,27 +13250,27 @@ 1 2 - 738193 + 737524 2 3 - 240612 + 240394 3 5 - 93273 + 93188 5 13 - 93897 + 93812 13 2574 - 55439 + 55389 @@ -12890,27 +13286,27 @@ 1 2 - 820353 + 819610 2 3 - 179803 + 179640 3 6 - 106258 + 106162 6 27 - 92274 + 92190 27 2562 - 22725 + 22704 @@ -12926,17 +13322,17 @@ 1 2 - 996036 + 995134 2 3 - 166942 + 166791 3 65 - 58436 + 58383 @@ -12946,11 +13342,11 @@ overrides - 159781 + 159778 new - 151073 + 151069 old @@ -12968,7 +13364,7 @@ 1 2 - 142372 + 142369 2 @@ -13024,19 +13420,19 @@ membervariables - 1499266 + 1500125 id - 1496815 + 1497674 type_id - 456075 + 456185 name - 641686 + 642156 @@ -13050,7 +13446,7 @@ 1 2 - 1494473 + 1495333 2 @@ -13071,7 +13467,7 @@ 1 2 - 1496815 + 1497674 @@ -13087,22 +13483,22 @@ 1 2 - 338326 + 338449 2 3 - 72218 + 72155 3 10 - 35401 + 35451 10 - 4444 - 10130 + 4445 + 10128 @@ -13118,22 +13514,22 @@ 1 2 - 355917 + 356039 2 3 - 64321 + 64313 3 49 - 34311 + 34253 - 56 - 2185 - 1524 + 49 + 2186 + 1579 @@ -13149,22 +13545,22 @@ 1 2 - 421164 + 421496 2 3 - 122542 + 122419 3 5 - 57785 + 58051 5 656 - 40193 + 40189 @@ -13180,17 +13576,17 @@ 1 2 - 524318 + 524420 2 3 - 72817 + 73190 3 660 - 44550 + 44545 @@ -13200,19 +13596,19 @@ globalvariables - 488591 + 488148 id - 488591 + 488148 type_id - 10363 + 10354 name - 112626 + 112524 @@ -13226,7 +13622,7 @@ 1 2 - 488591 + 488148 @@ -13242,7 +13638,7 @@ 1 2 - 488591 + 488148 @@ -13258,7 +13654,7 @@ 1 2 - 6992 + 6986 2 @@ -13268,17 +13664,17 @@ 3 5 - 749 + 748 5 20 - 874 + 873 20 74 - 874 + 873 152 @@ -13299,7 +13695,7 @@ 1 2 - 7117 + 7110 2 @@ -13309,17 +13705,17 @@ 3 5 - 749 + 748 5 20 - 749 + 748 20 74 - 874 + 873 125 @@ -13340,17 +13736,17 @@ 1 2 - 95395 + 95309 2 7 - 8865 + 8857 7 604 - 8365 + 8358 @@ -13366,12 +13762,12 @@ 1 2 - 97018 + 96931 2 3 - 15358 + 15344 3 @@ -13386,19 +13782,19 @@ localvariables - 726232 + 726300 id - 726232 + 726300 type_id - 53437 + 53440 name - 101525 + 101634 @@ -13412,7 +13808,7 @@ 1 2 - 726232 + 726300 @@ -13428,7 +13824,7 @@ 1 2 - 726232 + 726300 @@ -13444,37 +13840,37 @@ 1 2 - 28883 + 28865 2 3 - 7837 + 7843 3 4 - 4028 + 4029 4 6 - 4053 + 4065 6 12 - 4145 + 4133 12 - 165 - 4008 + 162 + 4009 - 165 - 19323 - 480 + 162 + 19347 + 492 @@ -13490,22 +13886,22 @@ 1 2 - 38383 + 38369 2 3 - 6700 + 6707 3 5 - 4465 + 4478 5 - 3502 - 3888 + 3509 + 3885 @@ -13521,32 +13917,32 @@ 1 2 - 62449 + 62540 2 3 - 16031 + 16039 3 4 - 6524 + 6530 4 8 - 8146 + 8147 8 - 132 - 7617 + 134 + 7623 - 132 - 7547 - 756 + 134 + 7549 + 752 @@ -13562,22 +13958,22 @@ 1 2 - 84480 + 84586 2 3 - 8414 + 8411 3 15 - 7677 + 7683 15 1509 - 953 + 952 @@ -13587,15 +13983,15 @@ autoderivation - 229374 + 229166 var - 229374 + 229166 derivation_type - 624 + 623 @@ -13609,7 +14005,7 @@ 1 2 - 229374 + 229166 @@ -13655,15 +14051,15 @@ orphaned_variables - 44323 + 44324 var - 44323 + 44324 function - 41052 + 41053 @@ -13677,7 +14073,7 @@ 1 2 - 44323 + 44324 @@ -13708,19 +14104,19 @@ enumconstants - 345733 + 347816 id - 345733 + 347816 parent - 41337 + 41550 index - 13942 + 13940 type_id @@ -13728,11 +14124,11 @@ name - 345351 + 347435 location - 318338 + 320424 @@ -13746,7 +14142,7 @@ 1 2 - 345733 + 347816 @@ -13762,7 +14158,7 @@ 1 2 - 345733 + 347816 @@ -13778,7 +14174,7 @@ 1 2 - 345733 + 347816 @@ -13794,7 +14190,7 @@ 1 2 - 345733 + 347816 @@ -13810,7 +14206,7 @@ 1 2 - 345733 + 347816 @@ -13831,17 +14227,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -13861,22 +14257,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -13897,17 +14293,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -13927,22 +14323,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -13958,7 +14354,7 @@ 1 2 - 41337 + 41550 @@ -13979,17 +14375,17 @@ 2 3 - 5773 + 5772 3 4 - 8714 + 8713 4 5 - 5500 + 5554 5 @@ -14009,22 +14405,22 @@ 8 10 - 2941 + 2995 10 15 - 3322 + 3430 15 - 32 - 3104 + 33 + 3158 - 32 + 33 257 - 1361 + 1306 @@ -14040,7 +14436,7 @@ 1 2 - 2124 + 2123 2 @@ -14050,12 +14446,12 @@ 3 4 - 8768 + 8767 4 5 - 5446 + 5500 5 @@ -14075,22 +14471,22 @@ 8 11 - 3757 + 3811 11 17 - 3104 + 3212 17 - 123 - 3104 + 165 + 3158 - 164 + 256 257 - 108 + 54 @@ -14145,7 +14541,7 @@ 64 - 760 + 764 980 @@ -14201,7 +14597,7 @@ 64 - 760 + 764 980 @@ -14218,7 +14614,7 @@ 1 2 - 13942 + 13940 @@ -14273,7 +14669,7 @@ 64 - 757 + 761 980 @@ -14329,7 +14725,7 @@ 64 - 760 + 764 980 @@ -14344,8 +14740,8 @@ 12 - 6348 - 6349 + 6387 + 6388 54 @@ -14360,8 +14756,8 @@ 12 - 759 - 760 + 763 + 764 54 @@ -14392,8 +14788,8 @@ 12 - 6341 - 6342 + 6380 + 6381 54 @@ -14408,8 +14804,8 @@ 12 - 5845 - 5846 + 5884 + 5885 54 @@ -14426,7 +14822,7 @@ 1 2 - 344970 + 347054 2 @@ -14447,7 +14843,7 @@ 1 2 - 344970 + 347054 2 @@ -14468,7 +14864,7 @@ 1 2 - 345351 + 347435 @@ -14484,7 +14880,7 @@ 1 2 - 345351 + 347435 @@ -14500,7 +14896,7 @@ 1 2 - 344970 + 347054 2 @@ -14521,7 +14917,7 @@ 1 2 - 317303 + 319389 2 @@ -14542,7 +14938,7 @@ 1 2 - 318338 + 320424 @@ -14558,7 +14954,7 @@ 1 2 - 317303 + 319389 2 @@ -14579,7 +14975,7 @@ 1 2 - 318338 + 320424 @@ -14595,7 +14991,7 @@ 1 2 - 317303 + 319389 2 @@ -14610,23 +15006,23 @@ builtintypes - 7616 + 7609 id - 7616 + 7609 name - 7616 + 7609 kind - 7616 + 7609 size - 874 + 873 sign @@ -14634,7 +15030,7 @@ alignment - 624 + 623 @@ -14648,7 +15044,7 @@ 1 2 - 7616 + 7609 @@ -14664,7 +15060,7 @@ 1 2 - 7616 + 7609 @@ -14680,7 +15076,7 @@ 1 2 - 7616 + 7609 @@ -14696,7 +15092,7 @@ 1 2 - 7616 + 7609 @@ -14712,7 +15108,7 @@ 1 2 - 7616 + 7609 @@ -14728,7 +15124,7 @@ 1 2 - 7616 + 7609 @@ -14744,7 +15140,7 @@ 1 2 - 7616 + 7609 @@ -14760,7 +15156,7 @@ 1 2 - 7616 + 7609 @@ -14776,7 +15172,7 @@ 1 2 - 7616 + 7609 @@ -14792,7 +15188,7 @@ 1 2 - 7616 + 7609 @@ -14808,7 +15204,7 @@ 1 2 - 7616 + 7609 @@ -14824,7 +15220,7 @@ 1 2 - 7616 + 7609 @@ -14840,7 +15236,7 @@ 1 2 - 7616 + 7609 @@ -14856,7 +15252,7 @@ 1 2 - 7616 + 7609 @@ -14872,7 +15268,7 @@ 1 2 - 7616 + 7609 @@ -15016,7 +15412,7 @@ 3 4 - 624 + 623 @@ -15261,7 +15657,7 @@ 2 3 - 624 + 623 @@ -15277,7 +15673,7 @@ 3 4 - 624 + 623 @@ -15287,23 +15683,23 @@ derivedtypes - 3033685 + 3030936 id - 3033685 + 3030936 name - 1461902 + 1460578 kind - 749 + 748 type_id - 1948495 + 1946730 @@ -15317,7 +15713,7 @@ 1 2 - 3033685 + 3030936 @@ -15333,7 +15729,7 @@ 1 2 - 3033685 + 3030936 @@ -15349,7 +15745,7 @@ 1 2 - 3033685 + 3030936 @@ -15365,17 +15761,17 @@ 1 2 - 1345279 + 1344061 2 28 - 110004 + 109905 29 4302 - 6617 + 6611 @@ -15391,7 +15787,7 @@ 1 2 - 1461902 + 1460578 @@ -15407,17 +15803,17 @@ 1 2 - 1345404 + 1344185 2 28 - 109879 + 109780 29 4302 - 6617 + 6611 @@ -15556,22 +15952,22 @@ 1 2 - 1318684 + 1317489 2 3 - 376213 + 375873 3 4 - 123365 + 123253 4 137 - 130232 + 130114 @@ -15587,22 +15983,22 @@ 1 2 - 1320182 + 1318986 2 3 - 376213 + 375873 3 4 - 121866 + 121756 4 137 - 130232 + 130114 @@ -15618,22 +16014,22 @@ 1 2 - 1320557 + 1319360 2 3 - 376838 + 376496 3 4 - 123614 + 123502 4 6 - 127485 + 127370 @@ -15643,11 +16039,11 @@ pointerishsize - 2249417 + 2247379 id - 2249417 + 2247379 size @@ -15669,7 +16065,7 @@ 1 2 - 2249417 + 2247379 @@ -15685,7 +16081,7 @@ 1 2 - 2249417 + 2247379 @@ -15769,23 +16165,23 @@ arraysizes - 80661 + 80588 id - 80661 + 80588 num_elements - 17855 + 17839 bytesize - 20227 + 20209 alignment - 624 + 623 @@ -15799,7 +16195,7 @@ 1 2 - 80661 + 80588 @@ -15815,7 +16211,7 @@ 1 2 - 80661 + 80588 @@ -15831,7 +16227,7 @@ 1 2 - 80661 + 80588 @@ -15852,7 +16248,7 @@ 2 3 - 10863 + 10853 3 @@ -15862,17 +16258,17 @@ 4 5 - 3496 + 3493 5 9 - 1498 + 1497 9 42 - 1373 + 1372 56 @@ -15893,12 +16289,12 @@ 1 2 - 11737 + 11726 2 3 - 3995 + 3992 3 @@ -15908,7 +16304,7 @@ 5 11 - 1123 + 1122 @@ -15924,22 +16320,22 @@ 1 2 - 11737 + 11726 2 3 - 3995 + 3992 3 4 - 749 + 748 4 6 - 1373 + 1372 @@ -15955,12 +16351,12 @@ 1 2 - 624 + 623 2 3 - 12736 + 12724 3 @@ -15970,17 +16366,17 @@ 4 5 - 2746 + 2744 5 7 - 1498 + 1497 7 17 - 1623 + 1621 24 @@ -16001,17 +16397,17 @@ 1 2 - 14609 + 14595 2 3 - 3621 + 3617 3 6 - 1872 + 1871 6 @@ -16032,17 +16428,17 @@ 1 2 - 14858 + 14845 2 3 - 3371 + 3368 3 5 - 1623 + 1621 5 @@ -16208,15 +16604,15 @@ typedefbase - 1762239 + 1762360 id - 1762239 + 1762360 type_id - 838004 + 838037 @@ -16230,7 +16626,7 @@ 1 2 - 1762239 + 1762360 @@ -16246,22 +16642,22 @@ 1 2 - 662556 + 662552 2 3 - 80927 + 80940 3 6 - 64154 + 64177 6 4526 - 30366 + 30367 @@ -16271,7 +16667,7 @@ decltypes - 814476 + 814475 id @@ -16279,7 +16675,7 @@ expr - 814476 + 814475 kind @@ -16409,7 +16805,7 @@ 1 2 - 814476 + 814475 @@ -16425,7 +16821,7 @@ 1 2 - 814476 + 814475 @@ -16441,7 +16837,7 @@ 1 2 - 814476 + 814475 @@ -16457,7 +16853,7 @@ 1 2 - 814476 + 814475 @@ -16719,11 +17115,11 @@ type_operators - 7960 + 7961 id - 7960 + 7961 arg_type @@ -16735,7 +17131,7 @@ base_type - 5249 + 5250 @@ -16749,7 +17145,7 @@ 1 2 - 7960 + 7961 @@ -16765,7 +17161,7 @@ 1 2 - 7960 + 7961 @@ -16781,7 +17177,7 @@ 1 2 - 7960 + 7961 @@ -17015,7 +17411,7 @@ 1 2 - 4087 + 4088 2 @@ -17035,15 +17431,15 @@ usertypes - 4151525 + 4151710 id - 4151525 + 4151710 name - 918510 + 918534 kind @@ -17061,7 +17457,7 @@ 1 2 - 4151525 + 4151710 @@ -17077,7 +17473,7 @@ 1 2 - 4151525 + 4151710 @@ -17093,22 +17489,22 @@ 1 2 - 654243 + 654261 2 3 - 158665 + 158669 3 8 - 70566 + 70567 8 32669 - 35034 + 35035 @@ -17124,12 +17520,12 @@ 1 2 - 866765 + 866789 2 10 - 51744 + 51745 @@ -17198,8 +17594,8 @@ 10 - 166844 - 166845 + 166851 + 166852 10 @@ -17281,11 +17677,11 @@ usertypesize - 1363780 + 1363817 id - 1363780 + 1363817 size @@ -17307,7 +17703,7 @@ 1 2 - 1363780 + 1363817 @@ -17323,7 +17719,7 @@ 1 2 - 1363780 + 1363817 @@ -17517,26 +17913,26 @@ usertype_final - 11487 + 11477 id - 11487 + 11477 usertype_uuid - 47628 + 47716 id - 47628 + 47716 uuid - 47148 + 47237 @@ -17550,7 +17946,7 @@ 1 2 - 47628 + 47716 @@ -17566,7 +17962,7 @@ 1 2 - 46669 + 46758 2 @@ -17581,11 +17977,11 @@ usertype_alias_kind - 1762239 + 1762360 id - 1762239 + 1762360 alias_kind @@ -17603,7 +17999,7 @@ 1 2 - 1762239 + 1762360 @@ -17617,8 +18013,8 @@ 12 - 36900 - 36901 + 36907 + 36908 10 @@ -17634,26 +18030,26 @@ nontype_template_parameters - 766283 + 766287 id - 766283 + 766287 type_template_type_constraint - 27152 + 27153 id - 13382 + 13383 constraint - 26012 + 26013 @@ -17667,7 +18063,7 @@ 1 2 - 10219 + 10220 2 @@ -17703,7 +18099,7 @@ 1 2 - 24872 + 24873 2 @@ -17718,15 +18114,15 @@ mangled_name - 7859536 + 7852416 id - 7859536 + 7852416 mangled_name - 6370039 + 6364268 is_complete @@ -17744,7 +18140,7 @@ 1 2 - 7859536 + 7852416 @@ -17760,7 +18156,7 @@ 1 2 - 7859536 + 7852416 @@ -17776,12 +18172,12 @@ 1 2 - 6041648 + 6036174 2 1120 - 328391 + 328093 @@ -17797,7 +18193,7 @@ 1 2 - 6370039 + 6364268 @@ -17849,59 +18245,59 @@ is_pod_class - 593757 + 593760 id - 593757 + 593760 is_standard_layout_class - 1124388 + 1124418 id - 1124388 + 1124418 is_complete - 1346258 + 1346294 id - 1346258 + 1346294 is_class_template - 232167 + 232173 id - 232167 + 232173 class_instantiation - 1126046 + 1126076 to - 1123004 + 1123034 from - 71801 + 71803 @@ -17915,7 +18311,7 @@ 1 2 - 1120871 + 1120901 2 @@ -17936,12 +18332,12 @@ 1 2 - 20490 + 20501 2 3 - 12885 + 12886 3 @@ -17951,7 +18347,7 @@ 4 5 - 4657 + 4658 5 @@ -17961,7 +18357,7 @@ 7 10 - 5724 + 5714 10 @@ -17986,11 +18382,11 @@ class_template_argument - 2898595 + 2898672 type_id - 1367076 + 1367112 index @@ -17998,7 +18394,7 @@ arg_type - 822077 + 822099 @@ -18012,27 +18408,27 @@ 1 2 - 579347 + 579362 2 3 - 410278 + 410289 3 4 - 251042 + 251049 4 7 - 103097 + 103100 7 113 - 23310 + 23311 @@ -18048,22 +18444,22 @@ 1 2 - 607886 + 607902 2 3 - 424283 + 424294 3 4 - 251876 + 251883 4 113 - 83029 + 83031 @@ -18171,22 +18567,22 @@ 1 2 - 513703 + 513716 2 3 - 167643 + 167647 3 5 - 75086 + 75088 5 47 - 61736 + 61737 47 @@ -18207,17 +18603,17 @@ 1 2 - 723795 + 723815 2 3 - 79913 + 79915 3 22 - 18367 + 18368 @@ -18227,11 +18623,11 @@ class_template_argument_value - 510083 + 510086 type_id - 205811 + 205812 index @@ -18239,7 +18635,7 @@ arg_value - 509947 + 509949 @@ -18253,7 +18649,7 @@ 1 2 - 155798 + 155799 2 @@ -18279,7 +18675,7 @@ 1 2 - 147928 + 147929 2 @@ -18422,7 +18818,7 @@ 1 2 - 509811 + 509813 2 @@ -18443,7 +18839,7 @@ 1 2 - 509947 + 509949 @@ -18453,15 +18849,15 @@ is_proxy_class_for - 48438 + 48439 id - 48438 + 48439 templ_param_id - 45766 + 45767 @@ -18475,7 +18871,7 @@ 1 2 - 48438 + 48439 @@ -18491,7 +18887,7 @@ 1 2 - 45047 + 45048 2 @@ -18506,19 +18902,19 @@ type_mentions - 5902897 + 5903894 id - 5902897 + 5903894 type_id - 276673 + 276913 location - 5846582 + 5847585 kind @@ -18536,7 +18932,7 @@ 1 2 - 5902897 + 5903894 @@ -18552,7 +18948,7 @@ 1 2 - 5902897 + 5903894 @@ -18568,7 +18964,7 @@ 1 2 - 5902897 + 5903894 @@ -18584,42 +18980,42 @@ 1 2 - 136593 + 136795 2 3 - 31153 + 31203 3 4 - 11273 + 11272 4 5 - 14922 + 14921 5 7 - 19988 + 19931 7 12 - 21785 + 21837 12 28 - 21077 + 21074 28 - 8940 - 19879 + 8941 + 19876 @@ -18635,42 +19031,42 @@ 1 2 - 136593 + 136795 2 3 - 31153 + 31203 3 4 - 11273 + 11272 4 5 - 14922 + 14921 5 7 - 19988 + 19931 7 12 - 21785 + 21837 12 28 - 21077 + 21074 28 - 8940 - 19879 + 8941 + 19876 @@ -18686,7 +19082,7 @@ 1 2 - 276673 + 276913 @@ -18702,12 +19098,12 @@ 1 2 - 5800887 + 5801896 2 4 - 45694 + 45689 @@ -18723,12 +19119,12 @@ 1 2 - 5800887 + 5801896 2 4 - 45694 + 45689 @@ -18744,7 +19140,7 @@ 1 2 - 5846582 + 5847585 @@ -18758,8 +19154,8 @@ 12 - 108383 - 108384 + 108414 + 108415 54 @@ -18774,8 +19170,8 @@ 12 - 5080 - 5081 + 5085 + 5086 54 @@ -18790,8 +19186,8 @@ 12 - 107349 - 107350 + 107380 + 107381 54 @@ -18802,26 +19198,26 @@ is_function_template - 1332543 + 1331336 id - 1332543 + 1331336 function_instantiation - 973628 + 973633 to - 973628 + 973633 from - 182644 + 182645 @@ -18835,7 +19231,7 @@ 1 2 - 973628 + 973633 @@ -18851,12 +19247,12 @@ 1 2 - 110588 + 110589 2 3 - 42790 + 42791 3 @@ -18881,11 +19277,11 @@ function_template_argument - 2484801 + 2484813 function_id - 1453288 + 1453296 index @@ -18893,7 +19289,7 @@ arg_type - 298003 + 298004 @@ -18907,17 +19303,17 @@ 1 2 - 783011 + 783015 2 3 - 413156 + 413158 3 4 - 171810 + 171811 4 @@ -18938,17 +19334,17 @@ 1 2 - 802158 + 802162 2 3 - 411249 + 411251 3 4 - 169630 + 169631 4 @@ -19091,7 +19487,7 @@ 1 2 - 174774 + 174775 2 @@ -19137,7 +19533,7 @@ 1 2 - 256813 + 256814 2 @@ -19157,11 +19553,11 @@ function_template_argument_value - 452779 + 452781 function_id - 196783 + 196784 index @@ -19169,7 +19565,7 @@ arg_value - 450087 + 450090 @@ -19183,7 +19579,7 @@ 1 2 - 151403 + 151404 2 @@ -19209,7 +19605,7 @@ 1 2 - 144487 + 144488 2 @@ -19362,7 +19758,7 @@ 1 2 - 447396 + 447398 2 @@ -19383,7 +19779,7 @@ 1 2 - 450087 + 450090 @@ -19393,26 +19789,26 @@ is_variable_template - 58685 + 58632 id - 58685 + 58632 variable_instantiation - 423162 + 422779 to - 423162 + 422779 from - 35336 + 35304 @@ -19426,7 +19822,7 @@ 1 2 - 423162 + 422779 @@ -19442,42 +19838,42 @@ 1 2 - 15233 + 15219 2 3 - 3870 + 3867 3 4 - 2372 + 2370 4 6 - 2996 + 2994 6 8 - 2247 + 2245 8 12 - 3121 + 3118 12 31 - 2746 + 2744 32 546 - 2746 + 2744 @@ -19487,19 +19883,19 @@ variable_template_argument - 769159 + 768462 variable_id - 401311 + 400947 index - 1997 + 1996 arg_type - 256344 + 256112 @@ -19513,22 +19909,22 @@ 1 2 - 156703 + 156561 2 3 - 189917 + 189745 3 4 - 36460 + 36427 4 17 - 18230 + 18213 @@ -19544,22 +19940,22 @@ 1 2 - 171562 + 171407 2 3 - 180178 + 180014 3 4 - 33713 + 33682 4 17 - 15857 + 15843 @@ -19575,7 +19971,7 @@ 28 29 - 874 + 873 34 @@ -19626,7 +20022,7 @@ 1 2 - 874 + 873 2 @@ -19677,22 +20073,22 @@ 1 2 - 175558 + 175399 2 3 - 44701 + 44660 3 6 - 21601 + 21581 6 206 - 14484 + 14471 @@ -19708,17 +20104,17 @@ 1 2 - 228000 + 227794 2 3 - 24722 + 24700 3 7 - 3621 + 3617 @@ -19728,11 +20124,11 @@ variable_template_argument_value - 19978 + 19960 variable_id - 14858 + 14845 index @@ -19740,7 +20136,7 @@ arg_value - 19978 + 19960 @@ -19754,12 +20150,12 @@ 1 2 - 13360 + 13348 2 3 - 1498 + 1497 @@ -19775,12 +20171,12 @@ 1 2 - 10488 + 10479 2 3 - 3995 + 3992 4 @@ -19863,7 +20259,7 @@ 1 2 - 19978 + 19960 @@ -19879,7 +20275,7 @@ 1 2 - 19978 + 19960 @@ -19889,15 +20285,15 @@ template_template_instantiation - 6368 + 6362 to - 4994 + 4990 from - 1123 + 1122 @@ -19911,12 +20307,12 @@ 1 2 - 3621 + 3617 2 3 - 1373 + 1372 @@ -19932,7 +20328,7 @@ 1 2 - 749 + 748 2 @@ -19957,7 +20353,7 @@ template_template_argument - 9674 + 9675 type_id @@ -20167,7 +20563,7 @@ 1 2 - 9051 + 9052 3 @@ -20455,11 +20851,11 @@ concept_instantiation - 90430 + 90433 to - 90430 + 90433 from @@ -20477,7 +20873,7 @@ 1 2 - 90430 + 90433 @@ -20573,22 +20969,22 @@ is_type_constraint - 36899 + 36900 concept_id - 36899 + 36900 concept_template_argument - 113043 + 113047 concept_id - 76380 + 76383 index @@ -20596,7 +20992,7 @@ arg_type - 21429 + 21430 @@ -20610,12 +21006,12 @@ 1 2 - 46473 + 46475 2 3 - 24678 + 24679 3 @@ -20636,17 +21032,17 @@ 1 2 - 50088 + 50090 2 3 - 22376 + 22377 3 7 - 3915 + 3916 @@ -20946,15 +21342,15 @@ routinetypes - 604319 + 604322 id - 604319 + 604322 return_type - 283864 + 283865 @@ -20968,7 +21364,7 @@ 1 2 - 604319 + 604322 @@ -20984,7 +21380,7 @@ 1 2 - 234225 + 234226 2 @@ -21004,11 +21400,11 @@ routinetypeargs - 1176788 + 1176651 routine - 415119 + 415070 index @@ -21016,7 +21412,7 @@ type_id - 111595 + 111582 @@ -21030,32 +21426,32 @@ 1 2 - 82511 + 82502 2 3 - 126028 + 126013 3 4 - 107456 + 107443 4 5 - 49289 + 49283 5 7 - 33168 + 33164 7 19 - 16665 + 16663 @@ -21071,27 +21467,27 @@ 1 2 - 88502 + 88492 2 3 - 138663 + 138647 3 4 - 114209 + 114196 4 5 - 40738 + 40733 5 10 - 32895 + 32891 10 @@ -21289,42 +21685,42 @@ 1 2 - 33222 + 33218 2 3 - 15195 + 15193 3 4 - 13234 + 13233 4 5 - 9803 + 9802 5 6 - 6372 + 6371 6 8 - 9476 + 9475 8 13 - 9531 + 9529 13 26 - 8659 + 8658 26 @@ -21345,22 +21741,22 @@ 1 2 - 78917 + 78908 2 3 - 17537 + 17535 3 5 - 9476 + 9475 5 17 - 5664 + 5663 @@ -21370,11 +21766,11 @@ ptrtomembers - 9727 + 9728 id - 9727 + 9728 type_id @@ -21396,7 +21792,7 @@ 1 2 - 9727 + 9728 @@ -21412,7 +21808,7 @@ 1 2 - 9727 + 9728 @@ -21526,15 +21922,15 @@ specifiers - 7741 + 7734 id - 7741 + 7734 str - 7741 + 7734 @@ -21548,7 +21944,7 @@ 1 2 - 7741 + 7734 @@ -21564,7 +21960,7 @@ 1 2 - 7741 + 7734 @@ -21574,15 +21970,15 @@ typespecifiers - 854940 + 854272 type_id - 847448 + 849128 spec_id - 1623 + 95 @@ -21596,12 +21992,12 @@ 1 2 - 839957 + 843984 2 3 - 7491 + 5143 @@ -21615,69 +22011,49 @@ 12 - 1 - 2 - 124 + 168 + 169 + 10 - 2 - 3 - 124 + 215 + 216 + 10 - 16 - 17 - 124 + 225 + 226 + 10 - 17 - 18 - 124 + 533 + 534 + 10 - 24 - 25 - 124 + 821 + 822 + 10 - 44 - 45 - 124 + 1568 + 1569 + 10 - 49 - 50 - 124 + 4195 + 4196 + 10 - 51 - 52 - 124 + 18295 + 18296 + 10 - 112 - 113 - 124 - - - 199 - 200 - 124 - - - 325 - 326 - 124 - - - 545 - 546 - 124 - - - 5462 - 5463 - 124 + 54858 + 54859 + 10 @@ -21687,15 +22063,15 @@ funspecifiers - 9723250 + 9714441 func_id - 4012490 + 4008855 spec_id - 2372 + 2370 @@ -21709,27 +22085,27 @@ 1 2 - 1528454 + 1527070 2 3 - 506696 + 506237 3 4 - 1037865 + 1036925 4 5 - 693492 + 692863 5 8 - 245981 + 245758 @@ -21845,15 +22221,15 @@ varspecifiers - 3078136 + 3075347 var_id - 2316968 + 2314869 spec_id - 1123 + 1122 @@ -21867,17 +22243,17 @@ 1 2 - 1659561 + 1658058 2 3 - 554144 + 553642 3 5 - 103262 + 103168 @@ -21943,15 +22319,15 @@ explicit_specifier_exprs - 41329 + 41292 func_id - 41329 + 41292 constant - 41329 + 41292 @@ -21965,7 +22341,7 @@ 1 2 - 41329 + 41292 @@ -21981,7 +22357,7 @@ 1 2 - 41329 + 41292 @@ -21991,11 +22367,11 @@ attributes - 654409 + 653817 id - 654409 + 653817 kind @@ -22003,7 +22379,7 @@ name - 2122 + 2120 name_space @@ -22011,7 +22387,7 @@ location - 648291 + 647704 @@ -22025,7 +22401,7 @@ 1 2 - 654409 + 653817 @@ -22041,7 +22417,7 @@ 1 2 - 654409 + 653817 @@ -22057,7 +22433,7 @@ 1 2 - 654409 + 653817 @@ -22073,7 +22449,7 @@ 1 2 - 654409 + 653817 @@ -22269,7 +22645,7 @@ 1 2 - 1872 + 1871 2 @@ -22290,7 +22666,7 @@ 1 2 - 2122 + 2120 @@ -22476,12 +22852,12 @@ 1 2 - 642423 + 641841 2 5 - 5868 + 5863 @@ -22497,7 +22873,7 @@ 1 2 - 648291 + 647704 @@ -22513,12 +22889,12 @@ 1 2 - 643172 + 642589 2 3 - 5119 + 5114 @@ -22534,7 +22910,7 @@ 1 2 - 648291 + 647704 @@ -23243,15 +23619,15 @@ attribute_arg_constant - 71875 + 71856 arg - 71875 + 71856 constant - 71875 + 71856 @@ -23265,7 +23641,7 @@ 1 2 - 71875 + 71856 @@ -23281,7 +23657,7 @@ 1 2 - 71875 + 71856 @@ -23392,15 +23768,15 @@ typeattributes - 96394 + 96307 type_id - 94646 + 94560 spec_id - 32464 + 32435 @@ -23414,12 +23790,12 @@ 1 2 - 92898 + 92814 2 3 - 1748 + 1746 @@ -23435,17 +23811,17 @@ 1 2 - 27969 + 27944 2 9 - 2497 + 2495 11 58 - 1997 + 1996 @@ -23455,15 +23831,15 @@ funcattributes - 844327 + 843562 func_id - 799751 + 799026 spec_id - 617325 + 616766 @@ -23477,12 +23853,12 @@ 1 2 - 759669 + 758981 2 7 - 40081 + 40044 @@ -23498,12 +23874,12 @@ 1 2 - 572249 + 571731 2 213 - 45075 + 45034 @@ -23702,15 +24078,15 @@ unspecifiedtype - 7179404 + 7172900 type_id - 7179404 + 7172900 unspecified_type_id - 3965916 + 3962323 @@ -23724,7 +24100,7 @@ 1 2 - 7179404 + 7172900 @@ -23740,22 +24116,22 @@ 1 2 - 2482787 + 2480537 2 3 - 1117778 + 1116765 3 7 - 302918 + 302644 7 537 - 62431 + 62375 @@ -23765,19 +24141,19 @@ member - 4193417 + 4189618 parent - 543780 + 543288 index - 29717 + 29690 child - 4188797 + 4185003 @@ -23791,57 +24167,57 @@ 1 2 - 129108 + 128991 2 3 - 83408 + 83333 3 4 - 32464 + 32435 4 5 - 44950 + 44910 5 6 - 42453 + 42415 6 7 - 33962 + 33932 7 9 - 42328 + 42290 9 13 - 41204 + 41167 13 18 - 41329 + 41292 18 42 - 40830 + 40793 42 239 - 11737 + 11726 @@ -23857,57 +24233,57 @@ 1 2 - 128859 + 128742 2 3 - 83533 + 83458 3 4 - 32214 + 32185 4 5 - 45075 + 45034 5 6 - 42578 + 42539 6 7 - 32839 + 32809 7 9 - 42703 + 42664 9 13 - 41579 + 41541 13 18 - 41454 + 41417 18 42 - 40955 + 40918 42 265 - 11986 + 11976 @@ -23923,57 +24299,57 @@ 1 2 - 6492 + 6487 2 3 - 2622 + 2619 3 8 - 1872 + 1871 9 10 - 2871 + 2869 10 19 - 2247 + 2245 19 26 - 2247 + 2245 26 36 - 2497 + 2495 36 50 - 2247 + 2245 54 141 - 2247 + 2245 150 468 - 2247 + 2245 480 4310 - 2122 + 2120 @@ -23989,57 +24365,57 @@ 1 2 - 5493 + 5489 2 3 - 3621 + 3617 3 9 - 1872 + 1871 9 10 - 2871 + 2869 10 20 - 2372 + 2370 20 28 - 2372 + 2370 28 37 - 2372 + 2370 37 56 - 2372 + 2370 58 156 - 2247 + 2245 163 527 - 2247 + 2245 547 4330 - 1872 + 1871 @@ -24055,7 +24431,7 @@ 1 2 - 4188797 + 4185003 @@ -24071,12 +24447,12 @@ 1 2 - 4184177 + 4180387 2 3 - 4619 + 4615 @@ -24094,7 +24470,7 @@ parent - 71340 + 71341 @@ -24149,15 +24525,15 @@ derivations - 476900 + 476902 derivation - 476900 + 476902 sub - 455164 + 455166 index @@ -24165,11 +24541,11 @@ super - 235554 + 235555 location - 35397 + 35398 @@ -24183,7 +24559,7 @@ 1 2 - 476900 + 476902 @@ -24199,7 +24575,7 @@ 1 2 - 476900 + 476902 @@ -24215,7 +24591,7 @@ 1 2 - 476900 + 476902 @@ -24231,7 +24607,7 @@ 1 2 - 476900 + 476902 @@ -24247,7 +24623,7 @@ 1 2 - 438640 + 438642 2 @@ -24268,7 +24644,7 @@ 1 2 - 438640 + 438642 2 @@ -24289,7 +24665,7 @@ 1 2 - 438640 + 438642 2 @@ -24310,7 +24686,7 @@ 1 2 - 438640 + 438642 2 @@ -24470,7 +24846,7 @@ 1 2 - 225742 + 225743 2 @@ -24491,7 +24867,7 @@ 1 2 - 225742 + 225743 2 @@ -24512,7 +24888,7 @@ 1 2 - 235111 + 235112 2 @@ -24533,7 +24909,7 @@ 1 2 - 230205 + 230206 2 @@ -24626,7 +25002,7 @@ 1 2 - 35397 + 35398 @@ -24667,11 +25043,11 @@ derspecifiers - 478671 + 478674 der_id - 476457 + 476459 spec_id @@ -24689,7 +25065,7 @@ 1 2 - 474242 + 474245 2 @@ -24735,11 +25111,11 @@ direct_base_offsets - 449985 + 449987 der_id - 449985 + 449987 offset @@ -24757,7 +25133,7 @@ 1 2 - 449985 + 449987 @@ -24954,11 +25330,11 @@ frienddecls - 700462 + 700465 id - 700462 + 700465 type_id @@ -24984,7 +25360,7 @@ 1 2 - 700462 + 700465 @@ -25000,7 +25376,7 @@ 1 2 - 700462 + 700465 @@ -25016,7 +25392,7 @@ 1 2 - 700462 + 700465 @@ -25047,7 +25423,7 @@ 7 12 - 3440 + 3441 12 @@ -25103,7 +25479,7 @@ 7 12 - 3440 + 3441 12 @@ -25247,7 +25623,7 @@ 1 2 - 77166 + 77167 2 @@ -25325,19 +25701,19 @@ comments - 11241965 + 11233402 id - 11241965 + 11233402 contents - 4306669 + 4303640 location - 11241965 + 11233402 @@ -25351,7 +25727,7 @@ 1 2 - 11241965 + 11233402 @@ -25367,7 +25743,7 @@ 1 2 - 11241965 + 11233402 @@ -25383,17 +25759,17 @@ 1 2 - 3932328 + 3928890 2 - 7 - 330014 + 6 + 322978 - 7 + 6 34447 - 44326 + 51771 @@ -25409,17 +25785,17 @@ 1 2 - 3932328 + 3928890 2 - 7 - 330014 + 6 + 322978 - 7 + 6 34447 - 44326 + 51771 @@ -25435,7 +25811,7 @@ 1 2 - 11241965 + 11233402 @@ -25451,7 +25827,7 @@ 1 2 - 11241965 + 11233402 @@ -25461,15 +25837,15 @@ commentbinding - 3916720 + 3914793 id - 3352211 + 3350796 element - 3751026 + 3749249 @@ -25483,12 +25859,12 @@ 1 2 - 3290529 + 3289170 2 1706 - 61682 + 61626 @@ -25504,12 +25880,12 @@ 1 2 - 3585332 + 3583705 2 3 - 165693 + 165543 @@ -25519,15 +25895,15 @@ exprconv - 9633088 + 9633084 converted - 9632982 + 9632979 conversion - 9633088 + 9633084 @@ -25541,7 +25917,7 @@ 1 2 - 9632877 + 9632873 2 @@ -25562,7 +25938,7 @@ 1 2 - 9633088 + 9633084 @@ -25572,22 +25948,22 @@ compgenerated - 9891529 + 9892394 id - 9891529 + 9892394 synthetic_destructor_call - 1671638 + 1671701 element - 1244918 + 1244965 i @@ -25595,7 +25971,7 @@ destructor_call - 1671638 + 1671701 @@ -25609,17 +25985,17 @@ 1 2 - 828654 + 828685 2 3 - 409464 + 409480 3 19 - 6798 + 6799 @@ -25635,17 +26011,17 @@ 1 2 - 828654 + 828685 2 3 - 409464 + 409480 3 19 - 6798 + 6799 @@ -25793,7 +26169,7 @@ 1 2 - 1671638 + 1671701 @@ -25809,7 +26185,7 @@ 1 2 - 1671638 + 1671701 @@ -25888,15 +26264,15 @@ namespacembrs - 2039521 + 2037673 parentid - 3995 + 3992 memberid - 2039521 + 2037673 @@ -25925,7 +26301,7 @@ 4 5 - 624 + 623 5 @@ -25986,7 +26362,7 @@ 1 2 - 2039521 + 2037673 @@ -25996,11 +26372,11 @@ exprparents - 19454218 + 19454210 expr_id - 19454218 + 19454210 child_index @@ -26008,7 +26384,7 @@ parent_id - 12939988 + 12939983 @@ -26022,7 +26398,7 @@ 1 2 - 19454218 + 19454210 @@ -26038,7 +26414,7 @@ 1 2 - 19454218 + 19454210 @@ -26156,12 +26532,12 @@ 1 2 - 7394757 + 7394754 2 3 - 5082680 + 5082678 3 @@ -26182,12 +26558,12 @@ 1 2 - 7394757 + 7394754 2 3 - 5082680 + 5082678 3 @@ -26202,22 +26578,22 @@ expr_isload - 6909475 + 6909332 expr_id - 6909475 + 6909332 conversionkinds - 6050433 + 6050443 expr_id - 6050433 + 6050443 kind @@ -26235,7 +26611,7 @@ 1 2 - 6050433 + 6050443 @@ -26259,8 +26635,8 @@ 1 - 7362 - 7363 + 7371 + 7372 1 @@ -26279,8 +26655,8 @@ 1 - 5831534 - 5831535 + 5831535 + 5831536 1 @@ -26291,11 +26667,11 @@ iscall - 5802603 + 5802824 caller - 5802603 + 5802824 kind @@ -26313,7 +26689,7 @@ 1 2 - 5802603 + 5802824 @@ -26349,11 +26725,11 @@ numtemplatearguments - 627938 + 627369 expr_id - 627938 + 627369 num @@ -26371,7 +26747,7 @@ 1 2 - 627938 + 627369 @@ -26455,23 +26831,23 @@ namequalifiers - 3041863 + 3041979 id - 3041863 + 3041979 qualifiableelement - 3041863 + 3041979 qualifyingelement - 47485 + 47486 location - 552436 + 552457 @@ -26485,7 +26861,7 @@ 1 2 - 3041863 + 3041979 @@ -26501,7 +26877,7 @@ 1 2 - 3041863 + 3041979 @@ -26517,7 +26893,7 @@ 1 2 - 3041863 + 3041979 @@ -26533,7 +26909,7 @@ 1 2 - 3041863 + 3041979 @@ -26549,7 +26925,7 @@ 1 2 - 3041863 + 3041979 @@ -26565,7 +26941,7 @@ 1 2 - 3041863 + 3041979 @@ -26581,12 +26957,12 @@ 1 2 - 31541 + 31543 2 3 - 8175 + 8176 3 @@ -26617,12 +26993,12 @@ 1 2 - 31541 + 31543 2 3 - 8175 + 8176 3 @@ -26653,7 +27029,7 @@ 1 2 - 34403 + 34404 2 @@ -26684,22 +27060,22 @@ 1 2 - 79134 + 79137 2 6 - 38104 + 38105 6 7 - 398986 + 399001 7 192 - 36210 + 36212 @@ -26715,22 +27091,22 @@ 1 2 - 79134 + 79137 2 6 - 38104 + 38105 6 7 - 398986 + 399001 7 192 - 36210 + 36212 @@ -26746,22 +27122,22 @@ 1 2 - 111537 + 111541 2 4 - 13296 + 13297 4 5 - 415295 + 415311 5 33 - 12306 + 12307 @@ -26771,15 +27147,15 @@ varbind - 8254632 + 8254629 expr - 8254632 + 8254629 var - 1050376 + 1050375 @@ -26793,7 +27169,7 @@ 1 2 - 8254632 + 8254629 @@ -26829,7 +27205,7 @@ 5 6 - 83151 + 83150 6 @@ -26864,15 +27240,15 @@ funbind - 5812199 + 5812528 expr - 5809833 + 5810054 fun - 275916 + 275948 @@ -26886,12 +27262,12 @@ 1 2 - 5807466 + 5807579 2 3 - 2366 + 2474 @@ -26907,27 +27283,27 @@ 1 2 - 181420 + 181448 2 3 - 38835 + 38837 3 4 - 17212 + 17191 4 8 - 22720 + 22742 8 37798 - 15727 + 15728 @@ -26937,11 +27313,11 @@ expr_allocator - 45243 + 45244 expr - 45243 + 45244 func @@ -26963,7 +27339,7 @@ 1 2 - 45243 + 45244 @@ -26979,7 +27355,7 @@ 1 2 - 45243 + 45244 @@ -27210,15 +27586,15 @@ expr_cond_guard - 897880 + 897879 cond - 897880 + 897879 guard - 897880 + 897879 @@ -27232,7 +27608,7 @@ 1 2 - 897880 + 897879 @@ -27248,7 +27624,7 @@ 1 2 - 897880 + 897879 @@ -27306,15 +27682,15 @@ expr_cond_false - 897880 + 897879 cond - 897880 + 897879 false - 897880 + 897879 @@ -27328,7 +27704,7 @@ 1 2 - 897880 + 897879 @@ -27344,7 +27720,7 @@ 1 2 - 897880 + 897879 @@ -27354,11 +27730,11 @@ values - 13474606 + 13474601 id - 13474606 + 13474601 str @@ -27376,7 +27752,7 @@ 1 2 - 13474606 + 13474601 @@ -27422,11 +27798,11 @@ valuetext - 6647578 + 6647456 id - 6647578 + 6647456 text @@ -27444,7 +27820,7 @@ 1 2 - 6647578 + 6647456 @@ -27485,15 +27861,15 @@ valuebind - 13583189 + 13583183 val - 13474606 + 13474601 expr - 13583189 + 13583183 @@ -27507,7 +27883,7 @@ 1 2 - 13384052 + 13384046 2 @@ -27528,7 +27904,7 @@ 1 2 - 13583189 + 13583183 @@ -27538,15 +27914,15 @@ fieldoffsets - 1496815 + 1497674 id - 1496815 + 1497674 byteoffset - 31370 + 31367 bitoffset @@ -27564,7 +27940,7 @@ 1 2 - 1496815 + 1497674 @@ -27580,7 +27956,7 @@ 1 2 - 1496815 + 1497674 @@ -27596,7 +27972,7 @@ 1 2 - 17700 + 17698 2 @@ -27611,7 +27987,7 @@ 5 12 - 2614 + 2613 12 @@ -27625,7 +28001,7 @@ 250 - 5947 + 5950 1089 @@ -27642,7 +28018,7 @@ 1 2 - 30390 + 30386 2 @@ -27696,8 +28072,8 @@ 54 - 27127 - 27128 + 27146 + 27147 54 @@ -27739,19 +28115,19 @@ bitfield - 30341 + 30314 id - 30341 + 30314 bits - 3496 + 3493 declared_bits - 3496 + 3493 @@ -27765,7 +28141,7 @@ 1 2 - 30341 + 30314 @@ -27781,7 +28157,7 @@ 1 2 - 30341 + 30314 @@ -27802,7 +28178,7 @@ 2 3 - 749 + 748 3 @@ -27848,7 +28224,7 @@ 1 2 - 3496 + 3493 @@ -27869,7 +28245,7 @@ 2 3 - 749 + 748 3 @@ -27915,7 +28291,7 @@ 1 2 - 3496 + 3493 @@ -27925,23 +28301,23 @@ initialisers - 2251035 + 2251321 init - 2251035 + 2251321 var - 980971 + 981178 expr - 2251035 + 2251321 location - 516371 + 516961 @@ -27955,7 +28331,7 @@ 1 2 - 2251035 + 2251321 @@ -27971,7 +28347,7 @@ 1 2 - 2251035 + 2251321 @@ -27987,7 +28363,7 @@ 1 2 - 2251035 + 2251321 @@ -28003,17 +28379,17 @@ 1 2 - 870556 + 870758 2 15 - 37441 + 37448 16 25 - 72973 + 72972 @@ -28029,17 +28405,17 @@ 1 2 - 870556 + 870758 2 15 - 37441 + 37448 16 25 - 72973 + 72972 @@ -28055,7 +28431,7 @@ 1 2 - 980963 + 981170 2 @@ -28076,7 +28452,7 @@ 1 2 - 2251035 + 2251321 @@ -28092,7 +28468,7 @@ 1 2 - 2251035 + 2251321 @@ -28108,7 +28484,7 @@ 1 2 - 2251035 + 2251321 @@ -28124,22 +28500,22 @@ 1 2 - 414356 + 415111 2 3 - 33606 + 33614 3 13 - 42250 + 42070 13 - 111911 - 26157 + 111925 + 26165 @@ -28155,17 +28531,17 @@ 1 2 - 443657 + 444412 2 3 - 34516 + 34524 3 - 12237 - 38196 + 12238 + 38025 @@ -28181,22 +28557,22 @@ 1 2 - 414356 + 415111 2 3 - 33606 + 33614 3 13 - 42250 + 42070 13 - 111911 - 26157 + 111925 + 26165 @@ -28206,26 +28582,26 @@ braced_initialisers - 68468 + 68438 init - 68468 + 68438 expr_ancestor - 1677619 + 1677683 exp - 1677619 + 1677683 ancestor - 839627 + 839659 @@ -28239,7 +28615,7 @@ 1 2 - 1677619 + 1677683 @@ -28255,12 +28631,12 @@ 1 2 - 17083 + 17084 2 3 - 812474 + 812505 3 @@ -28275,11 +28651,11 @@ exprs - 25210577 + 25210567 id - 25210577 + 25210567 kind @@ -28287,7 +28663,7 @@ location - 10582671 + 10585854 @@ -28301,7 +28677,7 @@ 1 2 - 25210577 + 25210567 @@ -28317,7 +28693,7 @@ 1 2 - 25210577 + 25210567 @@ -28477,8 +28853,8 @@ 109 - 224080 - 224081 + 224225 + 224226 21 @@ -28495,7 +28871,7 @@ 1 2 - 8900701 + 8903885 2 @@ -28505,7 +28881,7 @@ 3 16 - 797199 + 797198 16 @@ -28526,12 +28902,12 @@ 1 2 - 9040103 + 9043287 2 3 - 774273 + 774272 3 @@ -28546,15 +28922,15 @@ expr_reuse - 847007 + 847039 reuse - 847007 + 847039 original - 847007 + 847039 value_category @@ -28572,7 +28948,7 @@ 1 2 - 847007 + 847039 @@ -28588,7 +28964,7 @@ 1 2 - 847007 + 847039 @@ -28604,7 +28980,7 @@ 1 2 - 847007 + 847039 @@ -28620,7 +28996,7 @@ 1 2 - 847007 + 847039 @@ -28672,11 +29048,11 @@ expr_types - 25210577 + 25210567 id - 25210577 + 25210567 typeid @@ -28698,7 +29074,7 @@ 1 2 - 25210577 + 25210567 @@ -28714,7 +29090,7 @@ 1 2 - 25210577 + 25210567 @@ -28859,11 +29235,11 @@ new_allocated_type - 46197 + 46198 expr - 46197 + 46198 type_id @@ -28881,7 +29257,7 @@ 1 2 - 46197 + 46198 @@ -30316,15 +30692,15 @@ condition_decl_bind - 408905 + 408920 expr - 408905 + 408920 decl - 408905 + 408920 @@ -30338,7 +30714,7 @@ 1 2 - 408905 + 408920 @@ -30354,7 +30730,7 @@ 1 2 - 408905 + 408920 @@ -30422,15 +30798,15 @@ uuidof_bind - 26588 + 26677 expr - 26588 + 26677 type_id - 26336 + 26425 @@ -30444,7 +30820,7 @@ 1 2 - 26588 + 26677 @@ -30460,7 +30836,7 @@ 1 2 - 26125 + 26214 2 @@ -30475,11 +30851,11 @@ sizeof_bind - 242027 + 242026 expr - 242027 + 242026 type_id @@ -30497,7 +30873,7 @@ 1 2 - 242027 + 242026 @@ -30852,11 +31228,11 @@ lambda_capture - 31966 + 31965 id - 31966 + 31965 lambda @@ -30868,7 +31244,7 @@ field - 31966 + 31965 captured_by_reference @@ -30894,7 +31270,7 @@ 1 2 - 31966 + 31965 @@ -30910,7 +31286,7 @@ 1 2 - 31966 + 31965 @@ -30926,7 +31302,7 @@ 1 2 - 31966 + 31965 @@ -30942,7 +31318,7 @@ 1 2 - 31966 + 31965 @@ -30958,7 +31334,7 @@ 1 2 - 31966 + 31965 @@ -30974,7 +31350,7 @@ 1 2 - 31966 + 31965 @@ -31602,7 +31978,7 @@ 1 2 - 31966 + 31965 @@ -31618,7 +31994,7 @@ 1 2 - 31966 + 31965 @@ -31634,7 +32010,7 @@ 1 2 - 31966 + 31965 @@ -31650,7 +32026,7 @@ 1 2 - 31966 + 31965 @@ -31666,7 +32042,7 @@ 1 2 - 31966 + 31965 @@ -31682,7 +32058,7 @@ 1 2 - 31966 + 31965 @@ -31992,7 +32368,7 @@ 1 2 - 17254 + 17253 2 @@ -32196,11 +32572,11 @@ stmts - 6368968 + 6368836 id - 6368968 + 6368836 kind @@ -32208,7 +32584,7 @@ location - 2684538 + 2684483 @@ -32222,7 +32598,7 @@ 1 2 - 6368968 + 6368836 @@ -32238,7 +32614,7 @@ 1 2 - 6368968 + 6368836 @@ -32476,22 +32852,22 @@ 1 2 - 2225039 + 2224993 2 3 - 182234 + 182231 3 10 - 202178 + 202173 10 1789 - 75085 + 75084 @@ -32507,12 +32883,12 @@ 1 2 - 2601581 + 2601527 2 10 - 82957 + 82955 @@ -32725,15 +33101,15 @@ if_else - 437090 + 437107 if_stmt - 437090 + 437107 else_id - 437090 + 437107 @@ -32747,7 +33123,7 @@ 1 2 - 437090 + 437107 @@ -32763,7 +33139,7 @@ 1 2 - 437090 + 437107 @@ -32821,15 +33197,15 @@ constexpr_if_then - 106134 + 106037 constexpr_if_stmt - 106134 + 106037 then_id - 106134 + 106037 @@ -32843,7 +33219,7 @@ 1 2 - 106134 + 106037 @@ -32859,7 +33235,7 @@ 1 2 - 106134 + 106037 @@ -32869,15 +33245,15 @@ constexpr_if_else - 76166 + 76097 constexpr_if_stmt - 76166 + 76097 else_id - 76166 + 76097 @@ -32891,7 +33267,7 @@ 1 2 - 76166 + 76097 @@ -32907,7 +33283,7 @@ 1 2 - 76166 + 76097 @@ -33157,11 +33533,11 @@ switch_case - 836120 + 836152 switch_stmt - 411852 + 411868 index @@ -33169,7 +33545,7 @@ case_id - 836120 + 836152 @@ -33188,7 +33564,7 @@ 2 3 - 408969 + 408985 3 @@ -33214,7 +33590,7 @@ 2 3 - 408969 + 408985 3 @@ -33377,7 +33753,7 @@ 1 2 - 836120 + 836152 @@ -33393,7 +33769,7 @@ 1 2 - 836120 + 836152 @@ -33403,15 +33779,15 @@ switch_body - 411852 + 411868 switch_stmt - 411852 + 411868 body_id - 411852 + 411868 @@ -33425,7 +33801,7 @@ 1 2 - 411852 + 411868 @@ -33441,7 +33817,7 @@ 1 2 - 411852 + 411868 @@ -33643,11 +34019,11 @@ stmtparents - 5628380 + 5628263 id - 5628380 + 5628263 index @@ -33655,7 +34031,7 @@ parent - 2381490 + 2381441 @@ -33669,7 +34045,7 @@ 1 2 - 5628380 + 5628263 @@ -33685,7 +34061,7 @@ 1 2 - 5628380 + 5628263 @@ -33721,7 +34097,7 @@ 7 8 - 1316 + 1315 8 @@ -33782,7 +34158,7 @@ 7 8 - 1316 + 1315 8 @@ -33823,27 +34199,27 @@ 1 2 - 1359015 + 1358987 2 3 - 517378 + 517368 3 4 - 151519 + 151516 4 6 - 155727 + 155724 6 16 - 178871 + 178868 16 @@ -33864,27 +34240,27 @@ 1 2 - 1359015 + 1358987 2 3 - 517378 + 517368 3 4 - 151519 + 151516 4 6 - 155727 + 155724 6 16 - 178871 + 178868 16 @@ -33899,22 +34275,22 @@ ishandler - 43746 + 43781 block - 43746 + 43781 stmt_decl_bind - 725885 + 725870 stmt - 715316 + 715301 num @@ -33922,7 +34298,7 @@ decl - 725885 + 725870 @@ -33936,7 +34312,7 @@ 1 2 - 707850 + 707836 2 @@ -33957,7 +34333,7 @@ 1 2 - 707850 + 707836 2 @@ -34090,7 +34466,7 @@ 1 2 - 725885 + 725870 @@ -34106,7 +34482,7 @@ 1 2 - 725885 + 725870 @@ -34116,11 +34492,11 @@ stmt_decl_entry_bind - 725885 + 725870 stmt - 715316 + 715301 num @@ -34128,7 +34504,7 @@ decl_entry - 725885 + 725870 @@ -34142,7 +34518,7 @@ 1 2 - 707850 + 707836 2 @@ -34163,7 +34539,7 @@ 1 2 - 707850 + 707836 2 @@ -34296,7 +34672,7 @@ 1 2 - 725885 + 725870 @@ -34312,7 +34688,7 @@ 1 2 - 725885 + 725870 @@ -34322,15 +34698,15 @@ blockscope - 1644952 + 1644335 block - 1644952 + 1644335 enclosing - 1428064 + 1427145 @@ -34344,7 +34720,7 @@ 1 2 - 1644952 + 1644335 @@ -34360,17 +34736,17 @@ 1 2 - 1295584 + 1294535 2 4 - 117122 + 117265 4 - 28 - 15358 + 29 + 15344 @@ -34561,19 +34937,19 @@ preprocdirects - 5413334 + 5408430 id - 5413334 + 5408430 kind - 1373 + 1372 location - 5410088 + 5405187 @@ -34587,7 +34963,7 @@ 1 2 - 5413334 + 5408430 @@ -34603,7 +34979,7 @@ 1 2 - 5413334 + 5408430 @@ -34751,7 +35127,7 @@ 1 2 - 5409963 + 5405062 27 @@ -34772,7 +35148,7 @@ 1 2 - 5410088 + 5405187 @@ -34782,15 +35158,15 @@ preprocpair - 1142251 + 1141217 begin - 889777 + 888971 elseelifend - 1142251 + 1141217 @@ -34804,17 +35180,17 @@ 1 2 - 650164 + 649575 2 3 - 230622 + 230414 3 9 - 8990 + 8982 @@ -34830,7 +35206,7 @@ 1 2 - 1142251 + 1141217 @@ -34840,41 +35216,41 @@ preproctrue - 439769 + 439371 branch - 439769 + 439371 preprocfalse - 285562 + 285304 branch - 285562 + 285304 preproctext - 4356364 + 4352418 id - 4356364 + 4352418 head - 2957767 + 2955088 body - 1684908 + 1683382 @@ -34888,7 +35264,7 @@ 1 2 - 4356364 + 4352418 @@ -34904,7 +35280,7 @@ 1 2 - 4356364 + 4352418 @@ -34920,12 +35296,12 @@ 1 2 - 2758985 + 2756485 2 798 - 198782 + 198602 @@ -34941,12 +35317,12 @@ 1 2 - 2876481 + 2873875 2 5 - 81286 + 81212 @@ -34962,17 +35338,17 @@ 1 2 - 1536570 + 1535178 2 10 - 127360 + 127245 10 13606 - 20977 + 20958 @@ -34988,17 +35364,17 @@ 1 2 - 1540816 + 1539420 2 12 - 126986 + 126871 12 3246 - 17106 + 17090 @@ -35008,15 +35384,15 @@ includes - 318629 + 318638 id - 318629 + 318638 included - 58694 + 58695 @@ -35030,7 +35406,7 @@ 1 2 - 318629 + 318638 @@ -35134,11 +35510,11 @@ link_parent - 30398086 + 30398238 element - 3866101 + 3866121 link_target @@ -35156,7 +35532,7 @@ 1 2 - 530457 + 530459 2 @@ -35166,7 +35542,7 @@ 9 10 - 3308696 + 3308712 diff --git a/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme new file mode 100644 index 00000000000..5340d6d5f42 --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/old.dbscheme @@ -0,0 +1,2423 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..c16b29b27f7 --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/semmlecode.cpp.dbscheme @@ -0,0 +1,2436 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties new file mode 100644 index 00000000000..d8e09e944fe --- /dev/null +++ b/cpp/ql/lib/upgrades/5340d6d5f428557632b1a50113e406430f29ef7d/upgrade.properties @@ -0,0 +1,2 @@ +description: Link PCH creations and uses +compatibility: backwards diff --git a/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme new file mode 100644 index 00000000000..c16b29b27f7 --- /dev/null +++ b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/old.dbscheme @@ -0,0 +1,2436 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme new file mode 100644 index 00000000000..2121ffec11f --- /dev/null +++ b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/semmlecode.cpp.dbscheme @@ -0,0 +1,2437 @@ +/*- Compilations -*/ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * gcc -c f1.c f2.c f3.c + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * gcc -c f1.c f2.c f3.c + */ + unique int id : @compilation, + string cwd : string ref +); + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--mimic` + * 2 | `/usr/bin/gcc` + * 3 | `-c` + * 4 | f1.c + * 5 | f2.c + * 6 | f3.c + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * Optionally, record the build mode for each compilation. + */ +compilation_build_mode( + unique int id : @compilation ref, + int mode : int ref +); + +/* +case @compilation_build_mode.mode of + 0 = @build_mode_none +| 1 = @build_mode_manual +| 2 = @build_mode_auto +; +*/ + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * gcc -c f1.c f2.c f3.c + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.c + * 1 | f2.c + * 2 | f3.c + * + * Note that even if those files `#include` headers, those headers + * do not appear as rows. + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- C++ dbscheme -*/ + +extractor_version( + string codeql_version: string ref, + string frontend_version: string ref +) + +pch_uses( + int pch: @pch ref, + int compilation: @compilation ref, + int id: @file ref +) + +#keyset[pch, compilation] +pch_creations( + int pch: @pch, + int compilation: @compilation ref, + int from: @file ref +) + +/** An element for which line-count information is available. */ +@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; + +fileannotations( + int id: @file ref, + int kind: int ref, + string name: string ref, + string value: string ref +); + +inmacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +affectedbymacroexpansion( + int id: @element ref, + int inv: @macroinvocation ref +); + +case @macroinvocation.kind of + 1 = @macro_expansion +| 2 = @other_macro_reference +; + +macroinvocations( + unique int id: @macroinvocation, + int macro_id: @ppd_define ref, + int location: @location_default ref, + int kind: int ref +); + +macroparent( + unique int id: @macroinvocation ref, + int parent_id: @macroinvocation ref +); + +// a macroinvocation may be part of another location +// the way to find a constant expression that uses a macro +// is thus to find a constant expression that has a location +// to which a macro invocation is bound +macrolocationbind( + int id: @macroinvocation ref, + int location: @location_default ref +); + +#keyset[invocation, argument_index] +macro_argument_unexpanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +#keyset[invocation, argument_index] +macro_argument_expanded( + int invocation: @macroinvocation ref, + int argument_index: int ref, + string text: string ref +); + +case @function.kind of + 0 = @unknown_function +| 1 = @normal_function +| 2 = @constructor +| 3 = @destructor +| 4 = @conversion_function +| 5 = @operator +// ... 6 = @builtin_function deprecated // GCC built-in functions, e.g. __builtin___memcpy_chk +| 7 = @user_defined_literal +| 8 = @deduction_guide +; + +functions( + unique int id: @function, + string name: string ref, + int kind: int ref +); + +builtin_functions( + int id: @function ref +) + +function_entry_point( + int id: @function ref, + unique int entry_point: @stmt ref +); + +function_return_type( + int id: @function ref, + int return_type: @type ref +); + +/** + * If `function` is a coroutine, then this gives the `std::experimental::resumable_traits` + * instance associated with it, and the variables representing the `handle` and `promise` + * for it. + */ +coroutine( + unique int function: @function ref, + int traits: @type ref +); + +/* +case @coroutine_placeholder_variable.kind of + 1 = @handle +| 2 = @promise +| 3 = @init_await_resume +; +*/ + +coroutine_placeholder_variable( + unique int placeholder_variable: @variable ref, + int kind: int ref, + int function: @function ref +) + +/** The `new` function used for allocating the coroutine state, if any. */ +coroutine_new( + unique int function: @function ref, + int new: @function ref +); + +/** The `delete` function used for deallocating the coroutine state, if any. */ +coroutine_delete( + unique int function: @function ref, + int delete: @function ref +); + +purefunctions(unique int id: @function ref); + +function_deleted(unique int id: @function ref); + +function_defaulted(unique int id: @function ref); + +function_prototyped(unique int id: @function ref) + +deduction_guide_for_class( + int id: @function ref, + int class_template: @usertype ref +) + +member_function_this_type( + unique int id: @function ref, + int this_type: @type ref +); + +#keyset[id, type_id] +fun_decls( + int id: @fun_decl, + int function: @function ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +fun_def(unique int id: @fun_decl ref); +fun_specialized(unique int id: @fun_decl ref); +fun_implicit(unique int id: @fun_decl ref); +fun_decl_specifiers( + int id: @fun_decl ref, + string name: string ref +) +#keyset[fun_decl, index] +fun_decl_throws( + int fun_decl: @fun_decl ref, + int index: int ref, + int type_id: @type ref +); +/* an empty throw specification is different from none */ +fun_decl_empty_throws(unique int fun_decl: @fun_decl ref); +fun_decl_noexcept( + int fun_decl: @fun_decl ref, + int constant: @expr ref +); +fun_decl_empty_noexcept(int fun_decl: @fun_decl ref); +fun_decl_typedef_type( + unique int fun_decl: @fun_decl ref, + int typedeftype_id: @usertype ref +); + +/* +case @fun_requires.kind of + 1 = @template_attached +| 2 = @function_attached +; +*/ + +fun_requires( + int id: @fun_decl ref, + int kind: int ref, + int constraint: @expr ref +); + +param_decl_bind( + unique int id: @var_decl ref, + int index: int ref, + int fun_decl: @fun_decl ref +); + +#keyset[id, type_id] +var_decls( + int id: @var_decl, + int variable: @variable ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); +var_def(unique int id: @var_decl ref); +var_specialized(int id: @var_decl ref); +var_decl_specifiers( + int id: @var_decl ref, + string name: string ref +) +is_structured_binding(unique int id: @variable ref); +var_requires( + int id: @var_decl ref, + int constraint: @expr ref +); + +type_decls( + unique int id: @type_decl, + int type_id: @type ref, + int location: @location_default ref +); +type_def(unique int id: @type_decl ref); +type_decl_top( + unique int type_decl: @type_decl ref +); +type_requires( + int id: @type_decl ref, + int constraint: @expr ref +); + +namespace_decls( + unique int id: @namespace_decl, + int namespace_id: @namespace ref, + int location: @location_default ref, + int bodylocation: @location_default ref +); + +case @using.kind of + 1 = @using_declaration +| 2 = @using_directive +| 3 = @using_enum_declaration +; + +usings( + unique int id: @using, + int element_id: @element ref, + int location: @location_default ref, + int kind: int ref +); + +/** The element which contains the `using` declaration. */ +using_container( + int parent: @element ref, + int child: @using ref +); + +static_asserts( + unique int id: @static_assert, + int condition : @expr ref, + string message : string ref, + int location: @location_default ref, + int enclosing : @element ref +); + +// each function has an ordered list of parameters +#keyset[id, type_id] +#keyset[function, index, type_id] +params( + int id: @parameter, + int function: @parameterized_element ref, + int index: int ref, + int type_id: @type ref +); + +overrides( + int new: @function ref, + int old: @function ref +); + +#keyset[id, type_id] +membervariables( + int id: @membervariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +globalvariables( + int id: @globalvariable, + int type_id: @type ref, + string name: string ref +); + +#keyset[id, type_id] +localvariables( + int id: @localvariable, + int type_id: @type ref, + string name: string ref +); + +autoderivation( + unique int var: @variable ref, + int derivation_type: @type ref +); + +orphaned_variables( + int var: @localvariable ref, + int function: @function ref +) + +enumconstants( + unique int id: @enumconstant, + int parent: @usertype ref, + int index: int ref, + int type_id: @type ref, + string name: string ref, + int location: @location_default ref +); + +@variable = @localscopevariable | @globalvariable | @membervariable; + +@localscopevariable = @localvariable | @parameter; + +/** + * Built-in types are the fundamental types, e.g., integral, floating, and void. + */ +case @builtintype.kind of + 1 = @errortype +| 2 = @unknowntype +| 3 = @void +| 4 = @boolean +| 5 = @char +| 6 = @unsigned_char +| 7 = @signed_char +| 8 = @short +| 9 = @unsigned_short +| 10 = @signed_short +| 11 = @int +| 12 = @unsigned_int +| 13 = @signed_int +| 14 = @long +| 15 = @unsigned_long +| 16 = @signed_long +| 17 = @long_long +| 18 = @unsigned_long_long +| 19 = @signed_long_long +// ... 20 Microsoft-specific __int8 +// ... 21 Microsoft-specific __int16 +// ... 22 Microsoft-specific __int32 +// ... 23 Microsoft-specific __int64 +| 24 = @float +| 25 = @double +| 26 = @long_double +| 27 = @complex_float // C99-specific _Complex float +| 28 = @complex_double // C99-specific _Complex double +| 29 = @complex_long_double // C99-specific _Complex long double +| 30 = @imaginary_float // C99-specific _Imaginary float +| 31 = @imaginary_double // C99-specific _Imaginary double +| 32 = @imaginary_long_double // C99-specific _Imaginary long double +| 33 = @wchar_t // Microsoft-specific +| 34 = @decltype_nullptr // C++11 +| 35 = @int128 // __int128 +| 36 = @unsigned_int128 // unsigned __int128 +| 37 = @signed_int128 // signed __int128 +| 38 = @float128 // __float128 +| 39 = @complex_float128 // _Complex __float128 +| 40 = @decimal32 // _Decimal32 +| 41 = @decimal64 // _Decimal64 +| 42 = @decimal128 // _Decimal128 +| 43 = @char16_t +| 44 = @char32_t +| 45 = @std_float32 // _Float32 +| 46 = @float32x // _Float32x +| 47 = @std_float64 // _Float64 +| 48 = @float64x // _Float64x +| 49 = @std_float128 // _Float128 +// ... 50 _Float128x +| 51 = @char8_t +| 52 = @float16 // _Float16 +| 53 = @complex_float16 // _Complex _Float16 +| 54 = @fp16 // __fp16 +| 55 = @std_bfloat16 // __bf16 +| 56 = @std_float16 // std::float16_t +| 57 = @complex_std_float32 // _Complex _Float32 +| 58 = @complex_float32x // _Complex _Float32x +| 59 = @complex_std_float64 // _Complex _Float64 +| 60 = @complex_float64x // _Complex _Float64x +| 61 = @complex_std_float128 // _Complex _Float128 +| 62 = @mfp8 // __mfp8 +| 63 = @scalable_vector_count // __SVCount_t +| 64 = @complex_fp16 // _Complex __fp16 +| 65 = @complex_std_bfloat16 // _Complex __bf16 +| 66 = @complex_std_float16 // _Complex std::float16_t +; + +builtintypes( + unique int id: @builtintype, + string name: string ref, + int kind: int ref, + int size: int ref, + int sign: int ref, + int alignment: int ref +); + +/** + * Derived types are types that are directly derived from existing types and + * point to, refer to, transform type data to return a new type. + */ +case @derivedtype.kind of + 1 = @pointer +| 2 = @reference +| 3 = @type_with_specifiers +| 4 = @array +| 5 = @gnu_vector +| 6 = @routineptr +| 7 = @routinereference +| 8 = @rvalue_reference // C++11 +// ... 9 type_conforming_to_protocols deprecated +| 10 = @block +| 11 = @scalable_vector // Arm SVE +; + +derivedtypes( + unique int id: @derivedtype, + string name: string ref, + int kind: int ref, + int type_id: @type ref +); + +pointerishsize(unique int id: @derivedtype ref, + int size: int ref, + int alignment: int ref); + +arraysizes( + unique int id: @derivedtype ref, + int num_elements: int ref, + int bytesize: int ref, + int alignment: int ref +); + +tupleelements( + unique int id: @derivedtype ref, + int num_elements: int ref +); + +typedefbase( + unique int id: @usertype ref, + int type_id: @type ref +); + +/** + * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` + * operator taking an expression as its argument. For example: + * ``` + * int a; + * decltype(1+a) b; + * typeof(1+a) c; + * ``` + * Here `expr` is `1+a`. + * + * Sometimes an additional pair of parentheses around the expression + * changes the semantics of the decltype, e.g. + * ``` + * struct A { double x; }; + * const A* a = new A(); + * decltype( a->x ); // type is double + * decltype((a->x)); // type is const double& + * ``` + * (Please consult the C++11 standard for more details). + * `parentheses_would_change_meaning` is `true` iff that is the case. + */ + +/* +case @decltype.kind of +| 0 = @decltype +| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +; +*/ + +#keyset[id, expr] +decltypes( + int id: @decltype, + int expr: @expr ref, + int kind: int ref, + int base_type: @type ref, + boolean parentheses_would_change_meaning: boolean ref +); + +case @type_operator.kind of + 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual +| 1 = @underlying_type +| 2 = @bases +| 3 = @direct_bases +| 4 = @add_lvalue_reference +| 5 = @add_pointer +| 6 = @add_rvalue_reference +| 7 = @decay +| 8 = @make_signed +| 9 = @make_unsigned +| 10 = @remove_all_extents +| 11 = @remove_const +| 12 = @remove_cv +| 13 = @remove_cvref +| 14 = @remove_extent +| 15 = @remove_pointer +| 16 = @remove_reference_t +| 17 = @remove_restrict +| 18 = @remove_volatile +| 19 = @remove_reference +; + +type_operators( + unique int id: @type_operator, + int arg_type: @type ref, + int kind: int ref, + int base_type: @type ref +) + +case @usertype.kind of + 0 = @unknown_usertype +| 1 = @struct +| 2 = @class +| 3 = @union +| 4 = @enum +// ... 5 = @typedef deprecated // classic C: typedef typedef type name +// ... 6 = @template deprecated +| 7 = @template_parameter +| 8 = @template_template_parameter +| 9 = @proxy_class // a proxy class associated with a template parameter +// ... 10 objc_class deprecated +// ... 11 objc_protocol deprecated +// ... 12 objc_category deprecated +| 13 = @scoped_enum +// ... 14 = @using_alias deprecated // a using name = type style typedef +| 15 = @template_struct +| 16 = @template_class +| 17 = @template_union +| 18 = @alias +; + +usertypes( + unique int id: @usertype, + string name: string ref, + int kind: int ref +); + +usertypesize( + unique int id: @usertype ref, + int size: int ref, + int alignment: int ref +); + +usertype_final(unique int id: @usertype ref); + +usertype_uuid( + unique int id: @usertype ref, + string uuid: string ref +); + +/* +case @usertype.alias_kind of +| 0 = @typedef +| 1 = @alias +*/ + +usertype_alias_kind( + int id: @usertype ref, + int alias_kind: int ref +) + +nontype_template_parameters( + int id: @expr ref +); + +type_template_type_constraint( + int id: @usertype ref, + int constraint: @expr ref +); + +mangled_name( + unique int id: @declaration ref, + int mangled_name : @mangledname, + boolean is_complete: boolean ref +); + +is_pod_class(unique int id: @usertype ref); +is_standard_layout_class(unique int id: @usertype ref); + +is_complete(unique int id: @usertype ref); + +is_class_template(unique int id: @usertype ref); +class_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +class_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +class_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@user_or_decltype = @usertype | @decltype; + +is_proxy_class_for( + unique int id: @usertype ref, + int templ_param_id: @user_or_decltype ref +); + +type_mentions( + unique int id: @type_mention, + int type_id: @type ref, + int location: @location_default ref, + // a_symbol_reference_kind from the frontend. + int kind: int ref +); + +is_function_template(unique int id: @function ref); +function_instantiation( + unique int to: @function ref, + int from: @function ref +); +function_template_argument( + int function_id: @function ref, + int index: int ref, + int arg_type: @type ref +); +function_template_argument_value( + int function_id: @function ref, + int index: int ref, + int arg_value: @expr ref +); + +is_variable_template(unique int id: @variable ref); +variable_instantiation( + unique int to: @variable ref, + int from: @variable ref +); +variable_template_argument( + int variable_id: @variable ref, + int index: int ref, + int arg_type: @type ref +); +variable_template_argument_value( + int variable_id: @variable ref, + int index: int ref, + int arg_value: @expr ref +); + +template_template_instantiation( + int to: @usertype ref, + int from: @usertype ref +); +template_template_argument( + int type_id: @usertype ref, + int index: int ref, + int arg_type: @type ref +); +template_template_argument_value( + int type_id: @usertype ref, + int index: int ref, + int arg_value: @expr ref +); + +@concept = @concept_template | @concept_id; + +concept_templates( + unique int concept_id: @concept_template, + string name: string ref, + int location: @location_default ref +); +concept_instantiation( + unique int to: @concept_id ref, + int from: @concept_template ref +); +is_type_constraint(int concept_id: @concept_id ref); +concept_template_argument( + int concept_id: @concept ref, + int index: int ref, + int arg_type: @type ref +); +concept_template_argument_value( + int concept_id: @concept ref, + int index: int ref, + int arg_value: @expr ref +); + +routinetypes( + unique int id: @routinetype, + int return_type: @type ref +); + +routinetypeargs( + int routine: @routinetype ref, + int index: int ref, + int type_id: @type ref +); + +ptrtomembers( + unique int id: @ptrtomember, + int type_id: @type ref, + int class_id: @type ref +); + +/* + specifiers for types, functions, and variables + + "public", + "protected", + "private", + + "const", + "volatile", + "static", + + "pure", + "virtual", + "sealed", // Microsoft + "__interface", // Microsoft + "inline", + "explicit", + + "near", // near far extension + "far", // near far extension + "__ptr32", // Microsoft + "__ptr64", // Microsoft + "__sptr", // Microsoft + "__uptr", // Microsoft + "dllimport", // Microsoft + "dllexport", // Microsoft + "thread", // Microsoft + "naked", // Microsoft + "microsoft_inline", // Microsoft + "forceinline", // Microsoft + "selectany", // Microsoft + "nothrow", // Microsoft + "novtable", // Microsoft + "noreturn", // Microsoft + "noinline", // Microsoft + "noalias", // Microsoft + "restrict", // Microsoft +*/ + +specifiers( + unique int id: @specifier, + unique string str: string ref +); + +typespecifiers( + int type_id: @type ref, + int spec_id: @specifier ref +); + +funspecifiers( + int func_id: @function ref, + int spec_id: @specifier ref +); + +varspecifiers( + int var_id: @accessible ref, + int spec_id: @specifier ref +); + +explicit_specifier_exprs( + unique int func_id: @function ref, + int constant: @expr ref +) + +attributes( + unique int id: @attribute, + int kind: int ref, + string name: string ref, + string name_space: string ref, + int location: @location_default ref +); + +case @attribute.kind of + 0 = @gnuattribute +| 1 = @stdattribute +| 2 = @declspec +| 3 = @msattribute +| 4 = @alignas +// ... 5 @objc_propertyattribute deprecated +; + +attribute_args( + unique int id: @attribute_arg, + int kind: int ref, + int attribute: @attribute ref, + int index: int ref, + int location: @location_default ref +); + +case @attribute_arg.kind of + 0 = @attribute_arg_empty +| 1 = @attribute_arg_token +| 2 = @attribute_arg_constant +| 3 = @attribute_arg_type +| 4 = @attribute_arg_constant_expr +| 5 = @attribute_arg_expr +; + +attribute_arg_value( + unique int arg: @attribute_arg ref, + string value: string ref +); +attribute_arg_type( + unique int arg: @attribute_arg ref, + int type_id: @type ref +); +attribute_arg_constant( + unique int arg: @attribute_arg ref, + int constant: @expr ref +) +attribute_arg_expr( + unique int arg: @attribute_arg ref, + int expr: @expr ref +) +attribute_arg_name( + unique int arg: @attribute_arg ref, + string name: string ref +); + +typeattributes( + int type_id: @type ref, + int spec_id: @attribute ref +); + +funcattributes( + int func_id: @function ref, + int spec_id: @attribute ref +); + +varattributes( + int var_id: @accessible ref, + int spec_id: @attribute ref +); + +namespaceattributes( + int namespace_id: @namespace ref, + int spec_id: @attribute ref +); + +stmtattributes( + int stmt_id: @stmt ref, + int spec_id: @attribute ref +); + +@type = @builtintype + | @derivedtype + | @usertype + | @routinetype + | @ptrtomember + | @decltype + | @type_operator; + +unspecifiedtype( + unique int type_id: @type ref, + int unspecified_type_id: @type ref +); + +member( + int parent: @type ref, + int index: int ref, + int child: @member ref +); + +@enclosingfunction_child = @usertype | @variable | @namespace + +enclosingfunction( + unique int child: @enclosingfunction_child ref, + int parent: @function ref +); + +derivations( + unique int derivation: @derivation, + int sub: @type ref, + int index: int ref, + int super: @type ref, + int location: @location_default ref +); + +derspecifiers( + int der_id: @derivation ref, + int spec_id: @specifier ref +); + +/** + * Contains the byte offset of the base class subobject within the derived + * class. Only holds for non-virtual base classes, but see table + * `virtual_base_offsets` for offsets of virtual base class subobjects. + */ +direct_base_offsets( + unique int der_id: @derivation ref, + int offset: int ref +); + +/** + * Contains the byte offset of the virtual base class subobject for class + * `super` within a most-derived object of class `sub`. `super` can be either a + * direct or indirect base class. + */ +#keyset[sub, super] +virtual_base_offsets( + int sub: @usertype ref, + int super: @usertype ref, + int offset: int ref +); + +frienddecls( + unique int id: @frienddecl, + int type_id: @type ref, + int decl_id: @declaration ref, + int location: @location_default ref +); + +@declaredtype = @usertype ; + +@declaration = @function + | @declaredtype + | @variable + | @enumconstant + | @frienddecl + | @concept_template; + +@member = @membervariable + | @function + | @declaredtype + | @enumconstant; + +@locatable = @diagnostic + | @declaration + | @ppd_include + | @ppd_define + | @macroinvocation + /*| @funcall*/ + | @xmllocatable + | @attribute + | @attribute_arg; + +@namedscope = @namespace | @usertype; + +@element = @locatable + | @file + | @folder + | @specifier + | @type + | @expr + | @namespace + | @initialiser + | @stmt + | @derivation + | @comment + | @preprocdirect + | @fun_decl + | @var_decl + | @type_decl + | @namespace_decl + | @using + | @namequalifier + | @specialnamequalifyingelement + | @static_assert + | @type_mention + | @lambdacapture; + +@exprparent = @element; + +comments( + unique int id: @comment, + string contents: string ref, + int location: @location_default ref +); + +commentbinding( + int id: @comment ref, + int element: @element ref +); + +exprconv( + int converted: @expr ref, + unique int conversion: @expr ref +); + +compgenerated(unique int id: @element ref); + +/** + * `destructor_call` destructs the `i`'th entity that should be + * destructed following `element`. Note that entities should be + * destructed in reverse construction order, so for a given `element` + * these should be called from highest to lowest `i`. + */ +#keyset[element, destructor_call] +#keyset[element, i] +synthetic_destructor_call( + int element: @element ref, + int i: int ref, + int destructor_call: @routineexpr ref +); + +namespaces( + unique int id: @namespace, + string name: string ref +); + +namespace_inline( + unique int id: @namespace ref +); + +namespacembrs( + int parentid: @namespace ref, + unique int memberid: @namespacembr ref +); + +@namespacembr = @declaration | @namespace; + +exprparents( + int expr_id: @expr ref, + int child_index: int ref, + int parent_id: @exprparent ref +); + +expr_isload(unique int expr_id: @expr ref); + +@cast = @c_style_cast + | @const_cast + | @dynamic_cast + | @reinterpret_cast + | @static_cast + ; + +/* +case @conversion.kind of + 0 = @simple_conversion // a numeric conversion, qualification conversion, or a reinterpret_cast +| 1 = @bool_conversion // conversion to 'bool' +| 2 = @base_class_conversion // a derived-to-base conversion +| 3 = @derived_class_conversion // a base-to-derived conversion +| 4 = @pm_base_class_conversion // a derived-to-base conversion of a pointer to member +| 5 = @pm_derived_class_conversion // a base-to-derived conversion of a pointer to member +| 6 = @glvalue_adjust // an adjustment of the type of a glvalue +| 7 = @prvalue_adjust // an adjustment of the type of a prvalue +; +*/ +/** + * Describes the semantics represented by a cast expression. This is largely + * independent of the source syntax of the cast, so it is separate from the + * regular expression kind. + */ +conversionkinds( + unique int expr_id: @cast ref, + int kind: int ref +); + +@conversion = @cast + | @array_to_pointer + | @parexpr + | @reference_to + | @ref_indirect + | @temp_init + | @c11_generic + ; + +/* +case @funbindexpr.kind of + 0 = @normal_call // a normal call +| 1 = @virtual_call // a virtual call +| 2 = @adl_call // a call whose target is only found by ADL +; +*/ +iscall( + unique int caller: @funbindexpr ref, + int kind: int ref +); + +numtemplatearguments( + unique int expr_id: @expr ref, + int num: int ref +); + +specialnamequalifyingelements( + unique int id: @specialnamequalifyingelement, + unique string name: string ref +); + +@namequalifiableelement = @expr | @namequalifier; +@namequalifyingelement = @namespace + | @specialnamequalifyingelement + | @usertype + | @decltype; + +namequalifiers( + unique int id: @namequalifier, + unique int qualifiableelement: @namequalifiableelement ref, + int qualifyingelement: @namequalifyingelement ref, + int location: @location_default ref +); + +varbind( + int expr: @varbindexpr ref, + int var: @accessible ref +); + +funbind( + int expr: @funbindexpr ref, + int fun: @function ref +); + +@any_new_expr = @new_expr + | @new_array_expr; + +@new_or_delete_expr = @any_new_expr + | @delete_expr + | @delete_array_expr; + +@prefix_crement_expr = @preincrexpr | @predecrexpr; + +@postfix_crement_expr = @postincrexpr | @postdecrexpr; + +@increment_expr = @preincrexpr | @postincrexpr; + +@decrement_expr = @predecrexpr | @postdecrexpr; + +@crement_expr = @increment_expr | @decrement_expr; + +@un_arith_op_expr = @arithnegexpr + | @unaryplusexpr + | @conjugation + | @realpartexpr + | @imagpartexpr + | @crement_expr + ; + +@un_bitwise_op_expr = @complementexpr; + +@un_log_op_expr = @notexpr; + +@un_op_expr = @address_of + | @indirect + | @un_arith_op_expr + | @un_bitwise_op_expr + | @builtinaddressof + | @vec_fill + | @un_log_op_expr + | @co_await + | @co_yield + ; + +@bin_log_op_expr = @andlogicalexpr | @orlogicalexpr; + +@cmp_op_expr = @eq_op_expr | @rel_op_expr; + +@eq_op_expr = @eqexpr | @neexpr; + +@rel_op_expr = @gtexpr + | @ltexpr + | @geexpr + | @leexpr + | @spaceshipexpr + ; + +@bin_bitwise_op_expr = @lshiftexpr + | @rshiftexpr + | @andexpr + | @orexpr + | @xorexpr + ; + +@p_arith_op_expr = @paddexpr + | @psubexpr + | @pdiffexpr + ; + +@bin_arith_op_expr = @addexpr + | @subexpr + | @mulexpr + | @divexpr + | @remexpr + | @jmulexpr + | @jdivexpr + | @fjaddexpr + | @jfaddexpr + | @fjsubexpr + | @jfsubexpr + | @minexpr + | @maxexpr + | @p_arith_op_expr + ; + +@bin_op_expr = @bin_arith_op_expr + | @bin_bitwise_op_expr + | @cmp_op_expr + | @bin_log_op_expr + ; + +@op_expr = @un_op_expr + | @bin_op_expr + | @assign_expr + | @conditionalexpr + ; + +@assign_arith_expr = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + ; + +@assign_bitwise_expr = @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + ; + +@assign_pointer_expr = @assignpaddexpr + | @assignpsubexpr + ; + +@assign_op_expr = @assign_arith_expr + | @assign_bitwise_expr + | @assign_pointer_expr + ; + +@assign_expr = @assignexpr | @assign_op_expr | @blockassignexpr + +/* + Binary encoding of the allocator form. + + case @allocator.form of + 0 = plain + | 1 = alignment + ; +*/ + +/** + * The allocator function associated with a `new` or `new[]` expression. + * The `form` column specified whether the allocation call contains an alignment + * argument. + */ +expr_allocator( + unique int expr: @any_new_expr ref, + int func: @function ref, + int form: int ref +); + +/* + Binary encoding of the deallocator form. + + case @deallocator.form of + 0 = plain + | 1 = size + | 2 = alignment + | 4 = destroying_delete + ; +*/ + +/** + * The deallocator function associated with a `delete`, `delete[]`, `new`, or + * `new[]` expression. For a `new` or `new[]` expression, the deallocator is the + * one used to free memory if the initialization throws an exception. + * The `form` column specifies whether the deallocation call contains a size + * argument, and alignment argument, or both. + */ +expr_deallocator( + unique int expr: @new_or_delete_expr ref, + int func: @function ref, + int form: int ref +); + +/** + * Holds if the `@conditionalexpr` is of the two operand form + * `guard ? : false`. + */ +expr_cond_two_operand( + unique int cond: @conditionalexpr ref +); + +/** + * The guard of `@conditionalexpr` `guard ? true : false` + */ +expr_cond_guard( + unique int cond: @conditionalexpr ref, + int guard: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` holds. For the two operand form + * `guard ?: false` consider using `expr_cond_guard` instead. + */ +expr_cond_true( + unique int cond: @conditionalexpr ref, + int true: @expr ref +); + +/** + * The expression used when the guard of `@conditionalexpr` + * `guard ? true : false` does not hold. + */ +expr_cond_false( + unique int cond: @conditionalexpr ref, + int false: @expr ref +); + +/** A string representation of the value. */ +values( + unique int id: @value, + string str: string ref +); + +/** The actual text in the source code for the value, if any. */ +valuetext( + unique int id: @value ref, + string text: string ref +); + +valuebind( + int val: @value ref, + unique int expr: @expr ref +); + +fieldoffsets( + unique int id: @variable ref, + int byteoffset: int ref, + int bitoffset: int ref +); + +bitfield( + unique int id: @variable ref, + int bits: int ref, + int declared_bits: int ref +); + +/* TODO +memberprefix( + int member: @expr ref, + int prefix: @expr ref +); +*/ + +/* + kind(1) = mbrcallexpr + kind(2) = mbrptrcallexpr + kind(3) = mbrptrmbrcallexpr + kind(4) = ptrmbrptrmbrcallexpr + kind(5) = mbrreadexpr // x.y + kind(6) = mbrptrreadexpr // p->y + kind(7) = mbrptrmbrreadexpr // x.*pm + kind(8) = mbrptrmbrptrreadexpr // x->*pm + kind(9) = staticmbrreadexpr // static x.y + kind(10) = staticmbrptrreadexpr // static p->y +*/ +/* TODO +memberaccess( + int member: @expr ref, + int kind: int ref +); +*/ + +initialisers( + unique int init: @initialiser, + int var: @accessible ref, + unique int expr: @expr ref, + int location: @location_default ref +); + +braced_initialisers( + int init: @initialiser ref +); + +/** + * An ancestor for the expression, for cases in which we cannot + * otherwise find the expression's parent. + */ +expr_ancestor( + int exp: @expr ref, + int ancestor: @element ref +); + +exprs( + unique int id: @expr, + int kind: int ref, + int location: @location_default ref +); + +expr_reuse( + int reuse: @expr ref, + int original: @expr ref, + int value_category: int ref +) + +/* + case @value.category of + 1 = prval + | 2 = xval + | 3 = lval + ; +*/ +expr_types( + int id: @expr ref, + int typeid: @type ref, + int value_category: int ref +); + +case @expr.kind of + 1 = @errorexpr +| 2 = @address_of // & AddressOfExpr +| 3 = @reference_to // ReferenceToExpr (implicit?) +| 4 = @indirect // * PointerDereferenceExpr +| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?) +// ... +| 8 = @array_to_pointer // (???) +| 9 = @vacuous_destructor_call // VacuousDestructorCall +// ... +| 11 = @assume // Microsoft +| 12 = @parexpr +| 13 = @arithnegexpr +| 14 = @unaryplusexpr +| 15 = @complementexpr +| 16 = @notexpr +| 17 = @conjugation // GNU ~ operator +| 18 = @realpartexpr // GNU __real +| 19 = @imagpartexpr // GNU __imag +| 20 = @postincrexpr +| 21 = @postdecrexpr +| 22 = @preincrexpr +| 23 = @predecrexpr +| 24 = @conditionalexpr +| 25 = @addexpr +| 26 = @subexpr +| 27 = @mulexpr +| 28 = @divexpr +| 29 = @remexpr +| 30 = @jmulexpr // C99 mul imaginary +| 31 = @jdivexpr // C99 div imaginary +| 32 = @fjaddexpr // C99 add real + imaginary +| 33 = @jfaddexpr // C99 add imaginary + real +| 34 = @fjsubexpr // C99 sub real - imaginary +| 35 = @jfsubexpr // C99 sub imaginary - real +| 36 = @paddexpr // pointer add (pointer + int or int + pointer) +| 37 = @psubexpr // pointer sub (pointer - integer) +| 38 = @pdiffexpr // difference between two pointers +| 39 = @lshiftexpr +| 40 = @rshiftexpr +| 41 = @andexpr +| 42 = @orexpr +| 43 = @xorexpr +| 44 = @eqexpr +| 45 = @neexpr +| 46 = @gtexpr +| 47 = @ltexpr +| 48 = @geexpr +| 49 = @leexpr +| 50 = @minexpr // GNU minimum +| 51 = @maxexpr // GNU maximum +| 52 = @assignexpr +| 53 = @assignaddexpr +| 54 = @assignsubexpr +| 55 = @assignmulexpr +| 56 = @assigndivexpr +| 57 = @assignremexpr +| 58 = @assignlshiftexpr +| 59 = @assignrshiftexpr +| 60 = @assignandexpr +| 61 = @assignorexpr +| 62 = @assignxorexpr +| 63 = @assignpaddexpr // assign pointer add +| 64 = @assignpsubexpr // assign pointer sub +| 65 = @andlogicalexpr +| 66 = @orlogicalexpr +| 67 = @commaexpr +| 68 = @subscriptexpr // access to member of an array, e.g., a[5] +// ... 69 @objc_subscriptexpr deprecated +// ... 70 @cmdaccess deprecated +// ... +| 73 = @virtfunptrexpr +| 74 = @callexpr +// ... 75 @msgexpr_normal deprecated +// ... 76 @msgexpr_super deprecated +// ... 77 @atselectorexpr deprecated +// ... 78 @atprotocolexpr deprecated +| 79 = @vastartexpr +| 80 = @vaargexpr +| 81 = @vaendexpr +| 82 = @vacopyexpr +// ... 83 @atencodeexpr deprecated +| 84 = @varaccess +| 85 = @thisaccess +// ... 86 @objc_box_expr deprecated +| 87 = @new_expr +| 88 = @delete_expr +| 89 = @throw_expr +| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2) +| 91 = @braced_init_list +| 92 = @type_id +| 93 = @runtime_sizeof +| 94 = @runtime_alignof +| 95 = @sizeof_pack +| 96 = @expr_stmt // GNU extension +| 97 = @routineexpr +| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....) +| 99 = @offsetofexpr // offsetof ::= type and field +| 100 = @hasassignexpr // __has_assign ::= type +| 101 = @hascopyexpr // __has_copy ::= type +| 102 = @hasnothrowassign // __has_nothrow_assign ::= type +| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type +| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type +| 105 = @hastrivialassign // __has_trivial_assign ::= type +| 106 = @hastrivialconstr // __has_trivial_constructor ::= type +| 107 = @hastrivialcopy // __has_trivial_copy ::= type +| 108 = @hasuserdestr // __has_user_destructor ::= type +| 109 = @hasvirtualdestr // __has_virtual_destructor ::= type +| 110 = @isabstractexpr // __is_abstract ::= type +| 111 = @isbaseofexpr // __is_base_of ::= type type +| 112 = @isclassexpr // __is_class ::= type +| 113 = @isconvtoexpr // __is_convertible_to ::= type type +| 114 = @isemptyexpr // __is_empty ::= type +| 115 = @isenumexpr // __is_enum ::= type +| 116 = @ispodexpr // __is_pod ::= type +| 117 = @ispolyexpr // __is_polymorphic ::= type +| 118 = @isunionexpr // __is_union ::= type +| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type +| 120 = @intaddrexpr // frontend internal builtin, used to implement offsetof +// ... +| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type +| 123 = @literal +| 124 = @uuidof +| 127 = @aggregateliteral +| 128 = @delete_array_expr +| 129 = @new_array_expr +// ... 130 @objc_array_literal deprecated +// ... 131 @objc_dictionary_literal deprecated +| 132 = @foldexpr +// ... +| 200 = @ctordirectinit +| 201 = @ctorvirtualinit +| 202 = @ctorfieldinit +| 203 = @ctordelegatinginit +| 204 = @dtordirectdestruct +| 205 = @dtorvirtualdestruct +| 206 = @dtorfielddestruct +// ... +| 210 = @static_cast +| 211 = @reinterpret_cast +| 212 = @const_cast +| 213 = @dynamic_cast +| 214 = @c_style_cast +| 215 = @lambdaexpr +| 216 = @param_ref +| 217 = @noopexpr +// ... +| 294 = @istriviallyconstructibleexpr +| 295 = @isdestructibleexpr +| 296 = @isnothrowdestructibleexpr +| 297 = @istriviallydestructibleexpr +| 298 = @istriviallyassignableexpr +| 299 = @isnothrowassignableexpr +| 300 = @istrivialexpr +| 301 = @isstandardlayoutexpr +| 302 = @istriviallycopyableexpr +| 303 = @isliteraltypeexpr +| 304 = @hastrivialmoveconstructorexpr +| 305 = @hastrivialmoveassignexpr +| 306 = @hasnothrowmoveassignexpr +| 307 = @isconstructibleexpr +| 308 = @isnothrowconstructibleexpr +| 309 = @hasfinalizerexpr +| 310 = @isdelegateexpr +| 311 = @isinterfaceclassexpr +| 312 = @isrefarrayexpr +| 313 = @isrefclassexpr +| 314 = @issealedexpr +| 315 = @issimplevalueclassexpr +| 316 = @isvalueclassexpr +| 317 = @isfinalexpr +| 319 = @noexceptexpr +| 320 = @builtinshufflevector +| 321 = @builtinchooseexpr +| 322 = @builtinaddressof +| 323 = @vec_fill +| 324 = @builtinconvertvector +| 325 = @builtincomplex +| 326 = @spaceshipexpr +| 327 = @co_await +| 328 = @co_yield +| 329 = @temp_init +| 330 = @isassignable +| 331 = @isaggregate +| 332 = @hasuniqueobjectrepresentations +| 333 = @builtinbitcast +| 334 = @builtinshuffle +| 335 = @blockassignexpr +| 336 = @issame +| 337 = @isfunction +| 338 = @islayoutcompatible +| 339 = @ispointerinterconvertiblebaseof +| 340 = @isarray +| 341 = @arrayrank +| 342 = @arrayextent +| 343 = @isarithmetic +| 344 = @iscompletetype +| 345 = @iscompound +| 346 = @isconst +| 347 = @isfloatingpoint +| 348 = @isfundamental +| 349 = @isintegral +| 350 = @islvaluereference +| 351 = @ismemberfunctionpointer +| 352 = @ismemberobjectpointer +| 353 = @ismemberpointer +| 354 = @isobject +| 355 = @ispointer +| 356 = @isreference +| 357 = @isrvaluereference +| 358 = @isscalar +| 359 = @issigned +| 360 = @isunsigned +| 361 = @isvoid +| 362 = @isvolatile +| 363 = @reuseexpr +| 364 = @istriviallycopyassignable +| 365 = @isassignablenopreconditioncheck +| 366 = @referencebindstotemporary +| 367 = @issameas +| 368 = @builtinhasattribute +| 369 = @ispointerinterconvertiblewithclass +| 370 = @builtinispointerinterconvertiblewithclass +| 371 = @iscorrespondingmember +| 372 = @builtiniscorrespondingmember +| 373 = @isboundedarray +| 374 = @isunboundedarray +| 375 = @isreferenceable +| 378 = @isnothrowconvertible +| 379 = @referenceconstructsfromtemporary +| 380 = @referenceconvertsfromtemporary +| 381 = @isconvertible +| 382 = @isvalidwinrttype +| 383 = @iswinclass +| 384 = @iswininterface +| 385 = @istriviallyequalitycomparable +| 386 = @isscopedenum +| 387 = @istriviallyrelocatable +| 388 = @datasizeof +| 389 = @c11_generic +| 390 = @requires_expr +| 391 = @nested_requirement +| 392 = @compound_requirement +| 393 = @concept_id +; + +@var_args_expr = @vastartexpr + | @vaendexpr + | @vaargexpr + | @vacopyexpr + ; + +@builtin_op = @var_args_expr + | @noopexpr + | @offsetofexpr + | @intaddrexpr + | @hasassignexpr + | @hascopyexpr + | @hasnothrowassign + | @hasnothrowconstr + | @hasnothrowcopy + | @hastrivialassign + | @hastrivialconstr + | @hastrivialcopy + | @hastrivialdestructor + | @hasuserdestr + | @hasvirtualdestr + | @isabstractexpr + | @isbaseofexpr + | @isclassexpr + | @isconvtoexpr + | @isemptyexpr + | @isenumexpr + | @ispodexpr + | @ispolyexpr + | @isunionexpr + | @typescompexpr + | @builtinshufflevector + | @builtinconvertvector + | @builtinaddressof + | @istriviallyconstructibleexpr + | @isdestructibleexpr + | @isnothrowdestructibleexpr + | @istriviallydestructibleexpr + | @istriviallyassignableexpr + | @isnothrowassignableexpr + | @istrivialexpr + | @isstandardlayoutexpr + | @istriviallycopyableexpr + | @isliteraltypeexpr + | @hastrivialmoveconstructorexpr + | @hastrivialmoveassignexpr + | @hasnothrowmoveassignexpr + | @isconstructibleexpr + | @isnothrowconstructibleexpr + | @hasfinalizerexpr + | @isdelegateexpr + | @isinterfaceclassexpr + | @isrefarrayexpr + | @isrefclassexpr + | @issealedexpr + | @issimplevalueclassexpr + | @isvalueclassexpr + | @isfinalexpr + | @builtinchooseexpr + | @builtincomplex + | @isassignable + | @isaggregate + | @hasuniqueobjectrepresentations + | @builtinbitcast + | @builtinshuffle + | @issame + | @isfunction + | @islayoutcompatible + | @ispointerinterconvertiblebaseof + | @isarray + | @arrayrank + | @arrayextent + | @isarithmetic + | @iscompletetype + | @iscompound + | @isconst + | @isfloatingpoint + | @isfundamental + | @isintegral + | @islvaluereference + | @ismemberfunctionpointer + | @ismemberobjectpointer + | @ismemberpointer + | @isobject + | @ispointer + | @isreference + | @isrvaluereference + | @isscalar + | @issigned + | @isunsigned + | @isvoid + | @isvolatile + | @istriviallycopyassignable + | @isassignablenopreconditioncheck + | @referencebindstotemporary + | @issameas + | @builtinhasattribute + | @ispointerinterconvertiblewithclass + | @builtinispointerinterconvertiblewithclass + | @iscorrespondingmember + | @builtiniscorrespondingmember + | @isboundedarray + | @isunboundedarray + | @isreferenceable + | @isnothrowconvertible + | @referenceconstructsfromtemporary + | @referenceconvertsfromtemporary + | @isconvertible + | @isvalidwinrttype + | @iswinclass + | @iswininterface + | @istriviallyequalitycomparable + | @isscopedenum + | @istriviallyrelocatable + ; + +compound_requirement_is_noexcept( + int expr: @compound_requirement ref +); + +new_allocated_type( + unique int expr: @new_expr ref, + int type_id: @type ref +); + +new_array_allocated_type( + unique int expr: @new_array_expr ref, + int type_id: @type ref +); + +/** + * The field being initialized by an initializer expression within an aggregate + * initializer for a class/struct/union. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_field_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int field: @membervariable ref, + int position: int ref, + boolean is_designated: boolean ref +); + +/** + * The index of the element being initialized by an initializer expression + * within an aggregate initializer for an array. Position is used to sort repeated initializers. + */ +#keyset[aggregate, position] +aggregate_array_init( + int aggregate: @aggregateliteral ref, + int initializer: @expr ref, + int element_index: int ref, + int position: int ref, + boolean is_designated: boolean ref +); + +@ctorinit = @ctordirectinit + | @ctorvirtualinit + | @ctorfieldinit + | @ctordelegatinginit; +@dtordestruct = @dtordirectdestruct + | @dtorvirtualdestruct + | @dtorfielddestruct; + + +condition_decl_bind( + unique int expr: @condition_decl ref, + unique int decl: @declaration ref +); + +typeid_bind( + unique int expr: @type_id ref, + int type_id: @type ref +); + +uuidof_bind( + unique int expr: @uuidof ref, + int type_id: @type ref +); + +@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; + +sizeof_bind( + unique int expr: @sizeof_or_alignof ref, + int type_id: @type ref +); + +code_block( + unique int block: @literal ref, + unique int routine: @function ref +); + +lambdas( + unique int expr: @lambdaexpr ref, + string default_capture: string ref, + boolean has_explicit_return_type: boolean ref, + boolean has_explicit_parameter_list: boolean ref +); + +lambda_capture( + unique int id: @lambdacapture, + int lambda: @lambdaexpr ref, + int index: int ref, + int field: @membervariable ref, + boolean captured_by_reference: boolean ref, + boolean is_implicit: boolean ref, + int location: @location_default ref +); + +@funbindexpr = @routineexpr + | @new_expr + | @delete_expr + | @delete_array_expr + | @ctordirectinit + | @ctorvirtualinit + | @ctordelegatinginit + | @dtordirectdestruct + | @dtorvirtualdestruct; + +@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct; +@addressable = @function | @variable ; +@accessible = @addressable | @enumconstant ; + +@access = @varaccess | @routineexpr ; + +fold( + int expr: @foldexpr ref, + string operator: string ref, + boolean is_left_fold: boolean ref +); + +stmts( + unique int id: @stmt, + int kind: int ref, + int location: @location_default ref +); + +case @stmt.kind of + 1 = @stmt_expr +| 2 = @stmt_if +| 3 = @stmt_while +| 4 = @stmt_goto +| 5 = @stmt_label +| 6 = @stmt_return +| 7 = @stmt_block +| 8 = @stmt_end_test_while // do { ... } while ( ... ) +| 9 = @stmt_for +| 10 = @stmt_switch_case +| 11 = @stmt_switch +| 13 = @stmt_asm // "asm" statement or the body of an asm function +| 15 = @stmt_try_block +| 16 = @stmt_microsoft_try // Microsoft +| 17 = @stmt_decl +| 18 = @stmt_set_vla_size // C99 +| 19 = @stmt_vla_decl // C99 +| 25 = @stmt_assigned_goto // GNU +| 26 = @stmt_empty +| 27 = @stmt_continue +| 28 = @stmt_break +| 29 = @stmt_range_based_for // C++11 +// ... 30 @stmt_at_autoreleasepool_block deprecated +// ... 31 @stmt_objc_for_in deprecated +// ... 32 @stmt_at_synchronized deprecated +| 33 = @stmt_handler +// ... 34 @stmt_finally_end deprecated +| 35 = @stmt_constexpr_if +| 37 = @stmt_co_return +| 38 = @stmt_consteval_if +| 39 = @stmt_not_consteval_if +| 40 = @stmt_leave +; + +type_vla( + int type_id: @type ref, + int decl: @stmt_vla_decl ref +); + +variable_vla( + int var: @variable ref, + int decl: @stmt_vla_decl ref +); + +type_is_vla(unique int type_id: @derivedtype ref) + +if_initialization( + unique int if_stmt: @stmt_if ref, + int init_id: @stmt ref +); + +if_then( + unique int if_stmt: @stmt_if ref, + int then_id: @stmt ref +); + +if_else( + unique int if_stmt: @stmt_if ref, + int else_id: @stmt ref +); + +constexpr_if_initialization( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int init_id: @stmt ref +); + +constexpr_if_then( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int then_id: @stmt ref +); + +constexpr_if_else( + unique int constexpr_if_stmt: @stmt_constexpr_if ref, + int else_id: @stmt ref +); + +@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; + +consteval_if_then( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int then_id: @stmt ref +); + +consteval_if_else( + unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, + int else_id: @stmt ref +); + +while_body( + unique int while_stmt: @stmt_while ref, + int body_id: @stmt ref +); + +do_body( + unique int do_stmt: @stmt_end_test_while ref, + int body_id: @stmt ref +); + +switch_initialization( + unique int switch_stmt: @stmt_switch ref, + int init_id: @stmt ref +); + +#keyset[switch_stmt, index] +switch_case( + int switch_stmt: @stmt_switch ref, + int index: int ref, + int case_id: @stmt_switch_case ref +); + +switch_body( + unique int switch_stmt: @stmt_switch ref, + int body_id: @stmt ref +); + +@stmt_for_or_range_based_for = @stmt_for + | @stmt_range_based_for; + +for_initialization( + unique int for_stmt: @stmt_for_or_range_based_for ref, + int init_id: @stmt ref +); + +for_condition( + unique int for_stmt: @stmt_for ref, + int condition_id: @expr ref +); + +for_update( + unique int for_stmt: @stmt_for ref, + int update_id: @expr ref +); + +for_body( + unique int for_stmt: @stmt_for ref, + int body_id: @stmt ref +); + +@stmtparent = @stmt | @expr_stmt ; +stmtparents( + unique int id: @stmt ref, + int index: int ref, + int parent: @stmtparent ref +); + +ishandler(unique int block: @stmt_block ref); + +@cfgnode = @stmt | @expr | @function | @initialiser ; + +stmt_decl_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl: @declaration ref +); + +stmt_decl_entry_bind( + int stmt: @stmt_decl ref, + int num: int ref, + int decl_entry: @element ref +); + +@parameterized_element = @function | @stmt_block | @requires_expr; + +blockscope( + unique int block: @stmt_block ref, + int enclosing: @parameterized_element ref +); + +@jump = @stmt_goto | @stmt_break | @stmt_continue | @stmt_leave; + +@jumporlabel = @jump | @stmt_label | @literal; + +jumpinfo( + unique int id: @jumporlabel ref, + string str: string ref, + int target: @stmt ref +); + +preprocdirects( + unique int id: @preprocdirect, + int kind: int ref, + int location: @location_default ref +); +case @preprocdirect.kind of + 0 = @ppd_if +| 1 = @ppd_ifdef +| 2 = @ppd_ifndef +| 3 = @ppd_elif +| 4 = @ppd_else +| 5 = @ppd_endif +| 6 = @ppd_plain_include +| 7 = @ppd_define +| 8 = @ppd_undef +| 9 = @ppd_line +| 10 = @ppd_error +| 11 = @ppd_pragma +| 12 = @ppd_objc_import +| 13 = @ppd_include_next +| 14 = @ppd_ms_import +| 15 = @ppd_elifdef +| 16 = @ppd_elifndef +| 18 = @ppd_warning +; + +@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; + +@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; + +preprocpair( + int begin : @ppd_branch ref, + int elseelifend : @preprocdirect ref +); + +preproctrue(int branch : @ppd_branch ref); +preprocfalse(int branch : @ppd_branch ref); + +preproctext( + unique int id: @preprocdirect ref, + string head: string ref, + string body: string ref +); + +includes( + unique int id: @ppd_include ref, + int included: @file ref +); + +link_targets( + int id: @link_target, + int binary: @file ref +); + +link_parent( + int element : @element ref, + int link_target : @link_target ref +); + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; diff --git a/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties new file mode 100644 index 00000000000..a951593a337 --- /dev/null +++ b/cpp/ql/lib/upgrades/c16b29b27f71247023321cc0d0360998b318837c/upgrade.properties @@ -0,0 +1,2 @@ +description: Fix decltype qualifier issue +compatibility: full diff --git a/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll b/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll index 53e33ab4fa5..03384076483 100644 --- a/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll +++ b/cpp/ql/src/Best Practices/Magic Constants/MagicConstants.qll @@ -164,12 +164,17 @@ predicate valueOccurrenceCount(string value, int n) { n > 20 } -predicate occurenceCount(Literal lit, string value, int n) { +predicate occurrenceCount(Literal lit, string value, int n) { valueOccurrenceCount(value, n) and value = lit.getValue() and nonTrivialValue(_, lit) } +/** + * DEPRECATED: Use `occurrenceCount` instead. + */ +deprecated predicate occurenceCount = occurrenceCount/3; + /* * Literals repeated frequently */ @@ -178,7 +183,7 @@ predicate check(Literal lit, string value, int n, File f) { // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n) and + occurrenceCount(lit, value, n) and n > 20 and f = lit.getFile() and // Exclude generated files diff --git a/cpp/ql/src/Best Practices/SloppyGlobal.ql b/cpp/ql/src/Best Practices/SloppyGlobal.ql index 4c1935627d5..b20e0271db8 100644 --- a/cpp/ql/src/Best Practices/SloppyGlobal.ql +++ b/cpp/ql/src/Best Practices/SloppyGlobal.ql @@ -14,6 +14,9 @@ import semmle.code.cpp.ConfigurationTestFile from GlobalVariable gv where gv.getName().length() <= 3 and + // We will give an alert for the TemplateVariable, so we don't + // need to also give one for each instantiation + not gv instanceof VariableTemplateInstantiation and not gv.isStatic() and not gv.getFile() instanceof ConfigurationTestFile // variables in files generated during configuration are likely false positives select gv, diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 589dfb68e1e..880cab8a58d 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,40 @@ +## 1.5.3 + +No user-facing changes. + +## 1.5.2 + +No user-facing changes. + +## 1.5.1 + +No user-facing changes. + +## 1.5.0 + +### Major Analysis Improvements + +* The queries `cpp/wrong-type-format-argument`, `cpp/comparison-with-wider-type`, `cpp/integer-multiplication-cast-to-long`, `cpp/implicit-function-declaration` and `cpp/suspicious-add-sizeof` have had their precisions reduced from `high` to `medium`. They will also now give alerts for projects built with `build-mode: none`. +* The queries `cpp/wrong-type-format-argument`, `cpp/comparison-with-wider-type`, `cpp/integer-multiplication-cast-to-long` and `cpp/suspicious-add-sizeof` are no longer included in the `code-scanning` suite. + +### Bug Fixes + +* The predicate `occurenceCount` in the file module `MagicConstants` has been deprecated. Use `occurrenceCount` instead. +* The predicate `additionalAdditionOrSubstractionCheckForLeapYear` in the file module `LeapYear` has been deprecated. Use `additionalAdditionOrSubtractionCheckForLeapYear` instead. + +## 1.4.7 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. + +## 1.4.6 + +### Minor Analysis Improvements + +* The `cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself. +* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type. + ## 1.4.5 ### Minor Analysis Improvements diff --git a/cpp/ql/src/Critical/OverflowDestination.ql b/cpp/ql/src/Critical/OverflowDestination.ql index 4cfaaf8981b..f3f25dfa822 100644 --- a/cpp/ql/src/Critical/OverflowDestination.ql +++ b/cpp/ql/src/Critical/OverflowDestination.ql @@ -82,6 +82,14 @@ module OverflowDestinationConfig implements DataFlow::ConfigSig { nodeIsBarrierEqualityCandidate(node, access, checkedVar) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(FunctionCall fc | result = [fc.getLocation(), sink.getLocation()] | + sourceSized(fc, sink.asIndirectConvertedExpr()) + ) + } } module OverflowDestination = TaintTracking::Global; diff --git a/cpp/ql/src/Critical/ScanfChecks.qll b/cpp/ql/src/Critical/ScanfChecks.qll index 340c52a3b93..0e191cc833c 100644 --- a/cpp/ql/src/Critical/ScanfChecks.qll +++ b/cpp/ql/src/Critical/ScanfChecks.qll @@ -4,13 +4,9 @@ private import semmle.code.cpp.controlflow.IRGuards private import semmle.code.cpp.ir.ValueNumbering private predicate exprInBooleanContext(Expr e) { - exists(IRGuardCondition gc | - exists(Instruction i | - i.getUnconvertedResultExpression() = e and - gc.comparesEq(valueNumber(i).getAUse(), 0, _, _) - ) - or - gc.getUnconvertedResultExpression() = e + exists(IRGuardCondition gc, Instruction i | + i.getUnconvertedResultExpression() = e and + gc.comparesEq(valueNumber(i).getAUse(), 0, _, _) ) } @@ -36,20 +32,18 @@ private string getEofValue() { * Holds if the value of `call` has been checked to not equal `EOF`. */ private predicate checkedForEof(ScanfFunctionCall call) { - exists(IRGuardCondition gc | - exists(CallInstruction i | i.getUnconvertedResultExpression() = call | - exists(int val | gc.comparesEq(valueNumber(i).getAUse(), val, _, _) | - // call == EOF - val = getEofValue().toInt() - or - // call == [any positive number] - val > 0 - ) + exists(IRGuardCondition gc, CallInstruction i | i.getUnconvertedResultExpression() = call | + exists(int val | gc.comparesEq(valueNumber(i).getAUse(), val, _, _) | + // call == EOF + val = getEofValue().toInt() or - exists(int val | gc.comparesLt(valueNumber(i).getAUse(), val, true, _) | - // call < [any non-negative number] (EOF is guaranteed to be negative) - val >= 0 - ) + // call == [any positive number] + val > 0 + ) + or + exists(int val | gc.comparesLt(valueNumber(i).getAUse(), val, true, _) | + // call < [any non-negative number] (EOF is guaranteed to be negative) + val >= 0 ) ) } diff --git a/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql b/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql index 7eb465d35a9..a54ac9020c8 100644 --- a/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql +++ b/cpp/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql @@ -5,7 +5,7 @@ * @kind problem * @problem.severity warning * @security-severity 8.1 - * @precision high + * @precision medium * @id cpp/integer-multiplication-cast-to-long * @tags reliability * security @@ -179,7 +179,6 @@ predicate overflows(MulExpr me, Type t) { from MulExpr me, Type t1, Type t2 where - not any(Compilation c).buildModeNone() and t1 = me.getType().getUnderlyingType() and t2 = me.getConversion().getType().getUnderlyingType() and t1.getSize() < t2.getSize() and diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql index 62c3c98e197..ed39b8da5cd 100644 --- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql +++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql @@ -168,6 +168,17 @@ module NonConstFlowConfig implements DataFlow::ConfigSig { cannotContainString(t) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(FormattingFunctionCall call, Expr formatString | + result = [call.getLocation(), sink.getLocation()] + | + isSinkImpl(sink, formatString) and + call.getArgument(call.getFormatParameterIndex()) = formatString + ) + } } module NonConstFlow = TaintTracking::Global; diff --git a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql index 02975d2bdca..33fe3a0b7a1 100644 --- a/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql +++ b/cpp/ql/src/Likely Bugs/Format/WrongTypeFormatArguments.ql @@ -5,7 +5,7 @@ * @kind problem * @problem.severity error * @security-severity 7.5 - * @precision high + * @precision medium * @id cpp/wrong-type-format-argument * @tags reliability * correctness @@ -154,7 +154,6 @@ int sizeof_IntType() { exists(IntType it | result = it.getSize()) } from FormattingFunctionCall ffc, int n, Expr arg, Type expected, Type actual where - not any(Compilation c).buildModeNone() and ( formattingFunctionCallExpectedType(ffc, n, expected) and formattingFunctionCallActualType(ffc, n, arg, actual) and diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 3cff86412e4..2b68730fa58 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -128,11 +128,18 @@ abstract class LeapYearFieldAccess extends YearFieldAccess { /** * Holds if the top-level binary operation includes an addition or subtraction operator with an operand specified by `valueToCheck`. */ - predicate additionalAdditionOrSubstractionCheckForLeapYear(int valueToCheck) { + predicate additionalAdditionOrSubtractionCheckForLeapYear(int valueToCheck) { additionalLogicalCheck(this, "+", valueToCheck) or additionalLogicalCheck(this, "-", valueToCheck) } + /** + * DEPRECATED: Use `additionalAdditionOrSubtractionCheckForLeapYear` instead. + */ + deprecated predicate additionalAdditionOrSubstractionCheckForLeapYear(int valueToCheck) { + this.additionalAdditionOrSubtractionCheckForLeapYear(valueToCheck) + } + /** * Holds if this object is used on a modulus 4 operation, which would likely indicate the start of a leap year check. */ @@ -180,13 +187,13 @@ class StructTmLeapYearFieldAccess extends LeapYearFieldAccess { this.additionalModulusCheckForLeapYear(100) and // tm_year represents years since 1900 ( - this.additionalAdditionOrSubstractionCheckForLeapYear(1900) + this.additionalAdditionOrSubtractionCheckForLeapYear(1900) or // some systems may use 2000 for 2-digit year conversions - this.additionalAdditionOrSubstractionCheckForLeapYear(2000) + this.additionalAdditionOrSubtractionCheckForLeapYear(2000) or // converting from/to Unix epoch - this.additionalAdditionOrSubstractionCheckForLeapYear(1970) + this.additionalAdditionOrSubtractionCheckForLeapYear(1970) ) } } @@ -215,6 +222,10 @@ private module LeapYearCheckConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(ChecksForLeapYearFunctionCall fc | sink.asExpr() = fc.getAnArgument()) } + + predicate observeDiffInformedIncrementalMode() { + none() // only used negatively in UncheckedLeapYearAfterYearModification.ql + } } module LeapYearCheckFlow = DataFlow::Global; @@ -285,6 +296,14 @@ private module PossibleYearArithmeticOperationCheckConfig implements DataFlow::C aexpr.getLValue() = fa ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + result = source.asExpr().getLocation() + } + + Location getASelectedSinkLocation(DataFlow::Node sink) { result = sink.asExpr().getLocation() } } module PossibleYearArithmeticOperationCheckFlow = diff --git a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll index 40c0f2173d9..f736a793a07 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll +++ b/cpp/ql/src/Likely Bugs/Memory Management/NtohlArrayNoBound.qll @@ -136,7 +136,7 @@ private module NetworkToBufferSizeConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { exists(GuardCondition gc, GVN gvn | - gc.getAChild*() = gvn.getAnExpr() and + gc.(Expr).getAChild*() = gvn.getAnExpr() and globalValueNumber(node.asExpr()) = gvn and gc.controls(node.asExpr().getBasicBlock(), _) ) diff --git a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql index f5d1a09d04e..e50a2d54543 100644 --- a/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql +++ b/cpp/ql/src/Likely Bugs/Protocols/TlsSettingsMisconfiguration.ql @@ -14,7 +14,7 @@ import cpp import semmle.code.cpp.security.boostorg.asio.protocols predicate isSourceImpl(DataFlow::Node source, ConstructorCall cc) { - exists(BoostorgAsio::SslContextClass c | c.getAContructorCall() = cc and cc = source.asExpr()) + exists(BoostorgAsio::SslContextClass c | c.getAConstructorCall() = cc and cc = source.asExpr()) } predicate isSinkImpl(DataFlow::Node sink, FunctionCall fcSetOptions) { diff --git a/cpp/ql/src/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.ql b/cpp/ql/src/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.ql index aa9d5d43c73..6a55557cf70 100644 --- a/cpp/ql/src/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.ql +++ b/cpp/ql/src/Likely Bugs/Underspecified Functions/ImplicitFunctionDeclaration.ql @@ -5,7 +5,7 @@ * may lead to unpredictable behavior. * @kind problem * @problem.severity warning - * @precision high + * @precision medium * @id cpp/implicit-function-declaration * @tags correctness * maintainability @@ -38,7 +38,6 @@ predicate isCompiledAsC(File f) { from FunctionDeclarationEntry fdeIm, FunctionCall fc where - not any(Compilation c).buildModeNone() and isCompiledAsC(fdeIm.getFile()) and not isFromMacroDefinition(fc) and fdeIm.isImplicit() and diff --git a/cpp/ql/src/Metrics/Internal/CallableExtents.ql b/cpp/ql/src/Metrics/Internal/CallableExtents.ql index 7a376c6da72..7ebae0385da 100644 --- a/cpp/ql/src/Metrics/Internal/CallableExtents.ql +++ b/cpp/ql/src/Metrics/Internal/CallableExtents.ql @@ -20,12 +20,14 @@ class RangeFunction extends Function { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo(string path, int sl, int sc, int el, int ec) { - super.getLocation().hasLocationInfo(path, sl, sc, _, _) and + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + super.getLocation().hasLocationInfo(filepath, startline, startcolumn, _, _) and ( - this.getBlock().getLocation().hasLocationInfo(path, _, _, el, ec) + this.getBlock().getLocation().hasLocationInfo(filepath, _, _, endline, endcolumn) or - not exists(this.getBlock()) and el = sl + 1 and ec = 1 + not exists(this.getBlock()) and endline = startline + 1 and endcolumn = 1 ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql b/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql index 94a9cacf9f4..1a15f6c3a15 100644 --- a/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql +++ b/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql @@ -93,6 +93,12 @@ module TaintedPathConfig implements DataFlow::ConfigSig { // make sinks barriers so that we only report the closest instance isSink(node) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.asIndirectArgument().getLocation() + } } module TaintedPath = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql index a609724937a..0e5f0f36f10 100644 --- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql @@ -147,8 +147,19 @@ module ExecTaintConfig implements DataFlow::StateConfigSig { predicate isBarrier(DataFlow::Node node) { isBarrierImpl(node) } - predicate isBarrierOut(DataFlow::Node node) { - isSink(node, _) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers + predicate isBarrierOut(DataFlow::Node node, FlowState state) { + isSink(node, state) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers + } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(DataFlow::Node concatResult, Expr command, ExecState state | + result = [concatResult.getLocation(), command.getLocation(), sink.getLocation()] and + isSink(sink, state) and + isSinkImpl(sink, command, _) and + concatResult = state.getOutgoingNode() + ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql index 9b27e95fd65..994aba733d2 100644 --- a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql +++ b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql @@ -39,6 +39,12 @@ module Config implements DataFlow::ConfigSig { or node.asCertainDefinition().getUnspecifiedType() instanceof ArithmeticType } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + exists(QueryString query | result = query.getLocation() | query = source.asIndirectExpr()) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index 0ea4ce2e95f..5d08afbe304 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -54,6 +54,14 @@ module SqlTaintedConfig implements DataFlow::ConfigSig { sql.barrierSqlArgument(input, _) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(Expr taintedArg | result = [taintedArg.getLocation(), sink.getLocation()] | + taintedArg = asSinkExpr(sink) + ) + } } module SqlTainted = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql index ec3543c1992..4d33ede9315 100644 --- a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql @@ -109,7 +109,7 @@ predicate lessThanOrEqual(IRGuardCondition g, Expr e, boolean branch) { g.comparesEq(left, _, _, true, branch) | interestingLessThanOrEqual(left) and - left.getDef().getUnconvertedResultExpression() = e + left.getDef().getConvertedResultExpression() = e ) } @@ -124,6 +124,12 @@ module Config implements DataFlow::ConfigSig { // Block flow if the node is guarded by any <, <= or = operations. node = DataFlow::BarrierGuard::getABarrierNode() } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(BufferWrite bw | result = [bw.getLocation(), sink.getLocation()] | isSink(sink, bw, _)) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql b/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql index 17c1b09c3e6..36f4522b56c 100644 --- a/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql +++ b/cpp/ql/src/Security/CWE/CWE-129/ImproperArrayIndexValidation.ql @@ -26,13 +26,13 @@ predicate isFlowSource(FS::FlowSource source, string sourceType) { predicate guardChecks(IRGuardCondition g, Expr e, boolean branch) { exists(Operand op | op.getDef().getConvertedResultExpression() = e | // `op < k` is true and `k > 0` - g.comparesLt(op, any(int k | k > 0), true, any(BooleanValue bv | bv.getValue() = branch)) + g.comparesLt(op, any(int k | k > 0), true, any(GuardValue bv | bv.asBooleanValue() = branch)) or // `op < _ + k` is true and `k > 0`. g.comparesLt(op, _, any(int k | k > 0), true, branch) or // op == k - g.comparesEq(op, _, true, any(BooleanValue bv | bv.getValue() = branch)) + g.comparesEq(op, _, true, any(GuardValue bv | bv.asBooleanValue() = branch)) or // op == _ + k g.comparesEq(op, _, _, true, branch) diff --git a/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql b/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql index 9b595657fce..2f051776dbe 100644 --- a/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql @@ -43,6 +43,12 @@ private module Config implements DataFlow::ConfigSig { } predicate isSink(DataFlow::Node sink) { isSink(sink, _) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(VariableAccess va | result = va.getLocation() | isSink(sink, va)) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql index c9efaf9f695..86806c0b776 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql @@ -106,6 +106,12 @@ module Config implements DataFlow::ConfigSig { not iTo instanceof PointerArithmeticInstruction ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(Expr e | result = e.getLocation() | isSink(sink, _, e)) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql index 54c3b013471..3126573ac5a 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql @@ -120,6 +120,13 @@ module UncontrolledArithConfig implements DataFlow::ConfigSig { // block unintended flow to pointers node.asExpr().getUnspecifiedType() instanceof PointerType } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + isSource(source) and + result = [getExpr(source).getLocation(), source.getLocation()] + } } module UncontrolledArith = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql index 15fd2cbca15..50cef092600 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql @@ -113,6 +113,12 @@ module Config implements DataFlow::ConfigSig { not iTo instanceof PointerArithmeticInstruction ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(VariableAccess va | result = va.getLocation() | isSink(sink, va, _)) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql b/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql index 021be5d091b..3f330807304 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/ComparisonWithWiderType.ql @@ -6,7 +6,7 @@ * @kind problem * @problem.severity warning * @security-severity 7.8 - * @precision high + * @precision medium * @tags reliability * security * external/cwe/cwe-190 @@ -51,7 +51,6 @@ int getComparisonSizeAdjustment(Expr e) { from Loop l, RelationalOperation rel, VariableAccess small, Expr large where - not any(Compilation c).buildModeNone() and small = rel.getLesserOperand() and large = rel.getGreaterOperand() and rel = l.getCondition().getAChild*() and diff --git a/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql b/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql index 6ff06d355b9..3978d2ded95 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/IntegerOverflowTainted.ql @@ -25,10 +25,10 @@ import semmle.code.cpp.controlflow.IRGuards as IRGuards predicate outOfBoundsExpr(Expr expr, string kind) { if convertedExprMightOverflowPositively(expr) then kind = "overflow" - else - if convertedExprMightOverflowNegatively(expr) - then kind = "overflow negatively" - else none() + else ( + convertedExprMightOverflowNegatively(expr) and + kind = "overflow negatively" + ) } predicate isSource(FS::FlowSource source, string sourceType) { sourceType = source.getSourceType() } diff --git a/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql b/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql index 6307ddf5fe6..cf3542ebae5 100644 --- a/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql +++ b/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql @@ -91,6 +91,12 @@ module TaintedAllocationSizeConfig implements DataFlow::ConfigSig { // to duplicate results) any(HeuristicAllocationFunction f).getAParameter() = node.asParameter() } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(Expr alloc | result = [alloc.getLocation(), sink.getLocation()] | allocSink(alloc, sink)) + } } module TaintedAllocationSize = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql b/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql index ada0180668e..8ee429b8c52 100644 --- a/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql +++ b/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql @@ -72,6 +72,14 @@ module Config implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isSource(source, _) } predicate isSink(DataFlow::Node sink) { isSink(sink, _) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(Expr condition | result = [condition.getLocation(), sink.getLocation()] | + isSink(sink, condition) + ) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql index 8a3c2f3664d..9eccaebfdbd 100644 --- a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql +++ b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql @@ -29,7 +29,15 @@ module VerifyResultConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr() instanceof SslGetVerifyResultCall } predicate isSink(DataFlow::Node sink) { - exists(GuardCondition guard | guard.getAChild*() = sink.asExpr()) + exists(GuardCondition guard | guard.(Expr).getAChild*() = sink.asExpr()) + } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(GuardCondition guard | result = guard.getLocation() | + guard.comparesEq(sink.asExpr(), _, 0, false, _) + ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql b/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql index de8520de1b3..779457508b7 100644 --- a/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql +++ b/cpp/ql/src/Security/CWE/CWE-295/SSLResultNotChecked.ql @@ -55,30 +55,9 @@ predicate resultIsChecked(SslGetPeerCertificateCall getCertCall, ControlFlowNode predicate certIsZero( SslGetPeerCertificateCall getCertCall, ControlFlowNode node1, ControlFlowNode node2 ) { - exists(Expr cert | cert = globalValueNumber(getCertCall).getAnExpr() | - exists(GuardCondition guard, Expr zero | - zero.getValue().toInt() = 0 and - node1 = guard and - ( - // if (cert == zero) { - guard.comparesEq(cert, zero, 0, true, true) and - node2 = guard.getATrueSuccessor() - or - // if (cert != zero) { } - guard.comparesEq(cert, zero, 0, false, true) and - node2 = guard.getAFalseSuccessor() - ) - ) - or - ( - // if (cert) { } - node1 = cert - or - // if (!cert) { - node1.(NotExpr).getAChild() = cert - ) and - node2 = node1.getASuccessor() and - not cert.(GuardCondition).controls(node2, true) // cert may be false + exists(Expr cert | + cert = globalValueNumber(getCertCall).getAnExpr() and + node1.(GuardCondition).ensuresEqEdge(cert, 0, _, node2.getBasicBlock(), true) ) } diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql index f2754c5811f..c03c433a532 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql @@ -47,6 +47,14 @@ module ToBufferConfig implements DataFlow::ConfigSig { } predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(SensitiveBufferWrite w | result = [w.getLocation(), sink.getLocation()] | + isSinkImpl(sink, w) + ) + } } module ToBufferFlow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql index c04ceae7ada..17f4b7ae0fd 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql @@ -31,6 +31,18 @@ module FromSensitiveConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { node.asExpr().getUnspecifiedType() instanceof IntegralType } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node sourceNode) { + exists(SensitiveExpr source | result = [source.getLocation(), sourceNode.getLocation()] | + isSourceImpl(sourceNode, source) + ) + } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(FileWrite w | result = [w.getLocation(), sink.getLocation()] | isSinkImpl(sink, w, _)) + } } module FromSensitiveFlow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql index 09db3f21602..01d078cf545 100644 --- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql +++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql @@ -245,6 +245,16 @@ module FromSensitiveConfig implements DataFlow::ConfigSig { // sources to not get path duplication. isSource(node) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(NetworkSendRecv networkSendRecv | + result = [networkSendRecv.getLocation(), sink.getLocation()] + | + isSinkSendRecv(sink, networkSendRecv) + ) + } } module FromSensitiveFlow = TaintTracking::Global; @@ -266,6 +276,10 @@ module ToEncryptionConfig implements DataFlow::ConfigSig { // sources to not get path duplication. isSource(node) } + + predicate observeDiffInformedIncrementalMode() { + none() // only used negatively + } } module ToEncryptionFlow = TaintTracking::Global; @@ -281,6 +295,10 @@ module FromEncryptionConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { node.asExpr().getUnspecifiedType() instanceof IntegralType } + + predicate observeDiffInformedIncrementalMode() { + none() // only used negatively + } } module FromEncryptionFlow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql b/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql index 0c060befeff..7cd146e2cac 100644 --- a/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql +++ b/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql @@ -123,6 +123,20 @@ module FromSensitiveConfig implements DataFlow::ConfigSig { content.(DataFlow::FieldContent).getField() = getRecField(t.stripType()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + exists(SensitiveExpr sensitive | result = [sensitive.getLocation(), source.getLocation()] | + isSourceImpl(source, sensitive) + ) + } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(SqliteFunctionCall sqliteCall | result = [sqliteCall.getLocation(), sink.getLocation()] | + isSinkImpl(sink, sqliteCall, _) + ) + } } module FromSensitiveFlow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql b/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql index 423ed57dd98..682d8387433 100644 --- a/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql +++ b/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql @@ -87,6 +87,13 @@ module HttpStringToUrlOpenConfig implements DataFlow::ConfigSig { sink.asIndirectExpr() = fc.getArgument(3) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + isSource(source) and + result = [source.asIndirectExpr().getLocation(), source.getLocation()] + } } module HttpStringToUrlOpen = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql b/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql index 3cc10b7ad19..9f75475854d 100644 --- a/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql +++ b/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql @@ -44,6 +44,12 @@ module KeyStrengthFlowConfig implements DataFlow::ConfigSig { exists(getMinimumKeyStrength(name, param)) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(FunctionCall fc | result = fc.getLocation() | sink.asExpr() = fc.getArgument(_)) + } } module KeyStrengthFlow = DataFlow::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp b/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp index 0fcbd89d892..33561b3d1bf 100644 --- a/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp +++ b/cpp/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp @@ -3,11 +3,15 @@ "qhelp.dtd"> -

Using broken or weak cryptographic algorithms can leave data vulnerable to being decrypted.

+

Using broken or weak cryptographic algorithms may compromise security guarantees such as confidentiality, integrity, and authenticity.

-

Many cryptographic algorithms provided by cryptography libraries are known to be weak, or -flawed. Using such an algorithm means that an attacker may be able to easily decrypt the encrypted -data.

+

Many cryptographic algorithms are known to be weak or flawed. The security guarantees of a system often rely on the underlying cryptography, so using a weak algorithm can have severe consequences. For example: +

+
    +
  • If a weak encryption algorithm is used, an attacker may be able to decrypt sensitive data.
  • +
  • If a weak hashing algorithm is used to protect data integrity, an attacker may be able to craft a malicious input that has the same hash as a benign one.
  • +
  • If a weak algorithm is used for digital signatures, an attacker may be able to forge signatures and impersonate legitimate users.
  • +
diff --git a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql index 4b28a80f662..5fd1b981974 100644 --- a/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql +++ b/cpp/ql/src/Security/CWE/CWE-367/TOCTOUFilesystemRace.ql @@ -115,7 +115,7 @@ predicate checksPath(Expr check, Expr checkPath) { pragma[nomagic] predicate checkPathControlsUse(Expr check, Expr checkPath, Expr use) { - exists(GuardCondition guard | referenceTo(check, guard.getAChild*()) | + exists(GuardCondition guard | referenceTo(check, guard.(Expr).getAChild*()) | guard.controls(use.getBasicBlock(), _) ) and checksPath(pragma[only_bind_into](check), checkPath) @@ -123,7 +123,7 @@ predicate checkPathControlsUse(Expr check, Expr checkPath, Expr use) { pragma[nomagic] predicate fileNameOperationControlsUse(Expr check, Expr checkPath, Expr use) { - exists(GuardCondition guard | referenceTo(check, guard.getAChild*()) | + exists(GuardCondition guard | referenceTo(check, guard.(Expr).getAChild*()) | guard.controls(use.getBasicBlock(), _) ) and pragma[only_bind_into](check) = filenameOperation(checkPath) diff --git a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql index 11d628c1aff..c386cb1da4d 100644 --- a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql +++ b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql @@ -145,6 +145,18 @@ module Config implements DataFlow::StateConfigSig { // ``` result instanceof DataFlow::FeatureHasSinkCallContext } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(DataFlow::Node mid, FlowState state | result = mid.getLocation() | + destroyedToBeginSink(sink) and + isSink(sink, state) and + state = Config::DestroyedToBegin(mid) + ) + } } module Flow = DataFlow::GlobalWithState; diff --git a/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql b/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql index 2703f819b54..f0851b7d807 100644 --- a/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql +++ b/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql @@ -62,6 +62,16 @@ module NullAppNameCreateProcessFunctionConfig implements DataFlow::ConfigSig { val = call.getArgument(call.getApplicationNameArgumentId()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(CreateProcessFunctionCall call | result = call.getLocation() | + sink.asExpr() = call.getArgument(call.getApplicationNameArgumentId()) + ) + } } module NullAppNameCreateProcessFunction = DataFlow::Global; @@ -82,6 +92,16 @@ module QuotedCommandInCreateProcessFunctionConfig implements DataFlow::ConfigSig val = call.getArgument(call.getCommandLineArgumentId()) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(CreateProcessFunctionCall call | result = call.getLocation() | + sink.asExpr() = call.getArgument(call.getCommandLineArgumentId()) + ) + } } module QuotedCommandInCreateProcessFunction = diff --git a/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll b/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll index 14eec81ff58..804d6a48754 100644 --- a/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll +++ b/cpp/ql/src/Security/CWE/CWE-457/UninitializedVariables.qll @@ -31,27 +31,28 @@ private predicate hasConditionalInitialization( class ConditionallyInitializedVariable extends LocalVariable { ConditionalInitializationCall call; ConditionalInitializationFunction f; - VariableAccess initAccess; Evidence e; ConditionallyInitializedVariable() { // Find a call that conditionally initializes this variable - hasConditionalInitialization(f, call, this, initAccess, e) and - // Ignore cases where the variable is assigned prior to the call - not reaches(this.getAnAssignedValue(), initAccess) and - // Ignore cases where the variable is assigned field-wise prior to the call. - not exists(FieldAccess fa | - exists(Assignment a | - fa = getAFieldAccess(this) and - a.getLValue() = fa + exists(VariableAccess initAccess | + hasConditionalInitialization(f, call, this, initAccess, e) and + // Ignore cases where the variable is assigned prior to the call + not reaches(this.getAnAssignedValue(), initAccess) and + // Ignore cases where the variable is assigned field-wise prior to the call. + not exists(FieldAccess fa | + exists(Assignment a | + fa = getAFieldAccess(this) and + a.getLValue() = fa + ) + | + reaches(fa, initAccess) + ) and + // Ignore cases where the variable is assigned by a prior call to an initialization function + not exists(Call c | + this.getAnAccess() = getAnInitializedArgument(c).(AddressOfExpr).getOperand() and + reaches(c, initAccess) ) - | - reaches(fa, initAccess) - ) and - // Ignore cases where the variable is assigned by a prior call to an initialization function - not exists(Call c | - this.getAnAccess() = getAnInitializedArgument(c).(AddressOfExpr).getOperand() and - reaches(c, initAccess) ) and /* * Static local variables with constant initializers do not have the initializer expr as part of diff --git a/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql b/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql index da92c792432..d9c9df4fd91 100644 --- a/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql +++ b/cpp/ql/src/Security/CWE/CWE-468/SuspiciousAddWithSizeof.ql @@ -6,7 +6,7 @@ * @kind problem * @problem.severity warning * @security-severity 8.8 - * @precision high + * @precision medium * @id cpp/suspicious-add-sizeof * @tags security * external/cwe/cwe-468 @@ -24,7 +24,6 @@ private predicate isCharSzPtrExpr(Expr e) { from Expr sizeofExpr, Expr e where - not any(Compilation c).buildModeNone() and // If we see an addWithSizeof then we expect the type of // the pointer expression to be `char*` or `void*`. Otherwise it // is probably a mistake. diff --git a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql index d4d908f8474..c03ae995090 100644 --- a/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql +++ b/cpp/ql/src/Security/CWE/CWE-570/IncorrectAllocationErrorHandling.ql @@ -41,7 +41,7 @@ predicate deleteMayThrow(DeleteOrDeleteArrayExpr deleteExpr) { } /** - * Holds if the function may throw an exception when called. That is, if the body of the function looks + * Holds if the function `f` may throw an exception when called. That is, if the body of the function looks * like it might throw an exception, and the function does not have a `noexcept` or `throw()` specifier. */ predicate functionMayThrow(Function f) { diff --git a/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql b/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql index 5ed30e19bb3..a0096f410c5 100644 --- a/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql +++ b/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql @@ -37,6 +37,16 @@ module NullDaclConfig implements DataFlow::ConfigSig { val = call.getArgument(2) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(SetSecurityDescriptorDaclFunctionCall call | result = call.getLocation() | + sink.asExpr() = call.getArgument(2) + ) + } } module NullDaclFlow = DataFlow::Global; @@ -68,6 +78,10 @@ module NonNullDaclConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(SetSecurityDescriptorDaclFunctionCall call | sink.asExpr() = call.getArgument(2)) } + + predicate observeDiffInformedIncrementalMode() { + none() // only used negatively + } } module NonNullDaclFlow = DataFlow::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql b/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql index 7eaa5df849d..171fbd26dd9 100644 --- a/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql +++ b/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql @@ -65,6 +65,16 @@ module Config implements DataFlow::ConfigSig { iFrom1 != iFrom2 ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + exists(Expr raise | result = raise.getLocation() | + sensitiveCondition([sink.asExpr(), sink.asIndirectExpr()], raise) + ) + } } module Flow = TaintTracking::Global; diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql index acfd27cc45b..4ca30c3e916 100644 --- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql +++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql @@ -178,6 +178,10 @@ module Config implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(UnsafeCast cast).getUnconverted() } int fieldFlowBranchLimit() { result = 0 } + + predicate observeDiffInformedIncrementalMode() { + none() // used both positively and negatively + } } module Flow = DataFlow::Global; diff --git a/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md b/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md deleted file mode 100644 index 02c73804c9f..00000000000 --- a/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/released/1.4.6.md b/cpp/ql/src/change-notes/released/1.4.6.md new file mode 100644 index 00000000000..6f6c9bbc385 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.4.6.md @@ -0,0 +1,6 @@ +## 1.4.6 + +### Minor Analysis Improvements + +* The `cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself. +* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type. diff --git a/cpp/ql/src/change-notes/released/1.4.7.md b/cpp/ql/src/change-notes/released/1.4.7.md new file mode 100644 index 00000000000..d3b9a12c798 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.4.7.md @@ -0,0 +1,5 @@ +## 1.4.7 + +### Bug Fixes + +* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did. diff --git a/cpp/ql/src/change-notes/released/1.5.0.md b/cpp/ql/src/change-notes/released/1.5.0.md new file mode 100644 index 00000000000..383825331ff --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.0.md @@ -0,0 +1,11 @@ +## 1.5.0 + +### Major Analysis Improvements + +* The queries `cpp/wrong-type-format-argument`, `cpp/comparison-with-wider-type`, `cpp/integer-multiplication-cast-to-long`, `cpp/implicit-function-declaration` and `cpp/suspicious-add-sizeof` have had their precisions reduced from `high` to `medium`. They will also now give alerts for projects built with `build-mode: none`. +* The queries `cpp/wrong-type-format-argument`, `cpp/comparison-with-wider-type`, `cpp/integer-multiplication-cast-to-long` and `cpp/suspicious-add-sizeof` are no longer included in the `code-scanning` suite. + +### Bug Fixes + +* The predicate `occurenceCount` in the file module `MagicConstants` has been deprecated. Use `occurrenceCount` instead. +* The predicate `additionalAdditionOrSubstractionCheckForLeapYear` in the file module `LeapYear` has been deprecated. Use `additionalAdditionOrSubtractionCheckForLeapYear` instead. diff --git a/cpp/ql/src/change-notes/released/1.5.1.md b/cpp/ql/src/change-notes/released/1.5.1.md new file mode 100644 index 00000000000..7b24a64aca3 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.1.md @@ -0,0 +1,3 @@ +## 1.5.1 + +No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/1.5.2.md b/cpp/ql/src/change-notes/released/1.5.2.md new file mode 100644 index 00000000000..384c27833f1 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.2.md @@ -0,0 +1,3 @@ +## 1.5.2 + +No user-facing changes. diff --git a/cpp/ql/src/change-notes/released/1.5.3.md b/cpp/ql/src/change-notes/released/1.5.3.md new file mode 100644 index 00000000000..2e9bcb5e663 --- /dev/null +++ b/cpp/ql/src/change-notes/released/1.5.3.md @@ -0,0 +1,3 @@ +## 1.5.3 + +No user-facing changes. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index a74b6b08d86..232224b0e26 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.5 +lastReleaseVersion: 1.5.3 diff --git a/cpp/ql/src/definitions.ql b/cpp/ql/src/definitions.ql index c12277eaf23..339b481f5f7 100644 --- a/cpp/ql/src/definitions.ql +++ b/cpp/ql/src/definitions.ql @@ -13,6 +13,6 @@ where def = definitionOf(e, kind) and // We need to exclude definitions for elements inside template instantiations, // as these often lead to multiple links to definitions from the same source location. - // LGTM does not support this behaviour. + // LGTM does not support this behavior. not e.isFromTemplateInstantiation(_) select e, def, kind diff --git a/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql b/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql index 36e42cae92a..ce3497bb965 100644 --- a/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql +++ b/cpp/ql/src/experimental/Likely Bugs/RedundantNullCheckParam.ql @@ -47,7 +47,7 @@ where // for a function parameter unchecked.getTarget() = param and // this function parameter is not overwritten - count(param.getAnAssignment()) = 0 and + not exists(param.getAnAssignment()) and check.getTarget() = param and // which is once checked candidateResultChecked(check, eqop) and diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-078/WordexpTainted.ql b/cpp/ql/src/experimental/Security/CWE/CWE-078/WordexpTainted.ql index 1d032a63ba3..cfe04ba23bf 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-078/WordexpTainted.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-078/WordexpTainted.ql @@ -50,8 +50,6 @@ module WordexpTaintConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node source) { none() } } module WordexpTaint = TaintTracking::Global; diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql b/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql index 136931f00ec..bbb219a22da 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-1126/DeclarationOfVariableWithUnnecessarilyWideScope.ql @@ -19,16 +19,17 @@ import cpp * Errors when using a variable declaration inside a loop. */ class DangerousWhileLoop extends WhileStmt { - Expr exp; Declaration dl; DangerousWhileLoop() { this = dl.getParentScope().(BlockStmt).getParent*() and - exp = this.getCondition().getAChild*() and - not exp instanceof PointerFieldAccess and - not exp instanceof ValueFieldAccess and - exp.(VariableAccess).getTarget().getName() = dl.getName() and - not exp.getParent*() instanceof FunctionCall + exists(Expr exp | + exp = this.getCondition().getAChild*() and + not exp instanceof PointerFieldAccess and + not exp instanceof ValueFieldAccess and + exp.(VariableAccess).getTarget().getName() = dl.getName() and + not exp.getParent*() instanceof FunctionCall + ) } Declaration getDeclaration() { result = dl } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql index 6529bf6cdf8..74ac8e6da66 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-125/DangerousWorksWithMultibyteOrWideCharacters.ql @@ -46,7 +46,7 @@ predicate exprMayBeString(Expr exp) { ) } -/** Holds if expression is constant or operator call `sizeof`. */ +/** Holds if expression `exp` is constant or operator call `sizeof`. */ predicate argConstOrSizeof(Expr exp) { exp.getValue().toInt() > 1 or exp.(SizeofTypeOperator).getTypeOperand().getSize() > 1 diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql index c38a012b27b..58f5dc2ade4 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql @@ -183,6 +183,22 @@ module ArrayAddressToDerefConfig implements DataFlow::StateConfigSig { pointerArithOverflow(pai, _) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + exists(Variable v | result = v.getLocation() or result = source.getLocation() | + isSourceImpl(source, v) + ) + } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(PointerArithmeticInstruction pai, Instruction deref | + result = [[pai, deref].getLocation(), sink.getLocation()] and + isInvalidPointerDerefSink2(sink, deref, _) and + isSink(sink, ArrayAddressToDerefConfig::TOverflowArithmetic(pai)) + ) + } } module ArrayAddressToDerefFlow = DataFlow::GlobalWithState; diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql b/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql index ce5f4dd00f8..9d61418fd77 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-243/IncorrectChangingWorkingDirectory.ql @@ -15,7 +15,7 @@ import cpp import semmle.code.cpp.commons.Exclusions -/** Holds if a `fc` function call is available before or after a `chdir` function call. */ +/** Holds if a `fcp` function call is available before or after a `chdir` function call. */ predicate inExistsChdir(FunctionCall fcp) { exists(FunctionCall fctmp | ( @@ -29,7 +29,7 @@ predicate inExistsChdir(FunctionCall fcp) { ) } -/** Holds if a `fc` function call is available before or after a function call containing a `chdir` call. */ +/** Holds if a `fcp` function call is available before or after a function call containing a `chdir` call. */ predicate outExistsChdir(FunctionCall fcp) { exists(FunctionCall fctmp | exists(FunctionCall fctmp2 | diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-401/MemoryLeakOnFailedCallToRealloc.ql b/cpp/ql/src/experimental/Security/CWE/CWE-401/MemoryLeakOnFailedCallToRealloc.ql index 3132b103bbc..df2fd13d79c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-401/MemoryLeakOnFailedCallToRealloc.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-401/MemoryLeakOnFailedCallToRealloc.ql @@ -51,7 +51,7 @@ class ReallocCallLeak extends FunctionCall { predicate mayHandleByTermination() { exists(GuardCondition guard, CallMayNotReturn exit | this.(ControlFlowNode).getASuccessor*() = guard and - guard.getAChild*() = v.getAnAccess() and + guard.(Expr).getAChild*() = v.getAnAccess() and guard.controls(exit.getBasicBlock(), _) ) } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql index bfa11e65b06..ec4ba042cb7 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql @@ -28,6 +28,12 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig { predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(DecompressionFlowStep s).isAdditionalFlowStep(node1, node2) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(FunctionCall fc | result = [sink.getLocation(), fc.getLocation()] | isSink(fc, sink)) + } } module DecompressionTaint = TaintTracking::Global; diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql b/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql index ffcac802b6d..fec373ce521 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-416/UseAfterExpiredLifetime.ql @@ -266,7 +266,7 @@ class LifetimePointerType extends LifetimeIndirectionType { class FullExpr extends Expr { FullExpr() { // A full-expression is not a subexpression - not exists(Expr p | this.getParent() = p) + not this.getParent() instanceof Expr or // A sub-expression that is an unevaluated operand this.isUnevaluated() diff --git a/cpp/ql/src/external/DefectFilter.qll b/cpp/ql/src/external/DefectFilter.qll index ad786e9cbc9..a3719140741 100644 --- a/cpp/ql/src/external/DefectFilter.qll +++ b/cpp/ql/src/external/DefectFilter.qll @@ -5,8 +5,8 @@ import cpp /** * Holds if `id` in the opaque identifier of a result reported by query `queryPath`, * such that `message` is the associated message and the location of the result spans - * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` - * in file `filepath`. + * column `startcol` of line `startline` to column `endcol` of line `endline` + * in file `file`. * * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/cpp/ql/src/external/MetricFilter.qll b/cpp/ql/src/external/MetricFilter.qll index 0315cd23c8d..39475451b7a 100644 --- a/cpp/ql/src/external/MetricFilter.qll +++ b/cpp/ql/src/external/MetricFilter.qll @@ -5,8 +5,8 @@ import cpp /** * Holds if `id` in the opaque identifier of a result reported by query `queryPath`, * such that `value` is the reported metric value and the location of the result spans - * column `startcolumn` of line `startline` to column `endcolumn` of line `endline` - * in file `filepath`. + * column `startcol` of line `startline` to column `endcol` of line `endline` + * in file `file`. * * For more information, see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql b/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql index 67e01ffc7c0..4697af80c17 100644 --- a/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql +++ b/cpp/ql/src/jsf/4.10 Classes/AV Rule 96.ql @@ -28,7 +28,7 @@ where exists(FunctionCall c, int i, Function f | c.getArgument(i) = e and c.getTarget() = f and - exists(Parameter p | f.getParameter(i) = p) and // varargs + exists(f.getParameter(i)) and // varargs baseElement(e.getType(), cl) and // only interested in arrays with classes not compatible(f.getParameter(i).getUnspecifiedType(), e.getUnspecifiedType()) ) diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ad3dc6c91f9..39cdb717ca7 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.6-dev +version: 1.5.4-dev groups: - cpp - queries diff --git a/cpp/ql/test/examples/docs-examples/analyzing-data-flow-in-cpp/index-flow-from-ntohl.ql b/cpp/ql/test/examples/docs-examples/analyzing-data-flow-in-cpp/index-flow-from-ntohl.ql index 15cc379131a..aaca52799d7 100644 --- a/cpp/ql/test/examples/docs-examples/analyzing-data-flow-in-cpp/index-flow-from-ntohl.ql +++ b/cpp/ql/test/examples/docs-examples/analyzing-data-flow-in-cpp/index-flow-from-ntohl.ql @@ -22,7 +22,7 @@ module NetworkToBufferSizeConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { exists(GuardCondition gc, Variable v | - gc.getAChild*() = v.getAnAccess() and + gc.(Expr).getAChild*() = v.getAnAccess() and node.asExpr() = v.getAnAccess() and gc.controls(node.asExpr().getBasicBlock(), _) and not exists(Loop loop | loop.getControllingExpr() = gc) diff --git a/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected b/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected index 27be8e5cfba..5870bdecd8e 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected @@ -13,7 +13,8 @@ | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | Padding | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | | openssl_basic.c:77:45:77:47 | Key | Source | openssl_basic.c:179:43:179:76 | Constant | | openssl_basic.c:77:50:77:51 | Nonce | Source | openssl_basic.c:180:42:180:59 | Constant | -| openssl_basic.c:81:49:81:58 | Message | Source | openssl_basic.c:81:49:81:58 | Message | +| openssl_basic.c:81:49:81:58 | Message | Source | openssl_basic.c:35:36:35:45 | KeyOperationOutput | +| openssl_basic.c:81:49:81:58 | Message | Source | openssl_basic.c:40:38:40:53 | KeyOperationOutput | | openssl_basic.c:90:11:90:29 | DecryptOperation | Algorithm | openssl_basic.c:69:33:69:47 | KeyOperationAlgorithm | | openssl_basic.c:90:11:90:29 | DecryptOperation | Input | openssl_basic.c:81:49:81:58 | Message | | openssl_basic.c:90:11:90:29 | DecryptOperation | Key | openssl_basic.c:77:45:77:47 | Key | @@ -30,24 +31,39 @@ | openssl_basic.c:144:13:144:22 | HashOperation | Message | openssl_basic.c:144:24:144:30 | Message | | openssl_basic.c:144:24:144:30 | Message | Source | openssl_basic.c:181:49:181:87 | Constant | | openssl_basic.c:144:46:144:51 | Digest | Source | openssl_basic.c:144:46:144:51 | Digest | -| openssl_basic.c:155:22:155:41 | Key | Algorithm | openssl_basic.c:155:22:155:41 | Key | -| openssl_basic.c:155:22:155:41 | KeyGeneration | Algorithm | openssl_basic.c:155:22:155:41 | KeyGeneration | +| openssl_basic.c:155:22:155:41 | Key | Algorithm | openssl_basic.c:155:43:155:55 | HMACAlgorithm | +| openssl_basic.c:155:22:155:41 | KeyGeneration | Algorithm | openssl_basic.c:155:43:155:55 | HMACAlgorithm | | openssl_basic.c:155:22:155:41 | KeyGeneration | KeyInput | openssl_basic.c:155:64:155:66 | Key | | openssl_basic.c:155:22:155:41 | KeyGeneration | Output | openssl_basic.c:155:22:155:41 | Key | -| openssl_basic.c:155:43:155:55 | MACAlgorithm | H | openssl_basic.c:160:39:160:48 | HashAlgorithm | +| openssl_basic.c:155:43:155:55 | HMACAlgorithm | H | openssl_basic.c:160:39:160:48 | HashAlgorithm | | openssl_basic.c:155:64:155:66 | Key | Source | openssl_basic.c:179:43:179:76 | Constant | | openssl_basic.c:160:59:160:62 | Key | Source | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:163:35:163:41 | Message | Source | openssl_basic.c:181:49:181:87 | Constant | -| openssl_basic.c:167:9:167:27 | SignOperation | Algorithm | openssl_basic.c:167:9:167:27 | SignOperation | -| openssl_basic.c:167:9:167:27 | SignOperation | HashAlgorithm | openssl_basic.c:160:39:160:48 | HashAlgorithm | -| openssl_basic.c:167:9:167:27 | SignOperation | Input | openssl_basic.c:163:35:163:41 | Message | -| openssl_basic.c:167:9:167:27 | SignOperation | Key | openssl_basic.c:160:59:160:62 | Key | -| openssl_basic.c:167:9:167:27 | SignOperation | Output | openssl_basic.c:167:34:167:36 | SignatureOutput | -| openssl_pkey.c:21:10:21:28 | KeyGeneration | Algorithm | openssl_pkey.c:21:10:21:28 | KeyGeneration | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | Algorithm | openssl_basic.c:155:43:155:55 | HMACAlgorithm | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | HashAlgorithm | openssl_basic.c:160:39:160:48 | HashAlgorithm | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | Input | openssl_basic.c:163:35:163:41 | Message | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | Key | openssl_basic.c:160:59:160:62 | Key | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | Nonce | openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | Output | openssl_basic.c:167:34:167:36 | SignatureOutput | +| openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | Mode | openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | +| openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | Padding | openssl_basic.c:249:51:249:72 | PaddingAlgorithm | +| openssl_basic.c:238:9:238:25 | KeyGeneration | Algorithm | openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | +| openssl_basic.c:238:9:238:25 | KeyGeneration | Output | openssl_basic.c:238:39:238:43 | Key | +| openssl_basic.c:238:39:238:43 | Key | Algorithm | openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | +| openssl_basic.c:243:52:243:55 | Key | Source | openssl_basic.c:238:39:238:43 | Key | +| openssl_basic.c:249:51:249:72 | PaddingAlgorithm | MD | openssl_basic.c:250:51:250:60 | HashAlgorithm | +| openssl_basic.c:249:51:249:72 | PaddingAlgorithm | MGF1Hash | openssl_basic.c:251:51:251:60 | HashAlgorithm | +| openssl_basic.c:262:24:262:39 | EncryptOperation | Algorithm | openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | +| openssl_basic.c:262:24:262:39 | EncryptOperation | Input | openssl_basic.c:263:64:263:70 | Message | +| openssl_basic.c:262:24:262:39 | EncryptOperation | Key | openssl_basic.c:243:52:243:55 | Key | +| openssl_basic.c:262:24:262:39 | EncryptOperation | Nonce | openssl_basic.c:262:24:262:39 | EncryptOperation | +| openssl_basic.c:262:24:262:39 | EncryptOperation | Output | openssl_basic.c:262:54:262:63 | KeyOperationOutput | +| openssl_basic.c:263:64:263:70 | Message | Source | openssl_basic.c:231:27:231:49 | Constant | +| openssl_pkey.c:21:10:21:28 | KeyGeneration | Algorithm | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | | openssl_pkey.c:21:10:21:28 | KeyGeneration | Output | openssl_pkey.c:21:30:21:32 | Key | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Mode | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Padding | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | -| openssl_pkey.c:21:30:21:32 | Key | Algorithm | openssl_pkey.c:21:30:21:32 | Key | +| openssl_pkey.c:21:30:21:32 | Key | Algorithm | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | Mode | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | Padding | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | | openssl_pkey.c:55:9:55:23 | KeyGeneration | Algorithm | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | @@ -60,105 +76,174 @@ | openssl_pkey.c:64:9:64:24 | EncryptOperation | Nonce | openssl_pkey.c:64:9:64:24 | EncryptOperation | | openssl_pkey.c:64:9:64:24 | EncryptOperation | Output | openssl_pkey.c:64:31:64:39 | KeyOperationOutput | | openssl_pkey.c:64:58:64:66 | Message | Source | openssl_pkey.c:45:49:45:65 | Constant | -| openssl_signature.c:22:34:22:40 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:22:34:22:40 | Message | Source | openssl_signature.c:685:37:685:77 | Constant | -| openssl_signature.c:22:34:22:40 | Message | Source | openssl_signature.c:741:37:741:77 | Constant | -| openssl_signature.c:23:9:23:26 | HashOperation | Algorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:23:9:23:26 | HashOperation | Algorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:23:9:23:26 | HashOperation | Digest | openssl_signature.c:23:36:23:41 | Digest | -| openssl_signature.c:23:9:23:26 | HashOperation | Message | openssl_signature.c:22:34:22:40 | Message | -| openssl_signature.c:23:36:23:41 | Digest | Source | openssl_signature.c:23:36:23:41 | Digest | -| openssl_signature.c:70:32:70:38 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:75:28:75:36 | Message | Source | openssl_signature.c:75:28:75:36 | Message | -| openssl_signature.c:80:9:80:21 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:80:9:80:21 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:80:9:80:21 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:80:9:80:21 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:80:9:80:21 | SignOperation | Input | openssl_signature.c:70:32:70:38 | Message | -| openssl_signature.c:80:9:80:21 | SignOperation | Input | openssl_signature.c:75:28:75:36 | Message | -| openssl_signature.c:80:9:80:21 | SignOperation | Key | openssl_signature.c:80:53:80:56 | Key | -| openssl_signature.c:80:9:80:21 | SignOperation | Output | openssl_signature.c:80:31:80:40 | SignatureOutput | -| openssl_signature.c:80:53:80:56 | Key | Source | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:80:53:80:56 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:133:52:133:55 | Key | Source | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:133:52:133:55 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:134:38:134:44 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:135:9:135:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | Input | openssl_signature.c:134:38:134:44 | Message | -| openssl_signature.c:135:9:135:27 | SignOperation | Key | openssl_signature.c:133:52:133:55 | Key | -| openssl_signature.c:135:9:135:27 | SignOperation | Output | openssl_signature.c:135:37:135:40 | SignatureOutput | -| openssl_signature.c:142:9:142:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:142:9:142:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:142:9:142:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:142:9:142:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:142:9:142:27 | SignOperation | Input | openssl_signature.c:134:38:134:44 | Message | -| openssl_signature.c:142:9:142:27 | SignOperation | Key | openssl_signature.c:133:52:133:55 | Key | -| openssl_signature.c:142:9:142:27 | SignOperation | Output | openssl_signature.c:142:37:142:46 | SignatureOutput | -| openssl_signature.c:190:57:190:60 | Key | Source | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:190:57:190:60 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:196:38:196:44 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:197:9:197:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | Input | openssl_signature.c:196:38:196:44 | Message | -| openssl_signature.c:197:9:197:27 | SignOperation | Key | openssl_signature.c:190:57:190:60 | Key | -| openssl_signature.c:197:9:197:27 | SignOperation | Output | openssl_signature.c:197:37:197:40 | SignatureOutput | -| openssl_signature.c:204:9:204:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:204:9:204:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:204:9:204:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:204:9:204:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:204:9:204:27 | SignOperation | Input | openssl_signature.c:196:38:196:44 | Message | -| openssl_signature.c:204:9:204:27 | SignOperation | Key | openssl_signature.c:190:57:190:60 | Key | -| openssl_signature.c:204:9:204:27 | SignOperation | Output | openssl_signature.c:204:37:204:46 | SignatureOutput | -| openssl_signature.c:260:39:260:42 | Key | Source | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:260:39:260:42 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | Input | openssl_signature.c:263:54:263:59 | Message | -| openssl_signature.c:263:9:263:21 | SignOperation | Key | openssl_signature.c:260:39:260:42 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | Output | openssl_signature.c:263:33:263:36 | SignatureOutput | -| openssl_signature.c:263:54:263:59 | Message | Source | openssl_signature.c:263:54:263:59 | Message | -| openssl_signature.c:270:9:270:21 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:270:9:270:21 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:270:9:270:21 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:270:9:270:21 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:270:9:270:21 | SignOperation | Input | openssl_signature.c:270:60:270:65 | Message | -| openssl_signature.c:270:9:270:21 | SignOperation | Key | openssl_signature.c:260:39:260:42 | Key | -| openssl_signature.c:270:9:270:21 | SignOperation | Output | openssl_signature.c:270:33:270:42 | SignatureOutput | -| openssl_signature.c:270:60:270:65 | Message | Source | openssl_signature.c:270:60:270:65 | Message | -| openssl_signature.c:321:39:321:42 | Key | Source | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:321:39:321:42 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:326:48:326:54 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | HashAlgorithm | openssl_signature.c:327:9:327:35 | SignOperation | -| openssl_signature.c:327:9:327:35 | SignOperation | Input | openssl_signature.c:326:48:326:54 | Message | -| openssl_signature.c:327:9:327:35 | SignOperation | Key | openssl_signature.c:321:39:321:42 | Key | -| openssl_signature.c:327:9:327:35 | SignOperation | Output | openssl_signature.c:327:47:327:50 | SignatureOutput | -| openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | -| openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | -| openssl_signature.c:334:9:334:35 | SignOperation | HashAlgorithm | openssl_signature.c:334:9:334:35 | SignOperation | -| openssl_signature.c:334:9:334:35 | SignOperation | Input | openssl_signature.c:326:48:326:54 | Message | -| openssl_signature.c:334:9:334:35 | SignOperation | Key | openssl_signature.c:321:39:321:42 | Key | -| openssl_signature.c:334:9:334:35 | SignOperation | Output | openssl_signature.c:334:47:334:56 | SignatureOutput | -| openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:548:9:548:23 | KeyGeneration | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:548:9:548:23 | KeyGeneration | Output | openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:548:34:548:37 | Key | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:575:32:575:37 | Key | Source | openssl_signature.c:575:32:575:37 | Key | -| openssl_signature.c:578:9:578:23 | KeyGeneration | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:578:9:578:23 | KeyGeneration | KeyInput | openssl_signature.c:575:32:575:37 | Key | -| openssl_signature.c:578:9:578:23 | KeyGeneration | Output | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:578:34:578:37 | Key | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | Padding | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | +| openssl_signature.c:25:34:25:40 | Message | Source | openssl_signature.c:615:37:615:74 | Constant | +| openssl_signature.c:25:34:25:40 | Message | Source | openssl_signature.c:732:37:732:66 | Constant | +| openssl_signature.c:26:9:26:26 | HashOperation | Algorithm | openssl_signature.c:616:24:616:33 | HashAlgorithm | +| openssl_signature.c:26:9:26:26 | HashOperation | Algorithm | openssl_signature.c:733:24:733:31 | HashAlgorithm | +| openssl_signature.c:26:9:26:26 | HashOperation | Digest | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:26:9:26:26 | HashOperation | Message | openssl_signature.c:25:34:25:40 | Message | +| openssl_signature.c:26:36:26:41 | Digest | Source | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:63:32:63:38 | Message | Source | openssl_signature.c:651:37:651:61 | Constant | +| openssl_signature.c:68:28:68:36 | Message | Source | openssl_signature.c:651:37:651:61 | Constant | +| openssl_signature.c:73:9:73:21 | SignOperation | Algorithm | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:73:9:73:21 | SignOperation | HashAlgorithm | openssl_signature.c:652:24:652:33 | HashAlgorithm | +| openssl_signature.c:73:9:73:21 | SignOperation | Input | openssl_signature.c:63:32:63:38 | Message | +| openssl_signature.c:73:9:73:21 | SignOperation | Input | openssl_signature.c:68:28:68:36 | Message | +| openssl_signature.c:73:9:73:21 | SignOperation | Key | openssl_signature.c:73:53:73:56 | Key | +| openssl_signature.c:73:9:73:21 | SignOperation | Output | openssl_signature.c:73:31:73:40 | SignatureOutput | +| openssl_signature.c:73:53:73:56 | Key | Source | openssl_signature.c:666:34:666:37 | Key | +| openssl_signature.c:98:34:98:40 | Message | Source | openssl_signature.c:651:37:651:61 | Constant | +| openssl_signature.c:99:34:99:42 | Message | Source | openssl_signature.c:651:37:651:61 | Constant | +| openssl_signature.c:100:9:100:23 | VerifyOperation | Algorithm | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:100:9:100:23 | VerifyOperation | HashAlgorithm | openssl_signature.c:652:24:652:33 | HashAlgorithm | +| openssl_signature.c:100:9:100:23 | VerifyOperation | Input | openssl_signature.c:98:34:98:40 | Message | +| openssl_signature.c:100:9:100:23 | VerifyOperation | Input | openssl_signature.c:99:34:99:42 | Message | +| openssl_signature.c:100:9:100:23 | VerifyOperation | Key | openssl_signature.c:100:73:100:76 | Key | +| openssl_signature.c:100:9:100:23 | VerifyOperation | Signature | openssl_signature.c:100:33:100:41 | SignatureInput | +| openssl_signature.c:100:33:100:41 | SignatureInput | Source | openssl_signature.c:73:31:73:40 | SignatureOutput | +| openssl_signature.c:100:73:100:76 | Key | Source | openssl_signature.c:666:34:666:37 | Key | +| openssl_signature.c:126:52:126:55 | Key | Source | openssl_signature.c:707:34:707:37 | Key | +| openssl_signature.c:127:38:127:44 | Message | Source | openssl_signature.c:692:37:692:67 | Constant | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | Algorithm | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | HashAlgorithm | openssl_signature.c:693:24:693:33 | HashAlgorithm | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | Input | openssl_signature.c:127:38:127:44 | Message | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | Key | openssl_signature.c:126:52:126:55 | Key | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | Nonce | openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | Output | openssl_signature.c:135:37:135:46 | SignatureOutput | +| openssl_signature.c:158:54:158:57 | Key | Source | openssl_signature.c:707:34:707:37 | Key | +| openssl_signature.c:159:40:159:46 | Message | Source | openssl_signature.c:692:37:692:67 | Constant | +| openssl_signature.c:160:9:160:29 | VerifyOperation | Algorithm | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:160:9:160:29 | VerifyOperation | HashAlgorithm | openssl_signature.c:693:24:693:33 | HashAlgorithm | +| openssl_signature.c:160:9:160:29 | VerifyOperation | Input | openssl_signature.c:159:40:159:46 | Message | +| openssl_signature.c:160:9:160:29 | VerifyOperation | Key | openssl_signature.c:158:54:158:57 | Key | +| openssl_signature.c:160:9:160:29 | VerifyOperation | Signature | openssl_signature.c:160:39:160:47 | SignatureInput | +| openssl_signature.c:160:39:160:47 | SignatureInput | Source | openssl_signature.c:135:37:135:46 | SignatureOutput | +| openssl_signature.c:182:57:182:60 | Key | Source | openssl_signature.c:791:34:791:37 | Key | +| openssl_signature.c:187:38:187:44 | Message | Source | openssl_signature.c:777:37:777:73 | Constant | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | Algorithm | openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | HashAlgorithm | openssl_signature.c:778:24:778:31 | HashAlgorithm | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | Input | openssl_signature.c:187:38:187:44 | Message | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | Key | openssl_signature.c:182:57:182:60 | Key | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | Nonce | openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | Output | openssl_signature.c:195:37:195:46 | SignatureOutput | +| openssl_signature.c:218:59:218:62 | Key | Source | openssl_signature.c:791:34:791:37 | Key | +| openssl_signature.c:224:40:224:46 | Message | Source | openssl_signature.c:777:37:777:73 | Constant | +| openssl_signature.c:225:9:225:29 | VerifyOperation | Algorithm | openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:225:9:225:29 | VerifyOperation | HashAlgorithm | openssl_signature.c:778:24:778:31 | HashAlgorithm | +| openssl_signature.c:225:9:225:29 | VerifyOperation | Input | openssl_signature.c:224:40:224:46 | Message | +| openssl_signature.c:225:9:225:29 | VerifyOperation | Key | openssl_signature.c:218:59:218:62 | Key | +| openssl_signature.c:225:9:225:29 | VerifyOperation | Signature | openssl_signature.c:225:39:225:47 | SignatureInput | +| openssl_signature.c:225:39:225:47 | SignatureInput | Source | openssl_signature.c:195:37:195:46 | SignatureOutput | +| openssl_signature.c:250:39:250:42 | Key | Source | openssl_signature.c:751:34:751:37 | Key | +| openssl_signature.c:260:9:260:21 | SignOperation | Algorithm | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:260:9:260:21 | SignOperation | HashAlgorithm | openssl_signature.c:733:24:733:31 | HashAlgorithm | +| openssl_signature.c:260:9:260:21 | SignOperation | Input | openssl_signature.c:260:60:260:65 | Message | +| openssl_signature.c:260:9:260:21 | SignOperation | Key | openssl_signature.c:250:39:250:42 | Key | +| openssl_signature.c:260:9:260:21 | SignOperation | Output | openssl_signature.c:260:33:260:42 | SignatureOutput | +| openssl_signature.c:260:60:260:65 | Message | Source | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:282:39:282:42 | Key | Source | openssl_signature.c:751:34:751:37 | Key | +| openssl_signature.c:285:9:285:23 | VerifyOperation | Algorithm | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:285:9:285:23 | VerifyOperation | HashAlgorithm | openssl_signature.c:733:24:733:31 | HashAlgorithm | +| openssl_signature.c:285:9:285:23 | VerifyOperation | Input | openssl_signature.c:285:61:285:66 | Message | +| openssl_signature.c:285:9:285:23 | VerifyOperation | Key | openssl_signature.c:282:39:282:42 | Key | +| openssl_signature.c:285:9:285:23 | VerifyOperation | Signature | openssl_signature.c:285:35:285:43 | SignatureInput | +| openssl_signature.c:285:35:285:43 | SignatureInput | Source | openssl_signature.c:260:33:260:42 | SignatureOutput | +| openssl_signature.c:285:61:285:66 | Message | Source | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:311:39:311:42 | Key | Source | openssl_signature.c:829:34:829:37 | Key | +| openssl_signature.c:316:48:316:54 | Message | Source | openssl_signature.c:817:37:817:63 | Constant | +| openssl_signature.c:324:9:324:35 | SignOperation | Algorithm | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:324:9:324:35 | SignOperation | Algorithm | openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | +| openssl_signature.c:324:9:324:35 | SignOperation | HashAlgorithm | openssl_signature.c:838:85:838:96 | HashAlgorithm | +| openssl_signature.c:324:9:324:35 | SignOperation | Input | openssl_signature.c:316:48:316:54 | Message | +| openssl_signature.c:324:9:324:35 | SignOperation | Key | openssl_signature.c:311:39:311:42 | Key | +| openssl_signature.c:324:9:324:35 | SignOperation | Output | openssl_signature.c:324:47:324:56 | SignatureOutput | +| openssl_signature.c:347:39:347:42 | Key | Source | openssl_signature.c:829:34:829:37 | Key | +| openssl_signature.c:353:42:353:50 | SignatureInput | Source | openssl_signature.c:324:47:324:56 | SignatureOutput | +| openssl_signature.c:355:50:355:56 | Message | Source | openssl_signature.c:817:37:817:63 | Constant | +| openssl_signature.c:356:9:356:37 | VerifyOperation | Algorithm | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:356:9:356:37 | VerifyOperation | Algorithm | openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | +| openssl_signature.c:356:9:356:37 | VerifyOperation | HashAlgorithm | openssl_signature.c:839:87:839:98 | HashAlgorithm | +| openssl_signature.c:356:9:356:37 | VerifyOperation | Input | openssl_signature.c:355:50:355:56 | Message | +| openssl_signature.c:356:9:356:37 | VerifyOperation | Key | openssl_signature.c:347:39:347:42 | Key | +| openssl_signature.c:356:9:356:37 | VerifyOperation | Signature | openssl_signature.c:353:42:353:50 | SignatureInput | +| openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | Mode | openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | +| openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | Padding | openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | +| openssl_signature.c:384:9:384:16 | SignOperation | Algorithm | openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | +| openssl_signature.c:384:9:384:16 | SignOperation | Algorithm | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:384:9:384:16 | SignOperation | HashAlgorithm | openssl_signature.c:595:37:595:46 | HashAlgorithm | +| openssl_signature.c:384:9:384:16 | SignOperation | Input | openssl_signature.c:384:28:384:34 | Message | +| openssl_signature.c:384:9:384:16 | SignOperation | Key | openssl_signature.c:385:48:385:54 | Key | +| openssl_signature.c:384:9:384:16 | SignOperation | Output | openssl_signature.c:384:50:384:59 | SignatureOutput | +| openssl_signature.c:384:28:384:34 | Message | Source | openssl_signature.c:566:37:566:74 | Constant | +| openssl_signature.c:385:48:385:54 | Key | Source | openssl_signature.c:579:34:579:37 | Key | +| openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | Mode | openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | +| openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | Padding | openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | +| openssl_signature.c:403:12:403:21 | VerifyOperation | Algorithm | openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | +| openssl_signature.c:403:12:403:21 | VerifyOperation | Algorithm | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:403:12:403:21 | VerifyOperation | HashAlgorithm | openssl_signature.c:597:41:597:50 | HashAlgorithm | +| openssl_signature.c:403:12:403:21 | VerifyOperation | Input | openssl_signature.c:403:33:403:39 | Message | +| openssl_signature.c:403:12:403:21 | VerifyOperation | Key | openssl_signature.c:404:51:404:57 | Key | +| openssl_signature.c:403:12:403:21 | VerifyOperation | Signature | openssl_signature.c:403:55:403:63 | SignatureInput | +| openssl_signature.c:403:33:403:39 | Message | Source | openssl_signature.c:566:37:566:74 | Constant | +| openssl_signature.c:403:55:403:63 | SignatureInput | Source | openssl_signature.c:384:50:384:59 | SignatureOutput | +| openssl_signature.c:404:51:404:57 | Key | Source | openssl_signature.c:579:34:579:37 | Key | +| openssl_signature.c:428:11:428:21 | SignOperation | Algorithm | openssl_signature.c:428:11:428:21 | KeyOperationAlgorithm | +| openssl_signature.c:428:11:428:21 | SignOperation | Algorithm | openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | +| openssl_signature.c:428:11:428:21 | SignOperation | HashAlgorithm | openssl_signature.c:428:11:428:21 | SignOperation | +| openssl_signature.c:428:11:428:21 | SignOperation | Input | openssl_signature.c:428:23:428:28 | Message | +| openssl_signature.c:428:11:428:21 | SignOperation | Key | openssl_signature.c:428:43:428:49 | Key | +| openssl_signature.c:428:11:428:21 | SignOperation | Output | openssl_signature.c:428:11:428:21 | SignatureOutput | +| openssl_signature.c:428:23:428:28 | Message | Source | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:428:43:428:49 | Key | Source | openssl_signature.c:546:34:546:37 | Key | +| openssl_signature.c:484:15:484:27 | VerifyOperation | Algorithm | openssl_signature.c:484:15:484:27 | KeyOperationAlgorithm | +| openssl_signature.c:484:15:484:27 | VerifyOperation | Algorithm | openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | +| openssl_signature.c:484:15:484:27 | VerifyOperation | HashAlgorithm | openssl_signature.c:484:15:484:27 | VerifyOperation | +| openssl_signature.c:484:15:484:27 | VerifyOperation | Input | openssl_signature.c:484:29:484:34 | Message | +| openssl_signature.c:484:15:484:27 | VerifyOperation | Key | openssl_signature.c:484:54:484:60 | Key | +| openssl_signature.c:484:15:484:27 | VerifyOperation | Signature | openssl_signature.c:484:49:484:51 | SignatureInput | +| openssl_signature.c:484:29:484:34 | Message | Source | openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:484:49:484:51 | SignatureInput | Source | openssl_signature.c:428:11:428:21 | SignatureOutput | +| openssl_signature.c:484:54:484:60 | Key | Source | openssl_signature.c:546:34:546:37 | Key | +| openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | +| openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | +| openssl_signature.c:516:9:516:23 | KeyGeneration | Algorithm | openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | +| openssl_signature.c:516:9:516:23 | KeyGeneration | Output | openssl_signature.c:516:34:516:37 | Key | +| openssl_signature.c:516:34:516:37 | Key | Algorithm | openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | +| openssl_signature.c:543:32:543:37 | Key | Source | openssl_signature.c:543:32:543:37 | Key | +| openssl_signature.c:546:9:546:23 | KeyGeneration | Algorithm | openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | +| openssl_signature.c:546:9:546:23 | KeyGeneration | KeyInput | openssl_signature.c:543:32:543:37 | Key | +| openssl_signature.c:546:9:546:23 | KeyGeneration | Output | openssl_signature.c:546:34:546:37 | Key | +| openssl_signature.c:546:34:546:37 | Key | Algorithm | openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | +| openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:579:9:579:23 | KeyGeneration | Algorithm | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:579:9:579:23 | KeyGeneration | Output | openssl_signature.c:579:34:579:37 | Key | +| openssl_signature.c:579:34:579:37 | Key | Algorithm | openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:666:9:666:23 | KeyGeneration | Algorithm | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:666:9:666:23 | KeyGeneration | Output | openssl_signature.c:666:34:666:37 | Key | +| openssl_signature.c:666:34:666:37 | Key | Algorithm | openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:707:9:707:23 | KeyGeneration | Algorithm | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:707:9:707:23 | KeyGeneration | Output | openssl_signature.c:707:34:707:37 | Key | +| openssl_signature.c:707:34:707:37 | Key | Algorithm | openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:751:9:751:23 | KeyGeneration | Algorithm | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:751:9:751:23 | KeyGeneration | Output | openssl_signature.c:751:34:751:37 | Key | +| openssl_signature.c:751:34:751:37 | Key | Algorithm | openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:185:44:185:64 | PaddingAlgorithm | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:222:44:222:64 | PaddingAlgorithm | +| openssl_signature.c:791:9:791:23 | KeyGeneration | Algorithm | openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:791:9:791:23 | KeyGeneration | Output | openssl_signature.c:791:34:791:37 | Key | +| openssl_signature.c:791:34:791:37 | Key | Algorithm | openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | Mode | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | Padding | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:829:9:829:23 | KeyGeneration | Algorithm | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:829:9:829:23 | KeyGeneration | Output | openssl_signature.c:829:34:829:37 | Key | +| openssl_signature.c:829:34:829:37 | Key | Algorithm | openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | Padding | openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | +| openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | Padding | openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | diff --git a/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected b/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected index 52a7c61502b..4f435517eef 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected @@ -21,18 +21,34 @@ | openssl_basic.c:144:67:144:73 | HashAlgorithm | Name | MD5 | openssl_basic.c:144:67:144:73 | openssl_basic.c:144:67:144:73 | | openssl_basic.c:144:67:144:73 | HashAlgorithm | RawName | EVP_md5 | openssl_basic.c:144:67:144:73 | openssl_basic.c:144:67:144:73 | | openssl_basic.c:155:22:155:41 | Key | KeyType | Asymmetric | openssl_basic.c:155:22:155:41 | openssl_basic.c:155:22:155:41 | -| openssl_basic.c:155:43:155:55 | MACAlgorithm | Name | HMAC | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | -| openssl_basic.c:155:43:155:55 | MACAlgorithm | RawName | 855 | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | +| openssl_basic.c:155:43:155:55 | HMACAlgorithm | Name | HMAC | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | +| openssl_basic.c:155:43:155:55 | HMACAlgorithm | RawName | 855 | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | | openssl_basic.c:155:64:155:66 | Key | KeyType | Unknown | openssl_basic.c:155:64:155:66 | openssl_basic.c:155:64:155:66 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | DigestSize | 256 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | Name | SHA2 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | RawName | EVP_sha256 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | | openssl_basic.c:160:59:160:62 | Key | KeyType | Unknown | openssl_basic.c:160:59:160:62 | openssl_basic.c:160:59:160:62 | -| openssl_basic.c:167:9:167:27 | SignOperation | KeyOperationSubtype | Sign | openssl_basic.c:167:9:167:27 | openssl_basic.c:167:9:167:27 | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | KeyOperationSubtype | Mac | openssl_basic.c:167:9:167:27 | openssl_basic.c:167:9:167:27 | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | KeyOperationSubtype | Sign | openssl_basic.c:167:9:167:27 | openssl_basic.c:167:9:167:27 | | openssl_basic.c:179:43:179:76 | Constant | Description | 01234567890123456789012345678901 | openssl_basic.c:179:43:179:76 | openssl_basic.c:179:43:179:76 | | openssl_basic.c:180:42:180:59 | Constant | Description | 0123456789012345 | openssl_basic.c:180:42:180:59 | openssl_basic.c:180:42:180:59 | | openssl_basic.c:181:49:181:87 | Constant | Description | This is a test message for encryption | openssl_basic.c:181:49:181:87 | openssl_basic.c:181:49:181:87 | | openssl_basic.c:218:32:218:33 | Constant | Description | 32 | openssl_basic.c:218:32:218:33 | openssl_basic.c:218:32:218:33 | +| openssl_basic.c:231:27:231:49 | Constant | Description | Encrypt me with OAEP! | openssl_basic.c:231:27:231:49 | openssl_basic.c:231:27:231:49 | +| openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | Name | RSA | openssl_basic.c:235:51:235:55 | openssl_basic.c:235:51:235:55 | +| openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | RawName | RSA | openssl_basic.c:235:51:235:55 | openssl_basic.c:235:51:235:55 | +| openssl_basic.c:237:54:237:57 | Constant | Description | 2048 | openssl_basic.c:237:54:237:57 | openssl_basic.c:237:54:237:57 | +| openssl_basic.c:238:39:238:43 | Key | KeyType | Asymmetric | openssl_basic.c:238:39:238:43 | openssl_basic.c:238:39:238:43 | +| openssl_basic.c:243:52:243:55 | Key | KeyType | Unknown | openssl_basic.c:243:52:243:55 | openssl_basic.c:243:52:243:55 | +| openssl_basic.c:249:51:249:72 | PaddingAlgorithm | Name | OAEP | openssl_basic.c:249:51:249:72 | openssl_basic.c:249:51:249:72 | +| openssl_basic.c:249:51:249:72 | PaddingAlgorithm | RawName | 4 | openssl_basic.c:249:51:249:72 | openssl_basic.c:249:51:249:72 | +| openssl_basic.c:250:51:250:60 | HashAlgorithm | DigestSize | 256 | openssl_basic.c:250:51:250:60 | openssl_basic.c:250:51:250:60 | +| openssl_basic.c:250:51:250:60 | HashAlgorithm | Name | SHA2 | openssl_basic.c:250:51:250:60 | openssl_basic.c:250:51:250:60 | +| openssl_basic.c:250:51:250:60 | HashAlgorithm | RawName | EVP_sha256 | openssl_basic.c:250:51:250:60 | openssl_basic.c:250:51:250:60 | +| openssl_basic.c:251:51:251:60 | HashAlgorithm | DigestSize | 256 | openssl_basic.c:251:51:251:60 | openssl_basic.c:251:51:251:60 | +| openssl_basic.c:251:51:251:60 | HashAlgorithm | Name | SHA2 | openssl_basic.c:251:51:251:60 | openssl_basic.c:251:51:251:60 | +| openssl_basic.c:251:51:251:60 | HashAlgorithm | RawName | EVP_sha256 | openssl_basic.c:251:51:251:60 | openssl_basic.c:251:51:251:60 | +| openssl_basic.c:262:24:262:39 | EncryptOperation | KeyOperationSubtype | Encrypt | openssl_basic.c:262:24:262:39 | openssl_basic.c:262:24:262:39 | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Name | RSA | openssl_pkey.c:21:10:21:28 | openssl_pkey.c:21:10:21:28 | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | RawName | RSA_generate_key_ex | openssl_pkey.c:21:10:21:28 | openssl_pkey.c:21:10:21:28 | | openssl_pkey.c:21:30:21:32 | Key | KeyType | Asymmetric | openssl_pkey.c:21:30:21:32 | openssl_pkey.c:21:30:21:32 | @@ -43,44 +59,116 @@ | openssl_pkey.c:55:30:55:34 | Key | KeyType | Asymmetric | openssl_pkey.c:55:30:55:34 | openssl_pkey.c:55:30:55:34 | | openssl_pkey.c:60:28:60:31 | Key | KeyType | Unknown | openssl_pkey.c:60:28:60:31 | openssl_pkey.c:60:28:60:31 | | openssl_pkey.c:64:9:64:24 | EncryptOperation | KeyOperationSubtype | Encrypt | openssl_pkey.c:64:9:64:24 | openssl_pkey.c:64:9:64:24 | -| openssl_signature.c:80:9:80:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:80:9:80:21 | openssl_signature.c:80:9:80:21 | -| openssl_signature.c:80:53:80:56 | Key | KeyType | Unknown | openssl_signature.c:80:53:80:56 | openssl_signature.c:80:53:80:56 | -| openssl_signature.c:133:52:133:55 | Key | KeyType | Unknown | openssl_signature.c:133:52:133:55 | openssl_signature.c:133:52:133:55 | -| openssl_signature.c:135:9:135:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:135:9:135:27 | openssl_signature.c:135:9:135:27 | -| openssl_signature.c:142:9:142:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:142:9:142:27 | openssl_signature.c:142:9:142:27 | -| openssl_signature.c:190:57:190:60 | Key | KeyType | Unknown | openssl_signature.c:190:57:190:60 | openssl_signature.c:190:57:190:60 | -| openssl_signature.c:197:9:197:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:197:9:197:27 | openssl_signature.c:197:9:197:27 | -| openssl_signature.c:204:9:204:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:204:9:204:27 | openssl_signature.c:204:9:204:27 | -| openssl_signature.c:260:39:260:42 | Key | KeyType | Unknown | openssl_signature.c:260:39:260:42 | openssl_signature.c:260:39:260:42 | -| openssl_signature.c:263:9:263:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:263:9:263:21 | openssl_signature.c:263:9:263:21 | -| openssl_signature.c:270:9:270:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:270:9:270:21 | openssl_signature.c:270:9:270:21 | -| openssl_signature.c:321:39:321:42 | Key | KeyType | Unknown | openssl_signature.c:321:39:321:42 | openssl_signature.c:321:39:321:42 | -| openssl_signature.c:327:9:327:35 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:327:9:327:35 | openssl_signature.c:327:9:327:35 | -| openssl_signature.c:334:9:334:35 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:334:9:334:35 | openssl_signature.c:334:9:334:35 | -| openssl_signature.c:521:46:521:66 | PaddingAlgorithm | Name | PSS | openssl_signature.c:521:46:521:66 | openssl_signature.c:521:46:521:66 | -| openssl_signature.c:521:46:521:66 | PaddingAlgorithm | RawName | 6 | openssl_signature.c:521:46:521:66 | openssl_signature.c:521:46:521:66 | -| openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:543:35:543:46 | openssl_signature.c:543:35:543:46 | -| openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:543:35:543:46 | openssl_signature.c:543:35:543:46 | -| openssl_signature.c:547:51:547:54 | Constant | Description | 2048 | openssl_signature.c:547:51:547:54 | openssl_signature.c:547:51:547:54 | -| openssl_signature.c:548:34:548:37 | Key | KeyType | Asymmetric | openssl_signature.c:548:34:548:37 | openssl_signature.c:548:34:548:37 | -| openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:565:50:565:54 | openssl_signature.c:565:50:565:54 | -| openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | RawName | dsa | openssl_signature.c:565:50:565:54 | openssl_signature.c:565:50:565:54 | -| openssl_signature.c:569:55:569:58 | Constant | Description | 2048 | openssl_signature.c:569:55:569:58 | openssl_signature.c:569:55:569:58 | -| openssl_signature.c:575:32:575:37 | Key | KeyType | Unknown | openssl_signature.c:575:32:575:37 | openssl_signature.c:575:32:575:37 | -| openssl_signature.c:578:34:578:37 | Key | KeyType | Asymmetric | openssl_signature.c:578:34:578:37 | openssl_signature.c:578:34:578:37 | -| openssl_signature.c:602:37:602:77 | Constant | Description | Test message for OpenSSL signature APIs | openssl_signature.c:602:37:602:77 | openssl_signature.c:602:37:602:77 | -| openssl_signature.c:684:24:684:33 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:684:24:684:33 | openssl_signature.c:684:24:684:33 | -| openssl_signature.c:684:24:684:33 | HashAlgorithm | Name | SHA2 | openssl_signature.c:684:24:684:33 | openssl_signature.c:684:24:684:33 | -| openssl_signature.c:684:24:684:33 | HashAlgorithm | RawName | EVP_sha256 | openssl_signature.c:684:24:684:33 | openssl_signature.c:684:24:684:33 | -| openssl_signature.c:685:37:685:77 | Constant | Description | Test message for OpenSSL signature APIs | openssl_signature.c:685:37:685:77 | openssl_signature.c:685:37:685:77 | -| openssl_signature.c:702:60:702:71 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:702:60:702:71 | openssl_signature.c:702:60:702:71 | -| openssl_signature.c:702:60:702:71 | HashAlgorithm | Name | SHA2 | openssl_signature.c:702:60:702:71 | openssl_signature.c:702:60:702:71 | -| openssl_signature.c:702:60:702:71 | HashAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:702:60:702:71 | openssl_signature.c:702:60:702:71 | -| openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:702:60:702:71 | openssl_signature.c:702:60:702:71 | -| openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:702:60:702:71 | openssl_signature.c:702:60:702:71 | -| openssl_signature.c:740:24:740:33 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:740:24:740:33 | openssl_signature.c:740:24:740:33 | -| openssl_signature.c:740:24:740:33 | HashAlgorithm | Name | SHA2 | openssl_signature.c:740:24:740:33 | openssl_signature.c:740:24:740:33 | -| openssl_signature.c:740:24:740:33 | HashAlgorithm | RawName | EVP_sha256 | openssl_signature.c:740:24:740:33 | openssl_signature.c:740:24:740:33 | -| openssl_signature.c:741:37:741:77 | Constant | Description | Test message for OpenSSL signature APIs | openssl_signature.c:741:37:741:77 | openssl_signature.c:741:37:741:77 | -| openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:758:60:758:64 | openssl_signature.c:758:60:758:64 | -| openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | RawName | dsa | openssl_signature.c:758:60:758:64 | openssl_signature.c:758:60:758:64 | +| openssl_signature.c:73:9:73:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:73:9:73:21 | openssl_signature.c:73:9:73:21 | +| openssl_signature.c:73:53:73:56 | Key | KeyType | Unknown | openssl_signature.c:73:53:73:56 | openssl_signature.c:73:53:73:56 | +| openssl_signature.c:100:9:100:23 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:100:9:100:23 | openssl_signature.c:100:9:100:23 | +| openssl_signature.c:100:73:100:76 | Key | KeyType | Unknown | openssl_signature.c:100:73:100:76 | openssl_signature.c:100:73:100:76 | +| openssl_signature.c:126:52:126:55 | Key | KeyType | Unknown | openssl_signature.c:126:52:126:55 | openssl_signature.c:126:52:126:55 | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | KeyOperationSubtype | Mac | openssl_signature.c:135:9:135:27 | openssl_signature.c:135:9:135:27 | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | KeyOperationSubtype | Sign | openssl_signature.c:135:9:135:27 | openssl_signature.c:135:9:135:27 | +| openssl_signature.c:158:54:158:57 | Key | KeyType | Unknown | openssl_signature.c:158:54:158:57 | openssl_signature.c:158:54:158:57 | +| openssl_signature.c:160:9:160:29 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:160:9:160:29 | openssl_signature.c:160:9:160:29 | +| openssl_signature.c:182:57:182:60 | Key | KeyType | Unknown | openssl_signature.c:182:57:182:60 | openssl_signature.c:182:57:182:60 | +| openssl_signature.c:185:44:185:64 | PaddingAlgorithm | Name | PSS | openssl_signature.c:185:44:185:64 | openssl_signature.c:185:44:185:64 | +| openssl_signature.c:185:44:185:64 | PaddingAlgorithm | RawName | 6 | openssl_signature.c:185:44:185:64 | openssl_signature.c:185:44:185:64 | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | KeyOperationSubtype | Mac | openssl_signature.c:195:9:195:27 | openssl_signature.c:195:9:195:27 | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | KeyOperationSubtype | Sign | openssl_signature.c:195:9:195:27 | openssl_signature.c:195:9:195:27 | +| openssl_signature.c:218:59:218:62 | Key | KeyType | Unknown | openssl_signature.c:218:59:218:62 | openssl_signature.c:218:59:218:62 | +| openssl_signature.c:222:44:222:64 | PaddingAlgorithm | Name | PSS | openssl_signature.c:222:44:222:64 | openssl_signature.c:222:44:222:64 | +| openssl_signature.c:222:44:222:64 | PaddingAlgorithm | RawName | 6 | openssl_signature.c:222:44:222:64 | openssl_signature.c:222:44:222:64 | +| openssl_signature.c:225:9:225:29 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:225:9:225:29 | openssl_signature.c:225:9:225:29 | +| openssl_signature.c:250:39:250:42 | Key | KeyType | Unknown | openssl_signature.c:250:39:250:42 | openssl_signature.c:250:39:250:42 | +| openssl_signature.c:260:9:260:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:260:9:260:21 | openssl_signature.c:260:9:260:21 | +| openssl_signature.c:282:39:282:42 | Key | KeyType | Unknown | openssl_signature.c:282:39:282:42 | openssl_signature.c:282:39:282:42 | +| openssl_signature.c:285:9:285:23 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:285:9:285:23 | openssl_signature.c:285:9:285:23 | +| openssl_signature.c:311:39:311:42 | Key | KeyType | Unknown | openssl_signature.c:311:39:311:42 | openssl_signature.c:311:39:311:42 | +| openssl_signature.c:324:9:324:35 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:324:9:324:35 | openssl_signature.c:324:9:324:35 | +| openssl_signature.c:347:39:347:42 | Key | KeyType | Unknown | openssl_signature.c:347:39:347:42 | openssl_signature.c:347:39:347:42 | +| openssl_signature.c:356:9:356:37 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:356:9:356:37 | openssl_signature.c:356:9:356:37 | +| openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:384:9:384:16 | openssl_signature.c:384:9:384:16 | +| openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | RawName | RSA_sign | openssl_signature.c:384:9:384:16 | openssl_signature.c:384:9:384:16 | +| openssl_signature.c:384:9:384:16 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:384:9:384:16 | openssl_signature.c:384:9:384:16 | +| openssl_signature.c:385:48:385:54 | Key | KeyType | Unknown | openssl_signature.c:385:48:385:54 | openssl_signature.c:385:48:385:54 | +| openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:403:12:403:21 | openssl_signature.c:403:12:403:21 | +| openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | RawName | RSA_verify | openssl_signature.c:403:12:403:21 | openssl_signature.c:403:12:403:21 | +| openssl_signature.c:403:12:403:21 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:403:12:403:21 | openssl_signature.c:403:12:403:21 | +| openssl_signature.c:404:51:404:57 | Key | KeyType | Unknown | openssl_signature.c:404:51:404:57 | openssl_signature.c:404:51:404:57 | +| openssl_signature.c:428:11:428:21 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:428:11:428:21 | openssl_signature.c:428:11:428:21 | +| openssl_signature.c:428:11:428:21 | KeyOperationAlgorithm | RawName | DSA_do_sign | openssl_signature.c:428:11:428:21 | openssl_signature.c:428:11:428:21 | +| openssl_signature.c:428:11:428:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:428:11:428:21 | openssl_signature.c:428:11:428:21 | +| openssl_signature.c:428:43:428:49 | Key | KeyType | Unknown | openssl_signature.c:428:43:428:49 | openssl_signature.c:428:43:428:49 | +| openssl_signature.c:484:15:484:27 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:484:15:484:27 | openssl_signature.c:484:15:484:27 | +| openssl_signature.c:484:15:484:27 | KeyOperationAlgorithm | RawName | DSA_do_verify | openssl_signature.c:484:15:484:27 | openssl_signature.c:484:15:484:27 | +| openssl_signature.c:484:15:484:27 | VerifyOperation | KeyOperationSubtype | Verify | openssl_signature.c:484:15:484:27 | openssl_signature.c:484:15:484:27 | +| openssl_signature.c:484:54:484:60 | Key | KeyType | Unknown | openssl_signature.c:484:54:484:60 | openssl_signature.c:484:54:484:60 | +| openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:511:35:511:46 | openssl_signature.c:511:35:511:46 | +| openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:511:35:511:46 | openssl_signature.c:511:35:511:46 | +| openssl_signature.c:515:51:515:54 | Constant | Description | 2048 | openssl_signature.c:515:51:515:54 | openssl_signature.c:515:51:515:54 | +| openssl_signature.c:516:34:516:37 | Key | KeyType | Asymmetric | openssl_signature.c:516:34:516:37 | openssl_signature.c:516:34:516:37 | +| openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:533:50:533:54 | openssl_signature.c:533:50:533:54 | +| openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | RawName | dsa | openssl_signature.c:533:50:533:54 | openssl_signature.c:533:50:533:54 | +| openssl_signature.c:537:55:537:58 | Constant | Description | 2048 | openssl_signature.c:537:55:537:58 | openssl_signature.c:537:55:537:58 | +| openssl_signature.c:543:32:543:37 | Key | KeyType | Unknown | openssl_signature.c:543:32:543:37 | openssl_signature.c:543:32:543:37 | +| openssl_signature.c:546:34:546:37 | Key | KeyType | Asymmetric | openssl_signature.c:546:34:546:37 | openssl_signature.c:546:34:546:37 | +| openssl_signature.c:566:37:566:74 | Constant | Description | testLowLevelRSASignAndVerify message | openssl_signature.c:566:37:566:74 | openssl_signature.c:566:37:566:74 | +| openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:574:35:574:46 | openssl_signature.c:574:35:574:46 | +| openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:574:35:574:46 | openssl_signature.c:574:35:574:46 | +| openssl_signature.c:578:51:578:54 | Constant | Description | 2048 | openssl_signature.c:578:51:578:54 | openssl_signature.c:578:51:578:54 | +| openssl_signature.c:579:34:579:37 | Key | KeyType | Asymmetric | openssl_signature.c:579:34:579:37 | openssl_signature.c:579:34:579:37 | +| openssl_signature.c:595:37:595:46 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:595:37:595:46 | openssl_signature.c:595:37:595:46 | +| openssl_signature.c:595:37:595:46 | HashAlgorithm | Name | SHA2 | openssl_signature.c:595:37:595:46 | openssl_signature.c:595:37:595:46 | +| openssl_signature.c:595:37:595:46 | HashAlgorithm | RawName | 672 | openssl_signature.c:595:37:595:46 | openssl_signature.c:595:37:595:46 | +| openssl_signature.c:597:41:597:50 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:597:41:597:50 | openssl_signature.c:597:41:597:50 | +| openssl_signature.c:597:41:597:50 | HashAlgorithm | Name | SHA2 | openssl_signature.c:597:41:597:50 | openssl_signature.c:597:41:597:50 | +| openssl_signature.c:597:41:597:50 | HashAlgorithm | RawName | 672 | openssl_signature.c:597:41:597:50 | openssl_signature.c:597:41:597:50 | +| openssl_signature.c:615:37:615:74 | Constant | Description | testLowLevelDSASignAndVerify message | openssl_signature.c:615:37:615:74 | openssl_signature.c:615:37:615:74 | +| openssl_signature.c:616:24:616:33 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:616:24:616:33 | openssl_signature.c:616:24:616:33 | +| openssl_signature.c:616:24:616:33 | HashAlgorithm | Name | SHA2 | openssl_signature.c:616:24:616:33 | openssl_signature.c:616:24:616:33 | +| openssl_signature.c:616:24:616:33 | HashAlgorithm | RawName | EVP_sha256 | openssl_signature.c:616:24:616:33 | openssl_signature.c:616:24:616:33 | +| openssl_signature.c:651:37:651:61 | Constant | Description | testEVP_SignAPI message | openssl_signature.c:651:37:651:61 | openssl_signature.c:651:37:651:61 | +| openssl_signature.c:652:24:652:33 | HashAlgorithm | DigestSize | 224 | openssl_signature.c:652:24:652:33 | openssl_signature.c:652:24:652:33 | +| openssl_signature.c:652:24:652:33 | HashAlgorithm | Name | SHA2 | openssl_signature.c:652:24:652:33 | openssl_signature.c:652:24:652:33 | +| openssl_signature.c:652:24:652:33 | HashAlgorithm | RawName | EVP_sha224 | openssl_signature.c:652:24:652:33 | openssl_signature.c:652:24:652:33 | +| openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:661:35:661:46 | openssl_signature.c:661:35:661:46 | +| openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:661:35:661:46 | openssl_signature.c:661:35:661:46 | +| openssl_signature.c:665:51:665:54 | Constant | Description | 2048 | openssl_signature.c:665:51:665:54 | openssl_signature.c:665:51:665:54 | +| openssl_signature.c:666:34:666:37 | Key | KeyType | Asymmetric | openssl_signature.c:666:34:666:37 | openssl_signature.c:666:34:666:37 | +| openssl_signature.c:692:37:692:67 | Constant | Description | testEVP_DigestSignAPI message | openssl_signature.c:692:37:692:67 | openssl_signature.c:692:37:692:67 | +| openssl_signature.c:693:24:693:33 | HashAlgorithm | DigestSize | 224 | openssl_signature.c:693:24:693:33 | openssl_signature.c:693:24:693:33 | +| openssl_signature.c:693:24:693:33 | HashAlgorithm | Name | SHA2 | openssl_signature.c:693:24:693:33 | openssl_signature.c:693:24:693:33 | +| openssl_signature.c:693:24:693:33 | HashAlgorithm | RawName | EVP_sha224 | openssl_signature.c:693:24:693:33 | openssl_signature.c:693:24:693:33 | +| openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:702:35:702:46 | openssl_signature.c:702:35:702:46 | +| openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:702:35:702:46 | openssl_signature.c:702:35:702:46 | +| openssl_signature.c:706:51:706:54 | Constant | Description | 2048 | openssl_signature.c:706:51:706:54 | openssl_signature.c:706:51:706:54 | +| openssl_signature.c:707:34:707:37 | Key | KeyType | Asymmetric | openssl_signature.c:707:34:707:37 | openssl_signature.c:707:34:707:37 | +| openssl_signature.c:732:37:732:66 | Constant | Description | testEVP_PKEY_signAPI message | openssl_signature.c:732:37:732:66 | openssl_signature.c:732:37:732:66 | +| openssl_signature.c:733:24:733:31 | HashAlgorithm | DigestSize | 160 | openssl_signature.c:733:24:733:31 | openssl_signature.c:733:24:733:31 | +| openssl_signature.c:733:24:733:31 | HashAlgorithm | Name | SHA1 | openssl_signature.c:733:24:733:31 | openssl_signature.c:733:24:733:31 | +| openssl_signature.c:733:24:733:31 | HashAlgorithm | RawName | EVP_sha1 | openssl_signature.c:733:24:733:31 | openssl_signature.c:733:24:733:31 | +| openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:746:35:746:46 | openssl_signature.c:746:35:746:46 | +| openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:746:35:746:46 | openssl_signature.c:746:35:746:46 | +| openssl_signature.c:750:51:750:54 | Constant | Description | 2048 | openssl_signature.c:750:51:750:54 | openssl_signature.c:750:51:750:54 | +| openssl_signature.c:751:34:751:37 | Key | KeyType | Asymmetric | openssl_signature.c:751:34:751:37 | openssl_signature.c:751:34:751:37 | +| openssl_signature.c:777:37:777:73 | Constant | Description | testEVP_DigestSign_with_ctx message | openssl_signature.c:777:37:777:73 | openssl_signature.c:777:37:777:73 | +| openssl_signature.c:778:24:778:31 | HashAlgorithm | DigestSize | 160 | openssl_signature.c:778:24:778:31 | openssl_signature.c:778:24:778:31 | +| openssl_signature.c:778:24:778:31 | HashAlgorithm | Name | SHA1 | openssl_signature.c:778:24:778:31 | openssl_signature.c:778:24:778:31 | +| openssl_signature.c:778:24:778:31 | HashAlgorithm | RawName | EVP_sha1 | openssl_signature.c:778:24:778:31 | openssl_signature.c:778:24:778:31 | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:786:35:786:46 | openssl_signature.c:786:35:786:46 | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:786:35:786:46 | openssl_signature.c:786:35:786:46 | +| openssl_signature.c:790:51:790:54 | Constant | Description | 2048 | openssl_signature.c:790:51:790:54 | openssl_signature.c:790:51:790:54 | +| openssl_signature.c:791:34:791:37 | Key | KeyType | Asymmetric | openssl_signature.c:791:34:791:37 | openssl_signature.c:791:34:791:37 | +| openssl_signature.c:817:37:817:63 | Constant | Description | testEVP_PKEY_sign_message | openssl_signature.c:817:37:817:63 | openssl_signature.c:817:37:817:63 | +| openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:824:35:824:46 | openssl_signature.c:824:35:824:46 | +| openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | RawName | 6 | openssl_signature.c:824:35:824:46 | openssl_signature.c:824:35:824:46 | +| openssl_signature.c:828:51:828:54 | Constant | Description | 2048 | openssl_signature.c:828:51:828:54 | openssl_signature.c:828:51:828:54 | +| openssl_signature.c:829:34:829:37 | Key | KeyType | Asymmetric | openssl_signature.c:829:34:829:37 | openssl_signature.c:829:34:829:37 | +| openssl_signature.c:838:85:838:96 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:838:85:838:96 | openssl_signature.c:838:85:838:96 | +| openssl_signature.c:838:85:838:96 | HashAlgorithm | Name | SHA2 | openssl_signature.c:838:85:838:96 | openssl_signature.c:838:85:838:96 | +| openssl_signature.c:838:85:838:96 | HashAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:838:85:838:96 | openssl_signature.c:838:85:838:96 | +| openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:838:85:838:96 | openssl_signature.c:838:85:838:96 | +| openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:838:85:838:96 | openssl_signature.c:838:85:838:96 | +| openssl_signature.c:839:87:839:98 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:839:87:839:98 | openssl_signature.c:839:87:839:98 | +| openssl_signature.c:839:87:839:98 | HashAlgorithm | Name | SHA2 | openssl_signature.c:839:87:839:98 | openssl_signature.c:839:87:839:98 | +| openssl_signature.c:839:87:839:98 | HashAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:839:87:839:98 | openssl_signature.c:839:87:839:98 | +| openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | Name | RSA | openssl_signature.c:839:87:839:98 | openssl_signature.c:839:87:839:98 | +| openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | RawName | RSA-SHA256 | openssl_signature.c:839:87:839:98 | openssl_signature.c:839:87:839:98 | diff --git a/cpp/ql/test/experimental/library-tests/quantum/nodes.expected b/cpp/ql/test/experimental/library-tests/quantum/nodes.expected index 223f7bfca6c..62877e56182 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/nodes.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/nodes.expected @@ -24,17 +24,29 @@ | openssl_basic.c:144:67:144:73 | HashAlgorithm | | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:155:22:155:41 | KeyGeneration | -| openssl_basic.c:155:43:155:55 | MACAlgorithm | +| openssl_basic.c:155:43:155:55 | HMACAlgorithm | | openssl_basic.c:155:64:155:66 | Key | | openssl_basic.c:160:39:160:48 | HashAlgorithm | | openssl_basic.c:160:59:160:62 | Key | | openssl_basic.c:163:35:163:41 | Message | -| openssl_basic.c:167:9:167:27 | SignOperation | +| openssl_basic.c:167:9:167:27 | SignatureOrMACOperation | | openssl_basic.c:167:34:167:36 | SignatureOutput | | openssl_basic.c:179:43:179:76 | Constant | | openssl_basic.c:180:42:180:59 | Constant | | openssl_basic.c:181:49:181:87 | Constant | | openssl_basic.c:218:32:218:33 | Constant | +| openssl_basic.c:231:27:231:49 | Constant | +| openssl_basic.c:235:51:235:55 | KeyOperationAlgorithm | +| openssl_basic.c:237:54:237:57 | Constant | +| openssl_basic.c:238:9:238:25 | KeyGeneration | +| openssl_basic.c:238:39:238:43 | Key | +| openssl_basic.c:243:52:243:55 | Key | +| openssl_basic.c:249:51:249:72 | PaddingAlgorithm | +| openssl_basic.c:250:51:250:60 | HashAlgorithm | +| openssl_basic.c:251:51:251:60 | HashAlgorithm | +| openssl_basic.c:262:24:262:39 | EncryptOperation | +| openssl_basic.c:262:54:262:63 | KeyOperationOutput | +| openssl_basic.c:263:64:263:70 | Message | | openssl_pkey.c:21:10:21:28 | KeyGeneration | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | | openssl_pkey.c:21:30:21:32 | Key | @@ -47,54 +59,121 @@ | openssl_pkey.c:64:9:64:24 | EncryptOperation | | openssl_pkey.c:64:31:64:39 | KeyOperationOutput | | openssl_pkey.c:64:58:64:66 | Message | -| openssl_signature.c:22:34:22:40 | Message | -| openssl_signature.c:23:9:23:26 | HashOperation | -| openssl_signature.c:23:36:23:41 | Digest | -| openssl_signature.c:70:32:70:38 | Message | -| openssl_signature.c:75:28:75:36 | Message | -| openssl_signature.c:80:9:80:21 | SignOperation | -| openssl_signature.c:80:31:80:40 | SignatureOutput | -| openssl_signature.c:80:53:80:56 | Key | -| openssl_signature.c:133:52:133:55 | Key | -| openssl_signature.c:134:38:134:44 | Message | -| openssl_signature.c:135:9:135:27 | SignOperation | -| openssl_signature.c:135:37:135:40 | SignatureOutput | -| openssl_signature.c:142:9:142:27 | SignOperation | -| openssl_signature.c:142:37:142:46 | SignatureOutput | -| openssl_signature.c:190:57:190:60 | Key | -| openssl_signature.c:196:38:196:44 | Message | -| openssl_signature.c:197:9:197:27 | SignOperation | -| openssl_signature.c:197:37:197:40 | SignatureOutput | -| openssl_signature.c:204:9:204:27 | SignOperation | -| openssl_signature.c:204:37:204:46 | SignatureOutput | -| openssl_signature.c:260:39:260:42 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | -| openssl_signature.c:263:33:263:36 | SignatureOutput | -| openssl_signature.c:263:54:263:59 | Message | -| openssl_signature.c:270:9:270:21 | SignOperation | -| openssl_signature.c:270:33:270:42 | SignatureOutput | -| openssl_signature.c:270:60:270:65 | Message | -| openssl_signature.c:321:39:321:42 | Key | -| openssl_signature.c:326:48:326:54 | Message | -| openssl_signature.c:327:9:327:35 | SignOperation | -| openssl_signature.c:327:47:327:50 | SignatureOutput | -| openssl_signature.c:334:9:334:35 | SignOperation | -| openssl_signature.c:334:47:334:56 | SignatureOutput | -| openssl_signature.c:521:46:521:66 | PaddingAlgorithm | -| openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:547:51:547:54 | Constant | -| openssl_signature.c:548:9:548:23 | KeyGeneration | -| openssl_signature.c:548:34:548:37 | Key | -| openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:569:55:569:58 | Constant | -| openssl_signature.c:575:32:575:37 | Key | -| openssl_signature.c:578:9:578:23 | KeyGeneration | -| openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:685:37:685:77 | Constant | -| openssl_signature.c:702:60:702:71 | HashAlgorithm | -| openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | -| openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:741:37:741:77 | Constant | -| openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | +| openssl_signature.c:25:34:25:40 | Message | +| openssl_signature.c:26:9:26:26 | HashOperation | +| openssl_signature.c:26:36:26:41 | Digest | +| openssl_signature.c:63:32:63:38 | Message | +| openssl_signature.c:68:28:68:36 | Message | +| openssl_signature.c:73:9:73:21 | SignOperation | +| openssl_signature.c:73:31:73:40 | SignatureOutput | +| openssl_signature.c:73:53:73:56 | Key | +| openssl_signature.c:98:34:98:40 | Message | +| openssl_signature.c:99:34:99:42 | Message | +| openssl_signature.c:100:9:100:23 | VerifyOperation | +| openssl_signature.c:100:33:100:41 | SignatureInput | +| openssl_signature.c:100:73:100:76 | Key | +| openssl_signature.c:126:52:126:55 | Key | +| openssl_signature.c:127:38:127:44 | Message | +| openssl_signature.c:135:9:135:27 | SignatureOrMACOperation | +| openssl_signature.c:135:37:135:46 | SignatureOutput | +| openssl_signature.c:158:54:158:57 | Key | +| openssl_signature.c:159:40:159:46 | Message | +| openssl_signature.c:160:9:160:29 | VerifyOperation | +| openssl_signature.c:160:39:160:47 | SignatureInput | +| openssl_signature.c:182:57:182:60 | Key | +| openssl_signature.c:185:44:185:64 | PaddingAlgorithm | +| openssl_signature.c:187:38:187:44 | Message | +| openssl_signature.c:195:9:195:27 | SignatureOrMACOperation | +| openssl_signature.c:195:37:195:46 | SignatureOutput | +| openssl_signature.c:218:59:218:62 | Key | +| openssl_signature.c:222:44:222:64 | PaddingAlgorithm | +| openssl_signature.c:224:40:224:46 | Message | +| openssl_signature.c:225:9:225:29 | VerifyOperation | +| openssl_signature.c:225:39:225:47 | SignatureInput | +| openssl_signature.c:250:39:250:42 | Key | +| openssl_signature.c:260:9:260:21 | SignOperation | +| openssl_signature.c:260:33:260:42 | SignatureOutput | +| openssl_signature.c:260:60:260:65 | Message | +| openssl_signature.c:282:39:282:42 | Key | +| openssl_signature.c:285:9:285:23 | VerifyOperation | +| openssl_signature.c:285:35:285:43 | SignatureInput | +| openssl_signature.c:285:61:285:66 | Message | +| openssl_signature.c:311:39:311:42 | Key | +| openssl_signature.c:316:48:316:54 | Message | +| openssl_signature.c:324:9:324:35 | SignOperation | +| openssl_signature.c:324:47:324:56 | SignatureOutput | +| openssl_signature.c:347:39:347:42 | Key | +| openssl_signature.c:353:42:353:50 | SignatureInput | +| openssl_signature.c:355:50:355:56 | Message | +| openssl_signature.c:356:9:356:37 | VerifyOperation | +| openssl_signature.c:384:9:384:16 | KeyOperationAlgorithm | +| openssl_signature.c:384:9:384:16 | SignOperation | +| openssl_signature.c:384:28:384:34 | Message | +| openssl_signature.c:384:50:384:59 | SignatureOutput | +| openssl_signature.c:385:48:385:54 | Key | +| openssl_signature.c:403:12:403:21 | KeyOperationAlgorithm | +| openssl_signature.c:403:12:403:21 | VerifyOperation | +| openssl_signature.c:403:33:403:39 | Message | +| openssl_signature.c:403:55:403:63 | SignatureInput | +| openssl_signature.c:404:51:404:57 | Key | +| openssl_signature.c:428:11:428:21 | KeyOperationAlgorithm | +| openssl_signature.c:428:11:428:21 | SignOperation | +| openssl_signature.c:428:11:428:21 | SignatureOutput | +| openssl_signature.c:428:23:428:28 | Message | +| openssl_signature.c:428:43:428:49 | Key | +| openssl_signature.c:484:15:484:27 | KeyOperationAlgorithm | +| openssl_signature.c:484:15:484:27 | VerifyOperation | +| openssl_signature.c:484:29:484:34 | Message | +| openssl_signature.c:484:49:484:51 | SignatureInput | +| openssl_signature.c:484:54:484:60 | Key | +| openssl_signature.c:511:35:511:46 | KeyOperationAlgorithm | +| openssl_signature.c:515:51:515:54 | Constant | +| openssl_signature.c:516:9:516:23 | KeyGeneration | +| openssl_signature.c:516:34:516:37 | Key | +| openssl_signature.c:533:50:533:54 | KeyOperationAlgorithm | +| openssl_signature.c:537:55:537:58 | Constant | +| openssl_signature.c:543:32:543:37 | Key | +| openssl_signature.c:546:9:546:23 | KeyGeneration | +| openssl_signature.c:546:34:546:37 | Key | +| openssl_signature.c:566:37:566:74 | Constant | +| openssl_signature.c:574:35:574:46 | KeyOperationAlgorithm | +| openssl_signature.c:578:51:578:54 | Constant | +| openssl_signature.c:579:9:579:23 | KeyGeneration | +| openssl_signature.c:579:34:579:37 | Key | +| openssl_signature.c:595:37:595:46 | HashAlgorithm | +| openssl_signature.c:597:41:597:50 | HashAlgorithm | +| openssl_signature.c:615:37:615:74 | Constant | +| openssl_signature.c:616:24:616:33 | HashAlgorithm | +| openssl_signature.c:651:37:651:61 | Constant | +| openssl_signature.c:652:24:652:33 | HashAlgorithm | +| openssl_signature.c:661:35:661:46 | KeyOperationAlgorithm | +| openssl_signature.c:665:51:665:54 | Constant | +| openssl_signature.c:666:9:666:23 | KeyGeneration | +| openssl_signature.c:666:34:666:37 | Key | +| openssl_signature.c:692:37:692:67 | Constant | +| openssl_signature.c:693:24:693:33 | HashAlgorithm | +| openssl_signature.c:702:35:702:46 | KeyOperationAlgorithm | +| openssl_signature.c:706:51:706:54 | Constant | +| openssl_signature.c:707:9:707:23 | KeyGeneration | +| openssl_signature.c:707:34:707:37 | Key | +| openssl_signature.c:732:37:732:66 | Constant | +| openssl_signature.c:733:24:733:31 | HashAlgorithm | +| openssl_signature.c:746:35:746:46 | KeyOperationAlgorithm | +| openssl_signature.c:750:51:750:54 | Constant | +| openssl_signature.c:751:9:751:23 | KeyGeneration | +| openssl_signature.c:751:34:751:37 | Key | +| openssl_signature.c:777:37:777:73 | Constant | +| openssl_signature.c:778:24:778:31 | HashAlgorithm | +| openssl_signature.c:786:35:786:46 | KeyOperationAlgorithm | +| openssl_signature.c:790:51:790:54 | Constant | +| openssl_signature.c:791:9:791:23 | KeyGeneration | +| openssl_signature.c:791:34:791:37 | Key | +| openssl_signature.c:817:37:817:63 | Constant | +| openssl_signature.c:824:35:824:46 | KeyOperationAlgorithm | +| openssl_signature.c:828:51:828:54 | Constant | +| openssl_signature.c:829:9:829:23 | KeyGeneration | +| openssl_signature.c:829:34:829:37 | Key | +| openssl_signature.c:838:85:838:96 | HashAlgorithm | +| openssl_signature.c:838:85:838:96 | KeyOperationAlgorithm | +| openssl_signature.c:839:87:839:98 | HashAlgorithm | +| openssl_signature.c:839:87:839:98 | KeyOperationAlgorithm | diff --git a/cpp/ql/test/experimental/library-tests/quantum/openssl_basic.c b/cpp/ql/test/experimental/library-tests/quantum/openssl_basic.c index f1ffbfa24d3..04504070ddd 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/openssl_basic.c +++ b/cpp/ql/test/experimental/library-tests/quantum/openssl_basic.c @@ -1,7 +1,7 @@ #include "openssl/evp.h" #include "openssl/obj_mac.h" #include "openssl/rand.h" - +#include "openssl/rsa.h" size_t strlen(const char* str); // Sample OpenSSL code that demonstrates various cryptographic operations @@ -218,4 +218,58 @@ int test_main() { calculate_hmac_sha256(key, 32, plaintext, plaintext_len, hmac); return 0; -} \ No newline at end of file +} + +/** + * Simplified signature test + */ +int test_rsa_oaep_basic(void) { + EVP_PKEY_CTX *keygen_ctx = NULL, *encrypt_ctx = NULL; + EVP_PKEY *pkey = NULL; + unsigned char *ciphertext = NULL; + size_t ciphertext_len = 0; + const char *message = "Encrypt me with OAEP!"; + int ret = 1; + + // Generate RSA key + keygen_ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL); + if (!keygen_ctx || EVP_PKEY_keygen_init(keygen_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(keygen_ctx, 2048) <= 0 || + EVP_PKEY_generate(keygen_ctx, &pkey) <= 0) { + goto cleanup; + } + + // Create encryption context + encrypt_ctx = EVP_PKEY_CTX_new_from_pkey(NULL, pkey, NULL); + if (!encrypt_ctx || EVP_PKEY_encrypt_init(encrypt_ctx) <= 0) { + goto cleanup; + } + + // Set OAEP padding + if (EVP_PKEY_CTX_set_rsa_padding(encrypt_ctx, RSA_PKCS1_OAEP_PADDING) <= 0 || + EVP_PKEY_CTX_set_rsa_oaep_md(encrypt_ctx, EVP_sha256()) <= 0 || + EVP_PKEY_CTX_set_rsa_mgf1_md(encrypt_ctx, EVP_sha256()) <= 0) { + goto cleanup; + } + + // Determine buffer size + if (EVP_PKEY_encrypt(encrypt_ctx, NULL, &ciphertext_len, + (const unsigned char *)message, strlen(message)) <= 0) { + goto cleanup; + } + + ciphertext = OPENSSL_malloc(ciphertext_len); + if (!ciphertext || EVP_PKEY_encrypt(encrypt_ctx, ciphertext, &ciphertext_len, + (const unsigned char *)message, strlen(message)) <= 0) { + goto cleanup; + } + + ret = 0; + +cleanup: + EVP_PKEY_CTX_free(keygen_ctx); + EVP_PKEY_CTX_free(encrypt_ctx); + EVP_PKEY_free(pkey); + OPENSSL_free(ciphertext); + return ret; +} \ No newline at end of file diff --git a/cpp/ql/test/experimental/library-tests/quantum/openssl_signature.c b/cpp/ql/test/experimental/library-tests/quantum/openssl_signature.c index f8be7441642..6d72c5366dd 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/openssl_signature.c +++ b/cpp/ql/test/experimental/library-tests/quantum/openssl_signature.c @@ -4,6 +4,9 @@ #include #include + + + /* ============================================================================= * UTILITY FUNCTIONS - Common operations shared across signature APIs * ============================================================================= @@ -38,16 +41,6 @@ static unsigned char* allocate_signature_buffer(size_t *sig_len, const EVP_PKEY return OPENSSL_malloc(*sig_len); } -/** - * Helper to extract key from EVP_PKEY - */ -static RSA* get_rsa_from_pkey(EVP_PKEY *pkey) { - return EVP_PKEY_get1_RSA(pkey); -} - -static DSA* get_dsa_from_pkey(EVP_PKEY *pkey) { - return EVP_PKEY_get1_DSA(pkey); -} /* ============================================================================= * EVP_SIGN/VERIFY API - Legacy high-level API (older, simpler) @@ -180,8 +173,7 @@ cleanup: */ int sign_using_digestsign_with_ctx(const unsigned char *message, size_t message_len, unsigned char **signature, size_t *signature_len, - EVP_PKEY *pkey, const EVP_MD *md, - int (*param_setter)(EVP_PKEY_CTX *ctx)) { + EVP_PKEY *pkey, const EVP_MD *md) { EVP_MD_CTX *md_ctx = NULL; EVP_PKEY_CTX *pkey_ctx = NULL; int ret = 0; @@ -190,8 +182,7 @@ int sign_using_digestsign_with_ctx(const unsigned char *message, size_t message_ EVP_DigestSignInit(md_ctx, &pkey_ctx, md, NULL, pkey) != 1) { goto cleanup; } - - if (param_setter && param_setter(pkey_ctx) != 1) goto cleanup; + EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING); if (EVP_DigestSignUpdate(md_ctx, message, message_len) != 1 || EVP_DigestSignFinal(md_ctx, NULL, signature_len) != 1) { @@ -218,8 +209,7 @@ cleanup: */ int verify_using_digestverify_with_ctx(const unsigned char *message, size_t message_len, const unsigned char *signature, size_t signature_len, - EVP_PKEY *pkey, const EVP_MD *md, - int (*param_setter)(EVP_PKEY_CTX *ctx)) { + EVP_PKEY *pkey, const EVP_MD *md) { EVP_MD_CTX *md_ctx = NULL; EVP_PKEY_CTX *pkey_ctx = NULL; int ret = 0; @@ -228,9 +218,9 @@ int verify_using_digestverify_with_ctx(const unsigned char *message, size_t mess EVP_DigestVerifyInit(md_ctx, &pkey_ctx, md, NULL, pkey) != 1) { goto cleanup; } - - if (param_setter && param_setter(pkey_ctx) != 1) goto cleanup; - + + EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING); + if (EVP_DigestVerifyUpdate(md_ctx, message, message_len) != 1 || EVP_DigestVerifyFinal(md_ctx, signature, signature_len) != 1) { goto cleanup; @@ -313,7 +303,7 @@ cleanup: */ int sign_using_evp_pkey_sign_message(const unsigned char *message, size_t message_len, unsigned char **signature, size_t *signature_len, - EVP_PKEY *pkey, const EVP_MD *md, const char *alg_name) { + EVP_PKEY *pkey, const char *alg_name) { EVP_PKEY_CTX *pkey_ctx = NULL; EVP_SIGNATURE *alg = NULL; int ret = 0; @@ -349,7 +339,7 @@ cleanup: */ int verify_using_evp_pkey_verify_message(const unsigned char *message, size_t message_len, const unsigned char *signature, size_t signature_len, - EVP_PKEY *pkey, const EVP_MD *md, const char *alg_name) { + EVP_PKEY *pkey, const char *alg_name) { EVP_PKEY_CTX *pkey_ctx = NULL; EVP_SIGNATURE *alg = NULL; int ret = 0; @@ -373,10 +363,10 @@ cleanup: return ret; } -/* ============================================================================= - * LOW-LEVEL RSA API - Algorithm-specific functions (deprecated) - * ============================================================================= - */ +// /* ============================================================================= +// * LOW-LEVEL RSA API - Algorithm-specific functions (deprecated) +// * ============================================================================= +// */ /** * Sign using low-level RSA_sign API (deprecated, RSA-only) @@ -384,18 +374,14 @@ cleanup: */ int sign_using_rsa_sign(const unsigned char *message, size_t message_len, unsigned char **signature, size_t *signature_len, - RSA *rsa_key, int hash_nid, const EVP_MD *md) { - unsigned char digest[EVP_MAX_MD_SIZE]; - unsigned int digest_len; + RSA *rsa_key, int hash_nid) { int ret = 0; - if (!create_digest(message, message_len, md, digest, &digest_len)) return 0; - *signature_len = RSA_size(rsa_key); *signature = OPENSSL_malloc(*signature_len); if (!*signature) return 0; - - if (RSA_sign(hash_nid, digest, digest_len, *signature, + + if (RSA_sign(hash_nid, message, message_len, *signature, (unsigned int*)signature_len, rsa_key) == 1) { ret = 1; } else { @@ -412,20 +398,16 @@ int sign_using_rsa_sign(const unsigned char *message, size_t message_len, */ int verify_using_rsa_verify(const unsigned char *message, size_t message_len, const unsigned char *signature, size_t signature_len, - RSA *rsa_key, int hash_nid, const EVP_MD *md) { - unsigned char digest[EVP_MAX_MD_SIZE]; - unsigned int digest_len; - - if (!create_digest(message, message_len, md, digest, &digest_len)) return 0; - - return RSA_verify(hash_nid, digest, digest_len, signature, + RSA *rsa_key, int hash_nid) { + + return RSA_verify(hash_nid, message, message_len, signature, (unsigned int)signature_len, rsa_key); } -/* ============================================================================= - * LOW-LEVEL DSA API - Algorithm-specific functions (deprecated) - * ============================================================================= - */ +// /* ============================================================================= +// * LOW-LEVEL DSA API - Algorithm-specific functions (deprecated) +// * ============================================================================= +// */ /** * Sign using low-level DSA_do_sign API (deprecated, DSA-only) @@ -514,20 +496,6 @@ cleanup: * ============================================================================= */ -/** - * Set RSA PSS padding mode - */ -int set_rsa_pss_padding(EVP_PKEY_CTX *ctx) { - return EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING); -} - -/** - * No-op parameter setter for default behavior - */ -int no_parameter_setter(EVP_PKEY_CTX *ctx) { - return 1; -} - /* ============================================================================= * KEY GENERATION HELPERS * ============================================================================= @@ -592,228 +560,289 @@ cleanup: * ============================================================================= */ -/** - * Test all signature APIs with a given key and algorithm - * Demonstrates the 6 different signature API approaches - */ -int test_signature_apis(EVP_PKEY *key, const EVP_MD *md, - int (*param_setter)(EVP_PKEY_CTX *ctx), - const char *algo_name) { - const unsigned char message[] = "Test message for OpenSSL signature APIs"; +int testLowLevelRSASignAndVerify(){ + EVP_PKEY *key = NULL; + RSA *rsa_key = NULL; + const unsigned char message[] = "testLowLevelRSASignAndVerify message"; + const size_t message_len = strlen((char *)message); + unsigned char *sig = NULL; + size_t sig_len = 0; + int success = 1; + EVP_PKEY_CTX *key_ctx = NULL; + + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; + + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; + } + + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + + rsa_key = EVP_PKEY_get1_RSA(key); + + if (!rsa_key) { + EVP_PKEY_free(key); + success = 0; + } + + if (sign_using_rsa_sign(message, message_len, &sig, &sig_len, + rsa_key, NID_sha256) && + verify_using_rsa_verify(message, message_len, sig, sig_len, + rsa_key, NID_sha256)) { + printf("PASS\n"); + } else { + printf("FAIL\n"); + success = 0; + } + + /* Cleanup */ + OPENSSL_free(sig); + EVP_PKEY_free(key); + + return success; +} + + +int testLowLevelDSASignAndVerify(){ + EVP_PKEY *key = NULL; + DSA *dsa_key = NULL; + const unsigned char message[] = "testLowLevelDSASignAndVerify message"; + const EVP_MD *md = EVP_sha256(); + int success = 1; + + EVP_PKEY_CTX *param_ctx = NULL, *key_ctx = NULL; + EVP_PKEY *params = NULL; + + const size_t message_len = strlen((char *)message); + unsigned char *sig = NULL; + size_t sig_len = 0; + + key = generate_dsa_key(); + dsa_key = EVP_PKEY_get1_DSA(key); + + if (!dsa_key) { + EVP_PKEY_free(key); + success = 0; + } + + if (sign_using_dsa_sign(message, message_len, &sig, &sig_len, dsa_key, md) && + verify_using_dsa_verify(message, message_len, sig, sig_len, dsa_key, md)) { + printf("PASS\n"); + } else { + printf("FAIL\n"); + success = 0; + } + + /* Cleanup */ + OPENSSL_free(sig); + EVP_PKEY_free(key); + + return success; +} + +int testEVP_SignAPI(){ + EVP_PKEY *key = NULL; + const unsigned char message[] = "testEVP_SignAPI message"; + const EVP_MD *md = EVP_sha224(); + + const size_t message_len = strlen((char *)message); + + unsigned char *sig = NULL; + size_t sig_len = 0; + int success = 1; + EVP_PKEY_CTX *key_ctx = NULL; + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; + + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; + } + + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + + + /* Test 1: EVP_Sign API */ + printf("1. EVP_Sign API: "); + if (sign_using_evp_sign(message, message_len, &sig, &sig_len, key, md) && + verify_using_evp_verify(message, message_len, sig, sig_len, key, md)) { + printf("PASS\n"); + } else { + printf("FAIL\n"); + success = 0; + } + OPENSSL_free(sig); + EVP_PKEY_free(key); + return success; +} + + +int testEVP_DigestSignAPI(){ + EVP_PKEY *key = NULL; + const unsigned char message[] = "testEVP_DigestSignAPI message"; + const EVP_MD *md = EVP_sha224(); + const size_t message_len = strlen((char *)message); - unsigned char *sig1 = NULL, *sig2 = NULL, *sig3 = NULL, - *sig4 = NULL, *sig6 = NULL; - size_t sig_len1 = 0, sig_len2 = 0, sig_len3 = 0, sig_len4 = 0, sig_len6 = 0; - - unsigned char digest[EVP_MAX_MD_SIZE]; - unsigned int digest_len; + unsigned char *sig = NULL; + size_t sig_len = 0; int success = 1; + EVP_PKEY_CTX *key_ctx = NULL; + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; - printf("\nTesting signature APIs with %s:\n", algo_name); - - /* Test 1: EVP_Sign API */ - printf("1. EVP_Sign API: "); - if (sign_using_evp_sign(message, message_len, &sig1, &sig_len1, key, md) && - verify_using_evp_verify(message, message_len, sig1, sig_len1, key, md)) { - printf("PASS\n"); - } else { - printf("FAIL\n"); - success = 0; + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; } + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + + /* Test 2: EVP_DigestSign API */ printf("2. EVP_DigestSign API: "); - if (sign_using_evp_digestsign(message, message_len, &sig2, &sig_len2, key, md) && - verify_using_evp_digestverify(message, message_len, sig2, sig_len2, key, md)) { + if (sign_using_evp_digestsign(message, message_len, &sig, &sig_len, key, md) && + verify_using_evp_digestverify(message, message_len, sig, sig_len, key, md)) { printf("PASS\n"); } else { printf("FAIL\n"); success = 0; } + OPENSSL_free(sig); + EVP_PKEY_free(key); + return success; +} + +int testEVP_PKEY_signAPI(){ + EVP_PKEY *key = NULL; + const unsigned char message[] = "testEVP_PKEY_signAPI message"; + const EVP_MD *md = EVP_sha1(); + + const size_t message_len = strlen((char *)message); + unsigned char *sig = NULL; + size_t sig_len = 0; + int success = 1; + + EVP_PKEY_CTX *key_ctx = NULL; + + unsigned char digest[EVP_MAX_MD_SIZE]; + unsigned int digest_len; + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; + + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; + } + + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + /* Test 3: EVP_PKEY_sign API (requires pre-hashed input) */ printf("3. EVP_PKEY_sign API: "); if (create_digest(message, message_len, md, digest, &digest_len) && - sign_using_evp_pkey_sign(digest, digest_len, &sig3, &sig_len3, key, md) && - verify_using_evp_pkey_verify(digest, digest_len, sig3, sig_len3, key, md)) { + sign_using_evp_pkey_sign(digest, digest_len, &sig, &sig_len, key, md) && + verify_using_evp_pkey_verify(digest, digest_len, sig, sig_len, key, md)) { printf("PASS\n"); } else { printf("FAIL\n"); success = 0; } + + OPENSSL_free(sig); + EVP_PKEY_free(key); + return success; +} + +int testEVP_DigestSign_with_ctx(void) { + EVP_PKEY *key = NULL; + const unsigned char message[] = "testEVP_DigestSign_with_ctx message"; + const EVP_MD *md = EVP_sha1(); + + const size_t message_len = strlen((char *)message); + unsigned char *sig = NULL; + size_t sig_len = 0; + int success = 1; + EVP_PKEY_CTX *key_ctx = NULL; + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; + } + + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + /* Test 4: EVP_DigestSign with explicit PKEY_CTX */ printf("4. EVP_DigestSign with explicit PKEY_CTX: "); - if (sign_using_digestsign_with_ctx(message, message_len, &sig4, &sig_len4, - key, md, param_setter) && - verify_using_digestverify_with_ctx(message, message_len, sig4, sig_len4, - key, md, param_setter)) { + if (sign_using_digestsign_with_ctx(message, message_len, &sig, &sig_len, + key, md) && + verify_using_digestverify_with_ctx(message, message_len, sig, sig_len, + key, md)) { printf("PASS\n"); } else { printf("FAIL\n"); success = 0; } + OPENSSL_free(sig); + EVP_PKEY_free(key); + return success; +} + +int testEVP_PKEY_sign_message(void) { + EVP_PKEY *key = NULL; + const unsigned char message[] = "testEVP_PKEY_sign_message"; + const size_t message_len = strlen((char *)message); + unsigned char *sig = NULL; + size_t sig_len = 0; + int success = 1; + EVP_PKEY_CTX *key_ctx = NULL; + + key_ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); + if (!key_ctx) return NULL; - /* Test 6: EVP_PKEY_sign_message API */ + if (EVP_PKEY_keygen_init(key_ctx) <= 0 || + EVP_PKEY_CTX_set_rsa_keygen_bits(key_ctx, 2048) <= 0 || + EVP_PKEY_keygen(key_ctx, &key) <= 0) { + EVP_PKEY_free(key); + key = NULL; + } + + EVP_PKEY_CTX_free(key_ctx); + if (!key) return 0; + printf("6. EVP_PKEY_sign_message API: "); - if (sign_using_evp_pkey_sign_message(message, message_len, &sig6, &sig_len6, key, md, algo_name) && - verify_using_evp_pkey_verify_message(message, message_len, sig6, sig_len6, key, md, algo_name)) { + if (sign_using_evp_pkey_sign_message(message, message_len, &sig, &sig_len, key, "RSA-SHA256") && + verify_using_evp_pkey_verify_message(message, message_len, sig, sig_len, key, "RSA-SHA256")) { printf("PASS\n"); } else { printf("FAIL\n"); success = 0; } - - /* Cleanup */ - OPENSSL_free(sig1); - OPENSSL_free(sig2); - OPENSSL_free(sig3); - OPENSSL_free(sig4); - OPENSSL_free(sig6); - - return success; -} - -/** - * Test RSA-specific signature APIs including low-level RSA functions - */ -int test_signature_apis_rsa(void) { - EVP_PKEY *key = NULL; - RSA *rsa_key = NULL; - const EVP_MD *md = EVP_sha256(); - const unsigned char message[] = "Test message for OpenSSL signature APIs"; - const size_t message_len = strlen((char *)message); - unsigned char *sig5 = NULL; - size_t sig_len5 = 0; - int success = 1; - - printf("\nGenerating RSA key pair...\n"); - key = generate_rsa_key(); - if (!key) return 0; - - rsa_key = get_rsa_from_pkey(key); - if (!rsa_key) { - EVP_PKEY_free(key); - return 0; - } - - /* Test generic APIs */ - if (!test_signature_apis(key, md, set_rsa_pss_padding, "RSA-SHA256")) { - success = 0; - } - - /* Test 5: Low-level RSA API */ - printf("5. Low-level RSA API: "); - if (sign_using_rsa_sign(message, message_len, &sig5, &sig_len5, - rsa_key, NID_sha256, md) && - verify_using_rsa_verify(message, message_len, sig5, sig_len5, - rsa_key, NID_sha256, md)) { - printf("PASS\n"); - } else { - printf("FAIL\n"); - success = 0; - } - - printf("\nRSA API Summary:\n"); - printf("1. EVP_Sign API: Legacy, simple\n"); - printf("2. EVP_DigestSign API: Modern, recommended\n"); - printf("3. EVP_PKEY_sign API: Lower-level, pre-hashed input\n"); - printf("4. EVP_DigestSign with PKEY_CTX: Fine-grained control\n"); - printf("5. Low-level RSA API: Deprecated, algorithm-specific\n"); - printf("6. EVP_PKEY_sign_message API: Streamlined message signing\n"); - - /* Cleanup */ - OPENSSL_free(sig5); - RSA_free(rsa_key); + OPENSSL_free(sig); EVP_PKEY_free(key); - return success; -} - -/** - * Test DSA-specific signature APIs including low-level DSA functions - */ -int test_signature_apis_dsa(void) { - EVP_PKEY *key = NULL; - DSA *dsa_key = NULL; - const EVP_MD *md = EVP_sha256(); - const unsigned char message[] = "Test message for OpenSSL signature APIs"; - const size_t message_len = strlen((char *)message); - unsigned char *sig5 = NULL; - size_t sig_len5 = 0; - int success = 1; - - printf("\nGenerating DSA key pair...\n"); - key = generate_dsa_key(); - if (!key) return 0; - - dsa_key = get_dsa_from_pkey(key); - if (!dsa_key) { - EVP_PKEY_free(key); - return 0; - } - - /* Test generic APIs */ - if (!test_signature_apis(key, md, no_parameter_setter, "dsa")) { - success = 0; - } - - /* Test 5: Low-level DSA API */ - printf("5. Low-level DSA API: "); - if (sign_using_dsa_sign(message, message_len, &sig5, &sig_len5, dsa_key, md) && - verify_using_dsa_verify(message, message_len, sig5, sig_len5, dsa_key, md)) { - printf("PASS\n"); - } else { - printf("FAIL\n"); - success = 0; - } - - printf("\nDSA API Summary:\n"); - printf("1. EVP_Sign API: Legacy, simple\n"); - printf("2. EVP_DigestSign API: Modern, recommended\n"); - printf("3. EVP_PKEY_sign API: Lower-level, pre-hashed input\n"); - printf("4. EVP_DigestSign with PKEY_CTX: Fine-grained control\n"); - printf("5. Low-level DSA API: Deprecated, algorithm-specific\n"); - printf("6. EVP_PKEY_sign_message API: Streamlined message signing\n"); - - /* Cleanup */ - OPENSSL_free(sig5); - EVP_PKEY_free(key); - - return success; -} - -/* ============================================================================= - * MAIN FUNCTION - Entry point for testing all signature APIs - * ============================================================================= - */ - -// /** -// * Main function demonstrating all OpenSSL signature APIs -// * Tests both RSA and DSA algorithms with all 6 API approaches -// */ -// int main(void) { -// /* Initialize OpenSSL */ -// OpenSSL_add_all_algorithms(); -// ERR_load_crypto_strings(); - -// printf("=================================================================\n"); -// printf("OpenSSL Signature API Demonstration\n"); -// printf("=================================================================\n"); - -// printf("\n-------- TESTING RSA SIGNATURES --------\n"); -// int rsa_result = test_signature_apis_rsa(); - -// printf("\n-------- TESTING DSA SIGNATURES --------\n"); -// int dsa_result = test_signature_apis_dsa(); - -// printf("\n=================================================================\n"); -// if (rsa_result && dsa_result) { -// printf("All tests completed successfully.\n"); -// return 0; -// } else { -// printf("Some tests failed.\n"); -// return 1; -// } -// } \ No newline at end of file +} \ No newline at end of file diff --git a/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected b/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected index 15125038d19..abdb752ca69 100644 --- a/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected +++ b/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.expected @@ -60,7 +60,6 @@ | test.cpp:177:10:177:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 1 | false | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 | | test.cpp:179:10:179:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 | | test.cpp:183:10:183:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | -1 | true | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 | -| test.cpp:185:10:185:10 | Load: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | true | CompareLT: ... < ... | test.cpp:176:7:176:11 | test.cpp:176:7:176:11 | | test.cpp:187:10:187:10 | Store: i | test.cpp:175:23:175:23 | ValueNumberBound | 0 | false | CompareLT: ... < ... | test.cpp:182:9:182:13 | test.cpp:182:9:182:13 | | test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | ValueNumberBound | 0 | false | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | | test.cpp:194:8:194:8 | Load: l | test.cpp:191:16:191:16 | ValueNumberBound | 0 | true | NoReason | file://:0:0:0:0 | file://:0:0:0:0 | diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected index 1d138afcbea..2e18dcd7a62 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected @@ -1,44 +1,3 @@ -astGuards -| test.c:7:9:7:13 | ... > ... | -| test.c:17:8:17:12 | ... < ... | -| test.c:17:8:17:21 | ... && ... | -| test.c:17:17:17:21 | ... > ... | -| test.c:26:11:26:15 | ... > ... | -| test.c:34:16:34:21 | ... < ... | -| test.c:42:16:42:21 | ... < ... | -| test.c:44:12:44:16 | ... > ... | -| test.c:45:16:45:20 | ... > ... | -| test.c:58:9:58:14 | ... == ... | -| test.c:58:9:58:23 | ... \|\| ... | -| test.c:58:19:58:23 | ... < ... | -| test.c:75:9:75:14 | ... == ... | -| test.c:85:8:85:13 | ... == ... | -| test.c:85:8:85:23 | ... && ... | -| test.c:85:18:85:23 | ... != ... | -| test.c:94:11:94:16 | ... != ... | -| test.c:102:16:102:21 | ... < ... | -| test.c:109:9:109:14 | ... == ... | -| test.c:109:9:109:23 | ... \|\| ... | -| test.c:109:19:109:23 | ... < ... | -| test.c:126:7:126:7 | 1 | -| test.c:126:7:126:28 | ... && ... | -| test.c:126:12:126:26 | call to test3_condition | -| test.c:131:7:131:7 | b | -| test.c:137:7:137:7 | 0 | -| test.c:146:7:146:8 | ! ... | -| test.c:146:8:146:8 | x | -| test.c:152:10:152:10 | x | -| test.c:152:10:152:15 | ... && ... | -| test.c:152:15:152:15 | y | -| test.c:156:9:156:19 | ... == ... | -| test.c:159:9:159:19 | ... == ... | -| test.c:162:9:162:18 | ... < ... | -| test.c:165:9:165:18 | ... < ... | -| test.c:175:13:175:32 | ... == ... | -| test.c:181:9:181:9 | x | -| test.cpp:18:8:18:10 | call to get | -| test.cpp:31:7:31:13 | ... == ... | -| test.cpp:42:13:42:20 | call to getABool | astGuardsCompare | 7 | 0 < x+0 when ... > ... is true | | 7 | 0 >= x+0 when ... > ... is false | @@ -425,7 +384,9 @@ astGuardsControl | test.c:126:7:126:7 | 1 | true | 131 | 132 | | test.c:126:7:126:7 | 1 | true | 134 | 123 | | test.c:126:7:126:28 | ... && ... | true | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | true | 131 | 132 | | test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | true | 131 | 132 | | test.c:131:7:131:7 | b | true | 131 | 132 | | test.c:137:7:137:7 | 0 | false | 142 | 136 | | test.c:146:7:146:8 | ! ... | true | 146 | 147 | @@ -832,11 +793,17 @@ astGuardsEnsure_const | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 132 | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 134 | 123 | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 131 | 132 | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | 131 | 132 | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | 131 | 132 | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | 131 | 132 | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 131 | 132 | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | 131 | 132 | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | 131 | 132 | | test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | 142 | 136 | @@ -893,40 +860,6 @@ astGuardsEnsure_const | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 31 | 32 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | 43 | 45 | -irGuards -| test.c:7:9:7:13 | CompareGT: ... > ... | -| test.c:17:8:17:12 | CompareLT: ... < ... | -| test.c:17:17:17:21 | CompareGT: ... > ... | -| test.c:26:11:26:15 | CompareGT: ... > ... | -| test.c:34:16:34:21 | CompareLT: ... < ... | -| test.c:42:16:42:21 | CompareLT: ... < ... | -| test.c:44:12:44:16 | CompareGT: ... > ... | -| test.c:45:16:45:20 | CompareGT: ... > ... | -| test.c:58:9:58:14 | CompareEQ: ... == ... | -| test.c:58:19:58:23 | CompareLT: ... < ... | -| test.c:75:9:75:14 | CompareEQ: ... == ... | -| test.c:85:8:85:13 | CompareEQ: ... == ... | -| test.c:85:18:85:23 | CompareNE: ... != ... | -| test.c:94:11:94:16 | CompareNE: ... != ... | -| test.c:102:16:102:21 | CompareLT: ... < ... | -| test.c:109:9:109:14 | CompareEQ: ... == ... | -| test.c:109:19:109:23 | CompareLT: ... < ... | -| test.c:126:7:126:7 | CompareNE: 1 | -| test.c:126:12:126:26 | CompareNE: call to test3_condition | -| test.c:131:7:131:7 | CompareNE: b | -| test.c:137:7:137:7 | CompareNE: 0 | -| test.c:146:7:146:8 | CompareEQ: ! ... | -| test.c:152:10:152:10 | CompareNE: x | -| test.c:152:15:152:15 | CompareNE: y | -| test.c:156:9:156:19 | CompareEQ: ... == ... | -| test.c:159:9:159:19 | CompareEQ: ... == ... | -| test.c:162:9:162:18 | CompareLT: ... < ... | -| test.c:165:9:165:18 | CompareLT: ... < ... | -| test.c:175:13:175:32 | CompareEQ: ... == ... | -| test.c:181:9:181:9 | CompareNE: x | -| test.cpp:18:8:18:12 | CompareNE: (bool)... | -| test.cpp:31:7:31:13 | CompareEQ: ... == ... | -| test.cpp:42:13:42:20 | Call: call to getABool | irGuardsCompare | 7 | 0 < x+0 when CompareGT: ... > ... is true | | 7 | 0 >= x+0 when CompareGT: ... > ... is false | @@ -1139,13 +1072,21 @@ irGuardsCompare | 146 | x != 0 when CompareEQ: ! ... is false | | 146 | x == 0 when CompareEQ: ! ... is true | | 152 | x != 0 when CompareNE: x is true | +| 152 | x != 0 when Load: ... && ... is true | +| 152 | x != 0 when Phi: ... && ... is true | | 152 | x != 1 when CompareNE: x is false | | 152 | x == 0 when CompareNE: x is false | | 152 | x == 1 when CompareNE: x is true | +| 152 | x == 1 when Load: ... && ... is true | +| 152 | x == 1 when Phi: ... && ... is true | | 152 | y != 0 when CompareNE: y is true | +| 152 | y != 0 when Load: ... && ... is true | +| 152 | y != 0 when Phi: ... && ... is true | | 152 | y != 1 when CompareNE: y is false | | 152 | y == 0 when CompareNE: y is false | | 152 | y == 1 when CompareNE: y is true | +| 152 | y == 1 when Load: ... && ... is true | +| 152 | y == 1 when Phi: ... && ... is true | | 156 | ... + ... != x+0 when CompareEQ: ... == ... is false | | 156 | ... + ... == x+0 when CompareEQ: ... == ... is true | | 156 | ... == ... != 0 when CompareEQ: ... == ... is true | @@ -1211,9 +1152,14 @@ irGuardsCompare irGuardsControl | test.c:7:9:7:13 | CompareGT: ... > ... | false | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | true | 8 | 8 | +| test.c:7:9:7:13 | ConditionalBranch: ... > ... | false | 11 | 11 | +| test.c:7:9:7:13 | ConditionalBranch: ... > ... | true | 8 | 8 | | test.c:17:8:17:12 | CompareLT: ... < ... | true | 17 | 17 | | test.c:17:8:17:12 | CompareLT: ... < ... | true | 18 | 18 | +| test.c:17:8:17:12 | ConditionalBranch: ... < ... | true | 17 | 17 | +| test.c:17:8:17:12 | ConditionalBranch: ... < ... | true | 18 | 18 | | test.c:17:17:17:21 | CompareGT: ... > ... | true | 18 | 18 | +| test.c:17:17:17:21 | ConditionalBranch: ... > ... | true | 18 | 18 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 2 | 2 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 31 | 31 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 34 | 34 | @@ -1229,6 +1175,21 @@ irGuardsControl | test.c:26:11:26:15 | CompareGT: ... > ... | false | 59 | 59 | | test.c:26:11:26:15 | CompareGT: ... > ... | false | 62 | 62 | | test.c:26:11:26:15 | CompareGT: ... > ... | true | 27 | 27 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 2 | 2 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 31 | 31 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 34 | 34 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 35 | 35 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 39 | 39 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 42 | 42 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 43 | 43 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 45 | 45 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 46 | 46 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 52 | 52 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 56 | 56 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 58 | 58 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 59 | 59 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | false | 62 | 62 | +| test.c:26:11:26:15 | ConditionalBranch: ... > ... | true | 27 | 27 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 2 | 2 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 39 | 39 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 42 | 42 | @@ -1241,22 +1202,56 @@ irGuardsControl | test.c:34:16:34:21 | CompareLT: ... < ... | false | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | false | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | true | 35 | 35 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 2 | 2 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 39 | 39 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 42 | 42 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 43 | 43 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 45 | 45 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 46 | 46 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 52 | 52 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 56 | 56 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 58 | 58 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 59 | 59 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | false | 62 | 62 | +| test.c:34:16:34:21 | ConditionalBranch: ... < ... | true | 35 | 35 | +| test.c:42:16:42:21 | CompareLT: ... < ... | true | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | true | 52 | 52 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 2 | 2 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 43 | 43 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 45 | 45 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 46 | 46 | +| test.c:42:16:42:21 | ConditionalBranch: ... < ... | true | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | false | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | true | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | true | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | true | 46 | 46 | +| test.c:44:12:44:16 | ConditionalBranch: ... > ... | false | 52 | 52 | +| test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 2 | 2 | +| test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 45 | 45 | +| test.c:44:12:44:16 | ConditionalBranch: ... > ... | true | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | false | 2 | 2 | | test.c:45:16:45:20 | CompareGT: ... > ... | true | 46 | 46 | +| test.c:45:16:45:20 | ConditionalBranch: ... > ... | false | 2 | 2 | +| test.c:45:16:45:20 | ConditionalBranch: ... > ... | true | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | false | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | false | 62 | 62 | +| test.c:58:9:58:14 | ConditionalBranch: ... == ... | false | 58 | 58 | +| test.c:58:9:58:14 | ConditionalBranch: ... == ... | false | 62 | 62 | | test.c:58:19:58:23 | CompareLT: ... < ... | false | 62 | 62 | +| test.c:58:19:58:23 | ConditionalBranch: ... < ... | false | 62 | 62 | | test.c:75:9:75:14 | CompareEQ: ... == ... | false | 79 | 79 | | test.c:75:9:75:14 | CompareEQ: ... == ... | true | 76 | 76 | +| test.c:75:9:75:14 | ConditionalBranch: ... == ... | false | 79 | 79 | +| test.c:75:9:75:14 | ConditionalBranch: ... == ... | true | 76 | 76 | | test.c:85:8:85:13 | CompareEQ: ... == ... | true | 85 | 85 | | test.c:85:8:85:13 | CompareEQ: ... == ... | true | 86 | 86 | +| test.c:85:8:85:13 | ConditionalBranch: ... == ... | true | 85 | 85 | +| test.c:85:8:85:13 | ConditionalBranch: ... == ... | true | 86 | 86 | | test.c:85:18:85:23 | CompareNE: ... != ... | true | 86 | 86 | +| test.c:85:18:85:23 | ConditionalBranch: ... != ... | true | 86 | 86 | | test.c:94:11:94:16 | CompareNE: ... != ... | false | 70 | 70 | | test.c:94:11:94:16 | CompareNE: ... != ... | false | 99 | 99 | | test.c:94:11:94:16 | CompareNE: ... != ... | false | 102 | 102 | @@ -1266,40 +1261,89 @@ irGuardsControl | test.c:94:11:94:16 | CompareNE: ... != ... | false | 110 | 110 | | test.c:94:11:94:16 | CompareNE: ... != ... | false | 113 | 113 | | test.c:94:11:94:16 | CompareNE: ... != ... | true | 95 | 95 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 70 | 70 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 99 | 99 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 102 | 102 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 103 | 103 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 107 | 107 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 109 | 109 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 110 | 110 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | false | 113 | 113 | +| test.c:94:11:94:16 | ConditionalBranch: ... != ... | true | 95 | 95 | | test.c:102:16:102:21 | CompareLT: ... < ... | false | 70 | 70 | | test.c:102:16:102:21 | CompareLT: ... < ... | false | 107 | 107 | | test.c:102:16:102:21 | CompareLT: ... < ... | false | 109 | 109 | | test.c:102:16:102:21 | CompareLT: ... < ... | false | 110 | 110 | | test.c:102:16:102:21 | CompareLT: ... < ... | false | 113 | 113 | | test.c:102:16:102:21 | CompareLT: ... < ... | true | 103 | 103 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | false | 70 | 70 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | false | 107 | 107 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | false | 109 | 109 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | false | 110 | 110 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | false | 113 | 113 | +| test.c:102:16:102:21 | ConditionalBranch: ... < ... | true | 103 | 103 | | test.c:109:9:109:14 | CompareEQ: ... == ... | false | 109 | 109 | | test.c:109:9:109:14 | CompareEQ: ... == ... | false | 113 | 113 | +| test.c:109:9:109:14 | ConditionalBranch: ... == ... | false | 109 | 109 | +| test.c:109:9:109:14 | ConditionalBranch: ... == ... | false | 113 | 113 | | test.c:109:19:109:23 | CompareLT: ... < ... | false | 113 | 113 | +| test.c:109:19:109:23 | ConditionalBranch: ... < ... | false | 113 | 113 | +| test.c:126:7:126:7 | CompareNE: 1 | false | 123 | 123 | | test.c:126:7:126:7 | CompareNE: 1 | true | 126 | 126 | | test.c:126:7:126:7 | CompareNE: 1 | true | 127 | 127 | | test.c:126:7:126:7 | CompareNE: 1 | true | 131 | 131 | | test.c:126:7:126:7 | CompareNE: 1 | true | 132 | 132 | | test.c:126:7:126:7 | CompareNE: 1 | true | 134 | 134 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | false | 123 | 123 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | true | 126 | 126 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | true | 127 | 127 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | true | 131 | 131 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | true | 132 | 132 | +| test.c:126:7:126:7 | ConditionalBranch: 1 | true | 134 | 134 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | true | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | true | 132 | 132 | +| test.c:126:12:126:26 | ConditionalBranch: call to test3_condition | true | 127 | 127 | +| test.c:126:12:126:26 | ConditionalBranch: call to test3_condition | true | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | true | 132 | 132 | +| test.c:131:7:131:7 | ConditionalBranch: b | true | 132 | 132 | | test.c:137:7:137:7 | CompareNE: 0 | false | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | true | 136 | 136 | +| test.c:137:7:137:7 | ConditionalBranch: 0 | false | 142 | 142 | +| test.c:137:7:137:7 | ConditionalBranch: 0 | true | 136 | 136 | | test.c:146:7:146:8 | CompareEQ: ! ... | true | 147 | 147 | +| test.c:146:7:146:8 | ConditionalBranch: ! ... | true | 147 | 147 | | test.c:152:10:152:10 | CompareNE: x | true | 152 | 152 | +| test.c:152:10:152:10 | ConditionalBranch: x | true | 152 | 152 | | test.c:152:15:152:15 | CompareNE: y | true | 152 | 152 | +| test.c:152:15:152:15 | ConditionalBranch: y | true | 152 | 152 | | test.c:156:9:156:19 | CompareEQ: ... == ... | true | 156 | 157 | +| test.c:156:9:156:19 | ConditionalBranch: ... == ... | true | 156 | 157 | | test.c:159:9:159:19 | CompareEQ: ... == ... | true | 159 | 160 | +| test.c:159:9:159:19 | ConditionalBranch: ... == ... | true | 159 | 160 | | test.c:162:9:162:18 | CompareLT: ... < ... | true | 162 | 163 | +| test.c:162:9:162:18 | ConditionalBranch: ... < ... | true | 162 | 163 | | test.c:165:9:165:18 | CompareLT: ... < ... | true | 165 | 166 | +| test.c:165:9:165:18 | ConditionalBranch: ... < ... | true | 165 | 166 | | test.c:175:13:175:32 | CompareEQ: ... == ... | false | 175 | 175 | | test.c:175:13:175:32 | CompareEQ: ... == ... | true | 175 | 175 | +| test.c:175:13:175:32 | ConditionalBranch: ... == ... | false | 175 | 175 | +| test.c:175:13:175:32 | ConditionalBranch: ... == ... | true | 175 | 175 | | test.c:181:9:181:9 | CompareNE: x | false | 184 | 184 | | test.c:181:9:181:9 | CompareNE: x | true | 182 | 182 | +| test.c:181:9:181:9 | ConditionalBranch: x | false | 184 | 184 | +| test.c:181:9:181:9 | ConditionalBranch: x | true | 182 | 182 | | test.cpp:18:8:18:12 | CompareNE: (bool)... | true | 19 | 19 | +| test.cpp:18:8:18:12 | ConditionalBranch: (bool)... | true | 19 | 19 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | false | 34 | 34 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | true | 30 | 30 | | test.cpp:31:7:31:13 | CompareEQ: ... == ... | true | 32 | 32 | +| test.cpp:31:7:31:13 | ConditionalBranch: ... == ... | false | 34 | 34 | +| test.cpp:31:7:31:13 | ConditionalBranch: ... == ... | true | 30 | 30 | +| test.cpp:31:7:31:13 | ConditionalBranch: ... == ... | true | 32 | 32 | | test.cpp:42:13:42:20 | Call: call to getABool | true | 44 | 44 | | test.cpp:42:13:42:20 | Call: call to getABool | true | 45 | 45 | +| test.cpp:42:13:42:20 | ConditionalBranch: call to getABool | true | 44 | 44 | +| test.cpp:42:13:42:20 | ConditionalBranch: call to getABool | true | 45 | 45 | irGuardsEnsure | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | < | test.c:7:13:7:13 | Constant: 0 | 1 | 11 | 11 | | test.c:7:9:7:13 | CompareGT: ... > ... | test.c:7:9:7:9 | Load: x | >= | test.c:7:13:7:13 | Constant: 0 | 1 | 8 | 8 | @@ -1365,22 +1409,28 @@ irGuardsEnsure | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | < | test.c:34:16:34:16 | Load: j | 1 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:20:34:21 | Constant: 10 | >= | test.c:34:16:34:16 | Load: j | 1 | 35 | 35 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | test.c:42:20:42:21 | Constant: 10 | 0 | 52 | 52 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:20:42:21 | Constant: 10 | >= | test.c:42:16:42:16 | Load: j | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | test.c:44:16:44:16 | Constant: 0 | 1 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | test.c:44:16:44:16 | Constant: 0 | 1 | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | < | test.c:44:12:44:12 | Load: z | 0 | 46 | 46 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:16:44:16 | Constant: 0 | >= | test.c:44:12:44:12 | Load: z | 0 | 52 | 52 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | test.c:45:20:45:20 | Constant: (long)... | 1 | 2 | 2 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | test.c:45:20:45:20 | Constant: (long)... | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:20:45:20 | Constant: (long)... | < | test.c:45:16:45:16 | Load: y | 0 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:20:45:20 | Constant: (long)... | >= | test.c:45:16:45:16 | Load: y | 0 | 2 | 2 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | test.c:58:14:58:14 | Constant: 0 | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | test.c:58:14:58:14 | Constant: 0 | 0 | 62 | 62 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:14:58:14 | Constant: 0 | != | test.c:58:9:58:9 | Load: x | 0 | 58 | 58 | @@ -1451,10 +1501,16 @@ irGuardsEnsure | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 132 | 132 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 134 | 134 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | test.c:126:7:126:7 | Constant: 1 | 0 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | == | test.c:126:7:126:7 | Constant: 1 | 0 | 123 | 123 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | == | test.c:126:7:126:7 | Constant: 1 | 0 | 123 | 123 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | test.c:126:12:126:26 | Constant: call to test3_condition | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | test.c:126:12:126:26 | Constant: call to test3_condition | 0 | 132 | 132 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Constant: call to test3_condition | != | test.c:126:12:126:26 | Call: call to test3_condition | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Constant: call to test3_condition | != | test.c:126:12:126:26 | Call: call to test3_condition | 0 | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Constant: b | != | test.c:131:7:131:7 | Load: b | 0 | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Load: b | != | test.c:131:7:131:7 | Constant: b | 0 | 132 | 132 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | != | test.c:137:7:137:7 | Constant: 0 | 0 | 136 | 136 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | != | test.c:137:7:137:7 | Constant: 0 | 0 | 136 | 136 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | test.c:137:7:137:7 | Constant: 0 | 0 | 142 | 142 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | test.c:137:7:137:7 | Constant: 0 | 0 | 142 | 142 | | test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:7:146:8 | Constant: ! ... | == | test.c:146:8:146:8 | Load: x | 0 | 147 | 147 | @@ -1592,29 +1648,38 @@ irGuardsEnsure_const | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 59 | 59 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 0 | 62 | 62 | | test.c:34:16:34:21 | CompareLT: ... < ... | test.c:34:16:34:21 | CompareLT: ... < ... | == | 1 | 35 | 35 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:16 | Load: j | < | 10 | 52 | 52 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | != | 0 | 52 | 52 | +| test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 2 | 2 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 43 | 43 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 45 | 45 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 46 | 46 | | test.c:42:16:42:21 | CompareLT: ... < ... | test.c:42:16:42:21 | CompareLT: ... < ... | == | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | < | 1 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:12 | Load: z | >= | 1 | 46 | 46 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 0 | 46 | 46 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | != | 1 | 52 | 52 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 0 | 52 | 52 | +| test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 2 | 2 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 45 | 45 | | test.c:44:12:44:16 | CompareGT: ... > ... | test.c:44:12:44:16 | CompareGT: ... > ... | == | 1 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | < | 1 | 2 | 2 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:16 | Load: y | >= | 1 | 46 | 46 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 0 | 46 | 46 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | != | 1 | 2 | 2 | +| test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 0 | 2 | 2 | | test.c:45:16:45:20 | CompareGT: ... > ... | test.c:45:16:45:20 | CompareGT: ... > ... | == | 1 | 46 | 46 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 58 | 58 | | test.c:58:9:58:14 | CompareEQ: ... == ... | test.c:58:9:58:9 | Load: x | != | 0 | 62 | 62 | @@ -1711,6 +1776,8 @@ irGuardsEnsure_const | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 131 | 131 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 132 | 132 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 0 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | != | 1 | 123 | 123 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 0 | 123 | 123 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 126 | 126 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 127 | 127 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | CompareNE: 1 | == | 1 | 131 | 131 | @@ -1726,14 +1793,23 @@ irGuardsEnsure_const | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 131 | 131 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 132 | 132 | | test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | != | 1 | 134 | 134 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | == | 0 | 123 | 123 | +| test.c:126:7:126:7 | CompareNE: 1 | test.c:126:7:126:7 | Constant: 1 | == | 1 | 123 | 123 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | Call: call to test3_condition | != | 0 | 132 | 132 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | != | 0 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | != | 0 | 132 | 132 | | test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | == | 1 | 127 | 127 | +| test.c:126:12:126:26 | CompareNE: call to test3_condition | test.c:126:12:126:26 | CompareNE: call to test3_condition | == | 1 | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | CompareNE: b | != | 0 | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | CompareNE: b | == | 1 | 132 | 132 | | test.c:131:7:131:7 | CompareNE: b | test.c:131:7:131:7 | Load: b | != | 0 | 132 | 132 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | != | 0 | 136 | 136 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | != | 1 | 142 | 142 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | == | 0 | 142 | 142 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | CompareNE: 0 | == | 1 | 136 | 136 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | != | 0 | 136 | 136 | +| test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | != | 0 | 136 | 136 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 | | test.c:137:7:137:7 | CompareNE: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 | | test.c:146:7:146:8 | CompareEQ: ! ... | test.c:146:7:146:8 | CompareEQ: ! ... | != | 0 | 147 | 147 | diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql index 0f147f9ea8d..f91ae1e423d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql +++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.ql @@ -1,8 +1,6 @@ import cpp import semmle.code.cpp.controlflow.IRGuards -query predicate astGuards(GuardCondition guard) { any() } - query predicate astGuardsCompare(int startLine, string msg) { exists(GuardCondition guard, Expr left, int k, string op | exists(boolean sense, string which | @@ -23,7 +21,7 @@ query predicate astGuardsCompare(int startLine, string msg) { ) ) or - exists(AbstractValue value | + exists(GuardValue value | guard.comparesEq(left, k, true, value) and op = " == " or guard.comparesEq(left, k, false, value) and op = " != " @@ -70,8 +68,6 @@ query predicate astGuardsEnsure_const( ) } -query predicate irGuards(IRGuardCondition guard) { any() } - query predicate irGuardsCompare(int startLine, string msg) { exists(IRGuardCondition guard, Operand left, int k, string op | exists(boolean sense, string which | @@ -95,7 +91,7 @@ query predicate irGuardsCompare(int startLine, string msg) { ) ) or - exists(AbstractValue value | + exists(GuardValue value | guard.comparesLt(left, k, true, value) and op = " < " or guard.comparesLt(left, k, false, value) and op = " >= " diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected deleted file mode 100644 index 70290c7e226..00000000000 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected +++ /dev/null @@ -1,108 +0,0 @@ -| test.c:7:9:7:13 | ... > ... | -| test.c:17:8:17:12 | ... < ... | -| test.c:17:8:17:21 | ... && ... | -| test.c:17:17:17:21 | ... > ... | -| test.c:26:11:26:15 | ... > ... | -| test.c:34:16:34:21 | ... < ... | -| test.c:42:16:42:21 | ... < ... | -| test.c:44:12:44:16 | ... > ... | -| test.c:45:16:45:20 | ... > ... | -| test.c:58:9:58:14 | ... == ... | -| test.c:58:9:58:23 | ... \|\| ... | -| test.c:58:19:58:23 | ... < ... | -| test.c:75:9:75:14 | ... == ... | -| test.c:85:8:85:13 | ... == ... | -| test.c:85:8:85:23 | ... && ... | -| test.c:85:18:85:23 | ... != ... | -| test.c:94:11:94:16 | ... != ... | -| test.c:102:16:102:21 | ... < ... | -| test.c:109:9:109:14 | ... == ... | -| test.c:109:9:109:23 | ... \|\| ... | -| test.c:109:19:109:23 | ... < ... | -| test.c:126:7:126:7 | 1 | -| test.c:126:7:126:28 | ... && ... | -| test.c:126:12:126:26 | call to test3_condition | -| test.c:131:7:131:7 | b | -| test.c:137:7:137:7 | 0 | -| test.c:146:7:146:8 | ! ... | -| test.c:146:8:146:8 | x | -| test.c:152:8:152:8 | p | -| test.c:158:8:158:9 | ! ... | -| test.c:158:9:158:9 | p | -| test.c:164:8:164:8 | s | -| test.c:170:8:170:9 | ! ... | -| test.c:170:9:170:9 | s | -| test.c:176:8:176:15 | ! ... | -| test.c:176:10:176:14 | ... < ... | -| test.c:182:8:182:34 | ! ... | -| test.c:182:10:182:20 | ... >= ... | -| test.c:182:10:182:33 | ... && ... | -| test.c:182:25:182:33 | ... < ... | -| test.c:190:7:190:8 | ! ... | -| test.c:190:8:190:8 | c | -| test.c:198:7:198:8 | ! ... | -| test.c:198:8:198:8 | b | -| test.c:206:7:206:8 | ! ... | -| test.c:206:8:206:8 | c | -| test.c:215:6:215:18 | call to __builtin_expect | -| test.c:219:9:219:22 | call to __builtin_expect | -| test.cpp:18:8:18:10 | call to get | -| test.cpp:31:7:31:13 | ... == ... | -| test.cpp:42:13:42:20 | call to getABool | -| test.cpp:61:10:61:10 | i | -| test.cpp:74:10:74:10 | i | -| test.cpp:84:10:84:10 | i | -| test.cpp:93:6:93:6 | c | -| test.cpp:99:6:99:6 | f | -| test.cpp:105:6:105:14 | ... != ... | -| test.cpp:111:6:111:14 | ... != ... | -| test.cpp:122:9:122:9 | b | -| test.cpp:125:13:125:20 | ! ... | -| test.cpp:125:14:125:17 | call to safe | -| test.cpp:131:6:131:21 | call to __builtin_expect | -| test.cpp:135:6:135:21 | call to __builtin_expect | -| test.cpp:141:6:141:21 | call to __builtin_expect | -| test.cpp:145:6:145:21 | call to __builtin_expect | -| test.cpp:152:7:152:8 | ! ... | -| test.cpp:152:8:152:8 | b | -| test.cpp:160:7:160:8 | ! ... | -| test.cpp:160:8:160:8 | c | -| test.cpp:168:7:168:8 | ! ... | -| test.cpp:168:8:168:8 | b | -| test.cpp:176:7:176:8 | ! ... | -| test.cpp:176:8:176:8 | c | -| test.cpp:182:6:182:16 | ! ... | -| test.cpp:182:8:182:9 | b1 | -| test.cpp:182:8:182:15 | ... && ... | -| test.cpp:182:14:182:15 | b2 | -| test.cpp:193:6:193:16 | ! ... | -| test.cpp:193:8:193:9 | b1 | -| test.cpp:193:8:193:15 | ... \|\| ... | -| test.cpp:193:14:193:15 | b2 | -| test.cpp:211:9:211:15 | ... == ... | -| test.cpp:214:9:214:17 | ... == ... | -| test.cpp:217:9:217:15 | ... == ... | -| test.cpp:220:9:220:14 | ... == ... | -| test.cpp:223:9:223:16 | ... == ... | -| test.cpp:226:9:226:14 | ... == ... | -| test.cpp:229:9:229:14 | ... == ... | -| test.cpp:232:9:232:18 | ... == ... | -| test.cpp:235:9:235:17 | ... == ... | -| test.cpp:238:9:238:17 | ... == ... | -| test.cpp:241:9:241:17 | ... == ... | -| test.cpp:241:9:241:30 | ... && ... | -| test.cpp:241:9:241:43 | ... && ... | -| test.cpp:241:22:241:30 | ... == ... | -| test.cpp:241:35:241:43 | ... == ... | -| test.cpp:247:6:247:18 | ... == ... | -| test.cpp:253:6:253:18 | ... != ... | -| test.cpp:260:6:260:18 | ... == ... | -| test.cpp:266:6:266:18 | ... != ... | -| test.cpp:273:6:273:17 | ... == ... | -| test.cpp:279:6:279:17 | ... != ... | -| test.cpp:287:6:287:19 | ... == ... | -| test.cpp:293:6:293:19 | ... != ... | -| test.cpp:300:6:300:19 | ... == ... | -| test.cpp:306:6:306:19 | ... != ... | -| test.cpp:312:6:312:18 | ... == ... | -| test.cpp:318:6:318:18 | ... != ... | diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.ql b/cpp/ql/test/library-tests/controlflow/guards/Guards.ql deleted file mode 100644 index 6580c2acf58..00000000000 --- a/cpp/ql/test/library-tests/controlflow/guards/Guards.ql +++ /dev/null @@ -1,5 +0,0 @@ -import cpp -import semmle.code.cpp.controlflow.Guards - -from GuardCondition guard -select guard diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 5d3232d50fa..4d78c4016da 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -392,6 +392,12 @@ | test.c:206:8:206:8 | c | b >= a+0 when c is false | | test.c:206:8:206:8 | c | c != 0 when c is true | | test.c:206:8:206:8 | c | c == 0 when c is false | +| test.c:215:6:215:18 | ! ... | ... > ... != 0 when ! ... is false | +| test.c:215:6:215:18 | ! ... | ... > ... == 0 when ! ... is true | +| test.c:215:6:215:18 | ! ... | a < b+1 when ! ... is true | +| test.c:215:6:215:18 | ! ... | a >= b+1 when ! ... is false | +| test.c:215:6:215:18 | ! ... | b < a+0 when ! ... is false | +| test.c:215:6:215:18 | ! ... | b >= a+0 when ! ... is true | | test.c:215:6:215:18 | call to __builtin_expect | ... > ... != 0 when call to __builtin_expect is true | | test.c:215:6:215:18 | call to __builtin_expect | ... > ... == 0 when call to __builtin_expect is false | | test.c:215:6:215:18 | call to __builtin_expect | a < b+1 when call to __builtin_expect is false | @@ -402,6 +408,20 @@ | test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.c:215:13:215:17 | ... > ... | ... > ... != 0 when ... > ... is true | +| test.c:215:13:215:17 | ... > ... | ... > ... == 0 when ... > ... is false | +| test.c:215:13:215:17 | ... > ... | a < b+1 when ... > ... is false | +| test.c:215:13:215:17 | ... > ... | a >= b+1 when ... > ... is true | +| test.c:215:13:215:17 | ... > ... | b < a+0 when ... > ... is true | +| test.c:215:13:215:17 | ... > ... | b >= a+0 when ... > ... is false | +| test.c:219:9:219:22 | ! ... | 42 < a+0 when ! ... is false | +| test.c:219:9:219:22 | ! ... | 42 >= a+0 when ! ... is true | +| test.c:219:9:219:22 | ! ... | ... > ... != 0 when ! ... is false | +| test.c:219:9:219:22 | ! ... | ... > ... == 0 when ! ... is true | +| test.c:219:9:219:22 | ! ... | a < 42+1 when ! ... is true | +| test.c:219:9:219:22 | ! ... | a < 43 when ! ... is true | +| test.c:219:9:219:22 | ! ... | a >= 42+1 when ! ... is false | +| test.c:219:9:219:22 | ! ... | a >= 43 when ! ... is false | | test.c:219:9:219:22 | call to __builtin_expect | 42 < a+0 when call to __builtin_expect is true | | test.c:219:9:219:22 | call to __builtin_expect | 42 >= a+0 when call to __builtin_expect is false | | test.c:219:9:219:22 | call to __builtin_expect | ... > ... != 0 when call to __builtin_expect is true | @@ -414,6 +434,14 @@ | test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.c:219:16:219:21 | ... > ... | 42 < a+0 when ... > ... is true | +| test.c:219:16:219:21 | ... > ... | 42 >= a+0 when ... > ... is false | +| test.c:219:16:219:21 | ... > ... | ... > ... != 0 when ... > ... is true | +| test.c:219:16:219:21 | ... > ... | ... > ... == 0 when ... > ... is false | +| test.c:219:16:219:21 | ... > ... | a < 42+1 when ... > ... is false | +| test.c:219:16:219:21 | ... > ... | a < 43 when ... > ... is false | +| test.c:219:16:219:21 | ... > ... | a >= 42+1 when ... > ... is true | +| test.c:219:16:219:21 | ... > ... | a >= 43 when ... > ... is true | | test.cpp:18:8:18:10 | call to get | call to get != 0 when call to get is true | | test.cpp:18:8:18:10 | call to get | call to get != 1 when call to get is false | | test.cpp:18:8:18:10 | call to get | call to get == 0 when call to get is false | @@ -432,13 +460,52 @@ | test.cpp:42:13:42:20 | call to getABool | call to getABool != 1 when call to getABool is false | | test.cpp:42:13:42:20 | call to getABool | call to getABool == 0 when call to getABool is false | | test.cpp:42:13:42:20 | call to getABool | call to getABool == 1 when call to getABool is true | -| test.cpp:61:10:61:10 | i | i == 0 when i is Case[0] | -| test.cpp:61:10:61:10 | i | i == 1 when i is Case[1] | -| test.cpp:61:10:61:10 | i | i == 2 when i is Case[2] | -| test.cpp:74:10:74:10 | i | i < 11 when i is Case[0..10] | -| test.cpp:74:10:74:10 | i | i < 21 when i is Case[11..20] | -| test.cpp:74:10:74:10 | i | i >= 0 when i is Case[0..10] | -| test.cpp:74:10:74:10 | i | i >= 11 when i is Case[11..20] | +| test.cpp:60:31:60:31 | i | i != 0 when i is not 0 | +| test.cpp:60:31:60:31 | i | i != 1 when i is not 1 | +| test.cpp:60:31:60:31 | i | i != 2 when i is not 2 | +| test.cpp:60:31:60:31 | i | i == 0 when i is 0 | +| test.cpp:60:31:60:31 | i | i == 1 when i is 1 | +| test.cpp:60:31:60:31 | i | i == 2 when i is 2 | +| test.cpp:61:10:61:10 | i | i != 0 when i is not 0 | +| test.cpp:61:10:61:10 | i | i != 1 when i is not 1 | +| test.cpp:61:10:61:10 | i | i != 2 when i is not 2 | +| test.cpp:61:10:61:10 | i | i == 0 when i is 0 | +| test.cpp:61:10:61:10 | i | i == 1 when i is 1 | +| test.cpp:61:10:61:10 | i | i == 2 when i is 2 | +| test.cpp:63:12:63:12 | i | i != 0 when i is not 0 | +| test.cpp:63:12:63:12 | i | i != 1 when i is not 1 | +| test.cpp:63:12:63:12 | i | i != 2 when i is not 2 | +| test.cpp:63:12:63:12 | i | i == 0 when i is 0 | +| test.cpp:63:12:63:12 | i | i == 1 when i is 1 | +| test.cpp:63:12:63:12 | i | i == 2 when i is 2 | +| test.cpp:66:12:66:12 | i | i != 0 when i is not 0 | +| test.cpp:66:12:66:12 | i | i != 1 when i is not 1 | +| test.cpp:66:12:66:12 | i | i != 2 when i is not 2 | +| test.cpp:66:12:66:12 | i | i == 0 when i is 0 | +| test.cpp:66:12:66:12 | i | i == 1 when i is 1 | +| test.cpp:66:12:66:12 | i | i == 2 when i is 2 | +| test.cpp:69:12:69:12 | i | i != 0 when i is not 0 | +| test.cpp:69:12:69:12 | i | i != 1 when i is not 1 | +| test.cpp:69:12:69:12 | i | i != 2 when i is not 2 | +| test.cpp:69:12:69:12 | i | i == 0 when i is 0 | +| test.cpp:69:12:69:12 | i | i == 1 when i is 1 | +| test.cpp:69:12:69:12 | i | i == 2 when i is 2 | +| test.cpp:73:30:73:30 | i | i < 11 when i is Upper bound 10 | +| test.cpp:73:30:73:30 | i | i < 21 when i is Upper bound 20 | +| test.cpp:73:30:73:30 | i | i >= 0 when i is Lower bound 0 | +| test.cpp:73:30:73:30 | i | i >= 11 when i is Lower bound 11 | +| test.cpp:74:10:74:10 | i | i < 11 when i is Upper bound 10 | +| test.cpp:74:10:74:10 | i | i < 21 when i is Upper bound 20 | +| test.cpp:74:10:74:10 | i | i >= 0 when i is Lower bound 0 | +| test.cpp:74:10:74:10 | i | i >= 11 when i is Lower bound 11 | +| test.cpp:76:12:76:12 | i | i < 11 when i is Upper bound 10 | +| test.cpp:76:12:76:12 | i | i < 21 when i is Upper bound 20 | +| test.cpp:76:12:76:12 | i | i >= 0 when i is Lower bound 0 | +| test.cpp:76:12:76:12 | i | i >= 11 when i is Lower bound 11 | +| test.cpp:79:12:79:12 | i | i < 11 when i is Upper bound 10 | +| test.cpp:79:12:79:12 | i | i < 21 when i is Upper bound 20 | +| test.cpp:79:12:79:12 | i | i >= 0 when i is Lower bound 0 | +| test.cpp:79:12:79:12 | i | i >= 11 when i is Lower bound 11 | | test.cpp:93:6:93:6 | c | c != 0 when c is true | | test.cpp:93:6:93:6 | c | c != 1 when c is false | | test.cpp:93:6:93:6 | c | c == 0 when c is false | @@ -463,6 +530,10 @@ | test.cpp:111:6:111:14 | ... != ... | ... != ... == 1 when ... != ... is true | | test.cpp:111:6:111:14 | ... != ... | i != 0.0+0 when ... != ... is true | | test.cpp:111:6:111:14 | ... != ... | i == 0.0+0 when ... != ... is false | +| test.cpp:119:16:119:16 | b | b != 0 when b is true | +| test.cpp:119:16:119:16 | b | b != 1 when b is false | +| test.cpp:119:16:119:16 | b | b == 0 when b is false | +| test.cpp:119:16:119:16 | b | b == 1 when b is true | | test.cpp:122:9:122:9 | b | b != 0 when b is true | | test.cpp:122:9:122:9 | b | b != 1 when b is false | | test.cpp:122:9:122:9 | b | b == 0 when b is false | @@ -495,6 +566,14 @@ | test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.cpp:131:23:131:33 | ... == ... | ... + ... != a+0 when ... == ... is false | +| test.cpp:131:23:131:33 | ... == ... | ... + ... == a+0 when ... == ... is true | +| test.cpp:131:23:131:33 | ... == ... | a != ... + ...+0 when ... == ... is false | +| test.cpp:131:23:131:33 | ... == ... | a != b+42 when ... == ... is false | +| test.cpp:131:23:131:33 | ... == ... | a == ... + ...+0 when ... == ... is true | +| test.cpp:131:23:131:33 | ... == ... | a == b+42 when ... == ... is true | +| test.cpp:131:23:131:33 | ... == ... | b != a+-42 when ... == ... is false | +| test.cpp:131:23:131:33 | ... == ... | b == a+-42 when ... == ... is true | | test.cpp:135:6:135:21 | call to __builtin_expect | ... + ... != a+0 when call to __builtin_expect is true | | test.cpp:135:6:135:21 | call to __builtin_expect | ... + ... == a+0 when call to __builtin_expect is false | | test.cpp:135:6:135:21 | call to __builtin_expect | a != ... + ...+0 when call to __builtin_expect is true | @@ -507,6 +586,14 @@ | test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.cpp:135:23:135:33 | ... != ... | ... + ... != a+0 when ... != ... is true | +| test.cpp:135:23:135:33 | ... != ... | ... + ... == a+0 when ... != ... is false | +| test.cpp:135:23:135:33 | ... != ... | a != ... + ...+0 when ... != ... is true | +| test.cpp:135:23:135:33 | ... != ... | a != b+42 when ... != ... is true | +| test.cpp:135:23:135:33 | ... != ... | a == ... + ...+0 when ... != ... is false | +| test.cpp:135:23:135:33 | ... != ... | a == b+42 when ... != ... is false | +| test.cpp:135:23:135:33 | ... != ... | b != a+-42 when ... != ... is true | +| test.cpp:135:23:135:33 | ... != ... | b == a+-42 when ... != ... is false | | test.cpp:141:6:141:21 | call to __builtin_expect | 42 != a+0 when call to __builtin_expect is false | | test.cpp:141:6:141:21 | call to __builtin_expect | 42 == a+0 when call to __builtin_expect is true | | test.cpp:141:6:141:21 | call to __builtin_expect | a != 42 when call to __builtin_expect is false | @@ -517,6 +604,12 @@ | test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.cpp:141:23:141:29 | ... == ... | 42 != a+0 when ... == ... is false | +| test.cpp:141:23:141:29 | ... == ... | 42 == a+0 when ... == ... is true | +| test.cpp:141:23:141:29 | ... == ... | a != 42 when ... == ... is false | +| test.cpp:141:23:141:29 | ... == ... | a != 42+0 when ... == ... is false | +| test.cpp:141:23:141:29 | ... == ... | a == 42 when ... == ... is true | +| test.cpp:141:23:141:29 | ... == ... | a == 42+0 when ... == ... is true | | test.cpp:145:6:145:21 | call to __builtin_expect | 42 != a+0 when call to __builtin_expect is true | | test.cpp:145:6:145:21 | call to __builtin_expect | 42 == a+0 when call to __builtin_expect is false | | test.cpp:145:6:145:21 | call to __builtin_expect | a != 42 when call to __builtin_expect is true | @@ -527,6 +620,26 @@ | test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false | | test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false | | test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true | +| test.cpp:145:23:145:29 | ... != ... | 42 != a+0 when ... != ... is true | +| test.cpp:145:23:145:29 | ... != ... | 42 == a+0 when ... != ... is false | +| test.cpp:145:23:145:29 | ... != ... | a != 42 when ... != ... is true | +| test.cpp:145:23:145:29 | ... != ... | a != 42+0 when ... != ... is true | +| test.cpp:145:23:145:29 | ... != ... | a == 42 when ... != ... is false | +| test.cpp:145:23:145:29 | ... != ... | a == 42+0 when ... != ... is false | +| test.cpp:151:8:151:13 | ... < ... | 10 < a+1 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | 10 >= a+1 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | ... < ... != 0 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | ... < ... != 1 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | ... < ... == 0 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | ... < ... == 1 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | a < 10 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | a < 10+0 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | a >= 10 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | a >= 10+0 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | b != 0 when ... < ... is true | +| test.cpp:151:8:151:13 | ... < ... | b != 1 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | b == 0 when ... < ... is false | +| test.cpp:151:8:151:13 | ... < ... | b == 1 when ... < ... is true | | test.cpp:152:7:152:8 | ! ... | 10 < a+1 when ! ... is true | | test.cpp:152:7:152:8 | ! ... | 10 >= a+1 when ! ... is false | | test.cpp:152:7:152:8 | ! ... | ! ... != 0 when ! ... is true | @@ -563,6 +676,18 @@ | test.cpp:152:8:152:8 | b | b != 1 when b is false | | test.cpp:152:8:152:8 | b | b == 0 when b is false | | test.cpp:152:8:152:8 | b | b == 1 when b is true | +| test.cpp:158:12:158:17 | ... != ... | ... != ... != 0 when ... != ... is true | +| test.cpp:158:12:158:17 | ... != ... | ... != ... != 1 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | ... != ... == 0 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | ... != ... == 1 when ... != ... is true | +| test.cpp:158:12:158:17 | ... != ... | a != b+0 when ... != ... is true | +| test.cpp:158:12:158:17 | ... != ... | a == b+0 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | b != a+0 when ... != ... is true | +| test.cpp:158:12:158:17 | ... != ... | b == a+0 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | c != 0 when ... != ... is true | +| test.cpp:158:12:158:17 | ... != ... | c != 1 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | c == 0 when ... != ... is false | +| test.cpp:158:12:158:17 | ... != ... | c == 1 when ... != ... is true | | test.cpp:160:7:160:8 | ! ... | ! ... != 0 when ! ... is true | | test.cpp:160:7:160:8 | ! ... | ! ... != 1 when ! ... is false | | test.cpp:160:7:160:8 | ! ... | ! ... == 0 when ! ... is false | @@ -595,6 +720,20 @@ | test.cpp:160:8:160:8 | c | c != 1 when c is false | | test.cpp:160:8:160:8 | c | c == 0 when c is false | | test.cpp:160:8:160:8 | c | c == 1 when c is true | +| test.cpp:166:12:166:17 | ... > ... | 10 < a+0 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | 10 >= a+0 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | ... > ... != 0 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | ... > ... != 1 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | ... > ... == 0 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | ... > ... == 1 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | a < 10+1 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | a < 11 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | a >= 10+1 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | a >= 11 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | b != 0 when ... > ... is true | +| test.cpp:166:12:166:17 | ... > ... | b != 1 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | b == 0 when ... > ... is false | +| test.cpp:166:12:166:17 | ... > ... | b == 1 when ... > ... is true | | test.cpp:168:7:168:8 | ! ... | 10 < a+0 when ! ... is false | | test.cpp:168:7:168:8 | ! ... | 10 >= a+0 when ! ... is true | | test.cpp:168:7:168:8 | ! ... | ! ... != 0 when ! ... is true | @@ -631,6 +770,18 @@ | test.cpp:168:8:168:8 | b | b != 1 when b is false | | test.cpp:168:8:168:8 | b | b == 0 when b is false | | test.cpp:168:8:168:8 | b | b == 1 when b is true | +| test.cpp:174:12:174:16 | ... > ... | ... > ... != 0 when ... > ... is true | +| test.cpp:174:12:174:16 | ... > ... | ... > ... != 1 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | ... > ... == 0 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | ... > ... == 1 when ... > ... is true | +| test.cpp:174:12:174:16 | ... > ... | a < b+1 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | a >= b+1 when ... > ... is true | +| test.cpp:174:12:174:16 | ... > ... | b < a+0 when ... > ... is true | +| test.cpp:174:12:174:16 | ... > ... | b >= a+0 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | c != 0 when ... > ... is true | +| test.cpp:174:12:174:16 | ... > ... | c != 1 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | c == 0 when ... > ... is false | +| test.cpp:174:12:174:16 | ... > ... | c == 1 when ... > ... is true | | test.cpp:176:7:176:8 | ! ... | ! ... != 0 when ! ... is true | | test.cpp:176:7:176:8 | ! ... | ! ... != 1 when ! ... is false | | test.cpp:176:7:176:8 | ! ... | ! ... == 0 when ! ... is false | @@ -663,6 +814,14 @@ | test.cpp:176:8:176:8 | c | c != 1 when c is false | | test.cpp:176:8:176:8 | c | c == 0 when c is false | | test.cpp:176:8:176:8 | c | c == 1 when c is true | +| test.cpp:181:28:181:29 | b1 | b1 != 0 when b1 is true | +| test.cpp:181:28:181:29 | b1 | b1 != 1 when b1 is false | +| test.cpp:181:28:181:29 | b1 | b1 == 0 when b1 is false | +| test.cpp:181:28:181:29 | b1 | b1 == 1 when b1 is true | +| test.cpp:181:37:181:38 | b2 | b2 != 0 when b2 is true | +| test.cpp:181:37:181:38 | b2 | b2 != 1 when b2 is false | +| test.cpp:181:37:181:38 | b2 | b2 == 0 when b2 is false | +| test.cpp:181:37:181:38 | b2 | b2 == 1 when b2 is true | | test.cpp:182:6:182:16 | ! ... | ! ... != 0 when ! ... is true | | test.cpp:182:6:182:16 | ! ... | ! ... != 1 when ! ... is false | | test.cpp:182:6:182:16 | ! ... | ! ... == 0 when ! ... is false | @@ -695,6 +854,30 @@ | test.cpp:182:14:182:15 | b2 | b2 != 1 when b2 is false | | test.cpp:182:14:182:15 | b2 | b2 == 0 when b2 is false | | test.cpp:182:14:182:15 | b2 | b2 == 1 when b2 is true | +| test.cpp:183:9:183:10 | b1 | b1 != 0 when b1 is true | +| test.cpp:183:9:183:10 | b1 | b1 != 1 when b1 is false | +| test.cpp:183:9:183:10 | b1 | b1 == 0 when b1 is false | +| test.cpp:183:9:183:10 | b1 | b1 == 1 when b1 is true | +| test.cpp:184:9:184:10 | b2 | b2 != 0 when b2 is true | +| test.cpp:184:9:184:10 | b2 | b2 != 1 when b2 is false | +| test.cpp:184:9:184:10 | b2 | b2 == 0 when b2 is false | +| test.cpp:184:9:184:10 | b2 | b2 == 1 when b2 is true | +| test.cpp:187:9:187:10 | b1 | b1 != 0 when b1 is true | +| test.cpp:187:9:187:10 | b1 | b1 != 1 when b1 is false | +| test.cpp:187:9:187:10 | b1 | b1 == 0 when b1 is false | +| test.cpp:187:9:187:10 | b1 | b1 == 1 when b1 is true | +| test.cpp:188:9:188:10 | b2 | b2 != 0 when b2 is true | +| test.cpp:188:9:188:10 | b2 | b2 != 1 when b2 is false | +| test.cpp:188:9:188:10 | b2 | b2 == 0 when b2 is false | +| test.cpp:188:9:188:10 | b2 | b2 == 1 when b2 is true | +| test.cpp:192:27:192:28 | b1 | b1 != 0 when b1 is true | +| test.cpp:192:27:192:28 | b1 | b1 != 1 when b1 is false | +| test.cpp:192:27:192:28 | b1 | b1 == 0 when b1 is false | +| test.cpp:192:27:192:28 | b1 | b1 == 1 when b1 is true | +| test.cpp:192:36:192:37 | b2 | b2 != 0 when b2 is true | +| test.cpp:192:36:192:37 | b2 | b2 != 1 when b2 is false | +| test.cpp:192:36:192:37 | b2 | b2 == 0 when b2 is false | +| test.cpp:192:36:192:37 | b2 | b2 == 1 when b2 is true | | test.cpp:193:6:193:16 | ! ... | ! ... != 0 when ! ... is true | | test.cpp:193:6:193:16 | ! ... | ! ... != 1 when ! ... is false | | test.cpp:193:6:193:16 | ! ... | ! ... == 0 when ! ... is false | @@ -727,6 +910,22 @@ | test.cpp:193:14:193:15 | b2 | b2 != 1 when b2 is false | | test.cpp:193:14:193:15 | b2 | b2 == 0 when b2 is false | | test.cpp:193:14:193:15 | b2 | b2 == 1 when b2 is true | +| test.cpp:195:9:195:10 | b1 | b1 != 0 when b1 is true | +| test.cpp:195:9:195:10 | b1 | b1 != 1 when b1 is false | +| test.cpp:195:9:195:10 | b1 | b1 == 0 when b1 is false | +| test.cpp:195:9:195:10 | b1 | b1 == 1 when b1 is true | +| test.cpp:196:9:196:10 | b2 | b2 != 0 when b2 is true | +| test.cpp:196:9:196:10 | b2 | b2 != 1 when b2 is false | +| test.cpp:196:9:196:10 | b2 | b2 == 0 when b2 is false | +| test.cpp:196:9:196:10 | b2 | b2 == 1 when b2 is true | +| test.cpp:198:9:198:10 | b1 | b1 != 0 when b1 is true | +| test.cpp:198:9:198:10 | b1 | b1 != 1 when b1 is false | +| test.cpp:198:9:198:10 | b1 | b1 == 0 when b1 is false | +| test.cpp:198:9:198:10 | b1 | b1 == 1 when b1 is true | +| test.cpp:199:9:199:10 | b2 | b2 != 0 when b2 is true | +| test.cpp:199:9:199:10 | b2 | b2 != 1 when b2 is false | +| test.cpp:199:9:199:10 | b2 | b2 == 0 when b2 is false | +| test.cpp:199:9:199:10 | b2 | b2 == 1 when b2 is true | | test.cpp:211:9:211:15 | ... == ... | 0 != sc+0 when ... == ... is false | | test.cpp:211:9:211:15 | ... == ... | 0 == sc+0 when ... == ... is true | | test.cpp:211:9:211:15 | ... == ... | ... == ... != 0 when ... == ... is true | @@ -875,6 +1074,10 @@ | test.cpp:247:6:247:18 | ... == ... | a == b+0 when ... == ... is false | | test.cpp:247:6:247:18 | ... == ... | b != a+0 when ... == ... is true | | test.cpp:247:6:247:18 | ... == ... | b == a+0 when ... == ... is false | +| test.cpp:247:7:247:12 | ... == ... | a != b+0 when ... == ... is false | +| test.cpp:247:7:247:12 | ... == ... | a == b+0 when ... == ... is true | +| test.cpp:247:7:247:12 | ... == ... | b != a+0 when ... == ... is false | +| test.cpp:247:7:247:12 | ... == ... | b == a+0 when ... == ... is true | | test.cpp:253:6:253:18 | ... != ... | 0 != ... == ...+0 when ... != ... is true | | test.cpp:253:6:253:18 | ... != ... | 0 == ... == ...+0 when ... != ... is false | | test.cpp:253:6:253:18 | ... != ... | ... != ... != 0 when ... != ... is true | @@ -889,6 +1092,10 @@ | test.cpp:253:6:253:18 | ... != ... | a == b+0 when ... != ... is true | | test.cpp:253:6:253:18 | ... != ... | b != a+0 when ... != ... is false | | test.cpp:253:6:253:18 | ... != ... | b == a+0 when ... != ... is true | +| test.cpp:253:7:253:12 | ... == ... | a != b+0 when ... == ... is false | +| test.cpp:253:7:253:12 | ... == ... | a == b+0 when ... == ... is true | +| test.cpp:253:7:253:12 | ... == ... | b != a+0 when ... == ... is false | +| test.cpp:253:7:253:12 | ... == ... | b == a+0 when ... == ... is true | | test.cpp:260:6:260:18 | ... == ... | 0 != ... != ...+0 when ... == ... is false | | test.cpp:260:6:260:18 | ... == ... | 0 == ... != ...+0 when ... == ... is true | | test.cpp:260:6:260:18 | ... == ... | ... != ... != 0 when ... == ... is false | @@ -903,6 +1110,10 @@ | test.cpp:260:6:260:18 | ... == ... | a == b+0 when ... == ... is true | | test.cpp:260:6:260:18 | ... == ... | b != a+0 when ... == ... is false | | test.cpp:260:6:260:18 | ... == ... | b == a+0 when ... == ... is true | +| test.cpp:260:7:260:12 | ... != ... | a != b+0 when ... != ... is true | +| test.cpp:260:7:260:12 | ... != ... | a == b+0 when ... != ... is false | +| test.cpp:260:7:260:12 | ... != ... | b != a+0 when ... != ... is true | +| test.cpp:260:7:260:12 | ... != ... | b == a+0 when ... != ... is false | | test.cpp:266:6:266:18 | ... != ... | 0 != ... != ...+0 when ... != ... is true | | test.cpp:266:6:266:18 | ... != ... | 0 == ... != ...+0 when ... != ... is false | | test.cpp:266:6:266:18 | ... != ... | ... != ... != 0 when ... != ... is true | @@ -915,6 +1126,10 @@ | test.cpp:266:6:266:18 | ... != ... | a == b+0 when ... != ... is false | | test.cpp:266:6:266:18 | ... != ... | b != a+0 when ... != ... is true | | test.cpp:266:6:266:18 | ... != ... | b == a+0 when ... != ... is false | +| test.cpp:266:7:266:12 | ... != ... | a != b+0 when ... != ... is true | +| test.cpp:266:7:266:12 | ... != ... | a == b+0 when ... != ... is false | +| test.cpp:266:7:266:12 | ... != ... | b != a+0 when ... != ... is true | +| test.cpp:266:7:266:12 | ... != ... | b == a+0 when ... != ... is false | | test.cpp:273:6:273:17 | ... == ... | 0 != ... < ...+0 when ... == ... is false | | test.cpp:273:6:273:17 | ... == ... | 0 == ... < ...+0 when ... == ... is true | | test.cpp:273:6:273:17 | ... == ... | ... < ... != 0 when ... == ... is false | @@ -929,6 +1144,10 @@ | test.cpp:273:6:273:17 | ... == ... | a >= b+0 when ... == ... is true | | test.cpp:273:6:273:17 | ... == ... | b < a+1 when ... == ... is true | | test.cpp:273:6:273:17 | ... == ... | b >= a+1 when ... == ... is false | +| test.cpp:273:7:273:11 | ... < ... | a < b+0 when ... < ... is true | +| test.cpp:273:7:273:11 | ... < ... | a >= b+0 when ... < ... is false | +| test.cpp:273:7:273:11 | ... < ... | b < a+1 when ... < ... is false | +| test.cpp:273:7:273:11 | ... < ... | b >= a+1 when ... < ... is true | | test.cpp:279:6:279:17 | ... != ... | 0 != ... < ...+0 when ... != ... is true | | test.cpp:279:6:279:17 | ... != ... | 0 == ... < ...+0 when ... != ... is false | | test.cpp:279:6:279:17 | ... != ... | ... != ... != 0 when ... != ... is true | @@ -943,6 +1162,10 @@ | test.cpp:279:6:279:17 | ... != ... | a >= b+0 when ... != ... is false | | test.cpp:279:6:279:17 | ... != ... | b < a+1 when ... != ... is false | | test.cpp:279:6:279:17 | ... != ... | b >= a+1 when ... != ... is true | +| test.cpp:279:7:279:11 | ... < ... | a < b+0 when ... < ... is true | +| test.cpp:279:7:279:11 | ... < ... | a >= b+0 when ... < ... is false | +| test.cpp:279:7:279:11 | ... < ... | b < a+1 when ... < ... is false | +| test.cpp:279:7:279:11 | ... < ... | b >= a+1 when ... < ... is true | | test.cpp:287:6:287:19 | ... == ... | 0 != ... == ...+0 when ... == ... is false | | test.cpp:287:6:287:19 | ... == ... | 0 == ... == ...+0 when ... == ... is true | | test.cpp:287:6:287:19 | ... == ... | 42 != a+0 when ... == ... is true | @@ -959,6 +1182,12 @@ | test.cpp:287:6:287:19 | ... == ... | a != 42+0 when ... == ... is true | | test.cpp:287:6:287:19 | ... == ... | a == 42 when ... == ... is false | | test.cpp:287:6:287:19 | ... == ... | a == 42+0 when ... == ... is false | +| test.cpp:287:7:287:13 | ... == ... | 42 != a+0 when ... == ... is false | +| test.cpp:287:7:287:13 | ... == ... | 42 == a+0 when ... == ... is true | +| test.cpp:287:7:287:13 | ... == ... | a != 42 when ... == ... is false | +| test.cpp:287:7:287:13 | ... == ... | a != 42+0 when ... == ... is false | +| test.cpp:287:7:287:13 | ... == ... | a == 42 when ... == ... is true | +| test.cpp:287:7:287:13 | ... == ... | a == 42+0 when ... == ... is true | | test.cpp:293:6:293:19 | ... != ... | 0 != ... == ...+0 when ... != ... is true | | test.cpp:293:6:293:19 | ... != ... | 0 == ... == ...+0 when ... != ... is false | | test.cpp:293:6:293:19 | ... != ... | 42 != a+0 when ... != ... is false | @@ -975,6 +1204,12 @@ | test.cpp:293:6:293:19 | ... != ... | a != 42+0 when ... != ... is false | | test.cpp:293:6:293:19 | ... != ... | a == 42 when ... != ... is true | | test.cpp:293:6:293:19 | ... != ... | a == 42+0 when ... != ... is true | +| test.cpp:293:7:293:13 | ... == ... | 42 != a+0 when ... == ... is false | +| test.cpp:293:7:293:13 | ... == ... | 42 == a+0 when ... == ... is true | +| test.cpp:293:7:293:13 | ... == ... | a != 42 when ... == ... is false | +| test.cpp:293:7:293:13 | ... == ... | a != 42+0 when ... == ... is false | +| test.cpp:293:7:293:13 | ... == ... | a == 42 when ... == ... is true | +| test.cpp:293:7:293:13 | ... == ... | a == 42+0 when ... == ... is true | | test.cpp:300:6:300:19 | ... == ... | 0 != ... != ...+0 when ... == ... is false | | test.cpp:300:6:300:19 | ... == ... | 0 == ... != ...+0 when ... == ... is true | | test.cpp:300:6:300:19 | ... == ... | 42 != a+0 when ... == ... is false | @@ -991,6 +1226,12 @@ | test.cpp:300:6:300:19 | ... == ... | a != 42+0 when ... == ... is false | | test.cpp:300:6:300:19 | ... == ... | a == 42 when ... == ... is true | | test.cpp:300:6:300:19 | ... == ... | a == 42+0 when ... == ... is true | +| test.cpp:300:7:300:13 | ... != ... | 42 != a+0 when ... != ... is true | +| test.cpp:300:7:300:13 | ... != ... | 42 == a+0 when ... != ... is false | +| test.cpp:300:7:300:13 | ... != ... | a != 42 when ... != ... is true | +| test.cpp:300:7:300:13 | ... != ... | a != 42+0 when ... != ... is true | +| test.cpp:300:7:300:13 | ... != ... | a == 42 when ... != ... is false | +| test.cpp:300:7:300:13 | ... != ... | a == 42+0 when ... != ... is false | | test.cpp:306:6:306:19 | ... != ... | 0 != ... != ...+0 when ... != ... is true | | test.cpp:306:6:306:19 | ... != ... | 0 == ... != ...+0 when ... != ... is false | | test.cpp:306:6:306:19 | ... != ... | 42 != a+0 when ... != ... is true | @@ -1005,6 +1246,12 @@ | test.cpp:306:6:306:19 | ... != ... | a != 42+0 when ... != ... is true | | test.cpp:306:6:306:19 | ... != ... | a == 42 when ... != ... is false | | test.cpp:306:6:306:19 | ... != ... | a == 42+0 when ... != ... is false | +| test.cpp:306:7:306:13 | ... != ... | 42 != a+0 when ... != ... is true | +| test.cpp:306:7:306:13 | ... != ... | 42 == a+0 when ... != ... is false | +| test.cpp:306:7:306:13 | ... != ... | a != 42 when ... != ... is true | +| test.cpp:306:7:306:13 | ... != ... | a != 42+0 when ... != ... is true | +| test.cpp:306:7:306:13 | ... != ... | a == 42 when ... != ... is false | +| test.cpp:306:7:306:13 | ... != ... | a == 42+0 when ... != ... is false | | test.cpp:312:6:312:18 | ... == ... | 0 != ... < ...+0 when ... == ... is false | | test.cpp:312:6:312:18 | ... == ... | 0 == ... < ...+0 when ... == ... is true | | test.cpp:312:6:312:18 | ... == ... | 42 < a+1 when ... == ... is true | @@ -1021,6 +1268,12 @@ | test.cpp:312:6:312:18 | ... == ... | a < 42+0 when ... == ... is false | | test.cpp:312:6:312:18 | ... == ... | a >= 42 when ... == ... is true | | test.cpp:312:6:312:18 | ... == ... | a >= 42+0 when ... == ... is true | +| test.cpp:312:7:312:12 | ... < ... | 42 < a+1 when ... < ... is false | +| test.cpp:312:7:312:12 | ... < ... | 42 >= a+1 when ... < ... is true | +| test.cpp:312:7:312:12 | ... < ... | a < 42 when ... < ... is true | +| test.cpp:312:7:312:12 | ... < ... | a < 42+0 when ... < ... is true | +| test.cpp:312:7:312:12 | ... < ... | a >= 42 when ... < ... is false | +| test.cpp:312:7:312:12 | ... < ... | a >= 42+0 when ... < ... is false | | test.cpp:318:6:318:18 | ... != ... | 0 != ... < ...+0 when ... != ... is true | | test.cpp:318:6:318:18 | ... != ... | 0 == ... < ...+0 when ... != ... is false | | test.cpp:318:6:318:18 | ... != ... | 42 < a+1 when ... != ... is false | @@ -1037,3 +1290,155 @@ | test.cpp:318:6:318:18 | ... != ... | a < 42+0 when ... != ... is true | | test.cpp:318:6:318:18 | ... != ... | a >= 42 when ... != ... is false | | test.cpp:318:6:318:18 | ... != ... | a >= 42+0 when ... != ... is false | +| test.cpp:318:7:318:12 | ... < ... | 42 < a+1 when ... < ... is false | +| test.cpp:318:7:318:12 | ... < ... | 42 >= a+1 when ... < ... is true | +| test.cpp:318:7:318:12 | ... < ... | a < 42 when ... < ... is true | +| test.cpp:318:7:318:12 | ... < ... | a < 42+0 when ... < ... is true | +| test.cpp:318:7:318:12 | ... < ... | a >= 42 when ... < ... is false | +| test.cpp:318:7:318:12 | ... < ... | a >= 42+0 when ... < ... is false | +| test.cpp:327:46:327:46 | b | b != 0 when b is true | +| test.cpp:327:46:327:46 | b | b != 1 when b is false | +| test.cpp:327:46:327:46 | b | b == 0 when b is false | +| test.cpp:327:46:327:46 | b | b == 1 when b is true | +| test.cpp:330:7:330:7 | b | b != 0 when b is true | +| test.cpp:330:7:330:7 | b | b != 1 when b is false | +| test.cpp:330:7:330:7 | b | b == 0 when b is false | +| test.cpp:330:7:330:7 | b | b == 1 when b is true | +| test.cpp:334:11:334:11 | x | x < 51 when x is Upper bound 50 | +| test.cpp:334:11:334:11 | x | x >= 40 when x is Lower bound 40 | +| test.cpp:338:9:338:9 | x | x < 51 when x is Upper bound 50 | +| test.cpp:338:9:338:9 | x | x >= 40 when x is Lower bound 40 | +| test.cpp:345:10:345:25 | ... != ... | 0 != input+0 when ... != ... is true | +| test.cpp:345:10:345:25 | ... != ... | 0 == input+0 when ... != ... is false | +| test.cpp:345:10:345:25 | ... != ... | input != 0 when ... != ... is true | +| test.cpp:345:10:345:25 | ... != ... | input != 0+0 when ... != ... is true | +| test.cpp:345:10:345:25 | ... != ... | input == 0 when ... != ... is false | +| test.cpp:345:10:345:25 | ... != ... | input == 0+0 when ... != ... is false | +| test.cpp:349:11:349:22 | call to testNotNull1 | call to testNotNull1 != 0 when call to testNotNull1 is true | +| test.cpp:349:11:349:22 | call to testNotNull1 | call to testNotNull1 != 1 when call to testNotNull1 is false | +| test.cpp:349:11:349:22 | call to testNotNull1 | call to testNotNull1 == 0 when call to testNotNull1 is false | +| test.cpp:349:11:349:22 | call to testNotNull1 | call to testNotNull1 == 1 when call to testNotNull1 is true | +| test.cpp:350:7:350:12 | ... != ... | 0 != x+0 when ... != ... is true | +| test.cpp:350:7:350:12 | ... != ... | 0 == x+0 when ... != ... is false | +| test.cpp:350:7:350:12 | ... != ... | ... != ... != 0 when ... != ... is true | +| test.cpp:350:7:350:12 | ... != ... | ... != ... != 1 when ... != ... is false | +| test.cpp:350:7:350:12 | ... != ... | ... != ... == 0 when ... != ... is false | +| test.cpp:350:7:350:12 | ... != ... | ... != ... == 1 when ... != ... is true | +| test.cpp:350:7:350:12 | ... != ... | x != 0 when ... != ... is true | +| test.cpp:350:7:350:12 | ... != ... | x != 0+0 when ... != ... is true | +| test.cpp:350:7:350:12 | ... != ... | x == 0 when ... != ... is false | +| test.cpp:350:7:350:12 | ... != ... | x == 0+0 when ... != ... is false | +| test.cpp:356:7:356:22 | ... == ... | 0 != input+0 when ... == ... is false | +| test.cpp:356:7:356:22 | ... == ... | 0 == input+0 when ... == ... is true | +| test.cpp:356:7:356:22 | ... == ... | ... == ... != 0 when ... == ... is true | +| test.cpp:356:7:356:22 | ... == ... | ... == ... != 1 when ... == ... is false | +| test.cpp:356:7:356:22 | ... == ... | ... == ... == 0 when ... == ... is false | +| test.cpp:356:7:356:22 | ... == ... | ... == ... == 1 when ... == ... is true | +| test.cpp:356:7:356:22 | ... == ... | input != 0 when ... == ... is false | +| test.cpp:356:7:356:22 | ... == ... | input != 0+0 when ... == ... is false | +| test.cpp:356:7:356:22 | ... == ... | input == 0 when ... == ... is true | +| test.cpp:356:7:356:22 | ... == ... | input == 0+0 when ... == ... is true | +| test.cpp:361:10:361:26 | ... == ... | 0 != number+0 when ... == ... is false | +| test.cpp:361:10:361:26 | ... == ... | 0 == number+0 when ... == ... is true | +| test.cpp:361:10:361:26 | ... == ... | ... == ... != 0 when ... == ... is true | +| test.cpp:361:10:361:26 | ... == ... | ... == ... != 1 when ... == ... is false | +| test.cpp:361:10:361:26 | ... == ... | ... == ... == 0 when ... == ... is false | +| test.cpp:361:10:361:26 | ... == ... | ... == ... == 1 when ... == ... is true | +| test.cpp:361:10:361:26 | ... == ... | number != 0 when ... == ... is false | +| test.cpp:361:10:361:26 | ... == ... | number != 0+0 when ... == ... is false | +| test.cpp:361:10:361:26 | ... == ... | number == 0 when ... == ... is true | +| test.cpp:361:10:361:26 | ... == ... | number == 0+0 when ... == ... is true | +| test.cpp:365:7:365:9 | ! ... | ! ... != 0 when ! ... is true | +| test.cpp:365:7:365:9 | ! ... | ! ... != 1 when ! ... is false | +| test.cpp:365:7:365:9 | ! ... | ! ... == 0 when ! ... is false | +| test.cpp:365:7:365:9 | ! ... | ! ... == 1 when ! ... is true | +| test.cpp:365:7:365:9 | ! ... | s1 != 0 when ! ... is false | +| test.cpp:365:7:365:9 | ! ... | s1 != 1 when ! ... is true | +| test.cpp:365:7:365:9 | ! ... | s1 == 0 when ! ... is true | +| test.cpp:365:7:365:9 | ! ... | s1 == 1 when ! ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | ! ... != 1 when ... \|\| ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | ! ... == 0 when ... \|\| ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | s1 != 0 when ... \|\| ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | s1 == 1 when ... \|\| ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | s2 != 0 when ... \|\| ... is false | +| test.cpp:365:7:365:16 | ... \|\| ... | s2 == 1 when ... \|\| ... is false | +| test.cpp:365:8:365:9 | s1 | ! ... != 0 when s1 is false | +| test.cpp:365:8:365:9 | s1 | ! ... != 1 when s1 is true | +| test.cpp:365:8:365:9 | s1 | ! ... == 0 when s1 is true | +| test.cpp:365:8:365:9 | s1 | ! ... == 1 when s1 is false | +| test.cpp:365:8:365:9 | s1 | s1 != 0 when s1 is true | +| test.cpp:365:8:365:9 | s1 | s1 != 1 when s1 is false | +| test.cpp:365:8:365:9 | s1 | s1 == 0 when s1 is false | +| test.cpp:365:8:365:9 | s1 | s1 == 1 when s1 is true | +| test.cpp:365:14:365:16 | ! ... | ! ... != 0 when ! ... is true | +| test.cpp:365:14:365:16 | ! ... | ! ... != 1 when ! ... is false | +| test.cpp:365:14:365:16 | ! ... | ! ... == 0 when ! ... is false | +| test.cpp:365:14:365:16 | ! ... | ! ... == 1 when ! ... is true | +| test.cpp:365:14:365:16 | ! ... | s2 != 0 when ! ... is false | +| test.cpp:365:14:365:16 | ! ... | s2 != 1 when ! ... is true | +| test.cpp:365:14:365:16 | ! ... | s2 == 0 when ! ... is true | +| test.cpp:365:14:365:16 | ! ... | s2 == 1 when ! ... is false | +| test.cpp:365:15:365:16 | s2 | ! ... != 0 when s2 is false | +| test.cpp:365:15:365:16 | s2 | ! ... != 1 when s2 is true | +| test.cpp:365:15:365:16 | s2 | ! ... == 0 when s2 is true | +| test.cpp:365:15:365:16 | s2 | ! ... == 1 when s2 is false | +| test.cpp:365:15:365:16 | s2 | s2 != 0 when s2 is true | +| test.cpp:365:15:365:16 | s2 | s2 != 1 when s2 is false | +| test.cpp:365:15:365:16 | s2 | s2 == 0 when s2 is false | +| test.cpp:365:15:365:16 | s2 | s2 == 1 when s2 is true | +| test.cpp:371:29:371:32 | flag | flag != 0 when flag is true | +| test.cpp:371:29:371:32 | flag | flag != 1 when flag is false | +| test.cpp:371:29:371:32 | flag | flag == 0 when flag is false | +| test.cpp:371:29:371:32 | flag | flag == 1 when flag is true | +| test.cpp:372:10:372:13 | flag | flag != 0 when flag is true | +| test.cpp:372:10:372:13 | flag | flag != 1 when flag is false | +| test.cpp:372:10:372:13 | flag | flag == 0 when flag is false | +| test.cpp:372:10:372:13 | flag | flag == 1 when flag is true | +| test.cpp:376:7:376:18 | call to testNotNull1 | call to testNotNull1 != 0 when call to testNotNull1 is true | +| test.cpp:376:7:376:18 | call to testNotNull1 | call to testNotNull1 != 1 when call to testNotNull1 is false | +| test.cpp:376:7:376:18 | call to testNotNull1 | call to testNotNull1 == 0 when call to testNotNull1 is false | +| test.cpp:376:7:376:18 | call to testNotNull1 | call to testNotNull1 == 1 when call to testNotNull1 is true | +| test.cpp:382:7:382:18 | call to testNotNull2 | call to testNotNull2 != 0 when call to testNotNull2 is true | +| test.cpp:382:7:382:18 | call to testNotNull2 | call to testNotNull2 != 1 when call to testNotNull2 is false | +| test.cpp:382:7:382:18 | call to testNotNull2 | call to testNotNull2 == 0 when call to testNotNull2 is false | +| test.cpp:382:7:382:18 | call to testNotNull2 | call to testNotNull2 == 1 when call to testNotNull2 is true | +| test.cpp:388:7:388:29 | ... == ... | 0 != call to getNumOrDefault+0 when ... == ... is false | +| test.cpp:388:7:388:29 | ... == ... | 0 == call to getNumOrDefault+0 when ... == ... is true | +| test.cpp:388:7:388:29 | ... == ... | ... == ... != 0 when ... == ... is true | +| test.cpp:388:7:388:29 | ... == ... | ... == ... != 1 when ... == ... is false | +| test.cpp:388:7:388:29 | ... == ... | ... == ... == 0 when ... == ... is false | +| test.cpp:388:7:388:29 | ... == ... | ... == ... == 1 when ... == ... is true | +| test.cpp:388:7:388:29 | ... == ... | call to getNumOrDefault != 0 when ... == ... is false | +| test.cpp:388:7:388:29 | ... == ... | call to getNumOrDefault != 0+0 when ... == ... is false | +| test.cpp:388:7:388:29 | ... == ... | call to getNumOrDefault == 0 when ... == ... is true | +| test.cpp:388:7:388:29 | ... == ... | call to getNumOrDefault == 0+0 when ... == ... is true | +| test.cpp:394:7:394:47 | ... == ... | 0 != call to returnAIfNoneAreNull+0 when ... == ... is false | +| test.cpp:394:7:394:47 | ... == ... | 0 == call to returnAIfNoneAreNull+0 when ... == ... is true | +| test.cpp:394:7:394:47 | ... == ... | ... == ... != 0 when ... == ... is true | +| test.cpp:394:7:394:47 | ... == ... | ... == ... != 1 when ... == ... is false | +| test.cpp:394:7:394:47 | ... == ... | ... == ... == 0 when ... == ... is false | +| test.cpp:394:7:394:47 | ... == ... | ... == ... == 1 when ... == ... is true | +| test.cpp:394:7:394:47 | ... == ... | call to returnAIfNoneAreNull != 0 when ... == ... is false | +| test.cpp:394:7:394:47 | ... == ... | call to returnAIfNoneAreNull != 0+0 when ... == ... is false | +| test.cpp:394:7:394:47 | ... == ... | call to returnAIfNoneAreNull == 0 when ... == ... is true | +| test.cpp:394:7:394:47 | ... == ... | call to returnAIfNoneAreNull == 0+0 when ... == ... is true | +| test.cpp:400:11:400:25 | call to testEnumWrapper | call to testEnumWrapper != 1 when call to testEnumWrapper is not 1 | +| test.cpp:400:11:400:25 | call to testEnumWrapper | call to testEnumWrapper != 2 when call to testEnumWrapper is not 2 | +| test.cpp:400:11:400:25 | call to testEnumWrapper | call to testEnumWrapper == 1 when call to testEnumWrapper is 1 | +| test.cpp:400:11:400:25 | call to testEnumWrapper | call to testEnumWrapper == 2 when call to testEnumWrapper is 2 | +| test.cpp:411:7:411:8 | ! ... | ! ... != 0 when ! ... is true | +| test.cpp:411:7:411:8 | ! ... | ! ... != 1 when ! ... is false | +| test.cpp:411:7:411:8 | ! ... | ! ... == 0 when ! ... is false | +| test.cpp:411:7:411:8 | ! ... | ! ... == 1 when ! ... is true | +| test.cpp:411:7:411:8 | ! ... | o != 0 when ! ... is false | +| test.cpp:411:7:411:8 | ! ... | o != 1 when ! ... is true | +| test.cpp:411:7:411:8 | ! ... | o == 0 when ! ... is true | +| test.cpp:411:7:411:8 | ! ... | o == 1 when ! ... is false | +| test.cpp:411:8:411:8 | o | ! ... != 0 when o is false | +| test.cpp:411:8:411:8 | o | ! ... != 1 when o is true | +| test.cpp:411:8:411:8 | o | ! ... == 0 when o is true | +| test.cpp:411:8:411:8 | o | ! ... == 1 when o is false | +| test.cpp:411:8:411:8 | o | o != 0 when o is true | +| test.cpp:411:8:411:8 | o | o != 1 when o is false | +| test.cpp:411:8:411:8 | o | o == 0 when o is false | +| test.cpp:411:8:411:8 | o | o == 1 when o is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql index 59996548113..a925bf91407 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql @@ -27,7 +27,7 @@ where ) ) or - exists(AbstractValue value | + exists(GuardValue value | guard.comparesLt(left, k, true, value) and op = " < " or guard.comparesLt(left, k, false, value) and op = " >= " diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected index 05afe345b8c..80a6530291d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected @@ -43,16 +43,36 @@ | test.c:44:12:44:16 | ... > ... | true | test.c:45:13:45:20 | if (...) ... | | test.c:44:12:44:16 | ... > ... | true | test.c:45:23:47:22 | { ... } | | test.c:45:16:45:20 | ... > ... | true | test.c:45:23:47:22 | { ... } | +| test.c:58:9:58:9 | x | not 0 | test.c:58:19:58:23 | y | +| test.c:58:9:58:9 | x | not 0 | test.c:62:9:62:16 | return ... | | test.c:58:9:58:14 | ... == ... | false | test.c:58:19:58:23 | y | | test.c:58:9:58:14 | ... == ... | false | test.c:62:9:62:16 | return ... | | test.c:58:9:58:23 | ... \|\| ... | false | test.c:62:9:62:16 | return ... | | test.c:58:19:58:23 | ... < ... | false | test.c:62:9:62:16 | return ... | +| test.c:70:15:70:15 | x | 0 | test.c:75:17:77:14 | { ... } | +| test.c:70:15:70:15 | x | 0 | test.c:85:18:85:23 | y | +| test.c:70:15:70:15 | x | 0 | test.c:86:9:86:14 | ExprStmt | +| test.c:70:15:70:15 | x | not 0 | test.c:78:12:79:14 | { ... } | +| test.c:75:9:75:9 | x | 0 | test.c:75:17:77:14 | { ... } | +| test.c:75:9:75:9 | x | not 0 | test.c:78:12:79:14 | { ... } | | test.c:75:9:75:14 | ... == ... | false | test.c:78:12:79:14 | { ... } | | test.c:75:9:75:14 | ... == ... | true | test.c:75:17:77:14 | { ... } | +| test.c:85:8:85:8 | x | 0 | test.c:85:18:85:23 | y | +| test.c:85:8:85:8 | x | 0 | test.c:86:9:86:14 | ExprStmt | | test.c:85:8:85:13 | ... == ... | true | test.c:85:18:85:23 | y | | test.c:85:8:85:13 | ... == ... | true | test.c:86:9:86:14 | ExprStmt | | test.c:85:8:85:23 | ... && ... | true | test.c:86:9:86:14 | ExprStmt | +| test.c:85:18:85:18 | y | not 0 | test.c:86:9:86:14 | ExprStmt | | test.c:85:18:85:23 | ... != ... | true | test.c:86:9:86:14 | ExprStmt | +| test.c:94:11:94:11 | x | 0 | test.c:70:5:70:9 | test2 | +| test.c:94:11:94:11 | x | 0 | test.c:99:5:102:13 | ExprStmt | +| test.c:94:11:94:11 | x | 0 | test.c:102:16:102:21 | j | +| test.c:94:11:94:11 | x | 0 | test.c:102:29:102:26 | { ... } | +| test.c:94:11:94:11 | x | 0 | test.c:107:5:109:14 | ExprStmt | +| test.c:94:11:94:11 | x | 0 | test.c:109:19:109:23 | y | +| test.c:94:11:94:11 | x | 0 | test.c:109:26:117:12 | { ... } | +| test.c:94:11:94:11 | x | 0 | test.c:113:9:113:16 | return ... | +| test.c:94:11:94:11 | x | not 0 | test.c:94:19:96:11 | { ... } | | test.c:94:11:94:16 | ... != ... | false | test.c:70:5:70:9 | test2 | | test.c:94:11:94:16 | ... != ... | false | test.c:99:5:102:13 | ExprStmt | | test.c:94:11:94:16 | ... != ... | false | test.c:102:16:102:21 | j | @@ -68,98 +88,187 @@ | test.c:102:16:102:21 | ... < ... | false | test.c:109:26:117:12 | { ... } | | test.c:102:16:102:21 | ... < ... | false | test.c:113:9:113:16 | return ... | | test.c:102:16:102:21 | ... < ... | true | test.c:102:29:102:26 | { ... } | +| test.c:109:9:109:9 | x | not 0 | test.c:109:19:109:23 | y | +| test.c:109:9:109:9 | x | not 0 | test.c:113:9:113:16 | return ... | | test.c:109:9:109:14 | ... == ... | false | test.c:109:19:109:23 | y | | test.c:109:9:109:14 | ... == ... | false | test.c:113:9:113:16 | return ... | | test.c:109:9:109:23 | ... \|\| ... | false | test.c:113:9:113:16 | return ... | | test.c:109:19:109:23 | ... < ... | false | test.c:113:9:113:16 | return ... | +| test.c:126:7:126:7 | 1 | not 0 | test.c:126:12:126:26 | call to test3_condition | +| test.c:126:7:126:7 | 1 | not 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:7 | 1 | not 0 | test.c:131:3:131:7 | if (...) ... | +| test.c:126:7:126:7 | 1 | not 0 | test.c:131:10:132:16 | { ... } | +| test.c:126:7:126:7 | 1 | not 0 | test.c:134:1:123:10 | return ... | | test.c:126:7:126:7 | 1 | true | test.c:126:12:126:26 | call to test3_condition | | test.c:126:7:126:7 | 1 | true | test.c:126:31:128:16 | { ... } | | test.c:126:7:126:7 | 1 | true | test.c:131:3:131:7 | if (...) ... | | test.c:126:7:126:7 | 1 | true | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:7 | 1 | true | test.c:134:1:123:10 | return ... | +| test.c:126:7:126:28 | ... && ... | not 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | not 0 | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:28 | ... && ... | true | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | true | test.c:131:10:132:16 | { ... } | +| test.c:126:12:126:26 | call to test3_condition | not 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:12:126:26 | call to test3_condition | not 0 | test.c:131:10:132:16 | { ... } | | test.c:126:12:126:26 | call to test3_condition | true | test.c:126:31:128:16 | { ... } | +| test.c:126:12:126:26 | call to test3_condition | true | test.c:131:10:132:16 | { ... } | +| test.c:127:9:127:9 | 1 | not 0 | test.c:131:10:132:16 | { ... } | +| test.c:131:7:131:7 | b | not 0 | test.c:131:10:132:16 | { ... } | | test.c:131:7:131:7 | b | true | test.c:131:10:132:16 | { ... } | | test.c:137:7:137:7 | 0 | false | test.c:142:3:136:10 | return ... | +| test.c:145:16:145:16 | x | 0 | test.c:146:11:147:9 | { ... } | | test.c:146:7:146:8 | ! ... | true | test.c:146:11:147:9 | { ... } | +| test.c:146:8:146:8 | x | 0 | test.c:146:11:147:9 | { ... } | | test.c:146:8:146:8 | x | false | test.c:146:11:147:9 | { ... } | +| test.c:151:18:151:18 | p | not null | test.c:152:11:154:5 | { ... } | +| test.c:152:8:152:8 | p | not null | test.c:152:11:154:5 | { ... } | | test.c:152:8:152:8 | p | true | test.c:152:11:154:5 | { ... } | +| test.c:157:18:157:18 | p | null | test.c:158:12:160:5 | { ... } | | test.c:158:8:158:9 | ! ... | true | test.c:158:12:160:5 | { ... } | | test.c:158:9:158:9 | p | false | test.c:158:12:160:5 | { ... } | +| test.c:158:9:158:9 | p | null | test.c:158:12:160:5 | { ... } | +| test.c:163:18:163:18 | s | not 0 | test.c:164:11:166:5 | { ... } | +| test.c:164:8:164:8 | s | not 0 | test.c:164:11:166:5 | { ... } | | test.c:164:8:164:8 | s | true | test.c:164:11:166:5 | { ... } | +| test.c:169:18:169:18 | s | 0 | test.c:170:12:172:5 | { ... } | | test.c:170:8:170:9 | ! ... | true | test.c:170:12:172:5 | { ... } | +| test.c:170:9:170:9 | s | 0 | test.c:170:12:172:5 | { ... } | | test.c:170:9:170:9 | s | false | test.c:170:12:172:5 | { ... } | | test.c:176:8:176:15 | ! ... | true | test.c:176:18:178:5 | { ... } | +| test.c:176:10:176:14 | ... < ... | 0 | test.c:176:18:178:5 | { ... } | | test.c:176:10:176:14 | ... < ... | false | test.c:176:18:178:5 | { ... } | | test.c:182:8:182:34 | ! ... | true | test.c:182:37:184:5 | { ... } | | test.c:182:10:182:20 | ... >= ... | true | test.c:181:25:182:20 | { ... } | | test.c:182:10:182:20 | ... >= ... | true | test.c:182:25:182:33 | foo | +| test.c:182:10:182:33 | ... && ... | 0 | test.c:182:37:184:5 | { ... } | | test.c:182:10:182:33 | ... && ... | false | test.c:182:37:184:5 | { ... } | | test.c:182:10:182:33 | ... && ... | true | test.c:181:25:182:20 | { ... } | | test.c:182:25:182:33 | ... < ... | true | test.c:181:25:182:20 | { ... } | +| test.c:188:11:188:16 | ... != ... | 0 | test.c:190:11:192:3 | { ... } | | test.c:190:7:190:8 | ! ... | true | test.c:190:11:192:3 | { ... } | +| test.c:190:8:190:8 | c | 0 | test.c:190:11:192:3 | { ... } | | test.c:190:8:190:8 | c | false | test.c:190:11:192:3 | { ... } | +| test.c:196:11:196:16 | ... > ... | 0 | test.c:198:11:200:3 | { ... } | | test.c:198:7:198:8 | ! ... | true | test.c:198:11:200:3 | { ... } | +| test.c:198:8:198:8 | b | 0 | test.c:198:11:200:3 | { ... } | | test.c:198:8:198:8 | b | false | test.c:198:11:200:3 | { ... } | +| test.c:204:11:204:15 | ... > ... | 0 | test.c:206:11:208:3 | { ... } | | test.c:206:7:206:8 | ! ... | true | test.c:206:11:208:3 | { ... } | +| test.c:206:8:206:8 | c | 0 | test.c:206:11:208:3 | { ... } | | test.c:206:8:206:8 | c | false | test.c:206:11:208:3 | { ... } | +| test.c:215:6:215:18 | call to __builtin_expect | not 0 | test.c:215:21:217:5 | { ... } | | test.c:215:6:215:18 | call to __builtin_expect | true | test.c:215:21:217:5 | { ... } | +| test.c:219:9:219:22 | call to __builtin_expect | not 0 | test.c:219:25:221:5 | { ... } | | test.c:219:9:219:22 | call to __builtin_expect | true | test.c:219:25:221:5 | { ... } | +| test.cpp:18:8:18:10 | call to get | not null | test.cpp:19:5:19:14 | ExprStmt | | test.cpp:18:8:18:10 | call to get | true | test.cpp:19:5:19:14 | ExprStmt | +| test.cpp:30:22:30:22 | x | -1 | test.cpp:30:6:30:16 | doSomething | +| test.cpp:30:22:30:22 | x | -1 | test.cpp:31:16:32:21 | { ... } | +| test.cpp:30:22:30:22 | x | not -1 | test.cpp:30:6:30:16 | doSomething | +| test.cpp:30:22:30:22 | x | not -1 | test.cpp:34:1:34:1 | return ... | +| test.cpp:31:7:31:7 | x | -1 | test.cpp:30:6:30:16 | doSomething | +| test.cpp:31:7:31:7 | x | -1 | test.cpp:31:16:32:21 | { ... } | +| test.cpp:31:7:31:7 | x | not -1 | test.cpp:30:6:30:16 | doSomething | +| test.cpp:31:7:31:7 | x | not -1 | test.cpp:34:1:34:1 | return ... | | test.cpp:31:7:31:13 | ... == ... | false | test.cpp:30:6:30:16 | doSomething | | test.cpp:31:7:31:13 | ... == ... | false | test.cpp:34:1:34:1 | return ... | | test.cpp:31:7:31:13 | ... == ... | true | test.cpp:30:6:30:16 | doSomething | | test.cpp:31:7:31:13 | ... == ... | true | test.cpp:31:16:32:21 | { ... } | | test.cpp:42:13:42:20 | call to getABool | true | test.cpp:43:9:45:23 | { ... } | -| test.cpp:61:10:61:10 | i | Case[0] | test.cpp:62:5:64:12 | case ...: | -| test.cpp:61:10:61:10 | i | Case[1] | test.cpp:65:5:66:10 | case ...: | -| test.cpp:74:10:74:10 | i | Case[0..10] | test.cpp:75:5:77:12 | case ...: | -| test.cpp:74:10:74:10 | i | Case[11..20] | test.cpp:78:5:79:10 | case ...: | +| test.cpp:60:31:60:31 | i | 0 | test.cpp:62:5:64:12 | case ...: | +| test.cpp:60:31:60:31 | i | 1 | test.cpp:65:5:66:10 | case ...: | +| test.cpp:61:10:61:10 | i | 0 | test.cpp:62:5:64:12 | case ...: | +| test.cpp:61:10:61:10 | i | 1 | test.cpp:65:5:66:10 | case ...: | +| test.cpp:73:30:73:30 | i | Lower bound 0 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:73:30:73:30 | i | Lower bound 11 | test.cpp:78:5:79:10 | case ...: | +| test.cpp:73:30:73:30 | i | Upper bound 10 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:73:30:73:30 | i | Upper bound 20 | test.cpp:78:5:79:10 | case ...: | +| test.cpp:74:10:74:10 | i | Lower bound 0 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:74:10:74:10 | i | Lower bound 11 | test.cpp:78:5:79:10 | case ...: | +| test.cpp:74:10:74:10 | i | Upper bound 10 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:74:10:74:10 | i | Upper bound 20 | test.cpp:78:5:79:10 | case ...: | +| test.cpp:92:31:92:31 | c | not null | test.cpp:93:9:94:7 | { ... } | +| test.cpp:93:6:93:6 | c | not null | test.cpp:93:9:94:7 | { ... } | | test.cpp:93:6:93:6 | c | true | test.cpp:93:9:94:7 | { ... } | | test.cpp:99:6:99:6 | f | true | test.cpp:99:9:100:7 | { ... } | | test.cpp:105:6:105:14 | ... != ... | true | test.cpp:105:17:106:7 | { ... } | | test.cpp:111:6:111:14 | ... != ... | true | test.cpp:111:17:112:7 | { ... } | +| test.cpp:119:16:119:16 | b | true | test.cpp:123:5:125:20 | { ... } | +| test.cpp:119:16:119:16 | b | true | test.cpp:125:23:125:29 | return ... | | test.cpp:122:9:122:9 | b | true | test.cpp:123:5:125:20 | { ... } | | test.cpp:122:9:122:9 | b | true | test.cpp:125:23:125:29 | return ... | | test.cpp:125:13:125:20 | ! ... | true | test.cpp:125:23:125:29 | return ... | | test.cpp:125:14:125:17 | call to safe | false | test.cpp:125:23:125:29 | return ... | +| test.cpp:131:6:131:21 | call to __builtin_expect | not 0 | test.cpp:131:40:132:9 | { ... } | | test.cpp:131:6:131:21 | call to __builtin_expect | true | test.cpp:131:40:132:9 | { ... } | +| test.cpp:135:6:135:21 | call to __builtin_expect | not 0 | test.cpp:135:40:136:9 | { ... } | | test.cpp:135:6:135:21 | call to __builtin_expect | true | test.cpp:135:40:136:9 | { ... } | +| test.cpp:141:6:141:21 | call to __builtin_expect | not 0 | test.cpp:141:36:142:9 | { ... } | | test.cpp:141:6:141:21 | call to __builtin_expect | true | test.cpp:141:36:142:9 | { ... } | +| test.cpp:145:6:145:21 | call to __builtin_expect | not 0 | test.cpp:145:36:146:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | true | test.cpp:145:36:146:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | false | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | true | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | false | test.cpp:152:11:153:9 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | false | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | true | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:8:160:8 | c | false | test.cpp:160:11:162:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | false | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | true | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:8:168:8 | b | false | test.cpp:168:11:170:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | false | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | true | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:8:176:8 | c | false | test.cpp:176:11:178:3 | { ... } | +| test.cpp:181:28:181:29 | b1 | true | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:28:181:29 | b1 | true | test.cpp:182:14:182:15 | b2 | +| test.cpp:181:28:181:29 | b1 | true | test.cpp:185:10:188:7 | { ... } | +| test.cpp:181:37:181:38 | b2 | true | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:37:181:38 | b2 | true | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:6:182:16 | ! ... | false | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:6:182:16 | ! ... | true | test.cpp:182:19:184:7 | { ... } | | test.cpp:182:8:182:9 | b1 | true | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:9 | b1 | true | test.cpp:182:14:182:15 | b2 | +| test.cpp:182:8:182:9 | b1 | true | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:8:182:15 | ... && ... | false | test.cpp:182:19:184:7 | { ... } | | test.cpp:182:8:182:15 | ... && ... | true | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:15 | ... && ... | true | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:14:182:15 | b2 | true | test.cpp:181:41:182:9 | { ... } | +| test.cpp:182:14:182:15 | b2 | true | test.cpp:185:10:188:7 | { ... } | +| test.cpp:192:27:192:28 | b1 | false | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:27:192:28 | b1 | false | test.cpp:193:14:193:15 | b2 | +| test.cpp:192:27:192:28 | b1 | false | test.cpp:193:19:196:7 | { ... } | +| test.cpp:192:36:192:37 | b2 | false | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:36:192:37 | b2 | false | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:6:193:16 | ! ... | false | test.cpp:197:10:199:7 | { ... } | | test.cpp:193:6:193:16 | ! ... | true | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:9 | b1 | false | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:9 | b1 | false | test.cpp:193:14:193:15 | b2 | +| test.cpp:193:8:193:9 | b1 | false | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | false | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | false | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | true | test.cpp:197:10:199:7 | { ... } | | test.cpp:193:14:193:15 | b2 | false | test.cpp:192:40:193:9 | { ... } | +| test.cpp:193:14:193:15 | b2 | false | test.cpp:193:19:196:7 | { ... } | +| test.cpp:208:28:208:29 | sc | 0 | test.cpp:211:18:212:13 | { ... } | +| test.cpp:208:28:208:29 | sc | 0 | test.cpp:214:20:215:13 | { ... } | +| test.cpp:208:46:208:47 | ul | 0 | test.cpp:217:18:218:13 | { ... } | +| test.cpp:208:74:208:74 | b | 0 | test.cpp:229:17:230:13 | { ... } | +| test.cpp:208:74:208:74 | b | 0 | test.cpp:232:21:233:13 | { ... } | +| test.cpp:211:9:211:10 | sc | 0 | test.cpp:211:18:212:13 | { ... } | | test.cpp:211:9:211:15 | ... == ... | true | test.cpp:211:18:212:13 | { ... } | +| test.cpp:214:9:214:10 | sc | 0 | test.cpp:214:20:215:13 | { ... } | | test.cpp:214:9:214:17 | ... == ... | true | test.cpp:214:20:215:13 | { ... } | +| test.cpp:217:9:217:10 | ul | 0 | test.cpp:217:18:218:13 | { ... } | | test.cpp:217:9:217:15 | ... == ... | true | test.cpp:217:18:218:13 | { ... } | | test.cpp:220:9:220:14 | ... == ... | true | test.cpp:220:17:221:13 | { ... } | | test.cpp:223:9:223:16 | ... == ... | true | test.cpp:223:19:224:13 | { ... } | | test.cpp:226:9:226:14 | ... == ... | true | test.cpp:226:17:227:13 | { ... } | +| test.cpp:229:9:229:9 | b | 0 | test.cpp:229:17:230:13 | { ... } | | test.cpp:229:9:229:14 | ... == ... | true | test.cpp:229:17:230:13 | { ... } | +| test.cpp:232:9:232:9 | b | 0 | test.cpp:232:21:233:13 | { ... } | | test.cpp:232:9:232:18 | ... == ... | true | test.cpp:232:21:233:13 | { ... } | | test.cpp:235:9:235:17 | ... == ... | true | test.cpp:235:20:236:13 | { ... } | +| test.cpp:235:12:235:12 | i | 0 | test.cpp:235:20:236:13 | { ... } | | test.cpp:238:9:238:17 | ... == ... | true | test.cpp:238:20:239:13 | { ... } | | test.cpp:241:9:241:17 | ... == ... | true | test.cpp:241:22:241:30 | ms | | test.cpp:241:9:241:17 | ... == ... | true | test.cpp:241:35:241:43 | ms | @@ -167,30 +276,151 @@ | test.cpp:241:9:241:30 | ... && ... | true | test.cpp:241:35:241:43 | ms | | test.cpp:241:9:241:30 | ... && ... | true | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:9:241:43 | ... && ... | true | test.cpp:241:46:242:13 | { ... } | +| test.cpp:241:12:241:12 | i | 0 | test.cpp:241:22:241:30 | ms | +| test.cpp:241:12:241:12 | i | 0 | test.cpp:241:35:241:43 | ms | +| test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:22:241:30 | ... == ... | true | test.cpp:241:35:241:43 | ms | | test.cpp:241:22:241:30 | ... == ... | true | test.cpp:241:46:242:13 | { ... } | | test.cpp:241:35:241:43 | ... == ... | true | test.cpp:241:46:242:13 | { ... } | +| test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } | | test.cpp:247:6:247:18 | ... == ... | false | test.cpp:249:10:251:3 | { ... } | | test.cpp:247:6:247:18 | ... == ... | true | test.cpp:247:21:249:3 | { ... } | +| test.cpp:247:7:247:12 | ... == ... | 0 | test.cpp:247:21:249:3 | { ... } | +| test.cpp:247:7:247:12 | ... == ... | not 0 | test.cpp:249:10:251:3 | { ... } | | test.cpp:253:6:253:18 | ... != ... | false | test.cpp:255:10:257:3 | { ... } | | test.cpp:253:6:253:18 | ... != ... | true | test.cpp:253:21:255:3 | { ... } | +| test.cpp:253:7:253:12 | ... == ... | 0 | test.cpp:255:10:257:3 | { ... } | +| test.cpp:253:7:253:12 | ... == ... | not 0 | test.cpp:253:21:255:3 | { ... } | | test.cpp:260:6:260:18 | ... == ... | false | test.cpp:262:10:264:3 | { ... } | | test.cpp:260:6:260:18 | ... == ... | true | test.cpp:260:21:262:3 | { ... } | +| test.cpp:260:7:260:12 | ... != ... | 0 | test.cpp:260:21:262:3 | { ... } | +| test.cpp:260:7:260:12 | ... != ... | not 0 | test.cpp:262:10:264:3 | { ... } | | test.cpp:266:6:266:18 | ... != ... | false | test.cpp:268:10:270:3 | { ... } | | test.cpp:266:6:266:18 | ... != ... | true | test.cpp:266:21:268:3 | { ... } | +| test.cpp:266:7:266:12 | ... != ... | 0 | test.cpp:268:10:270:3 | { ... } | +| test.cpp:266:7:266:12 | ... != ... | not 0 | test.cpp:266:21:268:3 | { ... } | | test.cpp:273:6:273:17 | ... == ... | false | test.cpp:275:10:277:3 | { ... } | | test.cpp:273:6:273:17 | ... == ... | true | test.cpp:273:20:275:3 | { ... } | +| test.cpp:273:7:273:11 | ... < ... | 0 | test.cpp:273:20:275:3 | { ... } | +| test.cpp:273:7:273:11 | ... < ... | not 0 | test.cpp:275:10:277:3 | { ... } | | test.cpp:279:6:279:17 | ... != ... | false | test.cpp:281:10:283:3 | { ... } | | test.cpp:279:6:279:17 | ... != ... | true | test.cpp:279:20:281:3 | { ... } | +| test.cpp:279:7:279:11 | ... < ... | 0 | test.cpp:281:10:283:3 | { ... } | +| test.cpp:279:7:279:11 | ... < ... | not 0 | test.cpp:279:20:281:3 | { ... } | | test.cpp:287:6:287:19 | ... == ... | false | test.cpp:289:10:291:3 | { ... } | | test.cpp:287:6:287:19 | ... == ... | true | test.cpp:287:22:289:3 | { ... } | +| test.cpp:287:7:287:13 | ... == ... | 0 | test.cpp:287:22:289:3 | { ... } | +| test.cpp:287:7:287:13 | ... == ... | not 0 | test.cpp:289:10:291:3 | { ... } | | test.cpp:293:6:293:19 | ... != ... | false | test.cpp:295:10:297:3 | { ... } | | test.cpp:293:6:293:19 | ... != ... | true | test.cpp:293:22:295:3 | { ... } | +| test.cpp:293:7:293:13 | ... == ... | 0 | test.cpp:295:10:297:3 | { ... } | +| test.cpp:293:7:293:13 | ... == ... | not 0 | test.cpp:293:22:295:3 | { ... } | | test.cpp:300:6:300:19 | ... == ... | false | test.cpp:302:10:304:3 | { ... } | | test.cpp:300:6:300:19 | ... == ... | true | test.cpp:300:22:302:3 | { ... } | +| test.cpp:300:7:300:13 | ... != ... | 0 | test.cpp:300:22:302:3 | { ... } | +| test.cpp:300:7:300:13 | ... != ... | not 0 | test.cpp:302:10:304:3 | { ... } | | test.cpp:306:6:306:19 | ... != ... | false | test.cpp:308:10:310:3 | { ... } | | test.cpp:306:6:306:19 | ... != ... | true | test.cpp:306:22:308:3 | { ... } | +| test.cpp:306:7:306:13 | ... != ... | 0 | test.cpp:308:10:310:3 | { ... } | +| test.cpp:306:7:306:13 | ... != ... | not 0 | test.cpp:306:22:308:3 | { ... } | | test.cpp:312:6:312:18 | ... == ... | false | test.cpp:314:10:316:3 | { ... } | | test.cpp:312:6:312:18 | ... == ... | true | test.cpp:312:21:314:3 | { ... } | +| test.cpp:312:7:312:12 | ... < ... | 0 | test.cpp:312:21:314:3 | { ... } | +| test.cpp:312:7:312:12 | ... < ... | not 0 | test.cpp:314:10:316:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | false | test.cpp:320:10:322:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | true | test.cpp:318:21:320:3 | { ... } | +| test.cpp:318:7:318:12 | ... < ... | 0 | test.cpp:320:10:322:3 | { ... } | +| test.cpp:318:7:318:12 | ... < ... | not 0 | test.cpp:318:21:320:3 | { ... } | +| test.cpp:327:46:327:46 | b | true | test.cpp:331:3:332:10 | { ... } | +| test.cpp:330:7:330:7 | b | true | test.cpp:331:3:332:10 | { ... } | +| test.cpp:334:11:334:11 | x | Lower bound 40 | test.cpp:336:3:338:7 | case ...: | +| test.cpp:334:11:334:11 | x | Upper bound 50 | test.cpp:336:3:338:7 | case ...: | +| test.cpp:348:25:348:25 | y | not null | test.cpp:349:29:349:30 | 42 | +| test.cpp:348:25:348:25 | y | not null | test.cpp:350:15:351:7 | { ... } | +| test.cpp:348:25:348:25 | y | null | test.cpp:349:34:349:34 | 0 | +| test.cpp:349:11:349:22 | call to testNotNull1 | false | test.cpp:349:34:349:34 | 0 | +| test.cpp:349:11:349:22 | call to testNotNull1 | true | test.cpp:349:29:349:30 | 42 | +| test.cpp:349:11:349:22 | call to testNotNull1 | true | test.cpp:350:15:351:7 | { ... } | +| test.cpp:349:11:349:34 | ... ? ... : ... | not 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:349:24:349:24 | y | not null | test.cpp:349:29:349:30 | 42 | +| test.cpp:349:24:349:24 | y | not null | test.cpp:350:15:351:7 | { ... } | +| test.cpp:349:24:349:24 | y | null | test.cpp:349:34:349:34 | 0 | +| test.cpp:349:29:349:30 | 42 | not 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:7 | x | not 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | true | test.cpp:350:15:351:7 | { ... } | +| test.cpp:355:25:355:29 | input | not null | test.cpp:357:3:357:13 | return ... | +| test.cpp:355:25:355:29 | input | null | test.cpp:356:25:356:36 | return ... | +| test.cpp:356:7:356:11 | input | not null | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:11 | input | null | test.cpp:356:25:356:36 | return ... | +| test.cpp:356:7:356:22 | ... == ... | false | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | true | test.cpp:356:25:356:36 | return ... | +| test.cpp:360:26:360:31 | number | not null | test.cpp:361:35:361:40 | number | +| test.cpp:360:26:360:31 | number | null | test.cpp:361:30:361:30 | 0 | +| test.cpp:361:10:361:15 | number | not null | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:15 | number | null | test.cpp:361:30:361:30 | 0 | +| test.cpp:361:10:361:26 | ... == ... | false | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | true | test.cpp:361:30:361:30 | 0 | +| test.cpp:364:33:364:34 | s1 | not null | test.cpp:365:15:365:16 | s2 | +| test.cpp:364:33:364:34 | s1 | not null | test.cpp:366:3:366:12 | return ... | +| test.cpp:364:43:364:44 | s2 | not null | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:9 | ! ... | false | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:7:365:9 | ! ... | false | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | false | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | not null | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | not null | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | true | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | true | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:14:365:16 | ! ... | false | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | not null | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | true | test.cpp:366:3:366:12 | return ... | +| test.cpp:371:29:371:32 | flag | false | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:371:29:371:32 | flag | true | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:372:10:372:13 | flag | false | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:372:10:372:13 | flag | true | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:375:25:375:25 | p | not null | test.cpp:376:24:377:7 | { ... } | +| test.cpp:375:25:375:25 | p | not null | test.cpp:382:24:383:7 | { ... } | +| test.cpp:375:25:375:25 | p | null | test.cpp:378:10:379:7 | { ... } | +| test.cpp:375:25:375:25 | p | null | test.cpp:384:10:385:7 | { ... } | +| test.cpp:375:33:375:33 | i | not null | test.cpp:390:10:391:7 | { ... } | +| test.cpp:375:42:375:42 | s | not null | test.cpp:396:10:397:7 | { ... } | +| test.cpp:375:50:375:50 | b | false | test.cpp:404:5:406:12 | case ...: | +| test.cpp:375:50:375:50 | b | true | test.cpp:401:5:403:12 | case ...: | +| test.cpp:376:7:376:18 | call to testNotNull1 | false | test.cpp:378:10:379:7 | { ... } | +| test.cpp:376:7:376:18 | call to testNotNull1 | true | test.cpp:376:24:377:7 | { ... } | +| test.cpp:376:20:376:20 | p | not null | test.cpp:376:24:377:7 | { ... } | +| test.cpp:376:20:376:20 | p | null | test.cpp:378:10:379:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | false | test.cpp:384:10:385:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | true | test.cpp:382:24:383:7 | { ... } | +| test.cpp:382:20:382:20 | p | not null | test.cpp:382:24:383:7 | { ... } | +| test.cpp:382:20:382:20 | p | null | test.cpp:384:10:385:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | false | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | true | test.cpp:388:32:389:7 | { ... } | +| test.cpp:388:12:388:26 | call to getNumOrDefault | 0 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:388:12:388:26 | call to getNumOrDefault | not 0 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:28:388:28 | i | not null | test.cpp:390:10:391:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | false | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | true | test.cpp:394:50:395:7 | { ... } | +| test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | 0 | test.cpp:394:50:395:7 | { ... } | +| test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | not 0 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:36:394:36 | s | not null | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:39:394:46 | suffix | not null | test.cpp:396:10:397:7 | { ... } | +| test.cpp:400:11:400:25 | call to testEnumWrapper | 1 | test.cpp:401:5:403:12 | case ...: | +| test.cpp:400:11:400:25 | call to testEnumWrapper | 2 | test.cpp:404:5:406:12 | case ...: | +| test.cpp:400:27:400:27 | b | false | test.cpp:404:5:406:12 | case ...: | +| test.cpp:400:27:400:27 | b | true | test.cpp:401:5:403:12 | case ...: | +| test.cpp:410:26:410:26 | o | not null | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:410:26:410:26 | o | not null | test.cpp:412:1:412:1 | return ... | +| test.cpp:410:26:410:26 | o | null | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:410:26:410:26 | o | null | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:7:411:8 | ! ... | false | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | false | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:7:411:8 | ! ... | true | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | true | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | false | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | false | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | not null | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | not null | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:8:411:8 | o | null | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | null | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | true | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | true | test.cpp:412:1:412:1 | return ... | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql index 698b80a06a0..1d9282807bd 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql @@ -7,6 +7,6 @@ import cpp import semmle.code.cpp.controlflow.Guards -from GuardCondition guard, AbstractValue value, BasicBlock block +from GuardCondition guard, GuardValue value, BasicBlock block where guard.valueControls(block, value) select guard, value, block diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index c9f52e5f190..0de63fa505b 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -219,18 +219,26 @@ binary | test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | test.cpp:141:36:142:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | test.cpp:145:36:146:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | test.cpp:145:36:146:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:8:160:8 | c | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:8:160:8 | c | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:8:168:8 | b | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | test.cpp:176:11:178:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:8:176:8 | c | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | test.cpp:176:11:178:3 | { ... } | @@ -475,6 +483,24 @@ binary | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:11:318:12 | 42 | >= | test.cpp:318:7:318:7 | a | 1 | test.cpp:318:21:320:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:18:318:18 | 0 | != | test.cpp:318:7:318:12 | ... < ... | 0 | test.cpp:318:21:320:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:18:318:18 | 0 | == | test.cpp:318:7:318:12 | ... < ... | 0 | test.cpp:320:10:322:3 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | test.cpp:350:7:350:7 | x | != | test.cpp:350:12:350:12 | 0 | 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | test.cpp:350:12:350:12 | 0 | != | test.cpp:350:7:350:7 | x | 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:11 | input | != | test.cpp:356:16:356:22 | 0 | 0 | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:11 | input | == | test.cpp:356:16:356:22 | 0 | 0 | test.cpp:356:25:356:36 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:16:356:22 | 0 | != | test.cpp:356:7:356:11 | input | 0 | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:16:356:22 | 0 | == | test.cpp:356:7:356:11 | input | 0 | test.cpp:356:25:356:36 | return ... | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:15 | number | != | test.cpp:361:20:361:26 | 0 | 0 | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:15 | number | == | test.cpp:361:20:361:26 | 0 | 0 | test.cpp:361:30:361:30 | 0 | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:20:361:26 | 0 | != | test.cpp:361:10:361:15 | number | 0 | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:20:361:26 | 0 | == | test.cpp:361:10:361:15 | number | 0 | test.cpp:361:30:361:30 | 0 | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:7 | 0 | != | test.cpp:388:12:388:26 | call to getNumOrDefault | 0 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:7 | 0 | == | test.cpp:388:12:388:26 | call to getNumOrDefault | 0 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:12:388:26 | call to getNumOrDefault | != | test.cpp:388:7:388:7 | 0 | 0 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:12:388:26 | call to getNumOrDefault | == | test.cpp:388:7:388:7 | 0 | 0 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:10 | 0 | != | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | 0 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:10 | 0 | == | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | 0 | test.cpp:394:50:395:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | != | test.cpp:394:7:394:10 | 0 | 0 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | == | test.cpp:394:7:394:10 | 0 | 0 | test.cpp:394:50:395:7 | { ... } | unary | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | test.c:10:12:11:14 | { ... } | | test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | test.c:7:16:9:14 | { ... } | @@ -736,11 +762,17 @@ unary | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:134:1:123:10 | return ... | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:131:10:132:16 | { ... } | | test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:126:31:128:16 | { ... } | +| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:131:10:132:16 | { ... } | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:126:31:128:16 | { ... } | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:131:10:132:16 | { ... } | | test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:126:31:128:16 | { ... } | +| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:131:10:132:16 | { ... } | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | test.c:131:10:132:16 | { ... } | | test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | test.c:131:10:132:16 | { ... } | | test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | test.c:142:3:136:10 | return ... | @@ -835,8 +867,14 @@ unary | test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | test.cpp:31:16:32:21 | { ... } | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | test.cpp:43:9:45:23 | { ... } | | test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | test.cpp:43:9:45:23 | { ... } | +| test.cpp:60:31:60:31 | i | test.cpp:61:10:61:10 | i | == | 0 | test.cpp:62:5:64:12 | case ...: | +| test.cpp:60:31:60:31 | i | test.cpp:61:10:61:10 | i | == | 1 | test.cpp:65:5:66:10 | case ...: | | test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | test.cpp:62:5:64:12 | case ...: | | test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | test.cpp:65:5:66:10 | case ...: | +| test.cpp:73:30:73:30 | i | test.cpp:74:10:74:10 | i | < | 11 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:73:30:73:30 | i | test.cpp:74:10:74:10 | i | < | 21 | test.cpp:78:5:79:10 | case ...: | +| test.cpp:73:30:73:30 | i | test.cpp:74:10:74:10 | i | >= | 0 | test.cpp:75:5:77:12 | case ...: | +| test.cpp:73:30:73:30 | i | test.cpp:74:10:74:10 | i | >= | 11 | test.cpp:78:5:79:10 | case ...: | | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | test.cpp:75:5:77:12 | case ...: | | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 21 | test.cpp:78:5:79:10 | case ...: | | test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | test.cpp:75:5:77:12 | case ...: | @@ -849,6 +887,10 @@ unary | test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | == | 1 | test.cpp:105:17:106:7 | { ... } | | test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | != | 0 | test.cpp:111:17:112:7 | { ... } | | test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | == | 1 | test.cpp:111:17:112:7 | { ... } | +| test.cpp:119:16:119:16 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:123:5:125:20 | { ... } | +| test.cpp:119:16:119:16 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:125:23:125:29 | return ... | +| test.cpp:119:16:119:16 | b | test.cpp:122:9:122:9 | b | == | 1 | test.cpp:123:5:125:20 | { ... } | +| test.cpp:119:16:119:16 | b | test.cpp:122:9:122:9 | b | == | 1 | test.cpp:125:23:125:29 | return ... | | test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:123:5:125:20 | { ... } | | test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:125:23:125:29 | return ... | | test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | test.cpp:123:5:125:20 | { ... } | @@ -871,6 +913,11 @@ unary | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | test.cpp:145:36:146:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | == | 1 | test.cpp:145:36:146:9 | { ... } | | test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | test.cpp:145:36:146:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:151:8:151:13 | ... < ... | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } | @@ -885,6 +932,10 @@ unary | test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | == | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } | | test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:158:12:158:17 | ... != ... | != | 1 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:158:12:158:17 | ... != ... | == | 0 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:160:8:160:8 | c | != | 1 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:158:12:158:17 | ... != ... | test.cpp:160:8:160:8 | c | == | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | != | 1 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | == | 0 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | != | 0 | test.cpp:160:11:162:3 | { ... } | @@ -897,6 +948,11 @@ unary | test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | == | 1 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | != | 1 | test.cpp:160:11:162:3 | { ... } | | test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | == | 0 | test.cpp:160:11:162:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:166:12:166:12 | a | < | 11 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:166:12:166:17 | ... > ... | != | 1 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:166:12:166:17 | ... > ... | == | 0 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:168:8:168:8 | b | != | 1 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:166:12:166:17 | ... > ... | test.cpp:168:8:168:8 | b | == | 0 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | 11 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | != | 1 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | == | 0 | test.cpp:168:11:170:3 | { ... } | @@ -911,6 +967,10 @@ unary | test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | == | 1 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | != | 1 | test.cpp:168:11:170:3 | { ... } | | test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | == | 0 | test.cpp:168:11:170:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:174:12:174:16 | ... > ... | != | 1 | test.cpp:176:11:178:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:174:12:174:16 | ... > ... | == | 0 | test.cpp:176:11:178:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:176:8:176:8 | c | != | 1 | test.cpp:176:11:178:3 | { ... } | +| test.cpp:174:12:174:16 | ... > ... | test.cpp:176:8:176:8 | c | == | 0 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | != | 1 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | == | 0 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | != | 0 | test.cpp:176:11:178:3 | { ... } | @@ -923,6 +983,16 @@ unary | test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | == | 1 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | != | 1 | test.cpp:176:11:178:3 | { ... } | | test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | == | 0 | test.cpp:176:11:178:3 | { ... } | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:182:14:182:15 | b2 | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:185:10:188:7 | { ... } | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:182:14:182:15 | b2 | +| test.cpp:181:28:181:29 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:185:10:188:7 | { ... } | +| test.cpp:181:37:181:38 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:37:181:38 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:185:10:188:7 | { ... } | +| test.cpp:181:37:181:38 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:181:37:181:38 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 0 | test.cpp:182:19:184:7 | { ... } | | test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | == | 0 | test.cpp:185:10:188:7 | { ... } | @@ -937,8 +1007,10 @@ unary | test.cpp:182:6:182:16 | ! ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:182:14:182:15 | b2 | +| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:182:14:182:15 | b2 | +| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 0 | test.cpp:182:19:184:7 | { ... } | | test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:185:10:188:7 | { ... } | @@ -960,7 +1032,19 @@ unary | test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:181:41:182:9 | { ... } | | test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:185:10:188:7 | { ... } | | test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:181:41:182:9 | { ... } | +| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:14:193:15 | b2 | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:19:196:7 | { ... } | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:14:193:15 | b2 | +| test.cpp:192:27:192:28 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:19:196:7 | { ... } | +| test.cpp:192:36:192:37 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:36:192:37 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:193:19:196:7 | { ... } | +| test.cpp:192:36:192:37 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:192:36:192:37 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 1 | test.cpp:197:10:199:7 | { ... } | | test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | == | 0 | test.cpp:197:10:199:7 | { ... } | @@ -975,8 +1059,10 @@ unary | test.cpp:193:6:193:16 | ! ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:14:193:15 | b2 | +| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:14:193:15 | b2 | +| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 1 | test.cpp:197:10:199:7 | { ... } | @@ -998,7 +1084,9 @@ unary | test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:192:40:193:9 | { ... } | | test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:193:19:196:7 | { ... } | | test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:192:40:193:9 | { ... } | +| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } | | test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:10 | sc | == | 0 | test.cpp:211:18:212:13 | { ... } | | test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | != | 0 | test.cpp:211:18:212:13 | { ... } | | test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | == | 1 | test.cpp:211:18:212:13 | { ... } | @@ -1224,3 +1312,124 @@ unary | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:7 | a | >= | 42 | test.cpp:320:10:322:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | != | 0 | test.cpp:318:21:320:3 | { ... } | | test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | == | 0 | test.cpp:320:10:322:3 | { ... } | +| test.cpp:327:46:327:46 | b | test.cpp:330:7:330:7 | b | != | 0 | test.cpp:331:3:332:10 | { ... } | +| test.cpp:327:46:327:46 | b | test.cpp:330:7:330:7 | b | == | 1 | test.cpp:331:3:332:10 | { ... } | +| test.cpp:330:7:330:7 | b | test.cpp:330:7:330:7 | b | != | 0 | test.cpp:331:3:332:10 | { ... } | +| test.cpp:330:7:330:7 | b | test.cpp:330:7:330:7 | b | == | 1 | test.cpp:331:3:332:10 | { ... } | +| test.cpp:334:11:334:11 | x | test.cpp:334:11:334:11 | x | < | 51 | test.cpp:336:3:338:7 | case ...: | +| test.cpp:334:11:334:11 | x | test.cpp:334:11:334:11 | x | >= | 40 | test.cpp:336:3:338:7 | case ...: | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | != | 0 | test.cpp:349:29:349:30 | 42 | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | != | 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | != | 1 | test.cpp:349:34:349:34 | 0 | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | == | 0 | test.cpp:349:34:349:34 | 0 | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | == | 1 | test.cpp:349:29:349:30 | 42 | +| test.cpp:349:11:349:22 | call to testNotNull1 | test.cpp:349:11:349:22 | call to testNotNull1 | == | 1 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | test.cpp:350:7:350:7 | x | != | 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | test.cpp:350:7:350:12 | ... != ... | != | 0 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:350:7:350:12 | ... != ... | test.cpp:350:7:350:12 | ... != ... | == | 1 | test.cpp:350:15:351:7 | { ... } | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:11 | input | != | 0 | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:11 | input | == | 0 | test.cpp:356:25:356:36 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:22 | ... == ... | != | 0 | test.cpp:356:25:356:36 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:22 | ... == ... | != | 1 | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:22 | ... == ... | == | 0 | test.cpp:357:3:357:13 | return ... | +| test.cpp:356:7:356:22 | ... == ... | test.cpp:356:7:356:22 | ... == ... | == | 1 | test.cpp:356:25:356:36 | return ... | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:15 | number | != | 0 | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:15 | number | == | 0 | test.cpp:361:30:361:30 | 0 | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:26 | ... == ... | != | 0 | test.cpp:361:30:361:30 | 0 | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:26 | ... == ... | != | 1 | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:26 | ... == ... | == | 0 | test.cpp:361:35:361:40 | number | +| test.cpp:361:10:361:26 | ... == ... | test.cpp:361:10:361:26 | ... == ... | == | 1 | test.cpp:361:30:361:30 | 0 | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:7:365:9 | ! ... | != | 1 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:7:365:9 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:7:365:9 | ! ... | == | 0 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:7:365:9 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:8:365:9 | s1 | != | 0 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:8:365:9 | s1 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:8:365:9 | s1 | == | 1 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:7:365:9 | ! ... | test.cpp:365:8:365:9 | s1 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:7:365:9 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:7:365:9 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:8:365:9 | s1 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:8:365:9 | s1 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:14:365:16 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:14:365:16 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:15:365:16 | s2 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:7:365:16 | ... \|\| ... | test.cpp:365:15:365:16 | s2 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:7:365:9 | ! ... | != | 1 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:7:365:9 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:7:365:9 | ! ... | == | 0 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:7:365:9 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:8:365:9 | s1 | != | 0 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:8:365:9 | s1 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:8:365:9 | s1 | == | 1 | test.cpp:365:15:365:16 | s2 | +| test.cpp:365:8:365:9 | s1 | test.cpp:365:8:365:9 | s1 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:14:365:16 | ! ... | test.cpp:365:14:365:16 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:14:365:16 | ! ... | test.cpp:365:14:365:16 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:14:365:16 | ! ... | test.cpp:365:15:365:16 | s2 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:14:365:16 | ! ... | test.cpp:365:15:365:16 | s2 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | test.cpp:365:14:365:16 | ! ... | != | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | test.cpp:365:14:365:16 | ! ... | == | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | test.cpp:365:15:365:16 | s2 | != | 0 | test.cpp:366:3:366:12 | return ... | +| test.cpp:365:15:365:16 | s2 | test.cpp:365:15:365:16 | s2 | == | 1 | test.cpp:366:3:366:12 | return ... | +| test.cpp:371:29:371:32 | flag | test.cpp:372:10:372:13 | flag | != | 0 | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:371:29:371:32 | flag | test.cpp:372:10:372:13 | flag | != | 1 | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:371:29:371:32 | flag | test.cpp:372:10:372:13 | flag | == | 0 | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:371:29:371:32 | flag | test.cpp:372:10:372:13 | flag | == | 1 | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:372:10:372:13 | flag | test.cpp:372:10:372:13 | flag | != | 0 | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:372:10:372:13 | flag | test.cpp:372:10:372:13 | flag | != | 1 | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:372:10:372:13 | flag | test.cpp:372:10:372:13 | flag | == | 0 | test.cpp:372:35:372:49 | FAILURE | +| test.cpp:372:10:372:13 | flag | test.cpp:372:10:372:13 | flag | == | 1 | test.cpp:372:17:372:31 | SUCCESS | +| test.cpp:376:7:376:18 | call to testNotNull1 | test.cpp:376:7:376:18 | call to testNotNull1 | != | 0 | test.cpp:376:24:377:7 | { ... } | +| test.cpp:376:7:376:18 | call to testNotNull1 | test.cpp:376:7:376:18 | call to testNotNull1 | != | 1 | test.cpp:378:10:379:7 | { ... } | +| test.cpp:376:7:376:18 | call to testNotNull1 | test.cpp:376:7:376:18 | call to testNotNull1 | == | 0 | test.cpp:378:10:379:7 | { ... } | +| test.cpp:376:7:376:18 | call to testNotNull1 | test.cpp:376:7:376:18 | call to testNotNull1 | == | 1 | test.cpp:376:24:377:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | test.cpp:382:7:382:18 | call to testNotNull2 | != | 0 | test.cpp:382:24:383:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | test.cpp:382:7:382:18 | call to testNotNull2 | != | 1 | test.cpp:384:10:385:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | test.cpp:382:7:382:18 | call to testNotNull2 | == | 0 | test.cpp:384:10:385:7 | { ... } | +| test.cpp:382:7:382:18 | call to testNotNull2 | test.cpp:382:7:382:18 | call to testNotNull2 | == | 1 | test.cpp:382:24:383:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:29 | ... == ... | != | 0 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:29 | ... == ... | != | 1 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:29 | ... == ... | == | 0 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:7:388:29 | ... == ... | == | 1 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:12:388:26 | call to getNumOrDefault | != | 0 | test.cpp:390:10:391:7 | { ... } | +| test.cpp:388:7:388:29 | ... == ... | test.cpp:388:12:388:26 | call to getNumOrDefault | == | 0 | test.cpp:388:32:389:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:47 | ... == ... | != | 0 | test.cpp:394:50:395:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:47 | ... == ... | != | 1 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:47 | ... == ... | == | 0 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:7:394:47 | ... == ... | == | 1 | test.cpp:394:50:395:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | != | 0 | test.cpp:396:10:397:7 | { ... } | +| test.cpp:394:7:394:47 | ... == ... | test.cpp:394:15:394:34 | call to returnAIfNoneAreNull | == | 0 | test.cpp:394:50:395:7 | { ... } | +| test.cpp:400:11:400:25 | call to testEnumWrapper | test.cpp:400:11:400:25 | call to testEnumWrapper | == | 1 | test.cpp:401:5:403:12 | case ...: | +| test.cpp:400:11:400:25 | call to testEnumWrapper | test.cpp:400:11:400:25 | call to testEnumWrapper | == | 2 | test.cpp:404:5:406:12 | case ...: | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | != | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | != | 0 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | != | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | != | 1 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | == | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | == | 0 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | == | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:7:411:8 | ! ... | == | 1 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | != | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | != | 0 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | != | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | != | 1 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | == | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | == | 0 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | == | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:7:411:8 | ! ... | test.cpp:411:8:411:8 | o | == | 1 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | != | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | != | 0 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | != | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | != | 1 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | == | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | == | 0 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | == | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:7:411:8 | ! ... | == | 1 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | != | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | != | 0 | test.cpp:412:1:412:1 | return ... | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | != | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | != | 1 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | == | 0 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | == | 0 | test.cpp:411:11:411:18 | ExprStmt | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | == | 1 | test.cpp:410:6:410:18 | ensureNotNull | +| test.cpp:411:8:411:8 | o | test.cpp:411:8:411:8 | o | == | 1 | test.cpp:412:1:412:1 | return ... | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.expected new file mode 100644 index 00000000000..afc6f314316 --- /dev/null +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.expected @@ -0,0 +1,31 @@ +| test.cpp:351:5:351:7 | Call: call to chk | '42:not 0' | +| test.cpp:351:5:351:7 | Call: call to chk | '... ? ... : ...:not 0' | +| test.cpp:351:5:351:7 | Call: call to chk | 'call to testNotNull1:true' | +| test.cpp:351:5:351:7 | Call: call to chk | 'x != 0:true' | +| test.cpp:351:5:351:7 | Call: call to chk | 'x:not 0' | +| test.cpp:351:5:351:7 | Call: call to chk | 'y:not null' | +| test.cpp:377:5:377:7 | Call: call to chk | 'call to testNotNull1:true' | +| test.cpp:377:5:377:7 | Call: call to chk | 'p:not null' | +| test.cpp:379:5:379:7 | Call: call to chk | 'call to testNotNull1:false' | +| test.cpp:379:5:379:7 | Call: call to chk | p:null | +| test.cpp:383:5:383:7 | Call: call to chk | 'call to testNotNull2:true' | +| test.cpp:383:5:383:7 | Call: call to chk | 'p:not null' | +| test.cpp:385:5:385:7 | Call: call to chk | 'call to testNotNull2:false' | +| test.cpp:385:5:385:7 | Call: call to chk | p:null | +| test.cpp:389:5:389:7 | Call: call to chk | '0 == call to getNumOrDefault:true' | +| test.cpp:389:5:389:7 | Call: call to chk | 'call to getNumOrDefault:0' | +| test.cpp:391:5:391:7 | Call: call to chk | '0 == call to getNumOrDefault:false' | +| test.cpp:391:5:391:7 | Call: call to chk | 'call to getNumOrDefault:not 0' | +| test.cpp:391:5:391:7 | Call: call to chk | 'i:not null' | +| test.cpp:395:5:395:7 | Call: call to chk | '0 == call to returnAIfNoneAreNull:true' | +| test.cpp:395:5:395:7 | Call: call to chk | 'call to returnAIfNoneAreNull:0' | +| test.cpp:397:5:397:7 | Call: call to chk | '0 == call to returnAIfNoneAreNull:false' | +| test.cpp:397:5:397:7 | Call: call to chk | 'call to returnAIfNoneAreNull:not 0' | +| test.cpp:397:5:397:7 | Call: call to chk | 's:not null' | +| test.cpp:397:5:397:7 | Call: call to chk | 'suffix:not null' | +| test.cpp:402:7:402:9 | Call: call to chk | 'call to testEnumWrapper:1' | +| test.cpp:402:7:402:9 | Call: call to chk | 'call to testEnumWrapper=SUCCESS:true' | +| test.cpp:402:7:402:9 | Call: call to chk | b:true | +| test.cpp:405:7:405:9 | Call: call to chk | 'call to testEnumWrapper:2' | +| test.cpp:405:7:405:9 | Call: call to chk | 'call to testEnumWrapper=FAILURE:true' | +| test.cpp:405:7:405:9 | Call: call to chk | b:false | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.ql new file mode 100644 index 00000000000..a6875080d37 --- /dev/null +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.ql @@ -0,0 +1,44 @@ +import cpp +import semmle.code.cpp.controlflow.Guards +import codeql.util.Boolean + +bindingset[s] +string escape(string s) { if s.matches("% %") then result = "'" + s + "'" else result = s } + +Expr getUnconverted(Element e) { + not e instanceof Expr and + result = e + or + result = e.(Expr).getUnconverted() +} + +string ppGuard(IRGuardCondition g, GuardValue val) { + exists(BinaryOperation bin | + bin = getUnconverted(g.getAst()) and + result = + bin.getLeftOperand() + " " + bin.getOperator() + " " + bin.getRightOperand() + ":" + val + ) + or + exists(SwitchCase cc, Expr s, string value | + cc = g.getAst() and + cc.getExpr() = s and + result = cc.getSwitchStmt().getExpr() + "=" + value + ":" + val + | + value = cc.getExpr().toString() + or + cc.isDefault() and value = "default" + ) +} + +query predicate guarded(CallInstruction c, string guard) { + c.getStaticCallTarget().hasName("chk") and + exists(IRGuardCondition g, IRBlock bb, GuardValue val | + g.valueControls(bb, val) and + c.getBlock() = bb + | + guard = escape(ppGuard(g, val)) + or + not exists(ppGuard(g, val)) and + guard = escape(getUnconverted(g.getAst()).toString() + ":" + val) + ) +} diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.qlref b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.qlref new file mode 100644 index 00000000000..5a66d6da1a0 --- /dev/null +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsInline.qlref @@ -0,0 +1,2 @@ +query: GuardsInline.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.cpp b/cpp/ql/test/library-tests/controlflow/guards/test.cpp index 2ef61734e69..7b042f95e71 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/test.cpp +++ b/cpp/ql/test/library-tests/controlflow/guards/test.cpp @@ -320,4 +320,99 @@ void test_cmp_implies_unary(int a) { } else { } -} \ No newline at end of file +} + +int foo(); + +void test_constant_value_and_case_range(bool b) +{ + int x = foo(); + if (b) + { + x = 42; + } + switch (x) + { + case 40 ... 50: + // should not be guarded by `foo() = 40..50` + use(x); + } +} + +void chk(); + +bool testNotNull1(void* input) { + return input != nullptr; +} + +void test_ternary(void* y) { + int x = testNotNull1(y) ? 42 : 0; + if (x != 0) { + chk(); // $ guarded='... ? ... : ...:not 0' guarded='42:not 0' guarded='call to testNotNull1:true' guarded='x != 0:true' guarded='x:not 0' guarded='y:not null' + } +} + +bool testNotNull2(void* input) { + if (input == nullptr) return false; + return true; +} + +int getNumOrDefault(int* number) { + return number == nullptr ? 0 : *number; +} + +char returnAIfNoneAreNull(char* s1, char* s2) { + if (!s1 || !s2) return '\0'; + return 'a'; +} + +enum class Status { SUCCESS = 1, FAILURE = 2 }; + +Status testEnumWrapper(bool flag) { + return flag ? Status::SUCCESS : Status::FAILURE; +} + +void testWrappers(void* p, int* i, char* s, bool b) { + if (testNotNull1(p)) { + chk(); // $ guarded='p:not null' guarded='call to testNotNull1:true' + } else { + chk(); // $ guarded=p:null guarded='call to testNotNull1:false' + } + + if (testNotNull2(p)) { + chk(); // $ guarded='call to testNotNull2:true' guarded='p:not null' + } else { + chk(); // $ guarded='call to testNotNull2:false' guarded=p:null + } + + if (0 == getNumOrDefault(i)) { + chk(); // $ guarded='0 == call to getNumOrDefault:true' guarded='call to getNumOrDefault:0' + } else { + chk(); // $ guarded='0 == call to getNumOrDefault:false' guarded='call to getNumOrDefault:not 0' guarded='i:not null' + } + + if ('\0' == returnAIfNoneAreNull(s, "suffix")) { + chk(); // $ guarded='0 == call to returnAIfNoneAreNull:true' guarded='call to returnAIfNoneAreNull:0' + } else { + chk(); // $ guarded='0 == call to returnAIfNoneAreNull:false' guarded='call to returnAIfNoneAreNull:not 0' guarded='s:not null' guarded='suffix:not null' + } + + switch (testEnumWrapper(b)) { + case Status::SUCCESS: + chk(); // $ guarded='call to testEnumWrapper=SUCCESS:true' guarded='call to testEnumWrapper:1' guarded=b:true + break; + case Status::FAILURE: + chk(); // $ guarded='call to testEnumWrapper=FAILURE:true' guarded='call to testEnumWrapper:2' guarded=b:false + break; + } +} + +void ensureNotNull(void* o) { + if (!o) throw 42; +} + +void testExceptionWrapper(void* s) { + chk(); // nothing guards here + ensureNotNull(s); + chk(); // $ MISSING: guarded='call to ensureNotNull:no exception' guarded='s:not null' +} diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp index 71d22ad4edd..5cddd92d27b 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp @@ -125,4 +125,67 @@ void test_phi_read_guard_2(bool b) { } sink(x); // $ SPURIOUS: ast -} \ No newline at end of file +} + +bool guarded_wrapper(int x) { + if(guarded(x)) { + return true; + } else { + return false; + } +} + +bool guarded_wrapper_2(int x) { + bool b; + if(guarded(x)) { + b = true; + } else { + b = false; + } + return b; +} + +bool guarded_wrapper_3(int x) { + bool b = false; + if(guarded(x)) { + b = true; + } + return b; +} + +bool guarded_wrapper_4(int x) { + bool b = false; + if(guarded(x)) { + return true; + } + return b; +} + +void test_guarded_wrapper() { + int x = source(); + + if(guarded_wrapper(x)) { + sink(x); // $ SPURIOUS: ast + } else { + sink(x); // $ ast,ir + } + + if(guarded_wrapper_2(x)) { + sink(x); // $ SPURIOUS: ast + } else { + sink(x); // $ ast,ir + } + + if(guarded_wrapper_3(x)) { + sink(x); // $ SPURIOUS: ast + } else { + sink(x); // $ ast,ir + } + + if(guarded_wrapper_4(x)) { + sink(x); // $ SPURIOUS: ast + } else { + sink(x); // $ ast,ir + } +} + diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected index cb25f1a21e3..ff41f299f9c 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dataflow-consistency.expected @@ -50,37 +50,21 @@ argHasPostUpdate postWithInFlow | BarrierGuard.cpp:49:6:49:6 | x [post update] | PostUpdateNode should not be the target of local flow. | | BarrierGuard.cpp:60:7:60:7 | x [post update] | PostUpdateNode should not be the target of local flow. | -| clang.cpp:22:9:22:20 | sourceArray1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| clang.cpp:23:18:23:29 | sourceArray1 [inner post update] | PostUpdateNode should not be the target of local flow. | | clang.cpp:29:22:29:23 | m1 [post update] | PostUpdateNode should not be the target of local flow. | -| clang.cpp:51:3:51:12 | stackArray [inner post update] | PostUpdateNode should not be the target of local flow. | | clang.cpp:51:3:51:15 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | dispatch.cpp:60:3:60:14 | globalBottom [post update] | PostUpdateNode should not be the target of local flow. | | dispatch.cpp:61:3:61:14 | globalMiddle [post update] | PostUpdateNode should not be the target of local flow. | -| dispatch.cpp:78:24:78:37 | call to allocateBottom [inner post update] | PostUpdateNode should not be the target of local flow. | | dispatch.cpp:148:5:148:5 | f [post update] | PostUpdateNode should not be the target of local flow. | | dispatch.cpp:168:8:168:8 | f [post update] | PostUpdateNode should not be the target of local flow. | | example.c:24:9:24:9 | x [post update] | PostUpdateNode should not be the target of local flow. | | example.c:24:20:24:20 | y [post update] | PostUpdateNode should not be the target of local flow. | | example.c:26:9:26:9 | x [post update] | PostUpdateNode should not be the target of local flow. | -| example.c:26:19:26:24 | coords [inner post update] | PostUpdateNode should not be the target of local flow. | -| example.c:28:23:28:25 | pos [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:5:5:5:12 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:5:6:5:12 | toTaint [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:8:5:8:12 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:8:6:8:12 | toTaint [inner post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:18:17:18:17 | x [inner post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:30:12:30:12 | x [inner post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:37:5:37:6 | p2 [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:37:5:37:9 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:84:3:84:7 | call to deref [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:84:3:84:14 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:84:10:84:10 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:90:3:90:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:90:4:90:4 | q [inner post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:101:14:101:14 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | flowOut.cpp:168:3:168:10 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| flowOut.cpp:168:4:168:10 | toTaint [inner post update] | PostUpdateNode should not be the target of local flow. | | globals.cpp:13:5:13:19 | flowTestGlobal1 [post update] | PostUpdateNode should not be the target of local flow. | | globals.cpp:23:5:23:19 | flowTestGlobal2 [post update] | PostUpdateNode should not be the target of local flow. | | lambdas.cpp:23:3:23:14 | v [post update] | PostUpdateNode should not be the target of local flow. | @@ -106,57 +90,30 @@ postWithInFlow | ref.cpp:109:9:109:11 | val [post update] | PostUpdateNode should not be the target of local flow. | | ref.cpp:113:11:113:13 | val [post update] | PostUpdateNode should not be the target of local flow. | | ref.cpp:115:11:115:13 | val [post update] | PostUpdateNode should not be the target of local flow. | -| self_parameter_flow.cpp:3:4:3:5 | ps [inner post update] | PostUpdateNode should not be the target of local flow. | -| self_parameter_flow.cpp:8:9:8:9 | s [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:91:3:91:9 | source1 [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:115:3:115:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:115:4:115:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:120:3:120:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:120:4:120:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:125:3:125:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:125:4:125:6 | out [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:333:5:333:13 | globalVar [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:347:5:347:13 | globalVar [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:359:5:359:9 | field [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:373:5:373:9 | field [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:384:10:384:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. | -| test.cpp:384:11:384:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:391:10:391:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. | -| test.cpp:391:11:391:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:400:10:400:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. | -| test.cpp:400:11:400:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:407:10:407:13 | ref arg & ... | PostUpdateNode should not be the target of local flow. | -| test.cpp:407:11:407:13 | tmp [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:423:21:423:25 | local [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:441:19:441:23 | local [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:472:3:472:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:472:4:472:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:477:22:477:22 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:506:3:506:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:506:4:506:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:512:35:512:35 | x [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:519:3:519:12 | stackArray [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:519:3:519:15 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:520:3:520:12 | stackArray [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:520:3:520:15 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:526:3:526:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:526:4:526:4 | e [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:531:40:531:40 | e [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:537:5:537:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:537:6:537:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:542:5:542:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:542:6:542:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:548:25:548:25 | x [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:552:25:552:25 | y [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:562:5:562:13 | globalInt [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:576:5:576:13 | globalInt [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:589:19:589:19 | x [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:596:3:596:4 | xs [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:596:3:596:7 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:602:3:602:3 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:602:3:602:7 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:608:3:608:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:608:4:608:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:639:3:639:3 | x [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:646:3:646:3 | x [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:652:3:652:3 | x [post update] | PostUpdateNode should not be the target of local flow. | @@ -167,40 +124,23 @@ postWithInFlow | test.cpp:681:3:681:3 | s [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:689:3:689:3 | s [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:690:3:690:3 | s [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:694:4:694:6 | buf [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:704:23:704:25 | buf [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:715:25:715:25 | c [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:728:3:728:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:728:4:728:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:734:41:734:41 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:808:5:808:21 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:808:6:808:21 | global_indirect1 [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:832:5:832:17 | global_direct [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:931:5:931:18 | global_pointer [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:932:5:932:19 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:932:6:932:19 | global_pointer [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1045:9:1045:11 | ref arg buf | PostUpdateNode should not be the target of local flow. | | test.cpp:1066:5:1066:5 | i [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1069:5:1069:5 | i [post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1087:5:1087:11 | content [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1088:9:1088:9 | a [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1092:5:1092:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1092:6:1092:7 | pp [inner post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1098:53:1098:53 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1108:3:1108:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1108:4:1108:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1109:3:1109:4 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1109:4:1109:4 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1138:3:1138:13 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1138:5:1138:8 | data [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1139:3:1139:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1139:4:1139:7 | data [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1153:5:1153:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1153:6:1153:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1165:5:1165:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1165:6:1165:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | test.cpp:1195:5:1195:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| test.cpp:1195:6:1195:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp index 105212ccca6..63528d712c0 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp @@ -8,7 +8,7 @@ struct Top { virtual void isSink(int x) { } virtual int notSource1() { return source(); } virtual int notSource2() { return source(); } - virtual void notSink(int x) { sink(x); } // $ SPURIOUS: ast,ir=37:19 ast,ir=45:18 + virtual void notSink(int x) { sink(x); } // $ SPURIOUS: ast=37:19 ast=45:18 }; // This class has the correct behavior for just the functions ending in 2. @@ -32,16 +32,16 @@ void VirtualDispatch(Bottom *bottomPtr, Bottom &bottomRef) { // $ ast-def=bottom sink(topPtr->isSource2()); // $ ir MISSING: ast topPtr->isSink(source()); // causing a MISSING for ast - sink(topPtr->notSource1()); // $ SPURIOUS: ast,ir - sink(topPtr->notSource2()); // $ SPURIOUS: ast,ir + sink(topPtr->notSource1()); // $ SPURIOUS: ast + sink(topPtr->notSource2()); // $ SPURIOUS: ast topPtr->notSink(source()); // causing SPURIOUS for ast,ir sink(topRef.isSource1()); // $ ir MISSING: ast sink(topRef.isSource2()); // $ ir MISSING: ast topRef.isSink(source()); // causing a MISSING for ast - sink(topRef.notSource1()); // $ SPURIOUS: ast,ir - sink(topRef.notSource2()); // $ SPURIOUS: ast,ir + sink(topRef.notSource1()); // $ SPURIOUS: ast + sink(topRef.notSource2()); // $ SPURIOUS: ast topRef.notSink(source()); // causing SPURIOUS for ast,ir } @@ -126,8 +126,8 @@ namespace virtual_inheritance { // get flow from a `Middle` value to the call qualifier. Top *topPtr = bottomPtr, &topRef = bottomRef; - sink(topPtr->isSource()); // $ MISSING: ast,ir - sink(topRef.isSource()); // $ MISSING: ast,ir + sink(topPtr->isSource()); // $ ir MISSING: ast + sink(topRef.isSource()); // $ ir MISSING: ast } } diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/guard-condition-regression-test.ql b/cpp/ql/test/library-tests/dataflow/dataflow-tests/guard-condition-regression-test.ql index a21cd910a2a..1218fe396c8 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/guard-condition-regression-test.ql +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/guard-condition-regression-test.ql @@ -17,7 +17,7 @@ module IRTestAllocationConfig implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { - exists(GuardCondition gc | node.asExpr() = gc.getAChild*()) + exists(GuardCondition gc | node.asExpr() = gc.(Expr).getAChild*()) } } diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected index 6e0b03be9c6..d9ac3c3dee5 100644 --- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected +++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected @@ -16,6 +16,14 @@ astFlow | BarrierGuard.cpp:90:11:90:16 | call to source | BarrierGuard.cpp:101:8:101:8 | x | | BarrierGuard.cpp:107:11:107:16 | call to source | BarrierGuard.cpp:112:8:112:8 | x | | BarrierGuard.cpp:116:11:116:16 | call to source | BarrierGuard.cpp:127:8:127:8 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:168:10:168:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:170:10:170:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:174:10:174:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:176:10:176:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:180:10:180:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:182:10:182:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:186:10:186:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:188:10:188:10 | x | | acrossLinkTargets.cpp:19:27:19:32 | call to source | acrossLinkTargets.cpp:12:8:12:8 | x | | clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:18:8:18:19 | sourceArray1 | | clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:22:8:22:20 | & ... | @@ -156,6 +164,10 @@ irFlow | BarrierGuard.cpp:49:10:49:15 | call to source | BarrierGuard.cpp:55:13:55:13 | x | | BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:64:14:64:14 | x | | BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:66:14:66:14 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:170:10:170:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:176:10:176:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:182:10:182:10 | x | +| BarrierGuard.cpp:165:11:165:16 | call to source | BarrierGuard.cpp:188:10:188:10 | x | | acrossLinkTargets.cpp:19:27:19:32 | call to source | acrossLinkTargets.cpp:12:8:12:8 | x | | clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:18:8:18:19 | sourceArray1 | | clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:23:17:23:29 | *& ... | @@ -169,10 +181,6 @@ irFlow | clang.cpp:50:35:50:40 | call to source | clang.cpp:53:17:53:26 | *stackArray | | clang.cpp:51:19:51:24 | call to source | clang.cpp:53:17:53:26 | *stackArray | | clang.cpp:57:21:57:28 | call to source | clang.cpp:59:8:59:8 | d | -| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:35:16:35:25 | call to notSource1 | -| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:43:15:43:24 | call to notSource1 | -| dispatch.cpp:10:37:10:42 | call to source | dispatch.cpp:36:16:36:25 | call to notSource2 | -| dispatch.cpp:10:37:10:42 | call to source | dispatch.cpp:44:15:44:24 | call to notSource2 | | dispatch.cpp:16:37:16:42 | call to source | dispatch.cpp:32:16:32:24 | call to isSource2 | | dispatch.cpp:16:37:16:42 | call to source | dispatch.cpp:40:15:40:23 | call to isSource2 | | dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:31:16:31:24 | call to isSource1 | @@ -180,13 +188,13 @@ irFlow | dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:55:22:55:30 | call to isSource1 | | dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:58:28:58:36 | call to isSource1 | | dispatch.cpp:33:18:33:23 | call to source | dispatch.cpp:23:38:23:38 | x | -| dispatch.cpp:37:19:37:24 | call to source | dispatch.cpp:11:38:11:38 | x | | dispatch.cpp:41:17:41:22 | call to source | dispatch.cpp:23:38:23:38 | x | -| dispatch.cpp:45:18:45:23 | call to source | dispatch.cpp:11:38:11:38 | x | | dispatch.cpp:69:15:69:20 | call to source | dispatch.cpp:23:38:23:38 | x | | dispatch.cpp:73:14:73:19 | call to source | dispatch.cpp:23:38:23:38 | x | | dispatch.cpp:81:13:81:18 | call to source | dispatch.cpp:23:38:23:38 | x | | dispatch.cpp:107:17:107:22 | call to source | dispatch.cpp:96:8:96:8 | x | +| dispatch.cpp:117:38:117:43 | call to source | dispatch.cpp:129:18:129:25 | call to isSource | +| dispatch.cpp:117:38:117:43 | call to source | dispatch.cpp:130:17:130:24 | call to isSource | | dispatch.cpp:140:8:140:13 | call to source | dispatch.cpp:96:8:96:8 | x | | dispatch.cpp:144:8:144:13 | call to source | dispatch.cpp:96:8:96:8 | x | | flowOut.cpp:5:16:5:21 | call to source | flowOut.cpp:31:9:31:9 | x | diff --git a/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp b/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp new file mode 100644 index 00000000000..f243b76ad14 --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp @@ -0,0 +1,127 @@ +struct Base { + void f(); + virtual void virtual_f(); +}; + +struct Derived : Base { + void f(); + void virtual_f(); +}; + +void test_simple() { + Base b; + b.f(); // $ target=2 + b.virtual_f(); // $ target=3 + + Derived d; + d.f(); // $ target=7 + d.virtual_f(); // $ target=8 + + Base* b_ptr = &d; + b_ptr->f(); // $ target=2 + b_ptr->virtual_f(); // $ target=8 + + Base& b_ref = d; + b_ref.f(); // $ target=2 + b_ref.virtual_f(); // $ target=8 + + Base* b_null = nullptr; + b_null->f(); // $ target=2 + b_null->virtual_f(); // $ target=3 + + Base* base_is_derived = new Derived(); + base_is_derived->f(); // $ target=2 + base_is_derived->virtual_f(); // $ target=8 + + Base* base_is_base = new Base(); + base_is_base->f(); // $ target=2 + base_is_base->virtual_f(); // $ target=3 + + Derived* derived_is_derived = new Derived(); + derived_is_derived->f(); // $ target=7 + derived_is_derived->virtual_f(); // $ target=8 + + Base& b_ref2 = b; + b_ref2 = d; + b_ref2.f(); // $ target=2 + b_ref2.virtual_f(); // $ target=3 +} + +struct S { + Base* b1; + Base* b2; +}; + +void test_fields() { + S s; + + s.b1 = new Base(); + s.b2 = new Derived(); + + s.b1->virtual_f(); // $ target=3 + s.b2->virtual_f(); // $ target=8 + + s.b1 = new Derived(); + s.b2 = new Base(); + s.b1->virtual_f(); // $ target=8 SPURIOUS: target=3 // type-tracking has no 'clearsContent' feature and C/C++ doesn't have field-based SSA + s.b2->virtual_f(); // $ target=3 SPURIOUS: target=8 // type-tracking has no 'clearsContent' feature and C/C++ doesn't have field-based SSA +} + +Base* getDerived() { + return new Derived(); +} + +void test_getDerived() { + Base* b = getDerived(); + b->virtual_f(); // $ target=8 + + Derived d = *(Derived*)getDerived(); + d.virtual_f(); // $ target=8 +} + +void write_to_arg(Base* b) { + *b = Derived(); +} + +void write_to_arg_2(Base** b) { + Derived* d = new Derived(); + *b = d; +} + +void test_write_to_arg() { + { + Base b; + write_to_arg(&b); + b.virtual_f(); // $ SPURIOUS: target=3 MISSING: target=8 // missing flow through the copy-constructor in write_to_arg + } + + { + Base* b; + write_to_arg_2(&b); + b->virtual_f(); // $ target=8 + } +} + +Base* global_derived; + +void set_global_to_derived() { + global_derived = new Derived(); +} + +void read_global() { + global_derived->virtual_f(); // $ target=8 +} + +Base* global_base_or_derived; + +void set_global_base_or_derived_1() { + global_base_or_derived = new Base(); +} + +void set_global_base_or_derived_2() { + global_base_or_derived = new Derived(); +} + +void read_global_base_or_derived() { + global_base_or_derived->virtual_f(); // $ target=3 target=8 +} \ No newline at end of file diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected b/cpp/ql/test/library-tests/dataflow/dispatch/test.expected similarity index 100% rename from python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected rename to cpp/ql/test/library-tests/dataflow/dispatch/test.expected diff --git a/cpp/ql/test/library-tests/dataflow/dispatch/test.ql b/cpp/ql/test/library-tests/dataflow/dispatch/test.ql new file mode 100644 index 00000000000..de16d6da1ef --- /dev/null +++ b/cpp/ql/test/library-tests/dataflow/dispatch/test.ql @@ -0,0 +1,22 @@ +import cpp +import utils.test.InlineExpectationsTest +import semmle.code.cpp.ir.dataflow.internal.DataFlowDispatch +import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate + +module ResolveDispatchTest implements TestSig { + string getARelevantTag() { result = "target" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlowCall call, SourceCallable callable, MemberFunction mf | + mf = callable.asSourceCallable() and + not mf.isCompilerGenerated() and + callable = viableCallable(call) and + location = call.getLocation() and + element = call.toString() and + tag = "target" and + value = callable.getLocation().getStartLine().toString() + ) + } +} + +import MakeTest diff --git a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected index aeb2362ef33..1b74b290eb3 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected @@ -6,12 +6,14 @@ | Dubious member name "operator LPWSTR" in summary model. | | Dubious member name "operator PCXSTR" in summary model. | | Dubious member name "operator PXSTR" in summary model. | +| Dubious member name "operator void**" in summary model. | | Dubious member name "operator&" in summary model. | | Dubious member name "operator*" in summary model. | | Dubious member name "operator+" in summary model. | | Dubious member name "operator+=" in summary model. | | Dubious member name "operator->" in summary model. | | Dubious member name "operator=" in summary model. | +| Dubious member name "operator=" in summary model. | | Dubious member name "operator[]" in summary model. | | Dubious signature "(..(*)(..))" in summary model. | | Dubious signature "(..(*)(..),..(*)(..),..(*)(..),..(*)(..))" in summary model. | @@ -503,6 +505,7 @@ | Dubious signature "(CURLU *,CURLUPart,const char *,unsigned int)" in summary model. | | Dubious signature "(CURLU *,const char *)" in summary model. | | Dubious signature "(CURLU *,const char *,char **,OperationConfig *)" in summary model. | +| Dubious signature "(ComPtr &&)" in summary model. | | Dubious signature "(CompoundDictionary *,const PreparedDictionary *)" in summary model. | | Dubious signature "(Curl_cfilter *)" in summary model. | | Dubious signature "(Curl_cfilter **,Curl_easy *)" in summary model. | @@ -2130,6 +2133,7 @@ | Dubious signature "(RAND_POOL *,unsigned char *)" in summary model. | | Dubious signature "(RAND_POOL *,unsigned int)" in summary model. | | Dubious signature "(RECORD_LAYER *,SSL_CONNECTION *)" in summary model. | +| Dubious signature "(REFIID,void **)" in summary model. | | Dubious signature "(RIO_NOTIFIER *)" in summary model. | | Dubious signature "(RIPEMD160_CTX *,const unsigned char *)" in summary model. | | Dubious signature "(RIPEMD160_CTX *,const void *,size_t)" in summary model. | @@ -2431,6 +2435,8 @@ | Dubious signature "(Strent *)" in summary model. | | Dubious signature "(Strtab *,const char *,size_t)" in summary model. | | Dubious signature "(Strtab *,size_t *)" in summary model. | +| Dubious signature "(T *)" in summary model. | +| Dubious signature "(T **)" in summary model. | | Dubious signature "(TLS_FEATURE *)" in summary model. | | Dubious signature "(TLS_RL_RECORD *,const unsigned char *)" in summary model. | | Dubious signature "(TS_ACCURACY *)" in summary model. | @@ -2493,6 +2499,7 @@ | Dubious signature "(TS_VERIFY_CTX *,unsigned char *,long)" in summary model. | | Dubious signature "(TXT_DB *,OPENSSL_STRING *)" in summary model. | | Dubious signature "(TXT_DB *,int,..(*)(..),OPENSSL_LH_HASHFUNC,OPENSSL_LH_COMPFUNC)" in summary model. | +| Dubious signature "(U *)" in summary model. | | Dubious signature "(UI *)" in summary model. | | Dubious signature "(UI *,UI_STRING *,const char *)" in summary model. | | Dubious signature "(UI *,UI_STRING *,const char *,int)" in summary model. | @@ -3155,6 +3162,7 @@ | Dubious signature "(const CT_POLICY_EVAL_CTX *)" in summary model. | | Dubious signature "(const CURLU *)" in summary model. | | Dubious signature "(const CURLU *,CURLUPart,char **,unsigned int)" in summary model. | +| Dubious signature "(const ComPtr &)" in summary model. | | Dubious signature "(const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *)" in summary model. | | Dubious signature "(const Curl_easy *,const connectdata *,int)" in summary model. | | Dubious signature "(const DH *)" in summary model. | diff --git a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected index 88dd9751f27..4021dbc492a 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected @@ -48,8 +48,6 @@ argHasPostUpdate postWithInFlow | A.cpp:25:13:25:13 | c [post update] | PostUpdateNode should not be the target of local flow. | | A.cpp:27:28:27:28 | c [post update] | PostUpdateNode should not be the target of local flow. | -| A.cpp:42:11:42:12 | cc [inner post update] | PostUpdateNode should not be the target of local flow. | -| A.cpp:43:11:43:12 | ct [inner post update] | PostUpdateNode should not be the target of local flow. | | A.cpp:100:9:100:9 | a [post update] | PostUpdateNode should not be the target of local flow. | | A.cpp:142:10:142:10 | c [post update] | PostUpdateNode should not be the target of local flow. | | A.cpp:143:13:143:13 | b [post update] | PostUpdateNode should not be the target of local flow. | @@ -67,11 +65,9 @@ postWithInFlow | D.cpp:44:19:44:22 | elem [post update] | PostUpdateNode should not be the target of local flow. | | D.cpp:57:5:57:12 | boxfield [post update] | PostUpdateNode should not be the target of local flow. | | D.cpp:58:20:58:23 | elem [post update] | PostUpdateNode should not be the target of local flow. | -| E.cpp:33:19:33:19 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:9:6:9:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:13:5:13:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:17:5:17:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:25:18:25:19 | s1 [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:37:8:37:9 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:42:6:42:7 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:49:9:49:10 | m1 [post update] | PostUpdateNode should not be the target of local flow. | @@ -83,70 +79,31 @@ postWithInFlow | aliasing.cpp:92:7:92:8 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:98:5:98:6 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:106:3:106:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:106:4:106:5 | pa [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:111:18:111:19 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:126:15:126:16 | xs [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:136:16:136:17 | xs [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:147:16:147:16 | s [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:147:21:147:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:175:21:175:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:181:21:181:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:187:21:187:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:194:21:194:22 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:200:23:200:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:205:23:205:24 | m1 [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:215:14:215:15 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:223:17:223:18 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:234:19:234:20 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:242:22:242:23 | m1 [post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:252:5:252:31 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:252:28:252:31 | data [inner post update] | PostUpdateNode should not be the target of local flow. | | aliasing.cpp:262:5:262:29 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| aliasing.cpp:262:26:262:29 | data [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:6:3:6:5 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:6:3:6:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:15:3:15:10 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:15:5:15:7 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:36:12:36:14 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:36:19:36:22 | data [post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:37:17:37:19 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:38:17:38:19 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:42:15:42:17 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:42:22:42:25 | data [post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:43:20:43:22 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:44:20:44:22 | arr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:48:15:48:17 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. | | arrays.cpp:48:22:48:25 | data [post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:49:20:49:22 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| arrays.cpp:50:20:50:22 | ptr [inner post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:12:8:12:8 | a [post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:16:11:16:11 | a [post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:68:18:68:18 | s [inner post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:84:10:84:10 | a [post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:88:9:88:9 | a [post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:92:3:92:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:92:4:92:5 | pa [inner post update] | PostUpdateNode should not be the target of local flow. | | by_reference.cpp:96:3:96:4 | pa [post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:102:28:102:39 | inner_nested [inner post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:104:22:104:22 | a [inner post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:106:30:106:41 | inner_nested [inner post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:108:24:108:24 | a [inner post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:123:28:123:36 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| by_reference.cpp:127:30:127:38 | inner_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:19:3:19:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:19:6:19:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:32:3:32:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:32:6:32:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:39:3:39:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:39:6:39:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:40:5:40:5 | x [post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:47:5:47:5 | x [post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:53:3:53:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:53:6:53:6 | x [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:75:2:75:10 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:75:4:75:6 | val [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:82:2:82:9 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| clearning.cpp:82:4:82:6 | val [inner post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:83:7:83:9 | val [post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:97:4:97:6 | val [post update] | PostUpdateNode should not be the target of local flow. | | clearning.cpp:124:4:124:6 | val [post update] | PostUpdateNode should not be the target of local flow. | @@ -162,7 +119,6 @@ postWithInFlow | complex.cpp:11:22:11:23 | a_ [post update] | PostUpdateNode should not be the target of local flow. | | complex.cpp:12:22:12:23 | b_ [post update] | PostUpdateNode should not be the target of local flow. | | conflated.cpp:10:3:10:7 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| conflated.cpp:10:7:10:7 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | conflated.cpp:29:7:29:7 | x [post update] | PostUpdateNode should not be the target of local flow. | | conflated.cpp:36:7:36:7 | x [post update] | PostUpdateNode should not be the target of local flow. | | conflated.cpp:53:7:53:10 | next [post update] | PostUpdateNode should not be the target of local flow. | @@ -174,19 +130,11 @@ postWithInFlow | qualifiers.cpp:12:56:12:56 | a [post update] | PostUpdateNode should not be the target of local flow. | | qualifiers.cpp:13:57:13:57 | a [post update] | PostUpdateNode should not be the target of local flow. | | qualifiers.cpp:22:23:22:23 | a [post update] | PostUpdateNode should not be the target of local flow. | -| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] | PostUpdateNode should not be the target of local flow. | -| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] | PostUpdateNode should not be the target of local flow. | | qualifiers.cpp:42:25:42:25 | a [post update] | PostUpdateNode should not be the target of local flow. | -| qualifiers.cpp:47:7:47:11 | outer [inner post update] | PostUpdateNode should not be the target of local flow. | | qualifiers.cpp:47:27:47:27 | a [post update] | PostUpdateNode should not be the target of local flow. | -| realistic.cpp:49:13:49:15 | bar [inner post update] | PostUpdateNode should not be the target of local flow. | | realistic.cpp:49:20:49:22 | baz [post update] | PostUpdateNode should not be the target of local flow. | -| realistic.cpp:53:13:53:15 | bar [inner post update] | PostUpdateNode should not be the target of local flow. | | realistic.cpp:53:35:53:43 | bufferLen [post update] | PostUpdateNode should not be the target of local flow. | -| realistic.cpp:54:20:54:22 | bar [inner post update] | PostUpdateNode should not be the target of local flow. | | realistic.cpp:60:16:60:18 | ref arg dst | PostUpdateNode should not be the target of local flow. | -| realistic.cpp:61:25:61:27 | bar [inner post update] | PostUpdateNode should not be the target of local flow. | -| realistic.cpp:65:25:65:27 | bar [inner post update] | PostUpdateNode should not be the target of local flow. | | simple.cpp:20:24:20:25 | a_ [post update] | PostUpdateNode should not be the target of local flow. | | simple.cpp:21:24:21:25 | b_ [post update] | PostUpdateNode should not be the target of local flow. | | simple.cpp:65:7:65:7 | i [post update] | PostUpdateNode should not be the target of local flow. | @@ -194,9 +142,6 @@ postWithInFlow | simple.cpp:92:7:92:7 | i [post update] | PostUpdateNode should not be the target of local flow. | | simple.cpp:118:7:118:7 | i [post update] | PostUpdateNode should not be the target of local flow. | | simple.cpp:124:5:124:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| simple.cpp:124:6:124:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| struct_init.c:24:11:24:12 | ab [inner post update] | PostUpdateNode should not be the target of local flow. | -| struct_init.c:36:17:36:24 | nestedAB [inner post update] | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql index 15b165a7de1..20610c55385 100644 --- a/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql +++ b/cpp/ql/test/library-tests/dataflow/ir-barrier-guards/test.ql @@ -7,7 +7,7 @@ predicate instructionGuardChecks(IRGuardCondition gc, Instruction checked, boole exists(CallInstruction call | call.getStaticCallTarget().hasName("checkArgument") and checked = call.getAnArgument() and - gc.comparesEq(call.getAUse(), 0, false, any(BooleanValue bv | bv.getValue() = branch)) + gc.comparesEq(call.getAUse(), 0, false, any(GuardValue bv | bv.asBooleanValue() = branch)) ) } diff --git a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected b/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected index 49b1f021f07..c89f4455bc5 100644 --- a/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected +++ b/cpp/ql/test/library-tests/dataflow/models-as-data/consistency.expected @@ -18,7 +18,6 @@ postIsInSameCallable reverseRead argHasPostUpdate postWithInFlow -| tests.cpp:436:6:436:25 | [summary] to write: Argument[1] in madCallArg0WithValue | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp index e26416a0e68..aff51f62964 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp @@ -1241,4 +1241,221 @@ namespace ATL { sink(static_cast::PCXSTR>(b)); // $ ir sink(static_cast::PXSTR>(b)); // $ ir } +} + +namespace Microsoft { + namespace WRL { + template + class ComPtr; + + struct GUID; + + typedef GUID IID; + + typedef IID *REFIID; + + class IUnknown; + + class WeakRef; + + namespace Details { + template + class ComPtrRef { + public: + using InterfaceType = T; + + ComPtrRef(T*); + + InterfaceType* const * GetAddressOf() const; + InterfaceType** ReleaseAndGetAddressOf(); + + operator InterfaceType**(); + operator T*(); + operator void**() const; + InterfaceType* operator *(); + }; + } + + template + class ComPtr + { + public: + using InterfaceType = T; + + ComPtr(); + ComPtr(const ComPtr &); + ComPtr(ComPtr &&); + + template + ComPtr(U *); + + ~ComPtr(); + + template + HRESULT As(ComPtr *p) const; + + HRESULT AsWeak(WeakRef *); + + void Attach(InterfaceType *); + + HRESULT CopyTo(InterfaceType **); + + HRESULT CopyTo(REFIID, void **) const; + + template + HRESULT CopyTo(U **) const; + + T *Detach(); + + T *Get() const; + + T *const *GetAddressOf() const; + T **GetAddressOf(); + + T **ReleaseAndGetAddressOf(); + + unsigned long Reset(); + + void Swap(ComPtr &&r); + + void Swap(ComPtr &r); + + Details::ComPtrRef> operator&(); + const Details::ComPtrRef> operator&() const; + + InterfaceType* operator->() const; // return type simplified from Microsoft::WRL::Details::RemoveIUnknown* + + ComPtr& operator=(T *); + template + ComPtr& operator=(U *); + ComPtr& operator=(const ComPtr &); + template + ComPtr& operator=(const ComPtr&); + ComPtr& operator=(ComPtr &&); + template + ComPtr& operator=(ComPtr&&); + }; + + } +} + +namespace std { + template T&& move(T& t) noexcept; // simplified signature +} + +void test_constructor() +{ + Microsoft::WRL::ComPtr p0; + sink(*p0.Get()); // clean + + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + sink(*p1.Get()); // $ ir MISSING: ast + sink(*p1.Detach()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p2(p1); + sink(*p2.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p3(std::move(p1)); + sink(*p3.Get()); // $ ir MISSING: ast +} + +void test_As() +{ + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + Microsoft::WRL::ComPtr* p2; + p1.As(p2); + sink(*p2->Get()); // $ ir MISSING: ast +} + +void test_CopyTo() +{ + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + int *raw = nullptr; + p1.CopyTo(&raw); + sink(*raw); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p2; + p1.CopyTo(nullptr, (void**)&raw); + sink(*raw); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p3(new int(x)); + + int* raw2 = nullptr; + p3.CopyTo(&raw2); + sink(*raw2); // $ ir MISSING: ast +} + +void test_Swap() +{ + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + Microsoft::WRL::ComPtr p2; + p1.Swap(p2); + sink(*p2.Get()); // $ ir MISSING: ast + sink(*p1.Get()); // $ SPURIOUS: ir +} + +void test_GetAddressOf() +{ + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + sink(**p1.GetAddressOf()); // $ ir MISSING: ast + + const Microsoft::WRL::ComPtr p2(new int(x)); + sink(**p2.GetAddressOf()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p3(new int(x)); + int **pp = p3.ReleaseAndGetAddressOf(); + sink(**pp); // $ ir MISSING: ast +} + +struct S { + int x; +}; + +void test_address_of_deref_operators() { + int x = source(); + Microsoft::WRL::ComPtr p1(new int(x)); + Microsoft::WRL::Details::ComPtrRef> pp = &p1; + Microsoft::WRL::ComPtr* qq = *pp; + sink(*qq->Get()); // $ ir MISSING: ast + + const Microsoft::WRL::ComPtr p2(new int(x)); + Microsoft::WRL::Details::ComPtrRef> pp2 = &p2; + const Microsoft::WRL::ComPtr* qq2 = *pp2; + sink(*qq2->Get()); // $ ir MISSING: ast + + S s; + s.x = source(); + Microsoft::WRL::ComPtr p3(&s); + sink(p3->x); // $ ir MISSING: ast +} + +void test_assignments() { + Microsoft::WRL::ComPtr p1; + p1 = new int(source()); + sink(*p1.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p2; + p2 = new long(source()); + sink(*p2.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p3; + p3 = p1; + sink(*p3.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p4; + p4 = p1; + sink(*p4.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p5; + p5 = std::move(p1); + sink(*p5.Get()); // $ ir MISSING: ast + + Microsoft::WRL::ComPtr p6; + p6 = std::move(p1); + sink(*p6.Get()); // $ ir MISSING: ast } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected index e19f34eb217..0f4d67f2695 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -1278,6 +1278,223 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1241:46:1241:46 | b | | | atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1242:45:1242:45 | b | | | atl.cpp:1241:46:1241:46 | ref arg b | atl.cpp:1242:45:1242:45 | b | | +| atl.cpp:1348:31:1348:32 | call to ComPtr | atl.cpp:1349:9:1349:10 | p0 | | +| atl.cpp:1348:31:1348:32 | call to ComPtr | atl.cpp:1361:1:1361:1 | p0 | | +| atl.cpp:1349:9:1349:10 | ref arg p0 | atl.cpp:1361:1:1361:1 | p0 | | +| atl.cpp:1349:12:1349:14 | call to Get | atl.cpp:1349:8:1349:16 | * ... | TAINT | +| atl.cpp:1351:11:1351:21 | call to source | atl.cpp:1352:42:1352:42 | x | | +| atl.cpp:1352:34:1352:43 | new | atl.cpp:1352:34:1352:44 | call to ComPtr | TAINT | +| atl.cpp:1352:34:1352:44 | call to ComPtr | atl.cpp:1353:9:1353:10 | p1 | | +| atl.cpp:1352:34:1352:44 | call to ComPtr | atl.cpp:1354:9:1354:10 | p1 | | +| atl.cpp:1352:34:1352:44 | call to ComPtr | atl.cpp:1356:34:1356:35 | p1 | | +| atl.cpp:1352:34:1352:44 | call to ComPtr | atl.cpp:1359:44:1359:45 | p1 | | +| atl.cpp:1352:34:1352:44 | call to ComPtr | atl.cpp:1361:1:1361:1 | p1 | | +| atl.cpp:1352:42:1352:42 | x | atl.cpp:1352:34:1352:43 | new | | +| atl.cpp:1353:9:1353:10 | ref arg p1 | atl.cpp:1354:9:1354:10 | p1 | | +| atl.cpp:1353:9:1353:10 | ref arg p1 | atl.cpp:1356:34:1356:35 | p1 | | +| atl.cpp:1353:9:1353:10 | ref arg p1 | atl.cpp:1359:44:1359:45 | p1 | | +| atl.cpp:1353:9:1353:10 | ref arg p1 | atl.cpp:1361:1:1361:1 | p1 | | +| atl.cpp:1353:12:1353:14 | call to Get | atl.cpp:1353:8:1353:16 | * ... | TAINT | +| atl.cpp:1354:9:1354:10 | ref arg p1 | atl.cpp:1356:34:1356:35 | p1 | | +| atl.cpp:1354:9:1354:10 | ref arg p1 | atl.cpp:1359:44:1359:45 | p1 | | +| atl.cpp:1354:9:1354:10 | ref arg p1 | atl.cpp:1361:1:1361:1 | p1 | | +| atl.cpp:1354:12:1354:17 | call to Detach | atl.cpp:1354:8:1354:19 | * ... | TAINT | +| atl.cpp:1356:34:1356:35 | p1 | atl.cpp:1356:34:1356:36 | call to ComPtr | | +| atl.cpp:1356:34:1356:36 | call to ComPtr | atl.cpp:1357:9:1357:10 | p2 | | +| atl.cpp:1356:34:1356:36 | call to ComPtr | atl.cpp:1361:1:1361:1 | p2 | | +| atl.cpp:1357:9:1357:10 | ref arg p2 | atl.cpp:1361:1:1361:1 | p2 | | +| atl.cpp:1357:12:1357:14 | call to Get | atl.cpp:1357:8:1357:16 | * ... | TAINT | +| atl.cpp:1359:34:1359:42 | call to move | atl.cpp:1359:34:1359:47 | call to ComPtr | TAINT | +| atl.cpp:1359:34:1359:42 | ref arg call to move | atl.cpp:1359:44:1359:45 | p1 [inner post update] | | +| atl.cpp:1359:34:1359:42 | ref arg call to move | atl.cpp:1361:1:1361:1 | p1 | | +| atl.cpp:1359:34:1359:47 | call to ComPtr | atl.cpp:1360:9:1360:10 | p3 | | +| atl.cpp:1359:34:1359:47 | call to ComPtr | atl.cpp:1361:1:1361:1 | p3 | | +| atl.cpp:1359:44:1359:45 | p1 | atl.cpp:1359:34:1359:42 | call to move | TAINT | +| atl.cpp:1359:44:1359:45 | p1 | atl.cpp:1359:34:1359:47 | call to ComPtr | | +| atl.cpp:1360:9:1360:10 | ref arg p3 | atl.cpp:1361:1:1361:1 | p3 | | +| atl.cpp:1360:12:1360:14 | call to Get | atl.cpp:1360:8:1360:16 | * ... | TAINT | +| atl.cpp:1365:11:1365:21 | call to source | atl.cpp:1366:42:1366:42 | x | | +| atl.cpp:1366:34:1366:43 | new | atl.cpp:1366:34:1366:44 | call to ComPtr | TAINT | +| atl.cpp:1366:34:1366:44 | call to ComPtr | atl.cpp:1368:3:1368:4 | p1 | | +| atl.cpp:1366:34:1366:44 | call to ComPtr | atl.cpp:1370:1:1370:1 | p1 | | +| atl.cpp:1366:42:1366:42 | x | atl.cpp:1366:34:1366:43 | new | | +| atl.cpp:1367:32:1367:33 | p2 | atl.cpp:1368:9:1368:10 | p2 | | +| atl.cpp:1367:32:1367:33 | p2 | atl.cpp:1369:9:1369:10 | p2 | | +| atl.cpp:1368:9:1368:10 | ref arg p2 | atl.cpp:1369:9:1369:10 | p2 | | +| atl.cpp:1369:13:1369:15 | call to Get | atl.cpp:1369:8:1369:17 | * ... | TAINT | +| atl.cpp:1374:11:1374:21 | call to source | atl.cpp:1375:42:1375:42 | x | | +| atl.cpp:1374:11:1374:21 | call to source | atl.cpp:1384:42:1384:42 | x | | +| atl.cpp:1375:34:1375:43 | new | atl.cpp:1375:34:1375:44 | call to ComPtr | TAINT | +| atl.cpp:1375:34:1375:44 | call to ComPtr | atl.cpp:1377:3:1377:4 | p1 | | +| atl.cpp:1375:34:1375:44 | call to ComPtr | atl.cpp:1381:3:1381:4 | p1 | | +| atl.cpp:1375:34:1375:44 | call to ComPtr | atl.cpp:1389:1:1389:1 | p1 | | +| atl.cpp:1375:42:1375:42 | x | atl.cpp:1375:34:1375:43 | new | | +| atl.cpp:1376:14:1376:20 | 0 | atl.cpp:1377:14:1377:16 | raw | | +| atl.cpp:1376:14:1376:20 | 0 | atl.cpp:1378:9:1378:11 | raw | | +| atl.cpp:1376:14:1376:20 | 0 | atl.cpp:1381:31:1381:33 | raw | | +| atl.cpp:1376:14:1376:20 | 0 | atl.cpp:1382:9:1382:11 | raw | | +| atl.cpp:1377:3:1377:4 | ref arg p1 | atl.cpp:1381:3:1381:4 | p1 | | +| atl.cpp:1377:3:1377:4 | ref arg p1 | atl.cpp:1389:1:1389:1 | p1 | | +| atl.cpp:1377:13:1377:16 | ref arg & ... | atl.cpp:1377:14:1377:16 | raw [inner post update] | | +| atl.cpp:1377:13:1377:16 | ref arg & ... | atl.cpp:1378:9:1378:11 | raw | | +| atl.cpp:1377:13:1377:16 | ref arg & ... | atl.cpp:1381:31:1381:33 | raw | | +| atl.cpp:1377:13:1377:16 | ref arg & ... | atl.cpp:1382:9:1382:11 | raw | | +| atl.cpp:1377:14:1377:16 | raw | atl.cpp:1377:13:1377:16 | & ... | | +| atl.cpp:1378:9:1378:11 | raw | atl.cpp:1378:8:1378:11 | * ... | TAINT | +| atl.cpp:1380:31:1380:32 | call to ComPtr | atl.cpp:1389:1:1389:1 | p2 | | +| atl.cpp:1381:30:1381:33 | ref arg & ... | atl.cpp:1381:31:1381:33 | raw [inner post update] | | +| atl.cpp:1381:30:1381:33 | ref arg & ... | atl.cpp:1382:9:1382:11 | raw | | +| atl.cpp:1381:31:1381:33 | raw | atl.cpp:1381:30:1381:33 | & ... | | +| atl.cpp:1382:9:1382:11 | raw | atl.cpp:1382:8:1382:11 | * ... | TAINT | +| atl.cpp:1384:34:1384:43 | new | atl.cpp:1384:34:1384:44 | call to ComPtr | TAINT | +| atl.cpp:1384:34:1384:44 | call to ComPtr | atl.cpp:1387:3:1387:4 | p3 | | +| atl.cpp:1384:34:1384:44 | call to ComPtr | atl.cpp:1389:1:1389:1 | p3 | | +| atl.cpp:1384:42:1384:42 | x | atl.cpp:1384:34:1384:43 | new | | +| atl.cpp:1386:15:1386:21 | 0 | atl.cpp:1387:19:1387:22 | raw2 | | +| atl.cpp:1386:15:1386:21 | 0 | atl.cpp:1388:9:1388:12 | raw2 | | +| atl.cpp:1387:18:1387:22 | ref arg & ... | atl.cpp:1387:19:1387:22 | raw2 [inner post update] | | +| atl.cpp:1387:18:1387:22 | ref arg & ... | atl.cpp:1388:9:1388:12 | raw2 | | +| atl.cpp:1387:19:1387:22 | raw2 | atl.cpp:1387:18:1387:22 | & ... | | +| atl.cpp:1388:9:1388:12 | raw2 | atl.cpp:1388:8:1388:12 | * ... | TAINT | +| atl.cpp:1393:11:1393:21 | call to source | atl.cpp:1394:42:1394:42 | x | | +| atl.cpp:1394:34:1394:43 | new | atl.cpp:1394:34:1394:44 | call to ComPtr | TAINT | +| atl.cpp:1394:34:1394:44 | call to ComPtr | atl.cpp:1396:3:1396:4 | p1 | | +| atl.cpp:1394:34:1394:44 | call to ComPtr | atl.cpp:1398:9:1398:10 | p1 | | +| atl.cpp:1394:34:1394:44 | call to ComPtr | atl.cpp:1399:1:1399:1 | p1 | | +| atl.cpp:1394:42:1394:42 | x | atl.cpp:1394:34:1394:43 | new | | +| atl.cpp:1395:31:1395:32 | call to ComPtr | atl.cpp:1396:11:1396:12 | p2 | | +| atl.cpp:1395:31:1395:32 | call to ComPtr | atl.cpp:1397:9:1397:10 | p2 | | +| atl.cpp:1395:31:1395:32 | call to ComPtr | atl.cpp:1399:1:1399:1 | p2 | | +| atl.cpp:1396:3:1396:4 | ref arg p1 | atl.cpp:1398:9:1398:10 | p1 | | +| atl.cpp:1396:3:1396:4 | ref arg p1 | atl.cpp:1399:1:1399:1 | p1 | | +| atl.cpp:1396:11:1396:12 | ref arg p2 | atl.cpp:1397:9:1397:10 | p2 | | +| atl.cpp:1396:11:1396:12 | ref arg p2 | atl.cpp:1399:1:1399:1 | p2 | | +| atl.cpp:1397:9:1397:10 | ref arg p2 | atl.cpp:1399:1:1399:1 | p2 | | +| atl.cpp:1397:12:1397:14 | call to Get | atl.cpp:1397:8:1397:16 | * ... | TAINT | +| atl.cpp:1398:9:1398:10 | ref arg p1 | atl.cpp:1399:1:1399:1 | p1 | | +| atl.cpp:1398:12:1398:14 | call to Get | atl.cpp:1398:8:1398:16 | * ... | TAINT | +| atl.cpp:1403:11:1403:21 | call to source | atl.cpp:1404:42:1404:42 | x | | +| atl.cpp:1403:11:1403:21 | call to source | atl.cpp:1407:48:1407:48 | x | | +| atl.cpp:1403:11:1403:21 | call to source | atl.cpp:1410:42:1410:42 | x | | +| atl.cpp:1404:34:1404:43 | new | atl.cpp:1404:34:1404:44 | call to ComPtr | TAINT | +| atl.cpp:1404:34:1404:44 | call to ComPtr | atl.cpp:1405:10:1405:11 | p1 | | +| atl.cpp:1404:34:1404:44 | call to ComPtr | atl.cpp:1413:1:1413:1 | p1 | | +| atl.cpp:1404:42:1404:42 | x | atl.cpp:1404:34:1404:43 | new | | +| atl.cpp:1405:9:1405:26 | * ... | atl.cpp:1405:8:1405:26 | * ... | TAINT | +| atl.cpp:1405:10:1405:11 | ref arg p1 | atl.cpp:1413:1:1413:1 | p1 | | +| atl.cpp:1405:13:1405:24 | call to GetAddressOf | atl.cpp:1405:9:1405:26 | * ... | TAINT | +| atl.cpp:1407:40:1407:49 | new | atl.cpp:1407:40:1407:50 | call to ComPtr | TAINT | +| atl.cpp:1407:40:1407:50 | call to ComPtr | atl.cpp:1408:10:1408:11 | p2 | | +| atl.cpp:1407:40:1407:50 | call to ComPtr | atl.cpp:1413:1:1413:1 | p2 | | +| atl.cpp:1407:48:1407:48 | x | atl.cpp:1407:40:1407:49 | new | | +| atl.cpp:1408:9:1408:26 | * ... | atl.cpp:1408:8:1408:26 | * ... | TAINT | +| atl.cpp:1408:10:1408:11 | ref arg p2 | atl.cpp:1413:1:1413:1 | p2 | | +| atl.cpp:1408:13:1408:24 | call to GetAddressOf | atl.cpp:1408:9:1408:26 | * ... | TAINT | +| atl.cpp:1410:34:1410:43 | new | atl.cpp:1410:34:1410:44 | call to ComPtr | TAINT | +| atl.cpp:1410:34:1410:44 | call to ComPtr | atl.cpp:1411:14:1411:15 | p3 | | +| atl.cpp:1410:34:1410:44 | call to ComPtr | atl.cpp:1413:1:1413:1 | p3 | | +| atl.cpp:1410:42:1410:42 | x | atl.cpp:1410:34:1410:43 | new | | +| atl.cpp:1411:14:1411:15 | ref arg p3 | atl.cpp:1413:1:1413:1 | p3 | | +| atl.cpp:1411:17:1411:38 | call to ReleaseAndGetAddressOf | atl.cpp:1412:10:1412:11 | pp | | +| atl.cpp:1412:9:1412:11 | * ... | atl.cpp:1412:8:1412:11 | * ... | TAINT | +| atl.cpp:1412:10:1412:11 | pp | atl.cpp:1412:9:1412:11 | * ... | TAINT | +| atl.cpp:1420:11:1420:21 | call to source | atl.cpp:1421:42:1421:42 | x | | +| atl.cpp:1420:11:1420:21 | call to source | atl.cpp:1426:48:1426:48 | x | | +| atl.cpp:1421:34:1421:43 | new | atl.cpp:1421:34:1421:44 | call to ComPtr | TAINT | +| atl.cpp:1421:34:1421:44 | call to ComPtr | atl.cpp:1422:73:1422:74 | p1 | | +| atl.cpp:1421:34:1421:44 | call to ComPtr | atl.cpp:1435:1:1435:1 | p1 | | +| atl.cpp:1421:42:1421:42 | x | atl.cpp:1421:34:1421:43 | new | | +| atl.cpp:1422:72:1422:72 | call to operator& | atl.cpp:1423:38:1423:39 | pp | | +| atl.cpp:1422:73:1422:74 | ref arg p1 | atl.cpp:1435:1:1435:1 | p1 | | +| atl.cpp:1423:37:1423:37 | call to operator* | atl.cpp:1424:9:1424:10 | qq | | +| atl.cpp:1424:13:1424:15 | call to Get | atl.cpp:1424:8:1424:17 | * ... | TAINT | +| atl.cpp:1426:40:1426:49 | new | atl.cpp:1426:40:1426:50 | call to ComPtr | TAINT | +| atl.cpp:1426:40:1426:50 | call to ComPtr | atl.cpp:1427:80:1427:81 | p2 | | +| atl.cpp:1426:40:1426:50 | call to ComPtr | atl.cpp:1435:1:1435:1 | p2 | | +| atl.cpp:1426:48:1426:48 | x | atl.cpp:1426:40:1426:49 | new | | +| atl.cpp:1427:79:1427:79 | call to operator& | atl.cpp:1428:45:1428:47 | pp2 | | +| atl.cpp:1428:44:1428:44 | call to operator* | atl.cpp:1429:9:1429:11 | qq2 | | +| atl.cpp:1429:14:1429:16 | call to Get | atl.cpp:1429:8:1429:18 | * ... | TAINT | +| atl.cpp:1431:5:1431:5 | s | atl.cpp:1432:3:1432:3 | s | | +| atl.cpp:1431:5:1431:5 | s | atl.cpp:1433:33:1433:33 | s | | +| atl.cpp:1432:3:1432:3 | s [post update] | atl.cpp:1433:33:1433:33 | s | | +| atl.cpp:1432:3:1432:21 | ... = ... | atl.cpp:1432:5:1432:5 | x [post update] | | +| atl.cpp:1432:9:1432:19 | call to source | atl.cpp:1432:3:1432:21 | ... = ... | | +| atl.cpp:1433:32:1433:33 | & ... | atl.cpp:1433:32:1433:34 | call to ComPtr | TAINT | +| atl.cpp:1433:32:1433:33 | ref arg & ... | atl.cpp:1433:33:1433:33 | s [inner post update] | | +| atl.cpp:1433:32:1433:34 | call to ComPtr | atl.cpp:1434:8:1434:9 | p3 | | +| atl.cpp:1433:32:1433:34 | call to ComPtr | atl.cpp:1435:1:1435:1 | p3 | | +| atl.cpp:1433:33:1433:33 | s | atl.cpp:1433:32:1433:33 | & ... | | +| atl.cpp:1434:8:1434:9 | ref arg p3 | atl.cpp:1435:1:1435:1 | p3 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1439:3:1439:4 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1440:9:1440:10 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1447:8:1447:9 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1451:8:1451:9 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1455:18:1455:19 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1459:18:1459:19 | p1 | | +| atl.cpp:1438:31:1438:32 | call to ComPtr | atl.cpp:1461:1:1461:1 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1440:9:1440:10 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1447:8:1447:9 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1451:8:1451:9 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1455:18:1455:19 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1459:18:1459:19 | p1 | | +| atl.cpp:1439:3:1439:4 | ref arg p1 | atl.cpp:1461:1:1461:1 | p1 | | +| atl.cpp:1439:16:1439:26 | call to source | atl.cpp:1439:8:1439:29 | new | | +| atl.cpp:1440:9:1440:10 | ref arg p1 | atl.cpp:1447:8:1447:9 | p1 | | +| atl.cpp:1440:9:1440:10 | ref arg p1 | atl.cpp:1451:8:1451:9 | p1 | | +| atl.cpp:1440:9:1440:10 | ref arg p1 | atl.cpp:1455:18:1455:19 | p1 | | +| atl.cpp:1440:9:1440:10 | ref arg p1 | atl.cpp:1459:18:1459:19 | p1 | | +| atl.cpp:1440:9:1440:10 | ref arg p1 | atl.cpp:1461:1:1461:1 | p1 | | +| atl.cpp:1440:12:1440:14 | call to Get | atl.cpp:1440:8:1440:16 | * ... | TAINT | +| atl.cpp:1442:31:1442:32 | call to ComPtr | atl.cpp:1443:3:1443:4 | p2 | | +| atl.cpp:1442:31:1442:32 | call to ComPtr | atl.cpp:1444:9:1444:10 | p2 | | +| atl.cpp:1442:31:1442:32 | call to ComPtr | atl.cpp:1461:1:1461:1 | p2 | | +| atl.cpp:1443:3:1443:4 | ref arg p2 | atl.cpp:1444:9:1444:10 | p2 | | +| atl.cpp:1443:3:1443:4 | ref arg p2 | atl.cpp:1461:1:1461:1 | p2 | | +| atl.cpp:1443:17:1443:28 | call to source | atl.cpp:1443:8:1443:31 | new | | +| atl.cpp:1444:9:1444:10 | ref arg p2 | atl.cpp:1461:1:1461:1 | p2 | | +| atl.cpp:1444:12:1444:14 | call to Get | atl.cpp:1444:8:1444:16 | * ... | TAINT | +| atl.cpp:1446:31:1446:32 | call to ComPtr | atl.cpp:1447:3:1447:4 | p3 | | +| atl.cpp:1446:31:1446:32 | call to ComPtr | atl.cpp:1448:9:1448:10 | p3 | | +| atl.cpp:1446:31:1446:32 | call to ComPtr | atl.cpp:1461:1:1461:1 | p3 | | +| atl.cpp:1447:3:1447:4 | ref arg p3 | atl.cpp:1448:9:1448:10 | p3 | | +| atl.cpp:1447:3:1447:4 | ref arg p3 | atl.cpp:1461:1:1461:1 | p3 | | +| atl.cpp:1447:8:1447:9 | p1 | atl.cpp:1447:3:1447:4 | ref arg p3 | TAINT | +| atl.cpp:1447:8:1447:9 | p1 | atl.cpp:1447:6:1447:6 | call to operator= | TAINT | +| atl.cpp:1448:9:1448:10 | ref arg p3 | atl.cpp:1461:1:1461:1 | p3 | | +| atl.cpp:1448:12:1448:14 | call to Get | atl.cpp:1448:8:1448:16 | * ... | TAINT | +| atl.cpp:1450:32:1450:33 | call to ComPtr | atl.cpp:1451:3:1451:4 | p4 | | +| atl.cpp:1450:32:1450:33 | call to ComPtr | atl.cpp:1452:9:1452:10 | p4 | | +| atl.cpp:1450:32:1450:33 | call to ComPtr | atl.cpp:1461:1:1461:1 | p4 | | +| atl.cpp:1451:3:1451:4 | ref arg p4 | atl.cpp:1452:9:1452:10 | p4 | | +| atl.cpp:1451:3:1451:4 | ref arg p4 | atl.cpp:1461:1:1461:1 | p4 | | +| atl.cpp:1452:9:1452:10 | ref arg p4 | atl.cpp:1461:1:1461:1 | p4 | | +| atl.cpp:1452:12:1452:14 | call to Get | atl.cpp:1452:8:1452:16 | * ... | TAINT | +| atl.cpp:1454:31:1454:32 | call to ComPtr | atl.cpp:1455:3:1455:4 | p5 | | +| atl.cpp:1454:31:1454:32 | call to ComPtr | atl.cpp:1456:9:1456:10 | p5 | | +| atl.cpp:1454:31:1454:32 | call to ComPtr | atl.cpp:1461:1:1461:1 | p5 | | +| atl.cpp:1455:3:1455:4 | ref arg p5 | atl.cpp:1456:9:1456:10 | p5 | | +| atl.cpp:1455:3:1455:4 | ref arg p5 | atl.cpp:1461:1:1461:1 | p5 | | +| atl.cpp:1455:8:1455:16 | call to move | atl.cpp:1455:3:1455:4 | ref arg p5 | TAINT | +| atl.cpp:1455:8:1455:16 | call to move | atl.cpp:1455:6:1455:6 | call to operator= | TAINT | +| atl.cpp:1455:8:1455:16 | ref arg call to move | atl.cpp:1455:18:1455:19 | p1 [inner post update] | | +| atl.cpp:1455:8:1455:16 | ref arg call to move | atl.cpp:1459:18:1459:19 | p1 | | +| atl.cpp:1455:8:1455:16 | ref arg call to move | atl.cpp:1461:1:1461:1 | p1 | | +| atl.cpp:1455:18:1455:19 | p1 | atl.cpp:1455:3:1455:4 | ref arg p5 | TAINT | +| atl.cpp:1455:18:1455:19 | p1 | atl.cpp:1455:6:1455:6 | call to operator= | TAINT | +| atl.cpp:1455:18:1455:19 | p1 | atl.cpp:1455:8:1455:16 | call to move | TAINT | +| atl.cpp:1456:9:1456:10 | ref arg p5 | atl.cpp:1461:1:1461:1 | p5 | | +| atl.cpp:1456:12:1456:14 | call to Get | atl.cpp:1456:8:1456:16 | * ... | TAINT | +| atl.cpp:1458:32:1458:33 | call to ComPtr | atl.cpp:1459:3:1459:4 | p6 | | +| atl.cpp:1458:32:1458:33 | call to ComPtr | atl.cpp:1460:9:1460:10 | p6 | | +| atl.cpp:1458:32:1458:33 | call to ComPtr | atl.cpp:1461:1:1461:1 | p6 | | +| atl.cpp:1459:3:1459:4 | ref arg p6 | atl.cpp:1460:9:1460:10 | p6 | | +| atl.cpp:1459:3:1459:4 | ref arg p6 | atl.cpp:1461:1:1461:1 | p6 | | +| atl.cpp:1459:8:1459:16 | ref arg call to move | atl.cpp:1459:18:1459:19 | p1 [inner post update] | | +| atl.cpp:1459:8:1459:16 | ref arg call to move | atl.cpp:1461:1:1461:1 | p1 | | +| atl.cpp:1459:18:1459:19 | p1 | atl.cpp:1459:8:1459:16 | call to move | TAINT | +| atl.cpp:1460:9:1460:10 | ref arg p6 | atl.cpp:1461:1:1461:1 | p6 | | +| atl.cpp:1460:12:1460:14 | call to Get | atl.cpp:1460:8:1460:16 | * ... | TAINT | | bsd.cpp:17:11:17:16 | call to source | bsd.cpp:20:18:20:18 | s | | | bsd.cpp:18:12:18:15 | addr | bsd.cpp:20:22:20:25 | addr | | | bsd.cpp:18:12:18:15 | addr | bsd.cpp:23:8:23:11 | addr | | @@ -7767,6 +7984,30 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | taint.cpp:830:20:830:34 | call to indirect_source | taint.cpp:832:23:832:24 | in | | | taint.cpp:831:15:831:17 | out | taint.cpp:832:18:832:20 | out | | | taint.cpp:831:15:831:17 | out | taint.cpp:833:8:833:10 | out | | +| taint.cpp:841:21:841:35 | call to indirect_source | taint.cpp:842:11:842:12 | fp | | +| taint.cpp:841:21:841:35 | call to indirect_source | taint.cpp:843:16:843:17 | fp | | +| taint.cpp:842:11:842:12 | ref arg fp | taint.cpp:843:16:843:17 | fp | | +| taint.cpp:842:15:842:16 | | taint.cpp:842:11:842:12 | ref arg fp | TAINT | +| taint.cpp:851:10:851:15 | call to source | taint.cpp:852:18:852:18 | s | | +| taint.cpp:851:10:851:15 | call to source | taint.cpp:854:18:854:18 | s | | +| taint.cpp:852:10:852:16 | call to toupper | taint.cpp:853:7:853:7 | u | | +| taint.cpp:854:10:854:16 | call to tolower | taint.cpp:855:7:855:7 | l | | +| taint.cpp:861:24:861:27 | size | taint.cpp:866:16:866:19 | size | | +| taint.cpp:862:12:862:26 | call to indirect_source | taint.cpp:866:12:866:12 | s | | +| taint.cpp:863:7:863:9 | out | taint.cpp:864:12:864:14 | out | | +| taint.cpp:864:12:864:14 | out | taint.cpp:866:23:866:23 | p | | +| taint.cpp:864:12:864:14 | out | taint.cpp:867:8:867:8 | p | | +| taint.cpp:865:9:865:16 | size_out | taint.cpp:866:27:866:34 | size_out | | +| taint.cpp:866:11:866:12 | ref arg & ... | taint.cpp:866:12:866:12 | s [inner post update] | | +| taint.cpp:866:12:866:12 | s | taint.cpp:866:11:866:12 | & ... | | +| taint.cpp:866:15:866:19 | ref arg & ... | taint.cpp:866:16:866:19 | size [inner post update] | | +| taint.cpp:866:16:866:19 | size | taint.cpp:866:15:866:19 | & ... | | +| taint.cpp:866:22:866:23 | ref arg & ... | taint.cpp:866:23:866:23 | p [inner post update] | | +| taint.cpp:866:22:866:23 | ref arg & ... | taint.cpp:867:8:867:8 | p | | +| taint.cpp:866:23:866:23 | p | taint.cpp:866:22:866:23 | & ... | | +| taint.cpp:866:26:866:34 | ref arg & ... | taint.cpp:866:27:866:34 | size_out [inner post update] | | +| taint.cpp:866:27:866:34 | size_out | taint.cpp:866:26:866:34 | & ... | | +| taint.cpp:867:8:867:8 | p | taint.cpp:867:7:867:8 | * ... | TAINT | | thread.cpp:10:27:10:27 | s | thread.cpp:10:27:10:27 | s | | | thread.cpp:10:27:10:27 | s | thread.cpp:11:8:11:8 | s | | | thread.cpp:14:26:14:26 | s | thread.cpp:15:8:15:8 | s | | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp index 74bcf26ea7d..70d5b8c7b00 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp @@ -831,4 +831,38 @@ void test_write_to_const_ptr_ptr() { const char* out; take_const_ptr(out, in); sink(out); // $ SPURIOUS: ast +} + +void indirect_sink(FILE *fp); +int fprintf(FILE *fp, const char *format, ...); + +int f7(void) +{ + FILE* fp = (FILE*)indirect_source(); + fprintf(fp, ""); + indirect_sink(fp); // $ ir MISSING: ast + return 0; +} + +int toupper(int); +int tolower(int); + +void test_toupper_and_tolower() { + int s = source(); + int u = toupper(s); + sink(u); // $ ir MISSING: ast + int l = tolower(s); + sink(l); // $ ir MISSING: ast +} + +typedef int iconv_t; +size_t iconv(iconv_t cd, char **, size_t *, char **, size_t *); + +void test_iconv(size_t size) { + char* s = indirect_source(); + char out[10]; + char* p = out; + size_t size_out; + iconv(0, &s, &size, &p, &size_out); + sink(*p); // $ ast,ir } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql index f5f483cdf1b..3bde6ca03f0 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql @@ -117,6 +117,11 @@ module IRTest { call.getTarget().getName() = "sink" and [sink.asExpr(), sink.asIndirectExpr()] = call.getAnArgument() ) + or + exists(FunctionCall call | + call.getTarget().getName() = "indirect_sink" and + sink.asIndirectExpr() = call.getAnArgument() + ) } predicate isBarrier(DataFlow::Node barrier) { diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected index 239ed2ec607..2409e711e6d 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected @@ -1,19372 +1,142 @@ signatureMatches -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ASN1_tag2bit | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ASN1_tag2str | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | Jim_ReturnCode | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | Jim_SignalId | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | OBJ_nid2ln | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | OBJ_nid2obj | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | OBJ_nid2sn | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | PKCS12_init | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | Symbol_Nth | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __btowc | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __current_locale_name | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __fdopendir | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __get_errlist | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __get_errname | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __math_invalid_i | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __math_invalidf_i | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __p_class | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __p_rcode | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __p_type | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __pkey_get | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __sigdescr_np | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | __strerrordesc_np | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | _tolower | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | _toupper | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | btowc | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | c_tolower | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | c_toupper | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | curlx_sitouz | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | evp_pkey_type2name | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | inet6_option_space | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isalnum | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isalpha | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isblank | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | iscntrl | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isdigit | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isgraph | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | islower | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isprint | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ispunct | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isspace | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isupper | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | isxdigit | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ossl_tolower | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | ossl_toupper | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | sigabbrev_np | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | sqlite3_errstr | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | strerrorname_np | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | support_report_failure | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | svcudp_create | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | tls13_alert_code | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | toascii | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | tolower | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | toupper | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uabs | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uv__accept | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uv_err_name | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uv_get_osfhandle | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uv_strerror | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | uv_translate_sys_error | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | | zError | 0 | -| arrayassignment.cpp:3:6:3:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ASN1_STRING_type_new | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ASN1_tag2bit | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ASN1_tag2str | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | EVP_PKEY_asn1_get0 | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | Jim_ReturnCode | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | Jim_SignalId | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | OBJ_nid2ln | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | OBJ_nid2obj | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | OBJ_nid2sn | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | OSSL_STORE_INFO_type_string | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | OSSL_trace_get_category_name | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | PKCS12_init | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | Symbol_Nth | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | X509_PURPOSE_get0 | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | X509_PURPOSE_get_by_id | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | X509_TRUST_get0 | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | X509_TRUST_get_by_id | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __btowc | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __current_locale_name | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __fdopendir | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __get_errlist | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __get_errname | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __math_invalid_i | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __math_invalidf_i | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __p_class | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __p_rcode | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __p_type | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __pkey_get | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __sigdescr_np | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | __strerrordesc_np | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | _tolower | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | _toupper | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | btowc | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | c_tolower | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | c_toupper | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | curlx_sitouz | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | evp_pkey_type2name | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | inet6_option_space | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isalnum | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isalpha | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isblank | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | iscntrl | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isdigit | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isgraph | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | islower | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isprint | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ispunct | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isspace | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isupper | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | isxdigit | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ossl_cmp_bodytype_to_string | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ossl_tolower | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | ossl_toupper | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | sigabbrev_np | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | sqlite3_compileoption_get | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | sqlite3_errstr | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | strerrorname_np | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | support_report_failure | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | svcudp_create | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | tls13_alert_code | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | toascii | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | tolower | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | toupper | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uabs | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uv__accept | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uv_err_name | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uv_get_osfhandle | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uv_strerror | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | uv_translate_sys_error | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | | zError | 0 | -| arrayassignment.cpp:88:7:88:9 | get | (int) | __pthread_cleanup_class | __setdoit | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ASN1_STRING_type_new | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ASN1_tag2bit | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ASN1_tag2str | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | EVP_PKEY_asn1_get0 | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | Jim_ReturnCode | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | Jim_SignalId | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | OBJ_nid2ln | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | OBJ_nid2obj | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | OBJ_nid2sn | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | OSSL_STORE_INFO_type_string | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | OSSL_trace_get_category_name | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | PKCS12_init | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | Symbol_Nth | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | X509_PURPOSE_get0 | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | X509_PURPOSE_get_by_id | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | X509_TRUST_get0 | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | X509_TRUST_get_by_id | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __btowc | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __current_locale_name | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __fdopendir | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __get_errlist | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __get_errname | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __math_invalid_i | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __math_invalidf_i | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __p_class | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __p_rcode | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __p_type | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __pkey_get | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __sigdescr_np | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | __strerrordesc_np | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | _tolower | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | _toupper | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | btowc | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | c_tolower | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | c_toupper | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | curlx_sitouz | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | evp_pkey_type2name | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | inet6_option_space | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isalnum | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isalpha | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isblank | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | iscntrl | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isdigit | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isgraph | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | islower | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isprint | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ispunct | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isspace | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isupper | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | isxdigit | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ossl_cmp_bodytype_to_string | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ossl_tolower | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | ossl_toupper | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | sigabbrev_np | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | sqlite3_compileoption_get | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | sqlite3_errstr | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | strerrorname_np | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | support_report_failure | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | svcudp_create | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | tls13_alert_code | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | toascii | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | tolower | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | toupper | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uabs | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uv__accept | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uv_err_name | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uv_get_osfhandle | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uv_strerror | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | uv_translate_sys_error | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | | zError | 0 | -| arrayassignment.cpp:90:7:90:16 | operator[] | (int) | __pthread_cleanup_class | __setdoit | 0 | -| arrayassignment.cpp:124:6:124:9 | sink | (int *) | | rresvport | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | Jim_IntHashFunction | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | __sleep | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | curlx_uitous | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | la_version | 0 | -| atl.cpp:71:5:71:17 | _U_STRINGorID | (unsigned int) | | ssl3_get_cipher | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Strsafe | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | Symbol_new | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | UI_create_method | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __basename | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __gettext | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __hash_string | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __strdup | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __textdomain | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | __tzstring | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | a64l | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | charmap_opendir | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | ether_aton | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | getdate | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | inetstr2int | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | last_component | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | opt_path_end | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | opt_progname | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | repertoire_read | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | sgetsgent | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | sgetspent | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | strhash | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | uc_script_byname | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | uv__strdup | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:72:5:72:17 | _U_STRINGorID | (const char *) | | xstrdup | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | BrotliEncoderMaxCompressedSize | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | EVP_PKEY_meth_get0 | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | __libc_malloc | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | __libc_valloc | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | _dl_early_allocate | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | curlx_uztosi | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | curlx_uztosz | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | curlx_uztoui | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | curlx_uztoul | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | malloc | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | ossl_get_extension_type | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | ossl_param_bytes_to_blocks | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | ossl_quic_sstream_new | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | ssl_cert_new | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | support_next_to_fault_allocate | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | support_next_to_fault_allocate_before | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | support_stack_alloc | 0 | -| atl.cpp:201:8:201:12 | GetAt | (size_t) | | xalloc_sigstack | 0 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_personal | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_salt | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_personal | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_salt | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (CCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ccm128_aad | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (CCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ccm128_tag | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (CMS_RecipientInfo *,const unsigned char *,size_t) | | CMS_RecipientInfo_kekri_id_cmp | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_alnum | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_bytes | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_hex | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (DH *,const unsigned char *,size_t) | | ossl_dh_buf2key | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EC_GROUP *,const unsigned char *,size_t) | | EC_GROUP_set_seed | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EC_KEY *,const unsigned char *,size_t) | | ossl_ec_key_simple_oct2priv | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha1_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha256_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha512_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_MD_CTX *,const unsigned char *,size_t) | | EVP_DigestVerifyFinal | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_PKEY *,char *,size_t) | | EVP_PKEY_get_default_digest_name | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (EVP_RAND_CTX *,unsigned char *,size_t) | | EVP_RAND_nonce | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FFC_PARAMS *,const unsigned char *,size_t) | | ossl_ffc_params_set_seed | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const char *,size_t) | | _IO_new_do_write | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | _IO_default_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,void *,size_t) | | _IO_default_xsgetn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,void *,size_t) | | _IO_file_xsgetn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,void *,size_t) | | _IO_file_xsgetn_mmap | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (FILE *,void *,size_t) | | _IO_wdefault_xsgetn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_aad | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_setiv | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (GCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_gcm128_tag | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (KECCAK1600_CTX *,unsigned char *,size_t) | | ossl_sha3_squeeze | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (KECCAK1600_CTX *,unsigned char,size_t) | | ossl_sha3_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (LIBSSH2_CHANNEL *,const char *,size_t) | | libssh2_channel_signal_ex | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (LIBSSH2_SFTP_HANDLE *,char *,size_t) | | libssh2_sftp_read | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (LIBSSH2_SFTP_HANDLE *,const char *,size_t) | | libssh2_sftp_write | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MD4_CTX *,const void *,size_t) | | MD4_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MD5_CTX *,const void *,size_t) | | MD5_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MDC2_CTX *,const unsigned char *,size_t) | | MDC2_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_pk_decode | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_sk_decode | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (MemoryManager *,const uint8_t *,size_t) | | CreatePreparedDictionary | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OCB128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ocb128_aad | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OCB128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ocb128_tag | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_HPKE_CTX *,const unsigned char *,size_t) | | OSSL_HPKE_CTX_set1_ikme | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_JSON_ENC *,const char *,size_t) | | ossl_json_str_len | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_entropy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_user_entropy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_PARAM *,void *,size_t) | | ossl_param_set_secure_block | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_default | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_multiblock | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (POLY1305 *,const unsigned char *,size_t) | | Poly1305_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_generic_initiv | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_ede3_initkey | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (PROV_GCM_CTX *,const unsigned char *,size_t) | | ossl_gcm_aad_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (QUIC_PN,unsigned char *,size_t) | | ossl_quic_wire_encode_pkt_hdr_pn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (QUIC_RXFC *,OSSL_STATM *,size_t) | | ossl_quic_rstream_new | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (QUIC_TLS *,const unsigned char *,size_t) | | ossl_quic_tls_set_transport_params | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (RAND_POOL *,const unsigned char *,size_t) | | ossl_rand_pool_adin_mix_in | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (RAND_POOL *,size_t,size_t) | | ossl_rand_pool_add_end | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT **,const unsigned char **,size_t) | | o2i_SCT | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,const unsigned char **,size_t) | | o2i_SCT_signature | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,const unsigned char *,size_t) | | SCT_set1_extensions | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,const unsigned char *,size_t) | | SCT_set1_log_id | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,const unsigned char *,size_t) | | SCT_set1_signature | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,unsigned char *,size_t) | | SCT_set0_extensions | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,unsigned char *,size_t) | | SCT_set0_log_id | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SCT *,unsigned char *,size_t) | | SCT_set0_signature | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SIPHASH *,const unsigned char *,size_t) | | SipHash_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SIPHASH *,unsigned char *,size_t) | | SipHash_Final | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SIV128_CONTEXT *,const unsigned char *,size_t) | | ossl_siv128_set_tag | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SIV128_CONTEXT *,unsigned char *,size_t) | | ossl_siv128_get_tag | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_priv | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_pub | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL *,const unsigned char *,size_t) | | SSL_set1_client_cert_type | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL *,const unsigned char *,size_t) | | SSL_set1_server_cert_type | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL *,const unsigned char *,size_t) | | SSL_set_quic_tls_transport_params | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL *,size_t,size_t) | | SSL_set_block_padding_ex | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_CONNECTION *,TLS_RECORD *,size_t) | | ssl_release_record | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_CONNECTION *,const unsigned char *,size_t) | | lookup_sess_in_cache | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_client_cert_type | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_server_cert_type | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_CTX *,size_t,size_t) | | SSL_CTX_set_block_padding_ex | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_alpn_selected | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_master_key | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (Strtab *,const char *,size_t) | | strtabadd | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,BUF_MEM *,size_t) | | WPACKET_init_len | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,const unsigned char *,size_t) | | ossl_quic_wire_encode_frame_new_token | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,int,size_t) | | WPACKET_memset | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,uint64_t,size_t) | | WPACKET_put_bytes__ | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,unsigned char *,size_t) | | WPACKET_init_der | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (WPACKET *,unsigned char *,size_t) | | dtls_raw_hello_verify_request | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_add1_host | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_email | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_host | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (X509_VERIFY_PARAM *,const unsigned char *,size_t) | | X509_VERIFY_PARAM_set1_ip | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (__printf_buffer *,char,size_t) | | __printf_buffer_pad_1 | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (__printf_buffer *,const char *,size_t) | | __printf_buffer_write | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (__printf_buffer_snprintf *,char *,size_t) | | __printf_buffer_snprintf_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (__wprintf_buffer *,const wchar_t *,size_t) | | __wprintf_buffer_write | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (__wprintf_buffer *,wchar_t,size_t) | | __wprintf_buffer_pad_1 | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (argp_fmtstream *,argp_fmtstream_t,size_t) | | __argp_fmtstream_ensure | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (argp_fmtstream_t,const char *,size_t) | | __argp_fmtstream_write | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (bufc_pool *,size_t,size_t) | | Curl_bufcp_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (bufq *,size_t,size_t) | | Curl_bufq_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char **,size_t *,size_t) | | Curl_str_number | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,const char *,size_t) | | Curl_strntolower | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,const char *,size_t) | | Curl_strntoupper | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,const char *,size_t) | | OPENSSL_strlcat | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,const char *,size_t) | | OPENSSL_strlcpy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,const char *,size_t) | | uv__strscpy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *,size_t,size_t) | | __getcwd_chk | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *__restrict__,const char *__restrict__,size_t) | | __strlcat | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (char *__restrict__,const char *__restrict__,size_t) | | __strlcpy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const CTLOG_STORE *,const uint8_t *,size_t) | | CTLOG_STORE_get0_log_by_id | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const EC_KEY *,unsigned char *,size_t) | | ossl_ec_key_simple_priv2oct | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const EVP_MD *,const OSSL_ITEM *,size_t) | | ossl_digest_md_to_nid | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const EVP_MD *,const unsigned char *,size_t) | | OSSL_STORE_SEARCH_by_key_fingerprint | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const OSSL_CMP_CTX *,char *,size_t) | | OSSL_CMP_CTX_snprint_PKIStatus | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const OSSL_CMP_PKISI *,char *,size_t) | | OSSL_CMP_snprint_PKIStatusInfo | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const OSSL_NAMEMAP *,int,size_t) | | ossl_namemap_num2name | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const OSSL_PARAM *,char **,size_t) | | OSSL_PARAM_get_utf8_string | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const SSL *,unsigned char *,size_t) | | SSL_get_client_random | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const SSL *,unsigned char *,size_t) | | SSL_get_server_random | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const SSL_SESSION *,unsigned char *,size_t) | | SSL_SESSION_get_master_key | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char **,size_t) | | OSSL_PARAM_construct_utf8_ptr | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char *,size_t) | | OSSL_PARAM_construct_utf8_string | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char *,size_t) | | __libc_ns_makecanon | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char *,size_t) | | __realpath_chk | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char *,size_t) | | getpass_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,char *,size_t) | | ns_makecanon | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,const char *,size_t) | | OPENSSL_strncasecmp | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,const char *,size_t) | | c_strncasecmp | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,uint16_t *,size_t) | | uv_wtf8_to_utf16 | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,unsigned char *,size_t) | | OSSL_PARAM_construct_BN | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,void **,size_t) | | OSSL_PARAM_construct_octet_ptr | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,void *,size_t) | | OSSL_PARAM_construct_octet_string | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const char *,void *,size_t) | | uv__random_readpath | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const charmap_t *,const char *,size_t) | | charmap_find_symbol | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const charmap_t *,const char *,size_t) | | charmap_find_value | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const repertoire_t *,const char *,size_t) | | repertoire_find_value | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const sockaddr *,char *,size_t) | | uv_ip_name | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const sockaddr_in6 *,char *,size_t) | | uv_ip6_name | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const sockaddr_in *,char *,size_t) | | uv_ip4_name | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const unsigned char *,char *,size_t) | | ___ns_name_ntop | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const unsigned char *,size_t,size_t) | | ossl_rand_pool_attach | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const void *,size_t,size_t) | | support_blob_repeat_allocate | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const void *,size_t,size_t) | | support_blob_repeat_allocate_shared | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const_nis_name,char *,size_t) | | nis_domain_of_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const_nis_name,char *,size_t) | | nis_leaf_of_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (const_nis_name,char *,size_t) | | nis_name_of_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (curl_mimepart *,const char *,size_t) | | curl_mime_data | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (curve448_scalar_t,const unsigned char *,size_t) | | ossl_curve448_scalar_decode_long | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (dynhds *,const char *,size_t) | | Curl_dynhds_get | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (dynhds *,const char *,size_t) | | Curl_dynhds_h1_add_line | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (dynhds *,size_t,size_t) | | Curl_dynhds_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int *,const char *,size_t) | | Curl_http_decode_status | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int *,int *,size_t) | | EVP_PBE_get | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,char *,size_t) | | Curl_strerror | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,char *,size_t) | | __strerror_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,char *,size_t) | | __ttyname_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,char *,size_t) | | uv_err_name_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,char *,size_t) | | uv_strerror_r | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,const void *,size_t) | | _nl_intern_locale_data | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,const void *,size_t) | | writeall | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,int,size_t) | | BrotliEncoderEstimatePeakMemoryUsage | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (int,void *,size_t) | | __readall | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (locale_file *,const uint32_t *,size_t) | | add_locale_uint32_array | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_buf *,uint8_t *,size_t) | | nghttp2_buf_wrap_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_extension *,nghttp2_origin_entry *,size_t) | | nghttp2_frame_origin_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_extpri_parse_priority | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_http_parse_priority | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_hd_deflater *,const nghttp2_nv *,size_t) | | nghttp2_hd_deflate_bound | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv2 | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_session *,int32_t,size_t) | | nghttp2_session_consume | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_session *,nghttp2_settings_entry *,size_t) | | nghttp2_session_update_local_settings | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (nghttp2_settings *,nghttp2_settings_entry *,size_t) | | nghttp2_frame_unpack_settings_payload | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (ns_rr_cursor *,const unsigned char *,size_t) | | __ns_rr_cursor_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (pthread_attr_t *,void *,size_t) | | __pthread_attr_setstack | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (scratch_buffer *,size_t,size_t) | | __libc_scratch_buffer_set_array_size | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (sfparse_parser *,const uint8_t *,size_t) | | sfparse_parser_init | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (size_t,OSSL_QTX_IOVEC *,size_t) | | ossl_quic_sstream_adjust_iov | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (stack_st_SCT **,const unsigned char **,size_t) | | o2i_SCT_LIST | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (ucs4_t *,const uint8_t *,size_t) | | u8_mbtouc_aux | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (uint8_t *,const nghttp2_settings_entry *,size_t) | | nghttp2_frame_pack_settings_payload | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned char **,const char *,size_t) | | _libssh2_store_str | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned char **,const unsigned char *,size_t) | | _libssh2_store_bignum2_bytes | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned char *,const unsigned char *,size_t) | | BUF_reverse | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned char *,size_t *,size_t) | | ossl_cipher_padblock | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned char *,size_t *,size_t) | | ossl_cipher_unpadblock | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (unsigned int,char *,size_t) | | __initstate | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (uv_thread_t *,char *,size_t) | | uv__thread_getname | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (uv_thread_t *,char *,size_t) | | uv_thread_getaffinity | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (uv_thread_t *,char *,size_t) | | uv_thread_getname | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (void **,size_t,size_t) | | __posix_memalign | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (void *,size_t,size_t) | | Curl_hash_str | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (void *,size_t,size_t) | | __libc_reallocarray | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (void *,unsigned char *,size_t) | | ossl_drbg_clear_seed | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (wchar_t *,const wchar_t *,size_t) | | __wmemcpy | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (wchar_t *,const wchar_t *,size_t) | | __wmemmove | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcat | 2 | -| atl.cpp:206:10:206:17 | InsertAt | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcpy | 2 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | BrotliEncoderMaxCompressedSize | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | EVP_PKEY_meth_get0 | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | __libc_malloc | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | __libc_valloc | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | _dl_early_allocate | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | curlx_uztosi | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | curlx_uztosz | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | curlx_uztoui | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | curlx_uztoul | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | malloc | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | ossl_get_extension_type | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | ossl_param_bytes_to_blocks | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | ossl_quic_sstream_new | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | ssl_cert_new | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | support_next_to_fault_allocate | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | support_next_to_fault_allocate_before | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | support_stack_alloc | 0 | -| atl.cpp:213:8:213:17 | operator[] | (size_t) | | xalloc_sigstack | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | Jim_IntHashFunction | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | Jim_IntHashFunction | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | __sleep | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | __sleep | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | curlx_uitous | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | curlx_uitous | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | la_version | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | la_version | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | ssl3_get_cipher | 0 | -| atl.cpp:259:5:259:12 | CAtlList | (unsigned int) | | ssl3_get_cipher | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | BrotliEncoderMaxCompressedSize | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | BrotliEncoderMaxCompressedSize | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | EVP_PKEY_meth_get0 | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | EVP_PKEY_meth_get0 | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | __libc_malloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | __libc_malloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | __libc_valloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | __libc_valloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | _dl_early_allocate | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | _dl_early_allocate | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztosi | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztosi | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztosz | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztosz | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztoui | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztoui | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztoul | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | curlx_uztoul | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | malloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | malloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_get_extension_type | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_get_extension_type | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_param_bytes_to_blocks | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_param_bytes_to_blocks | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_quic_sstream_new | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ossl_quic_sstream_new | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ssl_cert_new | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | ssl_cert_new | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_next_to_fault_allocate | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_next_to_fault_allocate | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_next_to_fault_allocate_before | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_next_to_fault_allocate_before | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_stack_alloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | support_stack_alloc | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | xalloc_sigstack | 0 | -| atl.cpp:268:14:268:22 | FindIndex | (size_t) | | xalloc_sigstack | 0 | -| atl.cpp:409:10:409:10 | operator= | (const CComBSTR &) | CComBSTR | Append | 0 | -| atl.cpp:409:10:409:10 | operator= | (const CComBSTR &) | CComBSTR | CComBSTR | 0 | -| atl.cpp:411:5:411:12 | CComBSTR | (const CComBSTR &) | CComBSTR | Append | 0 | -| atl.cpp:411:5:411:12 | CComBSTR | (const CComBSTR &) | CComBSTR | CComBSTR | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ASN1_tag2str | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | Jim_SignalId | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | PKCS12_init | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | Symbol_Nth | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __btowc | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __current_locale_name | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __fdopendir | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __get_errlist | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __get_errname | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __math_invalid_i | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __math_invalidf_i | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __p_class | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __p_rcode | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __p_type | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __pkey_get | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __sigdescr_np | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | __strerrordesc_np | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | _tolower | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | _toupper | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | btowc | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | c_tolower | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | c_toupper | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | curlx_sitouz | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | inet6_option_space | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isalnum | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isalpha | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isblank | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | iscntrl | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isdigit | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isgraph | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | islower | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isprint | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ispunct | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isspace | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isupper | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | isxdigit | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ossl_tolower | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | ossl_toupper | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | sigabbrev_np | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | sqlite3_errstr | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | strerrorname_np | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | support_report_failure | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | svcudp_create | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | tls13_alert_code | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | toascii | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | tolower | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | toupper | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uabs | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uv__accept | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uv_err_name | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uv_strerror | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | | zError | 0 | -| atl.cpp:412:5:412:12 | CComBSTR | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:413:5:413:12 | CComBSTR | (__wprintf_buffer *,const wchar_t *) | | __wprintf_buffer_puts_1 | 1 | -| atl.cpp:413:5:413:12 | CComBSTR | (const wchar_t *,const wchar_t *) | | __wcscoll | 1 | -| atl.cpp:413:5:413:12 | CComBSTR | (const wchar_t *,const wchar_t *) | | wcspbrk | 1 | -| atl.cpp:413:5:413:12 | CComBSTR | (const wchar_t *,const wchar_t *) | | wcsstr | 1 | -| atl.cpp:413:5:413:12 | CComBSTR | (int,LPCOLESTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:413:5:413:12 | CComBSTR | (int,LPCOLESTR) | CComBSTR | CComBSTR | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (CONF *,const char *) | | _CONF_new_section | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (DSO *,const char *) | | DSO_convert_filename | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (DSO *,const char *) | | DSO_set_filename | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (GlobalConfig *,const char *) | | setvariable | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL *,const char *) | | SSL_add1_host | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL *,const char *) | | SSL_set1_host | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (UI *,const char *) | | UI_add_error_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (UI *,const char *) | | UI_add_info_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (UI *,const char *) | | UI_dup_error_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (UI *,const char *) | | UI_dup_info_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (X509 *,const char *) | | x509_ctrl_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (char **,const char *) | | Curl_setstropt | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (char **,const char *) | | __strsep | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (char *,const char *) | | xstrdup | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | Configcmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | Curl_timestrcmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | DES_crypt | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __bindtextdomain | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __dgettext | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __gconv_compare_alias | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strcasestr | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strcspn_generic | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strcspn_sse42 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strpbrk_generic | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strspn_generic | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strspn_sse42 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strstr_generic | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | __strverscmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | advance | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | c_strcasecmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | charmap_aliases | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | charmap_open | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | chroot_canon | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | get_passwd | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | gzopen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | gzopen64 | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | iconv_open | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | openssl_fopen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | sqlite3_strglob | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | sqlite3_stricmp | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | step | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | tempnam | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const char *,const char *) | | xfopen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const mntent *,const char *) | | __hasmntopt | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (const nis_error,const char *) | | nis_sperror | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (curl_off_t *,const char *) | | str2offset | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (curl_slist **,const char *) | | add2list | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (curl_slist *,const char *) | | curl_slist_append | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (gzFile,const char *) | | gzputs | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,LPCSTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,LPCSTR) | CComBSTR | CComBSTR | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | BIO_meth_new | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | BIO_meth_new | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | _IO_new_fdopen | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | _IO_new_fdopen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | gzdopen | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | gzdopen | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | setlocale | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | setlocale | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | xsetlocale | 0 | -| atl.cpp:414:5:414:12 | CComBSTR | (int,const char *) | | xsetlocale | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (lemon *,const char *) | | file_makename | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (long *,const char *) | | secs2ms | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (long *,const char *) | | str2num | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (long *,const char *) | | str2unum | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (size_t *,const char *) | | next_protos_parse | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (slist_wc **,const char *) | | easysrc_add | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (slist_wc *,const char *) | | slist_wc_append | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (stringtable *,const char *) | | stringtable_add | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (unsigned long *,const char *) | | set_cert_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (unsigned long *,const char *) | | set_name_ex | 1 | -| atl.cpp:414:5:414:12 | CComBSTR | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| atl.cpp:415:5:415:12 | CComBSTR | (LPCOLESTR) | CComBSTR | Append | 0 | -| atl.cpp:415:5:415:12 | CComBSTR | (LPCOLESTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (LPCSTR) | CComBSTR | Append | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (LPCSTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Strsafe | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | Symbol_new | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | UI_create_method | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __basename | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __gettext | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __hash_string | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __strdup | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __textdomain | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | __tzstring | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | a64l | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | charmap_opendir | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | ether_aton | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | getdate | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | inetstr2int | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | last_component | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | opt_path_end | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | opt_progname | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | repertoire_read | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | sgetsgent | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | sgetspent | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | strhash | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | uc_script_byname | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | uv__strdup | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:416:5:416:12 | CComBSTR | (const char *) | | xstrdup | 0 | -| atl.cpp:417:5:417:12 | CComBSTR | (CComBSTR &&) | CComBSTR | CComBSTR | 0 | -| atl.cpp:420:13:420:18 | Append | (const CComBSTR &) | CComBSTR | Append | 0 | -| atl.cpp:420:13:420:18 | Append | (const CComBSTR &) | CComBSTR | CComBSTR | 0 | -| atl.cpp:421:13:421:18 | Append | (wchar_t) | | operator+= | 0 | -| atl.cpp:421:13:421:18 | Append | (wchar_t) | | wcwidth | 0 | -| atl.cpp:421:13:421:18 | Append | (wchar_t) | CComBSTR | Append | 0 | -| atl.cpp:421:13:421:18 | Append | (wchar_t) | CSimpleStringT | operator+= | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | | Curl_raw_tolower | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | | Curl_raw_toupper | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | | findshortopt | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | | operator+= | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | CComBSTR | Append | 0 | -| atl.cpp:422:13:422:18 | Append | (char) | CSimpleStringT | operator+= | 0 | -| atl.cpp:423:13:423:18 | Append | (LPCOLESTR) | CComBSTR | Append | 0 | -| atl.cpp:423:13:423:18 | Append | (LPCOLESTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:424:13:424:18 | Append | (LPCSTR) | CComBSTR | Append | 0 | -| atl.cpp:424:13:424:18 | Append | (LPCSTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Strsafe | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | Symbol_new | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | UI_create_method | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __basename | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __gettext | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __hash_string | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __strdup | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __textdomain | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | __tzstring | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | a64l | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | charmap_opendir | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | ether_aton | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | getdate | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | inetstr2int | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | last_component | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | opt_path_end | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | opt_progname | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | repertoire_read | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | sgetsgent | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | sgetspent | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | strhash | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | uc_script_byname | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | uv__strdup | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:424:13:424:18 | Append | (const char *) | | xstrdup | 0 | -| atl.cpp:425:13:425:18 | Append | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:425:13:425:18 | Append | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:425:13:425:18 | Append | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:425:13:425:18 | Append | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:425:13:425:18 | Append | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:425:13:425:18 | Append | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:425:13:425:18 | Append | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:425:13:425:18 | Append | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:425:13:425:18 | Append | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:425:13:425:18 | Append | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:425:13:425:18 | Append | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:425:13:425:18 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:425:13:425:18 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:425:13:425:18 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:425:13:425:18 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:425:13:425:18 | Append | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:425:13:425:18 | Append | (FTS *,int) | | fts_children | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:425:13:425:18 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:425:13:425:18 | Append | (LPCOLESTR,int) | CComBSTR | Append | 0 | -| atl.cpp:425:13:425:18 | Append | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:425:13:425:18 | Append | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:425:13:425:18 | Append | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:425:13:425:18 | Append | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:425:13:425:18 | Append | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:425:13:425:18 | Append | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:425:13:425:18 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:425:13:425:18 | Append | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:425:13:425:18 | Append | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:425:13:425:18 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:425:13:425:18 | Append | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:425:13:425:18 | Append | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:425:13:425:18 | Append | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:425:13:425:18 | Append | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:425:13:425:18 | Append | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:425:13:425:18 | Append | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:425:13:425:18 | Append | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:425:13:425:18 | Append | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:425:13:425:18 | Append | (char **,int) | | addrsort | 1 | -| atl.cpp:425:13:425:18 | Append | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:425:13:425:18 | Append | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:425:13:425:18 | Append | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:425:13:425:18 | Append | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:425:13:425:18 | Append | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:425:13:425:18 | Append | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:425:13:425:18 | Append | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:425:13:425:18 | Append | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:425:13:425:18 | Append | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:425:13:425:18 | Append | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:425:13:425:18 | Append | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:425:13:425:18 | Append | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:425:13:425:18 | Append | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:425:13:425:18 | Append | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:425:13:425:18 | Append | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:425:13:425:18 | Append | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:425:13:425:18 | Append | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:425:13:425:18 | Append | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:425:13:425:18 | Append | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | ftok | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:425:13:425:18 | Append | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:425:13:425:18 | Append | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:425:13:425:18 | Append | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:425:13:425:18 | Append | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:425:13:425:18 | Append | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:425:13:425:18 | Append | (double,int) | | __ldexp | 1 | -| atl.cpp:425:13:425:18 | Append | (double,int) | | __scalbn | 1 | -| atl.cpp:425:13:425:18 | Append | (double[],int) | | getloadavg | 1 | -| atl.cpp:425:13:425:18 | Append | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:425:13:425:18 | Append | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:425:13:425:18 | Append | (float,int) | | __ldexpf | 1 | -| atl.cpp:425:13:425:18 | Append | (float,int) | | __scalbnf | 1 | -| atl.cpp:425:13:425:18 | Append | (gzFile,int) | | gzflush | 1 | -| atl.cpp:425:13:425:18 | Append | (gzFile,int) | | gzputc | 1 | -| atl.cpp:425:13:425:18 | Append | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:425:13:425:18 | Append | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:425:13:425:18 | Append | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | BN_security_bits | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | __isctype | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | acttab_alloc | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | div | 1 | -| atl.cpp:425:13:425:18 | Append | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:425:13:425:18 | Append | (long double,int) | | __ldexpl | 1 | -| atl.cpp:425:13:425:18 | Append | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:425:13:425:18 | Append | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:425:13:425:18 | Append | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:425:13:425:18 | Append | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:425:13:425:18 | Append | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:425:13:425:18 | Append | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:425:13:425:18 | Append | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:425:13:425:18 | Append | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:425:13:425:18 | Append | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:425:13:425:18 | Append | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:425:13:425:18 | Append | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:425:13:425:18 | Append | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:425:13:425:18 | Append | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:425:13:425:18 | Append | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:425:13:425:18 | Append | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:425:13:425:18 | Append | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:425:13:425:18 | Append | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:425:13:425:18 | Append | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:425:13:425:18 | Append | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:425:13:425:18 | Append | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:425:13:425:18 | Append | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:425:13:425:18 | Append | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:425:13:425:18 | Append | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:425:13:425:18 | Append | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:425:13:425:18 | Append | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:425:13:425:18 | Append | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:425:13:425:18 | Append | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:425:13:425:18 | Append | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:426:13:426:22 | AppendBSTR | (wchar_t *) | CStringT | CStringT | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (FTS *,int) | | fts_children | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (char **,int) | | addrsort | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | DH_meth_new | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | DSA_meth_new | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | Jim_StrDupLen | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | RSA_meth_new | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | ftok | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | ftok | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | gethostbyname2 | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | parse_yesno | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | res_gethostbyname2 | 0 | -| atl.cpp:427:13:427:23 | AppendBytes | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (double,int) | | __ldexp | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (double,int) | | __scalbn | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (double[],int) | | getloadavg | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (float,int) | | __ldexpf | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (float,int) | | __scalbnf | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (gzFile,int) | | gzflush | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (gzFile,int) | | gzputc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | BN_security_bits | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | __isctype | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | acttab_alloc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | div | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (long double,int) | | __ldexpl | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:427:13:427:23 | AppendBytes | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:428:13:428:23 | ArrayToBSTR | (const SAFEARRAY *) | CComSafeArray | Add | 0 | -| atl.cpp:428:13:428:23 | ArrayToBSTR | (const SAFEARRAY *) | CComSafeArray | CComSafeArray | 0 | -| atl.cpp:428:13:428:23 | ArrayToBSTR | (const SAFEARRAY *) | CComSafeArray | operator= | 0 | -| atl.cpp:430:10:430:15 | Attach | (wchar_t *) | CStringT | CStringT | 0 | -| atl.cpp:440:10:440:19 | LoadString | (ASN1_STRING *,unsigned int) | | ossl_asn1_string_set_bits_left | 1 | -| atl.cpp:440:10:440:19 | LoadString | (Curl_easy *,unsigned int) | | Curl_ssl_supports | 1 | -| atl.cpp:440:10:440:19 | LoadString | (EC_KEY *,unsigned int) | | EC_KEY_set_enc_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (EVP_ENCODE_CTX *,unsigned int) | | evp_encode_ctx_set_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (FFC_PARAMS *,unsigned int) | | ossl_ffc_params_set_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (HINSTANCE,UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:440:10:440:19 | LoadString | (HINSTANCE,UINT) | CComBSTR | LoadString | 1 | -| atl.cpp:440:10:440:19 | LoadString | (OSSL_PARAM *,unsigned int) | | OSSL_PARAM_set_uint | 1 | -| atl.cpp:440:10:440:19 | LoadString | (QUIC_DEMUX *,unsigned int) | | ossl_quic_demux_set_mtu | 1 | -| atl.cpp:440:10:440:19 | LoadString | (QUIC_OBJ *,unsigned int) | | ossl_quic_obj_set_blocking_mode | 1 | -| atl.cpp:440:10:440:19 | LoadString | (RAND_POOL *,unsigned int) | | ossl_rand_pool_bytes_needed | 1 | -| atl.cpp:440:10:440:19 | LoadString | (SSL *,unsigned int) | | SSL_set_hostflags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_clear_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_set_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (TS_RESP_CTX *,unsigned int) | | TS_RESP_CTX_set_clock_precision_digits | 1 | -| atl.cpp:440:10:440:19 | LoadString | (WPACKET *,unsigned int) | | WPACKET_set_flags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (X509_STORE_CTX *,unsigned int) | | X509_STORE_CTX_set_current_reasons | 1 | -| atl.cpp:440:10:440:19 | LoadString | (X509_VERIFY_PARAM *,unsigned int) | | X509_VERIFY_PARAM_set_hostflags | 1 | -| atl.cpp:440:10:440:19 | LoadString | (char *,unsigned int) | | __nis_default_access | 1 | -| atl.cpp:440:10:440:19 | LoadString | (char *,unsigned int) | | utf8_fromunicode | 1 | -| atl.cpp:440:10:440:19 | LoadString | (char *,unsigned int) | | uv_buf_init | 1 | -| atl.cpp:440:10:440:19 | LoadString | (const uv__io_t *,unsigned int) | | uv__io_active | 1 | -| atl.cpp:440:10:440:19 | LoadString | (const uv_buf_t[],unsigned int) | | uv__count_bufs | 1 | -| atl.cpp:440:10:440:19 | LoadString | (const_nis_name,unsigned int) | | __create_ib_request | 1 | -| atl.cpp:440:10:440:19 | LoadString | (grouping_iterator *,unsigned int) | | __grouping_iterator_init_none | 1 | -| atl.cpp:440:10:440:19 | LoadString | (gzFile,unsigned int) | | gzbuffer | 1 | -| atl.cpp:440:10:440:19 | LoadString | (res_state,unsigned int) | | __res_get_nsaddr | 1 | -| atl.cpp:440:10:440:19 | LoadString | (unsigned int,unsigned int) | | __gnu_dev_makedev | 1 | -| atl.cpp:440:10:440:19 | LoadString | (unsigned int,unsigned int) | | gnu_dev_makedev | 1 | -| atl.cpp:440:10:440:19 | LoadString | (z_streamp,unsigned int) | | inflate_fast | 1 | -| atl.cpp:441:10:441:19 | LoadString | (UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:441:10:441:19 | LoadString | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | Jim_IntHashFunction | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | __sleep | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | curlx_uitous | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | la_version | 0 | -| atl.cpp:441:10:441:19 | LoadString | (unsigned int) | | ssl3_get_cipher | 0 | -| atl.cpp:449:15:449:24 | operator+= | (const CComBSTR &) | CComBSTR | Append | 0 | -| atl.cpp:449:15:449:24 | operator+= | (const CComBSTR &) | CComBSTR | CComBSTR | 0 | -| atl.cpp:450:15:450:24 | operator+= | (LPCOLESTR) | CComBSTR | Append | 0 | -| atl.cpp:450:15:450:24 | operator+= | (LPCOLESTR) | CComBSTR | CComBSTR | 0 | -| atl.cpp:540:5:540:17 | CComSafeArray | (const SAFEARRAY *) | CComSafeArray | Add | 0 | -| atl.cpp:540:5:540:17 | CComSafeArray | (const SAFEARRAY *) | CComSafeArray | CComSafeArray | 0 | -| atl.cpp:540:5:540:17 | CComSafeArray | (const SAFEARRAY *) | CComSafeArray | operator= | 0 | -| atl.cpp:544:13:544:15 | Add | (const SAFEARRAY *) | CComSafeArray | Add | 0 | -| atl.cpp:544:13:544:15 | Add | (const SAFEARRAY *) | CComSafeArray | CComSafeArray | 0 | -| atl.cpp:544:13:544:15 | Add | (const SAFEARRAY *) | CComSafeArray | operator= | 0 | -| atl.cpp:546:13:546:15 | Add | (Curl_easy *,bool) | | Curl_creader_set_rewind | 1 | -| atl.cpp:546:13:546:15 | Add | (Curl_easy *,bool) | | Curl_set_in_callback | 1 | -| atl.cpp:546:13:546:15 | Add | (const T &,BOOL) | CComSafeArray | Add | 0 | -| atl.cpp:546:13:546:15 | Add | (const T &,BOOL) | CComSafeArray | Add | 1 | -| atl.cpp:546:13:546:15 | Add | (curl_socket_t[2],bool) | | Curl_eventfd | 1 | -| atl.cpp:546:13:546:15 | Add | (support_fuse *,bool) | | support_fuse_filter_forget | 1 | -| atl.cpp:546:13:546:15 | Add | (void *,bool) | | _dl_allocate_tls_init | 1 | -| atl.cpp:546:13:546:15 | Add | (void *,bool) | | _dl_deallocate_tls | 1 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | __fdelt_chk | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | __math_invalid_li | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | __math_invalidf_li | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | curlx_sltosi | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | curlx_sltoui | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | curlx_sltous | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | l64a | 0 | -| atl.cpp:554:8:554:12 | GetAt | (long) | | ulabs | 0 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,CURLcode,bool) | | Curl_http_done | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,Curl_chunker *,bool) | | Curl_httpchunk_init | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,Curl_chunker *,bool) | | Curl_httpchunk_reset | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,connectdata *,bool) | | Curl_cpool_disconnect | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,connectdata *,bool) | | Curl_on_disconnect | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,curltime *,bool) | | Curl_timeleft | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,pingpong *,bool) | | Curl_pp_state_timeout | 2 | -| atl.cpp:565:13:565:17 | SetAt | (Curl_easy *,size_t,bool) | | Curl_bump_headersize | 2 | -| atl.cpp:565:13:565:17 | SetAt | (GlobalConfig *,timeval *,bool) | | progress_meter | 2 | -| atl.cpp:565:13:565:17 | SetAt | (link_map *,Dl_serinfo *,bool) | | _dl_rtld_di_serinfo | 2 | -| atl.cpp:565:13:565:17 | SetAt | (link_map *,link_map_public *,bool) | | _dl_close_worker | 2 | -| atl.cpp:565:13:565:17 | SetAt | (size_t,char *[],bool) | | add_locales_to_archive | 2 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | __fdelt_chk | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | __math_invalid_li | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | __math_invalidf_li | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | curlx_sltosi | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | curlx_sltoui | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | curlx_sltous | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | l64a | 0 | -| atl.cpp:567:8:567:17 | operator[] | (long) | | ulabs | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ASN1_tag2str | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | Jim_SignalId | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | PKCS12_init | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | Symbol_Nth | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __btowc | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __current_locale_name | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __fdopendir | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __get_errlist | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __get_errname | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __math_invalid_i | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __math_invalidf_i | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __p_class | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __p_rcode | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __p_type | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __pkey_get | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __sigdescr_np | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | __strerrordesc_np | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | _tolower | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | _toupper | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | btowc | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | c_tolower | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | c_toupper | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | curlx_sitouz | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | inet6_option_space | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isalnum | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isalpha | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isblank | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | iscntrl | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isdigit | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isgraph | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | islower | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isprint | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ispunct | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isspace | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isupper | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | isxdigit | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ossl_tolower | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | ossl_toupper | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | sigabbrev_np | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | sqlite3_errstr | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | strerrorname_np | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | support_report_failure | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | svcudp_create | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | tls13_alert_code | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | toascii | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | tolower | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | toupper | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uabs | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uv__accept | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uv_err_name | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uv_strerror | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | | zError | 0 | -| atl.cpp:568:8:568:17 | operator[] | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:612:5:612:10 | CPathT | (PCXSTR) | | operator+= | 0 | -| atl.cpp:612:5:612:10 | CPathT | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:612:5:612:10 | CPathT | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:617:10:617:21 | AddExtension | (PCXSTR) | | operator+= | 0 | -| atl.cpp:617:10:617:21 | AddExtension | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:617:10:617:21 | AddExtension | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:618:10:618:15 | Append | (PCXSTR) | | operator+= | 0 | -| atl.cpp:618:10:618:15 | Append | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:618:10:618:15 | Append | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:621:10:621:16 | Combine | (PCXSTR,PCXSTR) | CStringT | Replace | 0 | -| atl.cpp:621:10:621:16 | Combine | (PCXSTR,PCXSTR) | CStringT | Replace | 1 | -| atl.cpp:621:10:621:16 | Combine | (const CStringT &,PCXSTR) | | operator+ | 1 | -| atl.cpp:621:10:621:16 | Combine | (int,PCXSTR) | CStringT | Insert | 1 | -| atl.cpp:622:24:622:35 | CommonPrefix | (PCXSTR) | | operator+= | 0 | -| atl.cpp:622:24:622:35 | CommonPrefix | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:622:24:622:35 | CommonPrefix | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:659:25:659:34 | operator+= | (PCXSTR) | | operator+= | 0 | -| atl.cpp:659:25:659:34 | operator+= | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:659:25:659:34 | operator+= | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ASN1_tag2str | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | Jim_SignalId | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | PKCS12_init | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | Symbol_Nth | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __btowc | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __current_locale_name | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __fdopendir | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __get_errlist | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __get_errname | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __math_invalid_i | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __math_invalidf_i | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __p_class | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __p_rcode | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __p_type | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __pkey_get | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __sigdescr_np | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | __strerrordesc_np | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | _tolower | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | _toupper | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | btowc | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | c_tolower | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | c_toupper | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | curlx_sitouz | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | inet6_option_space | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isalnum | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isalpha | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isblank | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | iscntrl | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isdigit | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isgraph | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | islower | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isprint | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ispunct | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isspace | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isupper | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | isxdigit | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ossl_tolower | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | ossl_toupper | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | sigabbrev_np | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | sqlite3_errstr | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | strerrorname_np | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | support_report_failure | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | svcudp_create | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | tls13_alert_code | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | toascii | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | tolower | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | toupper | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uabs | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uv__accept | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uv_err_name | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uv_strerror | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | | zError | 0 | -| atl.cpp:731:8:731:17 | operator[] | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:765:10:765:12 | Add | (const deque &,const Allocator &) | deque | deque | 1 | -| atl.cpp:765:10:765:12 | Add | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| atl.cpp:765:10:765:12 | Add | (const list &,const Allocator &) | list | list | 1 | -| atl.cpp:765:10:765:12 | Add | (const vector &,const Allocator &) | vector | vector | 1 | -| atl.cpp:765:10:765:12 | Add | (deque &&,const Allocator &) | deque | deque | 1 | -| atl.cpp:765:10:765:12 | Add | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| atl.cpp:765:10:765:12 | Add | (list &&,const Allocator &) | list | list | 1 | -| atl.cpp:765:10:765:12 | Add | (vector &&,const Allocator &) | vector | vector | 1 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ASN1_tag2str | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | Jim_SignalId | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | PKCS12_init | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | Symbol_Nth | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __btowc | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __current_locale_name | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __fdopendir | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __get_errlist | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __get_errname | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __math_invalid_i | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __math_invalidf_i | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __p_class | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __p_rcode | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __p_type | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __pkey_get | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __sigdescr_np | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | __strerrordesc_np | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | _tolower | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | _toupper | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | btowc | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | c_tolower | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | c_toupper | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | curlx_sitouz | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | inet6_option_space | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isalnum | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isalpha | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isblank | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | iscntrl | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isdigit | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isgraph | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | islower | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isprint | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ispunct | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isspace | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isupper | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | isxdigit | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ossl_tolower | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | ossl_toupper | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | sigabbrev_np | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | sqlite3_errstr | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | strerrorname_np | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | support_report_failure | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | svcudp_create | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | tls13_alert_code | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | toascii | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | tolower | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | toupper | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uabs | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uv__accept | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uv_err_name | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uv_strerror | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | | zError | 0 | -| atl.cpp:770:11:770:20 | GetValueAt | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:776:10:776:14 | SetAt | (const deque &,const Allocator &) | deque | deque | 1 | -| atl.cpp:776:10:776:14 | SetAt | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| atl.cpp:776:10:776:14 | SetAt | (const list &,const Allocator &) | list | list | 1 | -| atl.cpp:776:10:776:14 | SetAt | (const vector &,const Allocator &) | vector | vector | 1 | -| atl.cpp:776:10:776:14 | SetAt | (deque &&,const Allocator &) | deque | deque | 1 | -| atl.cpp:776:10:776:14 | SetAt | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| atl.cpp:776:10:776:14 | SetAt | (list &&,const Allocator &) | list | list | 1 | -| atl.cpp:776:10:776:14 | SetAt | (vector &&,const Allocator &) | vector | vector | 1 | -| atl.cpp:777:10:777:19 | SetAtIndex | (InputIterator,InputIterator,const Allocator &) | deque | deque | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (InputIterator,InputIterator,const Allocator &) | forward_list | forward_list | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (InputIterator,InputIterator,const Allocator &) | list | list | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | deque | deque | 1 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | deque | deque | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | forward_list | forward_list | 1 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | forward_list | forward_list | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | list | list | 1 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | list | list | 2 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | vector | vector | 1 | -| atl.cpp:777:10:777:19 | SetAtIndex | (size_type,const T &,const Allocator &) | vector | vector | 2 | -| atl.cpp:821:17:821:28 | Canonicalize | (unsigned long) | | BN_num_bits_word | 0 | -| atl.cpp:821:17:821:28 | Canonicalize | (unsigned long) | | BUF_MEM_new_ex | 0 | -| atl.cpp:821:17:821:28 | Canonicalize | (unsigned long) | | curlx_ultouc | 0 | -| atl.cpp:821:17:821:28 | Canonicalize | (unsigned long) | | curlx_ultous | 0 | -| atl.cpp:821:17:821:28 | Canonicalize | (unsigned long) | | next_prime | 0 | -| atl.cpp:824:10:824:17 | CrackUrl | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (hash_table *,unsigned long) | | init_hash | 1 | -| atl.cpp:824:10:824:17 | CrackUrl | (u_long,unsigned long) | | __p_option | 1 | -| atl.cpp:825:17:825:25 | CreateUrl | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| atl.cpp:825:17:825:25 | CreateUrl | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Strsafe | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | Symbol_new | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | UI_create_method | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __basename | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __gettext | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __hash_string | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __strdup | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __textdomain | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | __tzstring | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | a64l | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | charmap_opendir | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | ether_aton | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | getdate | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | inetstr2int | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | last_component | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | opt_path_end | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | opt_progname | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | repertoire_read | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | sgetsgent | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | sgetspent | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | strhash | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | uc_script_byname | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | uv__strdup | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:842:17:842:28 | SetExtraInfo | (const char *) | | xstrdup | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Strsafe | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | Symbol_new | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | UI_create_method | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __basename | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __gettext | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __hash_string | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __strdup | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __textdomain | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | __tzstring | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | a64l | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | charmap_opendir | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | ether_aton | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | getdate | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | inetstr2int | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | last_component | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | opt_path_end | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | opt_progname | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | repertoire_read | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | sgetsgent | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | sgetspent | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | strhash | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | uc_script_byname | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | uv__strdup | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:843:17:843:27 | SetHostName | (const char *) | | xstrdup | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Strsafe | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | Symbol_new | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | UI_create_method | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __basename | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __gettext | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __hash_string | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __strdup | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __textdomain | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | __tzstring | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | a64l | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | charmap_opendir | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | ether_aton | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | getdate | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | inetstr2int | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | last_component | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | opt_path_end | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | opt_progname | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | repertoire_read | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | sgetsgent | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | sgetspent | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | strhash | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | uc_script_byname | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | uv__strdup | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:844:17:844:27 | SetPassword | (const char *) | | xstrdup | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Strsafe | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | Symbol_new | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | UI_create_method | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __basename | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __gettext | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __hash_string | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __strdup | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __textdomain | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | __tzstring | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | a64l | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | charmap_opendir | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | ether_aton | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | getdate | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | inetstr2int | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | last_component | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | opt_path_end | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | opt_progname | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | repertoire_read | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | sgetsgent | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | sgetspent | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | strhash | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | uc_script_byname | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | uv__strdup | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:847:17:847:29 | SetSchemeName | (const char *) | | xstrdup | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Strsafe | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | Symbol_new | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | UI_create_method | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __basename | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __gettext | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __hash_string | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __strdup | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __textdomain | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | __tzstring | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | a64l | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | charmap_opendir | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | ether_aton | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | getdate | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | inetstr2int | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | last_component | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | opt_path_end | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | opt_progname | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | repertoire_read | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | sgetsgent | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | sgetspent | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | strhash | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | uc_script_byname | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | uv__strdup | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:848:17:848:26 | SetUrlPath | (const char *) | | xstrdup | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | BIO_gethostbyname | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Curl_copy_header_value | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Curl_get_scheme_handler | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Curl_getdate_capped | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Jim_StrDup | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | OPENSSL_LH_strhash | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Strsafe | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | Symbol_new | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | UI_create_method | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | X509V3_parse_list | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | X509_LOOKUP_meth_new | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __basename | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __gconv_find_shlib | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __gettext | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __hash_string | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __nss_action_parse | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __strdup | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __textdomain | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __tzset_parse_tz | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | __tzstring | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | a2i_IPADDRESS | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | a2i_IPADDRESS_NC | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | a64l | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | charmap_opendir | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | ether_aton | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | getdate | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | inetstr2int | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | last_component | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | opt_path_end | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | opt_progname | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | ossl_lh_strcasehash | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | repertoire_read | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | res_gethostbyname | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | sgetsgent | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | sgetspent | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | strhash | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | uc_script_byname | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | uv__strdup | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| atl.cpp:849:17:849:27 | SetUserName | (const char *) | | xstrdup | 0 | -| atl.cpp:915:5:915:18 | CSimpleStringT | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 0 | -| atl.cpp:915:5:915:18 | CSimpleStringT | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | -| atl.cpp:915:5:915:18 | CSimpleStringT | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 2 | -| atl.cpp:915:5:915:18 | CSimpleStringT | (const YCHAR *,int,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:915:5:915:18 | CSimpleStringT | (const YCHAR *,int,IAtlStringMgr *) | CStringT | CStringT | 2 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 0 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:916:5:916:18 | CSimpleStringT | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:917:5:917:18 | CSimpleStringT | (const CSimpleStringT &) | | operator+= | 0 | -| atl.cpp:917:5:917:18 | CSimpleStringT | (const CSimpleStringT &) | CSimpleStringT | CSimpleStringT | 0 | -| atl.cpp:917:5:917:18 | CSimpleStringT | (const CSimpleStringT &) | CSimpleStringT | operator+= | 0 | -| atl.cpp:917:5:917:18 | CSimpleStringT | (const CSimpleStringT &) | CStringT | CStringT | 0 | -| atl.cpp:917:5:917:18 | CSimpleStringT | (const CSimpleStringT &) | CStringT | operator= | 0 | -| atl.cpp:921:10:921:15 | Append | (const CSimpleStringT &) | | operator+= | 0 | -| atl.cpp:921:10:921:15 | Append | (const CSimpleStringT &) | CSimpleStringT | CSimpleStringT | 0 | -| atl.cpp:921:10:921:15 | Append | (const CSimpleStringT &) | CSimpleStringT | operator+= | 0 | -| atl.cpp:921:10:921:15 | Append | (const CSimpleStringT &) | CStringT | CStringT | 0 | -| atl.cpp:921:10:921:15 | Append | (const CSimpleStringT &) | CStringT | operator= | 0 | -| atl.cpp:922:10:922:15 | Append | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:922:10:922:15 | Append | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:922:10:922:15 | Append | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:922:10:922:15 | Append | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:922:10:922:15 | Append | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:922:10:922:15 | Append | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:922:10:922:15 | Append | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:922:10:922:15 | Append | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:922:10:922:15 | Append | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:922:10:922:15 | Append | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:922:10:922:15 | Append | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:922:10:922:15 | Append | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:922:10:922:15 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:922:10:922:15 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:922:10:922:15 | Append | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:922:10:922:15 | Append | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:922:10:922:15 | Append | (FTS *,int) | | fts_children | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:922:10:922:15 | Append | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:922:10:922:15 | Append | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:922:10:922:15 | Append | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:922:10:922:15 | Append | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:922:10:922:15 | Append | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:922:10:922:15 | Append | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:922:10:922:15 | Append | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:922:10:922:15 | Append | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:922:10:922:15 | Append | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:922:10:922:15 | Append | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:922:10:922:15 | Append | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:922:10:922:15 | Append | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:922:10:922:15 | Append | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:922:10:922:15 | Append | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:922:10:922:15 | Append | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:922:10:922:15 | Append | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:922:10:922:15 | Append | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:922:10:922:15 | Append | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:922:10:922:15 | Append | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:922:10:922:15 | Append | (char **,int) | | addrsort | 1 | -| atl.cpp:922:10:922:15 | Append | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:922:10:922:15 | Append | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:922:10:922:15 | Append | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:922:10:922:15 | Append | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:922:10:922:15 | Append | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:922:10:922:15 | Append | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:922:10:922:15 | Append | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:922:10:922:15 | Append | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:922:10:922:15 | Append | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:922:10:922:15 | Append | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:922:10:922:15 | Append | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:922:10:922:15 | Append | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:922:10:922:15 | Append | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:922:10:922:15 | Append | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:922:10:922:15 | Append | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:922:10:922:15 | Append | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:922:10:922:15 | Append | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:922:10:922:15 | Append | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:922:10:922:15 | Append | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | ftok | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:922:10:922:15 | Append | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:922:10:922:15 | Append | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:922:10:922:15 | Append | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:922:10:922:15 | Append | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:922:10:922:15 | Append | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:922:10:922:15 | Append | (double,int) | | __ldexp | 1 | -| atl.cpp:922:10:922:15 | Append | (double,int) | | __scalbn | 1 | -| atl.cpp:922:10:922:15 | Append | (double[],int) | | getloadavg | 1 | -| atl.cpp:922:10:922:15 | Append | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:922:10:922:15 | Append | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:922:10:922:15 | Append | (float,int) | | __ldexpf | 1 | -| atl.cpp:922:10:922:15 | Append | (float,int) | | __scalbnf | 1 | -| atl.cpp:922:10:922:15 | Append | (gzFile,int) | | gzflush | 1 | -| atl.cpp:922:10:922:15 | Append | (gzFile,int) | | gzputc | 1 | -| atl.cpp:922:10:922:15 | Append | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:922:10:922:15 | Append | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:922:10:922:15 | Append | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | BN_security_bits | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | __isctype | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | acttab_alloc | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | div | 1 | -| atl.cpp:922:10:922:15 | Append | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:922:10:922:15 | Append | (long double,int) | | __ldexpl | 1 | -| atl.cpp:922:10:922:15 | Append | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:922:10:922:15 | Append | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:922:10:922:15 | Append | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:922:10:922:15 | Append | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:922:10:922:15 | Append | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:922:10:922:15 | Append | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:922:10:922:15 | Append | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:922:10:922:15 | Append | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:922:10:922:15 | Append | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:922:10:922:15 | Append | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:922:10:922:15 | Append | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:922:10:922:15 | Append | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:922:10:922:15 | Append | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:922:10:922:15 | Append | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:922:10:922:15 | Append | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:922:10:922:15 | Append | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:922:10:922:15 | Append | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:922:10:922:15 | Append | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:922:10:922:15 | Append | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:922:10:922:15 | Append | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:922:10:922:15 | Append | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:922:10:922:15 | Append | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:922:10:922:15 | Append | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:922:10:922:15 | Append | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:922:10:922:15 | Append | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:922:10:922:15 | Append | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:922:10:922:15 | Append | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:922:10:922:15 | Append | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:923:10:923:15 | Append | (PCXSTR) | | operator+= | 0 | -| atl.cpp:923:10:923:15 | Append | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:923:10:923:15 | Append | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_BIT_STRING *,unsigned char *,int) | | ASN1_BIT_STRING_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_OCTET_STRING **,const unsigned char *,int) | | ossl_cmp_asn1_octet_string_set1_bytes | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_OCTET_STRING *,const unsigned char *,int) | | ASN1_OCTET_STRING_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_STRING *,const void *,int) | | ASN1_STRING_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_TIME *,tm *,int) | | ossl_asn1_time_from_tm | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_TYPE *,unsigned char *,int) | | ASN1_TYPE_set_octetstring | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_item_embed_free | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_primitive_free | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const BIGNUM *,int) | | BN_lshift | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const BIGNUM *,int) | | BN_rshift | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const BIGNUM *,int) | | BN_with_flags | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const BIGNUM *,int) | | bn_lshift_fixed_top | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const BIGNUM *,int) | | bn_rshift_fixed_top | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const unsigned long *,int) | | bn_set_static_words | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIGNUM *,const unsigned long *,int) | | bn_set_words | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,BIO *,int) | | OSSL_HTTP_REQ_CTX_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,BIO *,int) | | SMIME_crlf_copy | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,GENERAL_NAMES *,int) | | OSSL_GENERAL_NAMES_print | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,char *,int) | | BIO_get_line | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,const DSA *,int) | | DSA_print | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (BIO *,const RSA *,int) | | RSA_print | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (CERT *,X509_STORE **,int) | | ssl_cert_get_cert_store | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Curl_easy *,connectdata *,int) | | Curl_conn_cf_discard_all | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Curl_easy *,connectdata *,int) | | Curl_http2_may_switch | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Curl_easy *,connectdata *,int) | | Curl_http2_switch | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Curl_easy *,connectdata *,int) | | Curl_ssl_cfilter_add | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Curl_sockaddr_ex *,const Curl_addrinfo *,int) | | Curl_sock_assign_addr | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (DH *,const OSSL_PARAM[],int) | | ossl_dh_key_fromdata | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (DSA *,const OSSL_PARAM[],int) | | ossl_dsa_key_fromdata | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ECX_KEY *,const OSSL_PARAM[],int) | | ossl_ecx_key_fromdata | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EC_KEY *,const OSSL_PARAM[],int) | | ossl_ec_key_fromdata | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (ENGINE *,ENGINE_DYNAMIC_ID,int) | | engine_add_dynamic_id | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_export_to_provider | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_find_operation_cache | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY *,EVP_PKEY *,int) | | evp_keymgmt_util_copy | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,EVP_PKEY *,int) | | EVP_PKEY_derive_set_peer_ex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_hkdf_info | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_tls1_prf_seed | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_key | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_salt | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_scrypt_salt | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_tls1_prf_secret | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set_mac_key | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,const void *,int) | | EVP_PKEY_CTX_set1_id | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (EVP_PKEY_CTX *,int *,int) | | EVP_PKEY_CTX_set0_keygen_info | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FFC_PARAMS *,unsigned int,int) | | ossl_ffc_params_enable_flags | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,_IO_marker *,int) | | _IO_seekmark | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,_IO_marker *,int) | | _IO_seekwmark | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,__FILE *,int) | | fwide | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,const DSA *,int) | | DSA_print_fp | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,const RSA *,int) | | RSA_print_fp | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,off64_t,int) | | _IO_cookie_seek | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FILE *,rule *,int) | | RulePrint | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (FTS *,FTSENT *,int) | | fts_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetCommand | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetGlobalVariable | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetVariable | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *,int) | | Jim_ListGetIndex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *,int) | | Jim_UnsetVariable | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewDictObj | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewListObj | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,char *,int) | | Jim_NewStringObjNoAlloc | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (LIBSSH2_SFTP_HANDLE *,LIBSSH2_SFTP_ATTRIBUTES *,int) | | libssh2_sftp_fstat_ex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_BASICRESP *,OCSP_CERTID *,int) | | OCSP_resp_find | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_BASICRESP *,X509_EXTENSION *,int) | | OCSP_BASICRESP_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_BASICRESP *,const ASN1_OBJECT *,int) | | OCSP_BASICRESP_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_ONEREQ *,X509_EXTENSION *,int) | | OCSP_ONEREQ_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_ONEREQ *,const ASN1_OBJECT *,int) | | OCSP_ONEREQ_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_REQUEST *,X509_EXTENSION *,int) | | OCSP_REQUEST_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_REQUEST *,const ASN1_OBJECT *,int) | | OCSP_REQUEST_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_SINGLERESP *,X509_EXTENSION *,int) | | OCSP_SINGLERESP_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_SINGLERESP *,const ASN1_OBJECT *,int) | | OCSP_SINGLERESP_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OPENSSL_STACK *,const void *,int) | | OPENSSL_sk_insert | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_referenceValue | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_secretValue | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_PROVIDER *,OSSL_PROVIDER **,int) | | ossl_provider_add_to_store | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (OSSL_QRL_ENC_LEVEL_SET *,uint32_t,int) | | ossl_qrl_enc_level_set_get | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (PKCS7 *,stack_st_X509 *,int) | | PKCS7_get0_signers | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (POLICYINFO *,const ASN1_OBJECT *,int) | | ossl_policy_data_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (QLOG *,uint32_t,int) | | ossl_qlog_set_event_type_enabled | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (QUIC_RXFC *,uint64_t,int) | | ossl_quic_rxfc_on_rx_stream_frame | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (QUIC_STREAM_ITER *,QUIC_STREAM_MAP *,int) | | ossl_quic_stream_iter_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (QUIC_STREAM_MAP *,uint64_t,int) | | ossl_quic_stream_map_alloc | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (RSA *,const OSSL_PARAM[],int) | | ossl_rsa_fromdata | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL *,const unsigned char *,int) | | SSL_use_certificate_ASN1 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL *,const void *,int) | | SSL_write | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL *,void *,int) | | SSL_peek | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL *,void *,int) | | SSL_read | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CIPHER *,const SSL_CIPHER *,int) | | OBJ_bsearch_ssl_cipher_id | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CONNECTION *,PACKET *,int) | | ssl_cache_cipherlist | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_close_construct_packet | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_set_handshake_header | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CONNECTION *,WPACKET *,int) | | tls_close_construct_packet | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_MSG_IMPRINT *,unsigned char *,int) | | TS_MSG_IMPRINT_set_msg | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_REQ *,X509_EXTENSION *,int) | | TS_REQ_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_REQ *,const ASN1_OBJECT *,int) | | TS_REQ_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_TST_INFO *,X509_EXTENSION *,int) | | TS_TST_INFO_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_TST_INFO *,const ASN1_OBJECT *,int) | | TS_TST_INFO_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509 *,X509_EXTENSION *,int) | | X509_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509 *,int,int) | | X509_check_purpose | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509 *,int,int) | | X509_check_trust | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509_CRL *,X509_EXTENSION *,int) | | X509_CRL_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509_PUBKEY *,unsigned char *,int) | | X509_PUBKEY_set0_public_key | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509_REVOKED *,X509_EXTENSION *,int) | | X509_REVOKED_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (X509_STORE_CTX *,X509 *,int) | | ossl_x509_check_cert_time | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 0 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 0 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (_Float128,_Float128,int) | | __kernel_sinf128 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (_Float128,_Float128,int) | | __kernel_tanf128 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (action *,FILE *,int) | | PrintAction | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (acttab *,int,int) | | acttab_action | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (char *,size_t,int) | | __argz_stringify | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const ASN1_VALUE *,const ASN1_TEMPLATE *,int) | | ossl_asn1_do_adb | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,int[],int) | | BN_GF2m_poly2arr | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_bn2binpad | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_bn2lebinpad | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_bn2nativepad | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2bin | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2lebin | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2native | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const CMS_ContentInfo *,BIO *,int) | | ossl_cms_DigestedData_do_final | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_signed_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_unsigned_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const Curl_easy *,const connectdata *,int) | | Curl_conn_is_http2 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const EVP_MD *,const EVP_MD *,int) | | ossl_rsa_pss_params_create | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const EVP_PKEY *,const ASN1_OBJECT *,int) | | EVP_PKEY_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const OSSL_PARAM *,BIO *,int) | | OSSL_PARAM_print_to_bio | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const SSL *,char *,int) | | SSL_get_shared_ciphers | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const SSL *,int,int) | | apps_ssl_info_callback | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const SSL_CIPHER *,char *,int) | | SSL_CIPHER_description | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509 *,const ASN1_OBJECT *,int) | | X509_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_new_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509 *,int,int) | | X509_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509 *,int,int) | | X509_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_ACERT *,const ASN1_OBJECT *,int) | | X509_ACERT_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_CRL *,const ASN1_OBJECT *,int) | | X509_CRL_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_CRL *,const X509 *,int) | | OSSL_CMP_CRLSTATUS_create | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_NAME *,char *,int) | | X509_NAME_oneline | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_NAME *,const ASN1_OBJECT *,int) | | X509_NAME_get_index_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_REQ *,const ASN1_OBJECT *,int) | | X509_REQ_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_REVOKED *,const ASN1_OBJECT *,int) | | X509_REVOKED_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,char **,int) | | __strtol | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,char **,int) | | __strtoul | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,char **,int) | | idn2_to_ascii_8z | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const OSSL_PARAM *,int) | | print_param_types | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | CRYPTO_strdup | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | CRYPTO_strdup | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | __dcgettext | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | __dcgettext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | sqlite3_strnicmp | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,const char *,int) | | sqlite3_strnicmp | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,int,int) | | __old_strpbrk_c2 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,long *,int) | | Jim_StringToWide | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,size_t *,int) | | _dl_sysdep_read_whole_file | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,sqlite3_filename,int) | | sqlite3_uri_key | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,void *,int) | | support_readdir_check | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const char *,wordexp_t *,int) | | wordexp | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const cmsghdr *,uint8_t **,int) | | inet6_option_find | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const stack_st_X509_ATTRIBUTE *,const ASN1_OBJECT *,int) | | X509at_get_attr_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const stack_st_X509_EXTENSION *,const ASN1_OBJECT *,int) | | X509v3_get_ext_by_OBJ | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const uint8_t *,uint8_t **,int) | | idn2_lookup_u8 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const unsigned char **,unsigned int,int) | | ossl_b2i_DSA_after_header | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const unsigned char **,unsigned int,int) | | ossl_b2i_RSA_after_header | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const void *,const void *,int) | | ossl_is_partially_overlapping | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const void *,socklen_t,int) | | res_gethostbyaddr | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const wchar_t *,wchar_t **,int) | | __wcstol | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (const wchar_t *,wchar_t **,int) | | __wcstoul | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (curl_mimepart *,curl_mime *,int) | | Curl_mime_set_subparts | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (curl_mimepart *,curl_slist *,int) | | curl_mime_headers | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (database_dyn *,size_t,int) | | mempool_alloc | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (database_dyn *,time_t,int) | | prune_cache | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (double,double,int) | | __kernel_standard | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (float,float,int) | | __kernel_standard_f | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (gconv_spec *,__gconv_t *,int) | | __gconv_open | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (gzFile,char *,int) | | gzgets | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (gzFile,int,int) | | gzsetparams | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (gzFile,off64_t,int) | | gzseek64 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (gzFile,off_t,int) | | gzseek | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (int *,short *,int) | | __lll_lock_elision | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (int,BIO_ADDR *,int) | | BIO_accept_ex | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (int,int,int) | | ASN1_object_size | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (int,int,int) | | EVP_CIPHER_meth_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (long double,long double,int) | | __kernel_sinl | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (long double,long double,int) | | __kernel_standard_l | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (long double,long double,int) | | __kernel_tanl | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (mp_srcptr,int,int) | | __mpn_construct_double | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (mp_srcptr,int,int) | | __mpn_construct_float | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (mp_srcptr,int,int) | | __mpn_construct_float128 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (regex_t *,const char *,int) | | jim_regcomp | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (regex_t *,const char *,int) | | jim_regcomp | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (requestlist *,requestlist *,int) | | __aio_remove_request | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3 *,int,int) | | sqlite3_limit | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_context *,const void *,int) | | sqlite3_result_error16 | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (sqlite3expert *,int,int) | | sqlite3_expert_report | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 **,X509 *,int) | | ossl_x509_add_cert_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 **,stack_st_X509 *,int) | | ossl_x509_add_certs_new | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 *,ASIdentifiers *,int) | | X509v3_asid_validate_resource_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 *,IPAddrBlocks *,int) | | X509v3_addr_validate_resource_set | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 *,X509 *,int) | | X509_add_cert | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509 *,stack_st_X509 *,int) | | X509_add_certs | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (stack_st_X509_EXTENSION **,X509_EXTENSION *,int) | | X509v3_add_ext | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (td_thragent_t *,uint32_t *,int) | | _td_check_sizeof | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uint8_t[56],const gf,int) | | gf_serialize | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uint32_t *,SSL_CONNECTION *,int) | | ssl_set_sig_mask | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned char *,const char *,int) | | data_string | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned char *,const char *,int) | | data_string | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned char *,const unsigned char *,int) | | EVP_DecodeBlock | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned char *,const unsigned char *,int) | | EVP_EncodeBlock | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned char *,uint64_t,int) | | ossl_i2c_uint64_int | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned int,const char *,int) | | _IO_adjust_column | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned int,const char *,int) | | _IO_adjust_column | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned int,const wchar_t *,int) | | _IO_adjust_wcolumn | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned int,int,int) | | ossl_blob_length | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned long *,const BIGNUM *,int) | | bn_copy_words | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (unsigned long *,const unsigned long *,int) | | bn_sqr_words | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv__io_t *,uv__io_cb,int) | | uv__io_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_loop_t *,uv_fs_t *,int) | | uv__iou_fs_read_or_write | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_loop_t *,uv_pipe_t *,int) | | uv_pipe_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_loop_t *,uv_poll_t *,int) | | uv_poll_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start_oneshot | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (uv_stream_t *,int,int) | | uv__stream_open | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (void *,cmsghdr **,int) | | inet6_option_init | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (void *,const char *,int) | | CRYPTO_secure_free | 1 | -| atl.cpp:927:17:927:25 | CopyChars | (void *,const char *,int) | | CRYPTO_secure_free | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (void *,curl_off_t,int) | | tool_mime_stdin_seek | 2 | -| atl.cpp:927:17:927:25 | CopyChars | (void *,socklen_t,int) | | inet6_opt_finish | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (BIGNUM *,const BIGNUM *,const BIGNUM *,int) | | ossl_rsa_check_pminusq_diff | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIGNUM *,int,int,int) | | BN_bntest_rand | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIGNUM *,int,int,int) | | BN_priv_rand | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIGNUM *,int,int,int) | | BN_pseudo_rand | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIGNUM *,int,int,int) | | BN_rand | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,CMS_ContentInfo *,BIO *,int) | | PEM_write_bio_CMS_stream | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,CMS_ContentInfo *,BIO *,int) | | SMIME_write_CMS | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,CMS_ContentInfo *,BIO *,int) | | i2d_CMS_bio_stream | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,PKCS7 *,BIO *,int) | | PEM_write_bio_PKCS7_stream | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,PKCS7 *,BIO *,int) | | SMIME_write_PKCS7 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,PKCS7 *,BIO *,int) | | i2d_PKCS7_bio_stream | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,X509_EXTENSION *,unsigned long,int) | | X509V3_EXT_print | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,const char *,const OCSP_REQUEST *,int) | | OCSP_sendreq_new | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,const unsigned char *,long,int) | | ASN1_parse | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,int,const ASN1_TYPE *,int) | | ossl_print_attribute_value | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BIO *,void *,int,int) | | app_http_tls_cb | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (BrotliDistanceParams *,uint32_t,uint32_t,int) | | BrotliInitDistanceParams | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (CERT *,const int *,size_t,int) | | tls1_set_sigalgs | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (CERT *,const uint16_t *,size_t,int) | | tls1_set_raw_sigalgs | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (DH *,OSSL_PARAM_BLD *,OSSL_PARAM[],int) | | ossl_dh_key_todata | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (DSO *,const char *,DSO_METHOD *,int) | | DSO_load | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (ENGINE *,const char *,const char *,int) | | ENGINE_ctrl_cmd_string | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (ENGINE *,const char *,const char *,int) | | ENGINE_ctrl_cmd_string | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (ENGINE_TABLE **,int,const char *,int) | | ossl_engine_table_select | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (ENGINE_TABLE **,int,const char *,int) | | ossl_engine_table_select | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (EVP_PKEY_CTX *,const char *,int,int) | | app_keygen | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FFC_PARAMS *,const unsigned char *,size_t,int) | | ossl_ffc_params_set_validate_params | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,char *,char *,int) | | _IO_setb | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,const char *,const char *,int) | | _IO_new_file_fopen | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,const char *,const char *,int) | | _IO_new_file_fopen | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,lemon *,int *,int) | | print_stack_union | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,mntent *,char *,int) | | __getmntent_r | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,off64_t,int,int) | | _IO_file_seekoff_mmap | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,off64_t,int,int) | | _IO_new_file_seekoff | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,off64_t,int,int) | | _IO_str_seekoff | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,off64_t,int,int) | | _IO_wfile_seekoff | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,off64_t,int,int) | | _IO_wstr_seekoff | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (FILE *,wchar_t *,wchar_t *,int) | | _IO_wsetb | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,Jim_Obj **,int) | | Jim_SubstObj | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,Jim_Obj *,int) | | Jim_ScanString | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,const char *,int) | | Jim_AppendString | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,const char *,int) | | Jim_AppendString | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,const char *,int) | | Jim_ListJoin | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (Jim_Interp *,Jim_Obj *,const char *,int) | | Jim_ListJoin | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (LIBSSH2_SESSION *,char **,int *,int) | | libssh2_session_last_error | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (LIBSSH2_SESSION *,const char *,const char *,int) | | libssh2_channel_direct_streamlocal_ex | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (LIBSSH2_SESSION *,const char *,const char *,int) | | libssh2_channel_direct_streamlocal_ex | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (LIBSSH2_SESSION *,int,const char *,int) | | _libssh2_error_flags | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (LIBSSH2_SESSION *,int,const char *,int) | | _libssh2_error_flags | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (OSSL_CMP_CTX *,const OSSL_CMP_MSG *,ossl_cmp_allow_unprotected_cb_t,int) | | ossl_cmp_msg_check_update | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (OSSL_CMP_CTX *,const OSSL_CMP_PKISI *,const OSSL_CRMF_CERTID *,int) | | ossl_cmp_rp_new | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (OSSL_LIB_CTX *,const char *,OSSL_PARAM *,int) | | OSSL_PROVIDER_try_load_ex | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (OSSL_PARAM_BLD *,OSSL_PARAM *,const char *,int) | | ossl_param_build_set_int | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (OSSL_PARAM_BLD *,OSSL_PARAM *,const char *,int) | | ossl_param_build_set_int | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (RSA *,OSSL_PARAM_BLD *,OSSL_PARAM[],int) | | ossl_rsa_todata | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SIPHASH *,const unsigned char *,int,int) | | SipHash_Init | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SLH_DSA_KEY *,const OSSL_PARAM *,const OSSL_PARAM[],int) | | ossl_slh_dsa_key_fromdata | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SSL *,SSL_CTX *,const SSL_METHOD *,int) | | ossl_ssl_init | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SSL_CONNECTION *,WPACKET *,CERT_PKEY *,int) | | ssl3_output_cert_chain | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SSL_CONNECTION *,stack_st_X509 *,X509 *,int) | | ssl_security_cert_chain | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,ASN1_INTEGER *,const char *,int) | | SXNET_add_id_INTEGER | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,ASN1_INTEGER *,const char *,int) | | SXNET_add_id_INTEGER | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,const char *,const char *,int) | | SXNET_add_id_asc | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,const char *,const char *,int) | | SXNET_add_id_asc | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,unsigned long,const char *,int) | | SXNET_add_id_ulong | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (SXNET **,unsigned long,const char *,int) | | SXNET_add_id_ulong | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (TS_RESP_CTX *,int,int,int) | | TS_RESP_CTX_set_accuracy | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (UI *,UI_STRING *,const char *,int) | | UI_set_result_ex | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (UI *,UI_STRING *,const char *,int) | | UI_set_result_ex | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (X509_NAME *,const X509_NAME_ENTRY *,int,int) | | X509_NAME_add_entry | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (X509_NAME_ENTRY *,int,const unsigned char *,int) | | X509_NAME_ENTRY_set_data | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (X509_STORE_CTX *,int,int,int) | | X509_STORE_CTX_purpose_inherit | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 0 | -| atl.cpp:928:17:928:25 | CopyChars | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 1 | -| atl.cpp:928:17:928:25 | CopyChars | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (_Float128,_Float128,_Float128,int) | | __lgamma_productf128 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (bufq *,bufc_pool *,size_t,int) | | Curl_bufq_initp | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (bufq *,size_t,size_t,int) | | Curl_bufq_init2 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (char *,int,const ASN1_OBJECT *,int) | | OBJ_obj2txt | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (cmsghdr *,const uint8_t *,int,int) | | inet6_option_append | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (cmsghdr *,int,int,int) | | inet6_option_alloc | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const DH *,unsigned char **,size_t,int) | | ossl_dh_key2buf | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const EVP_MD *,const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_v2_new_init | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const X509_NAME *,const ASN1_OBJECT *,char *,int) | | X509_NAME_get_text_by_OBJ | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const X509_NAME *,int,char *,int) | | X509_NAME_get_text_by_NID | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,BIO *,BIO *,int) | | X509_CRL_load_http | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,BIO *,BIO *,int) | | X509_load_http | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,const char *,char **,int) | | idn2_register_ul | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,const char *,const char *,int) | | OSSL_HTTP_adapt_proxy | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,const char *,const char *,int) | | OSSL_HTTP_adapt_proxy | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,int,int,int) | | __old_strpbrk_c3 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,int,int,int) | | append_str | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,size_t,const char *,int) | | CRYPTO_strndup | 1 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,size_t,const char *,int) | | CRYPTO_strndup | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,size_t,const char *,int) | | CRYPTO_strndup | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,sqlite3_filename,const char *,int) | | sqlite3_uri_boolean | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,sqlite3_filename,const char *,int) | | sqlite3_uri_boolean | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const char *,u_char *,unsigned char *,int) | | inet_nsap_addr | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const uint8_t *,const uint8_t *,uint8_t **,int) | | idn2_register_u8 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const unsigned char *,int,unsigned char *,int) | | ___res_send | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const unsigned char *,unsigned char *,RC2_KEY *,int) | | RC2_ecb_encrypt | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const unsigned char *,unsigned char *,const BF_KEY *,int) | | BF_ecb_encrypt | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const unsigned char *,unsigned char *,const CAST_KEY *,int) | | CAST_ecb_encrypt | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const unsigned char *,unsigned char *,const SEED_KEY_SCHEDULE *,int) | | SEED_ecb_encrypt | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (const void *,size_t,const char *,int) | | CRYPTO_memdup | 1 | -| atl.cpp:928:17:928:25 | CopyChars | (const void *,size_t,const char *,int) | | CRYPTO_memdup | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (const void *,size_t,const char *,int) | | CRYPTO_memdup | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (deflate_state *,charf *,ulg,int) | | _tr_flush_block | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (deflate_state *,charf *,ulg,int) | | _tr_stored_block | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (double,double,double,int) | | __lgamma_product | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,ENGINE *,const unsigned char *,int) | | EVP_PKEY_new_mac_key | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,const char *,const timespec[2],int) | | __utimensat | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,const void *,const char *,int) | | Curl_ip2addr | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (int,const void *,const char *,int) | | Curl_ip2addr | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,int *,int *,int) | | sqlite3_status | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,int,const unsigned char *,int) | | PKCS5_pbe_set | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,sockaddr *,socklen_t *,int) | | xaccept4 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (int,sqlite3_int64 *,sqlite3_int64 *,int) | | sqlite3_status64 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (link_map *,r_scope_elem *[],int,int) | | _dl_relocate_object | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (link_map *,r_scope_elem *[],int,int) | | _dl_relocate_object_no_relro | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (long double,long double,long double,int) | | __lgamma_productl | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (nghttp2_bufs *,nghttp2_frame_hd *,size_t,int) | | nghttp2_frame_add_pad | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (nghttp2_priority_spec *,int32_t,int32_t,int) | | nghttp2_priority_spec_init | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (nghttp2_session *,int32_t,const nghttp2_extpri *,int) | | nghttp2_session_change_extpri_stream_priority | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (nghttp2_session *,nghttp2_stream *,size_t,int) | | nghttp2_session_update_recv_stream_window_size | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (sqlite3_blob *,const void *,int,int) | | sqlite3_blob_write | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (sqlite3_blob *,void *,int,int) | | sqlite3_blob_read | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (ssl_peer *,Curl_cfilter *,const char *,int) | | Curl_ssl_peer_init | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (ssl_peer *,Curl_cfilter *,const char *,int) | | Curl_ssl_peer_init | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (stack_st_PKCS12_SAFEBAG **,int,const unsigned char *,int) | | PKCS12_add_secret | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (uint8_t *,unsigned char *,uint64_t,int) | | ossl_quic_vlint_encode_n | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char **,X509_ALGOR *,ASN1_OCTET_STRING *,int) | | CMS_SharedInfo_encode | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const char *,int) | | a2d_ASN1_OBJECT | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const char *,int) | | a2d_ASN1_OBJECT | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const unsigned char *,int) | | RSA_padding_add_PKCS1_type_1 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const unsigned char *,int) | | RSA_padding_add_PKCS1_type_2 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const unsigned char *,int) | | RSA_padding_add_X931 | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned char *,int,const unsigned char *,int) | | RSA_padding_add_none | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned long *,unsigned long *,unsigned long *,int) | | bn_mul_low_normal | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned long long,char *,unsigned int,int) | | _itoa | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned long,BIGNUM *,BIGNUM *,int) | | BN_consttime_swap | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned long,char *,unsigned int,int) | | _fitoa_word | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (unsigned long,char *,unsigned int,int) | | _itoa_word | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (uv_loop_t *,uv_fs_t *,int,int) | | uv__iou_fs_statx | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (uv_loop_t *,uv_udp_t *,unsigned int,int) | | uv__udp_init_ex | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (void *,const ASN1_ITEM *,int,int) | | PKCS12_item_pack_safebag | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (void *,size_t,const char *,int) | | CRYPTO_secure_clear_free | 1 | -| atl.cpp:928:17:928:25 | CopyChars | (void *,size_t,const char *,int) | | CRYPTO_secure_clear_free | 2 | -| atl.cpp:928:17:928:25 | CopyChars | (void *,size_t,const char *,int) | | CRYPTO_secure_clear_free | 3 | -| atl.cpp:928:17:928:25 | CopyChars | (void *,socklen_t,int,int) | | inet6_rth_init | 3 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_BIT_STRING *,unsigned char *,int) | | ASN1_BIT_STRING_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_OCTET_STRING **,const unsigned char *,int) | | ossl_cmp_asn1_octet_string_set1_bytes | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_OCTET_STRING *,const unsigned char *,int) | | ASN1_OCTET_STRING_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_STRING *,const void *,int) | | ASN1_STRING_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_TIME *,tm *,int) | | ossl_asn1_time_from_tm | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_TYPE *,unsigned char *,int) | | ASN1_TYPE_set_octetstring | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_item_embed_free | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_primitive_free | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const BIGNUM *,int) | | BN_lshift | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const BIGNUM *,int) | | BN_rshift | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const BIGNUM *,int) | | BN_with_flags | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const BIGNUM *,int) | | bn_lshift_fixed_top | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const BIGNUM *,int) | | bn_rshift_fixed_top | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const unsigned long *,int) | | bn_set_static_words | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIGNUM *,const unsigned long *,int) | | bn_set_words | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,BIO *,int) | | OSSL_HTTP_REQ_CTX_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,BIO *,int) | | SMIME_crlf_copy | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,GENERAL_NAMES *,int) | | OSSL_GENERAL_NAMES_print | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,char *,int) | | BIO_get_line | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,const DSA *,int) | | DSA_print | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (BIO *,const RSA *,int) | | RSA_print | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (CERT *,X509_STORE **,int) | | ssl_cert_get_cert_store | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Curl_easy *,connectdata *,int) | | Curl_conn_cf_discard_all | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Curl_easy *,connectdata *,int) | | Curl_http2_may_switch | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Curl_easy *,connectdata *,int) | | Curl_http2_switch | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Curl_easy *,connectdata *,int) | | Curl_ssl_cfilter_add | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Curl_sockaddr_ex *,const Curl_addrinfo *,int) | | Curl_sock_assign_addr | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (DH *,const OSSL_PARAM[],int) | | ossl_dh_key_fromdata | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (DSA *,const OSSL_PARAM[],int) | | ossl_dsa_key_fromdata | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ECX_KEY *,const OSSL_PARAM[],int) | | ossl_ecx_key_fromdata | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EC_KEY *,const OSSL_PARAM[],int) | | ossl_ec_key_fromdata | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (ENGINE *,ENGINE_DYNAMIC_ID,int) | | engine_add_dynamic_id | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_export_to_provider | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_find_operation_cache | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY *,EVP_PKEY *,int) | | evp_keymgmt_util_copy | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,EVP_PKEY *,int) | | EVP_PKEY_derive_set_peer_ex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_hkdf_info | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_tls1_prf_seed | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_key | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_salt | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_scrypt_salt | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_tls1_prf_secret | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set_mac_key | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,const void *,int) | | EVP_PKEY_CTX_set1_id | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (EVP_PKEY_CTX *,int *,int) | | EVP_PKEY_CTX_set0_keygen_info | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FFC_PARAMS *,unsigned int,int) | | ossl_ffc_params_enable_flags | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,_IO_marker *,int) | | _IO_seekmark | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,_IO_marker *,int) | | _IO_seekwmark | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,__FILE *,int) | | fwide | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,const DSA *,int) | | DSA_print_fp | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,const RSA *,int) | | RSA_print_fp | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,off64_t,int) | | _IO_cookie_seek | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FILE *,rule *,int) | | RulePrint | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (FTS *,FTSENT *,int) | | fts_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetCommand | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetGlobalVariable | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetVariable | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *,int) | | Jim_ListGetIndex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *,int) | | Jim_UnsetVariable | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewDictObj | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewListObj | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,char *,int) | | Jim_NewStringObjNoAlloc | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (LIBSSH2_SFTP_HANDLE *,LIBSSH2_SFTP_ATTRIBUTES *,int) | | libssh2_sftp_fstat_ex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_BASICRESP *,OCSP_CERTID *,int) | | OCSP_resp_find | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_BASICRESP *,X509_EXTENSION *,int) | | OCSP_BASICRESP_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_BASICRESP *,const ASN1_OBJECT *,int) | | OCSP_BASICRESP_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_ONEREQ *,X509_EXTENSION *,int) | | OCSP_ONEREQ_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_ONEREQ *,const ASN1_OBJECT *,int) | | OCSP_ONEREQ_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_REQUEST *,X509_EXTENSION *,int) | | OCSP_REQUEST_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_REQUEST *,const ASN1_OBJECT *,int) | | OCSP_REQUEST_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_SINGLERESP *,X509_EXTENSION *,int) | | OCSP_SINGLERESP_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_SINGLERESP *,const ASN1_OBJECT *,int) | | OCSP_SINGLERESP_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OPENSSL_STACK *,const void *,int) | | OPENSSL_sk_insert | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_referenceValue | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_secretValue | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_PROVIDER *,OSSL_PROVIDER **,int) | | ossl_provider_add_to_store | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (OSSL_QRL_ENC_LEVEL_SET *,uint32_t,int) | | ossl_qrl_enc_level_set_get | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PKCS7 *,stack_st_X509 *,int) | | PKCS7_get0_signers | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (POLICYINFO *,const ASN1_OBJECT *,int) | | ossl_policy_data_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (QLOG *,uint32_t,int) | | ossl_qlog_set_event_type_enabled | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (QUIC_RXFC *,uint64_t,int) | | ossl_quic_rxfc_on_rx_stream_frame | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (QUIC_STREAM_ITER *,QUIC_STREAM_MAP *,int) | | ossl_quic_stream_iter_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (QUIC_STREAM_MAP *,uint64_t,int) | | ossl_quic_stream_map_alloc | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (RSA *,const OSSL_PARAM[],int) | | ossl_rsa_fromdata | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL *,const unsigned char *,int) | | SSL_use_certificate_ASN1 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL *,const void *,int) | | SSL_write | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL *,void *,int) | | SSL_peek | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL *,void *,int) | | SSL_read | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CIPHER *,const SSL_CIPHER *,int) | | OBJ_bsearch_ssl_cipher_id | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CONNECTION *,PACKET *,int) | | ssl_cache_cipherlist | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_close_construct_packet | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_set_handshake_header | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CONNECTION *,WPACKET *,int) | | tls_close_construct_packet | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_MSG_IMPRINT *,unsigned char *,int) | | TS_MSG_IMPRINT_set_msg | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_REQ *,X509_EXTENSION *,int) | | TS_REQ_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_REQ *,const ASN1_OBJECT *,int) | | TS_REQ_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_TST_INFO *,X509_EXTENSION *,int) | | TS_TST_INFO_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_TST_INFO *,const ASN1_OBJECT *,int) | | TS_TST_INFO_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509 *,X509_EXTENSION *,int) | | X509_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509 *,int,int) | | X509_check_purpose | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509 *,int,int) | | X509_check_trust | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509_CRL *,X509_EXTENSION *,int) | | X509_CRL_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509_PUBKEY *,unsigned char *,int) | | X509_PUBKEY_set0_public_key | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509_REVOKED *,X509_EXTENSION *,int) | | X509_REVOKED_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (X509_STORE_CTX *,X509 *,int) | | ossl_x509_check_cert_time | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 0 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 0 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (_Float128,_Float128,int) | | __kernel_sinf128 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (_Float128,_Float128,int) | | __kernel_tanf128 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (action *,FILE *,int) | | PrintAction | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (acttab *,int,int) | | acttab_action | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (char *,size_t,int) | | __argz_stringify | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const ASN1_VALUE *,const ASN1_TEMPLATE *,int) | | ossl_asn1_do_adb | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,int[],int) | | BN_GF2m_poly2arr | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_bn2binpad | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_bn2lebinpad | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_bn2nativepad | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2bin | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2lebin | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2native | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const CMS_ContentInfo *,BIO *,int) | | ossl_cms_DigestedData_do_final | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_signed_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_unsigned_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const Curl_easy *,const connectdata *,int) | | Curl_conn_is_http2 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const EVP_MD *,const EVP_MD *,int) | | ossl_rsa_pss_params_create | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const EVP_PKEY *,const ASN1_OBJECT *,int) | | EVP_PKEY_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const OSSL_PARAM *,BIO *,int) | | OSSL_PARAM_print_to_bio | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const SSL *,char *,int) | | SSL_get_shared_ciphers | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const SSL *,int,int) | | apps_ssl_info_callback | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const SSL_CIPHER *,char *,int) | | SSL_CIPHER_description | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509 *,const ASN1_OBJECT *,int) | | X509_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_new_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509 *,int,int) | | X509_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509 *,int,int) | | X509_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_ACERT *,const ASN1_OBJECT *,int) | | X509_ACERT_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_CRL *,const ASN1_OBJECT *,int) | | X509_CRL_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_CRL *,const X509 *,int) | | OSSL_CMP_CRLSTATUS_create | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_NAME *,char *,int) | | X509_NAME_oneline | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_NAME *,const ASN1_OBJECT *,int) | | X509_NAME_get_index_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_REQ *,const ASN1_OBJECT *,int) | | X509_REQ_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_REVOKED *,const ASN1_OBJECT *,int) | | X509_REVOKED_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,char **,int) | | __strtol | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,char **,int) | | __strtoul | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,char **,int) | | idn2_to_ascii_8z | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const OSSL_PARAM *,int) | | print_param_types | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | CRYPTO_strdup | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | CRYPTO_strdup | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | __dcgettext | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | __dcgettext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | sqlite3_strnicmp | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,const char *,int) | | sqlite3_strnicmp | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,int,int) | | __old_strpbrk_c2 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,long *,int) | | Jim_StringToWide | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,size_t *,int) | | _dl_sysdep_read_whole_file | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,sqlite3_filename,int) | | sqlite3_uri_key | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,void *,int) | | support_readdir_check | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const char *,wordexp_t *,int) | | wordexp | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const cmsghdr *,uint8_t **,int) | | inet6_option_find | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const stack_st_X509_ATTRIBUTE *,const ASN1_OBJECT *,int) | | X509at_get_attr_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const stack_st_X509_EXTENSION *,const ASN1_OBJECT *,int) | | X509v3_get_ext_by_OBJ | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const uint8_t *,uint8_t **,int) | | idn2_lookup_u8 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const unsigned char **,unsigned int,int) | | ossl_b2i_DSA_after_header | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const unsigned char **,unsigned int,int) | | ossl_b2i_RSA_after_header | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const void *,const void *,int) | | ossl_is_partially_overlapping | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const void *,socklen_t,int) | | res_gethostbyaddr | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const wchar_t *,wchar_t **,int) | | __wcstol | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (const wchar_t *,wchar_t **,int) | | __wcstoul | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (curl_mimepart *,curl_mime *,int) | | Curl_mime_set_subparts | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (curl_mimepart *,curl_slist *,int) | | curl_mime_headers | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (database_dyn *,size_t,int) | | mempool_alloc | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (database_dyn *,time_t,int) | | prune_cache | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (double,double,int) | | __kernel_standard | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (float,float,int) | | __kernel_standard_f | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (gconv_spec *,__gconv_t *,int) | | __gconv_open | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (gzFile,char *,int) | | gzgets | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (gzFile,int,int) | | gzsetparams | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (gzFile,off64_t,int) | | gzseek64 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (gzFile,off_t,int) | | gzseek | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (int *,short *,int) | | __lll_lock_elision | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (int,BIO_ADDR *,int) | | BIO_accept_ex | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (int,int,int) | | ASN1_object_size | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (int,int,int) | | EVP_CIPHER_meth_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (long double,long double,int) | | __kernel_sinl | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (long double,long double,int) | | __kernel_standard_l | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (long double,long double,int) | | __kernel_tanl | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (mp_srcptr,int,int) | | __mpn_construct_double | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (mp_srcptr,int,int) | | __mpn_construct_float | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (mp_srcptr,int,int) | | __mpn_construct_float128 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (regex_t *,const char *,int) | | jim_regcomp | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (regex_t *,const char *,int) | | jim_regcomp | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (requestlist *,requestlist *,int) | | __aio_remove_request | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3 *,int,int) | | sqlite3_limit | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_context *,const void *,int) | | sqlite3_result_error16 | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (sqlite3expert *,int,int) | | sqlite3_expert_report | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 **,X509 *,int) | | ossl_x509_add_cert_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 **,stack_st_X509 *,int) | | ossl_x509_add_certs_new | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 *,ASIdentifiers *,int) | | X509v3_asid_validate_resource_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 *,IPAddrBlocks *,int) | | X509v3_addr_validate_resource_set | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 *,X509 *,int) | | X509_add_cert | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509 *,stack_st_X509 *,int) | | X509_add_certs | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (stack_st_X509_EXTENSION **,X509_EXTENSION *,int) | | X509v3_add_ext | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (td_thragent_t *,uint32_t *,int) | | _td_check_sizeof | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uint8_t[56],const gf,int) | | gf_serialize | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uint32_t *,SSL_CONNECTION *,int) | | ssl_set_sig_mask | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned char *,const char *,int) | | data_string | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned char *,const char *,int) | | data_string | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned char *,const unsigned char *,int) | | EVP_DecodeBlock | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned char *,const unsigned char *,int) | | EVP_EncodeBlock | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned char *,uint64_t,int) | | ossl_i2c_uint64_int | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned int,const char *,int) | | _IO_adjust_column | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned int,const char *,int) | | _IO_adjust_column | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned int,const wchar_t *,int) | | _IO_adjust_wcolumn | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned int,int,int) | | ossl_blob_length | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned long *,const BIGNUM *,int) | | bn_copy_words | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (unsigned long *,const unsigned long *,int) | | bn_sqr_words | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv__io_t *,uv__io_cb,int) | | uv__io_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_loop_t *,uv_fs_t *,int) | | uv__iou_fs_read_or_write | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_loop_t *,uv_pipe_t *,int) | | uv_pipe_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_loop_t *,uv_poll_t *,int) | | uv_poll_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start_oneshot | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (uv_stream_t *,int,int) | | uv__stream_open | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (void *,cmsghdr **,int) | | inet6_option_init | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (void *,const char *,int) | | CRYPTO_secure_free | 1 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (void *,const char *,int) | | CRYPTO_secure_free | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (void *,curl_off_t,int) | | tool_mime_stdin_seek | 2 | -| atl.cpp:929:17:929:35 | CopyCharsOverlapped | (void *,socklen_t,int) | | inet6_opt_finish | 2 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ASN1_tag2str | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | Jim_SignalId | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | PKCS12_init | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | Symbol_Nth | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __btowc | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __current_locale_name | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __fdopendir | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __get_errlist | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __get_errname | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __math_invalid_i | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __math_invalidf_i | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __p_class | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __p_rcode | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __p_type | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __pkey_get | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __sigdescr_np | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | __strerrordesc_np | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | _tolower | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | _toupper | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | btowc | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | c_tolower | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | c_toupper | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | curlx_sitouz | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | inet6_option_space | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isalnum | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isalpha | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isblank | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | iscntrl | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isdigit | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isgraph | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | islower | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isprint | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ispunct | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isspace | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isupper | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | isxdigit | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ossl_tolower | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | ossl_toupper | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | sigabbrev_np | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | sqlite3_errstr | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | strerrorname_np | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | support_report_failure | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | svcudp_create | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | tls13_alert_code | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | toascii | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | tolower | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | toupper | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uabs | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uv__accept | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uv_err_name | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uv_strerror | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | | zError | 0 | -| atl.cpp:931:11:931:15 | GetAt | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ASN1_tag2str | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | Jim_SignalId | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | PKCS12_init | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | Symbol_Nth | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __btowc | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __current_locale_name | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __fdopendir | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __get_errlist | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __get_errname | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __math_invalid_i | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __math_invalidf_i | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __p_class | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __p_rcode | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __p_type | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __pkey_get | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __sigdescr_np | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | __strerrordesc_np | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | _tolower | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | _toupper | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | btowc | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | c_tolower | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | c_toupper | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | curlx_sitouz | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | inet6_option_space | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isalnum | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isalpha | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isblank | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | iscntrl | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isdigit | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isgraph | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | islower | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isprint | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ispunct | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isspace | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isupper | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | isxdigit | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ossl_tolower | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | ossl_toupper | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | sigabbrev_np | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | sqlite3_errstr | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | strerrorname_np | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | support_report_failure | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | svcudp_create | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | tls13_alert_code | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | toascii | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | tolower | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | toupper | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uabs | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uv__accept | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uv_err_name | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uv_strerror | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | | zError | 0 | -| atl.cpp:932:11:932:19 | GetBuffer | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ASN1_tag2str | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | Jim_SignalId | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | PKCS12_init | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | Symbol_Nth | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __btowc | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __current_locale_name | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __fdopendir | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __get_errlist | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __get_errname | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __math_invalid_i | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __math_invalidf_i | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __p_class | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __p_rcode | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __p_type | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __pkey_get | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __sigdescr_np | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | __strerrordesc_np | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | _tolower | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | _toupper | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | btowc | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | c_tolower | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | c_toupper | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | curlx_sitouz | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | inet6_option_space | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isalnum | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isalpha | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isblank | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | iscntrl | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isdigit | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isgraph | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | islower | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isprint | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ispunct | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isspace | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isupper | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | isxdigit | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ossl_tolower | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | ossl_toupper | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | sigabbrev_np | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | sqlite3_errstr | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | strerrorname_np | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | support_report_failure | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | svcudp_create | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | tls13_alert_code | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | toascii | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | tolower | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | toupper | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uabs | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uv__accept | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uv_err_name | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uv_strerror | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | | zError | 0 | -| atl.cpp:934:11:934:28 | GetBufferSetLength | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:938:10:938:14 | SetAt | (XCHAR,XCHAR) | CStringT | Replace | 1 | -| atl.cpp:938:10:938:14 | SetAt | (__printf_buffer *,char) | | __printf_buffer_putc_1 | 1 | -| atl.cpp:938:10:938:14 | SetAt | (char **,char) | | Curl_str_single | 1 | -| atl.cpp:938:10:938:14 | SetAt | (char **,char) | | __old_strsep_1c | 1 | -| atl.cpp:938:10:938:14 | SetAt | (const CStringT &,char) | | operator+ | 1 | -| atl.cpp:938:10:938:14 | SetAt | (int,XCHAR) | CStringT | Insert | 0 | -| atl.cpp:938:10:938:14 | SetAt | (int,XCHAR) | CStringT | Insert | 1 | -| atl.cpp:939:10:939:18 | SetString | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:939:10:939:18 | SetString | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:939:10:939:18 | SetString | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:939:10:939:18 | SetString | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:939:10:939:18 | SetString | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:939:10:939:18 | SetString | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:939:10:939:18 | SetString | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:939:10:939:18 | SetString | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:939:10:939:18 | SetString | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:939:10:939:18 | SetString | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:939:10:939:18 | SetString | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:939:10:939:18 | SetString | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:939:10:939:18 | SetString | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:939:10:939:18 | SetString | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:939:10:939:18 | SetString | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:939:10:939:18 | SetString | (FTS *,int) | | fts_children | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:939:10:939:18 | SetString | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:939:10:939:18 | SetString | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:939:10:939:18 | SetString | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:939:10:939:18 | SetString | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:939:10:939:18 | SetString | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:939:10:939:18 | SetString | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:939:10:939:18 | SetString | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:939:10:939:18 | SetString | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:939:10:939:18 | SetString | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:939:10:939:18 | SetString | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:939:10:939:18 | SetString | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:939:10:939:18 | SetString | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:939:10:939:18 | SetString | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:939:10:939:18 | SetString | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:939:10:939:18 | SetString | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:939:10:939:18 | SetString | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:939:10:939:18 | SetString | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:939:10:939:18 | SetString | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:939:10:939:18 | SetString | (char **,int) | | addrsort | 1 | -| atl.cpp:939:10:939:18 | SetString | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:939:10:939:18 | SetString | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:939:10:939:18 | SetString | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:939:10:939:18 | SetString | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:939:10:939:18 | SetString | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:939:10:939:18 | SetString | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:939:10:939:18 | SetString | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:939:10:939:18 | SetString | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:939:10:939:18 | SetString | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:939:10:939:18 | SetString | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:939:10:939:18 | SetString | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:939:10:939:18 | SetString | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:939:10:939:18 | SetString | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:939:10:939:18 | SetString | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | ftok | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:939:10:939:18 | SetString | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:939:10:939:18 | SetString | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:939:10:939:18 | SetString | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:939:10:939:18 | SetString | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:939:10:939:18 | SetString | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:939:10:939:18 | SetString | (double,int) | | __ldexp | 1 | -| atl.cpp:939:10:939:18 | SetString | (double,int) | | __scalbn | 1 | -| atl.cpp:939:10:939:18 | SetString | (double[],int) | | getloadavg | 1 | -| atl.cpp:939:10:939:18 | SetString | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:939:10:939:18 | SetString | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:939:10:939:18 | SetString | (float,int) | | __ldexpf | 1 | -| atl.cpp:939:10:939:18 | SetString | (float,int) | | __scalbnf | 1 | -| atl.cpp:939:10:939:18 | SetString | (gzFile,int) | | gzflush | 1 | -| atl.cpp:939:10:939:18 | SetString | (gzFile,int) | | gzputc | 1 | -| atl.cpp:939:10:939:18 | SetString | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:939:10:939:18 | SetString | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:939:10:939:18 | SetString | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | BN_security_bits | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | __isctype | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | acttab_alloc | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | div | 1 | -| atl.cpp:939:10:939:18 | SetString | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:939:10:939:18 | SetString | (long double,int) | | __ldexpl | 1 | -| atl.cpp:939:10:939:18 | SetString | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:939:10:939:18 | SetString | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:939:10:939:18 | SetString | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:939:10:939:18 | SetString | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:939:10:939:18 | SetString | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:939:10:939:18 | SetString | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:939:10:939:18 | SetString | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:939:10:939:18 | SetString | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:939:10:939:18 | SetString | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:939:10:939:18 | SetString | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:939:10:939:18 | SetString | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:939:10:939:18 | SetString | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:939:10:939:18 | SetString | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:939:10:939:18 | SetString | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:939:10:939:18 | SetString | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:939:10:939:18 | SetString | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:939:10:939:18 | SetString | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:939:10:939:18 | SetString | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:939:10:939:18 | SetString | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:939:10:939:18 | SetString | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:939:10:939:18 | SetString | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:939:10:939:18 | SetString | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:939:10:939:18 | SetString | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:939:10:939:18 | SetString | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:939:10:939:18 | SetString | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:939:10:939:18 | SetString | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:939:10:939:18 | SetString | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:939:10:939:18 | SetString | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:940:10:940:18 | SetString | (PCXSTR) | | operator+= | 0 | -| atl.cpp:940:10:940:18 | SetString | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:940:10:940:18 | SetString | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ASN1_tag2str | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | Jim_SignalId | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | PKCS12_init | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | Symbol_Nth | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __btowc | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __current_locale_name | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __fdopendir | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __get_errlist | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __get_errname | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __math_invalid_i | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __math_invalidf_i | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __p_class | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __p_rcode | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __p_type | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __pkey_get | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __sigdescr_np | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | __strerrordesc_np | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | _tolower | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | _toupper | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | btowc | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | c_tolower | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | c_toupper | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | curlx_sitouz | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | inet6_option_space | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isalnum | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isalpha | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isblank | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | iscntrl | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isdigit | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isgraph | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | islower | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isprint | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ispunct | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isspace | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isupper | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | isxdigit | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ossl_tolower | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | ossl_toupper | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | sigabbrev_np | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | sqlite3_errstr | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | strerrorname_np | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | support_report_failure | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | svcudp_create | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | tls13_alert_code | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | toascii | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | tolower | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | toupper | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uabs | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uv__accept | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uv_err_name | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uv_strerror | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | | zError | 0 | -| atl.cpp:942:11:942:20 | operator[] | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:1036:5:1036:12 | CStringT | (const VARIANT &) | | operator+= | 0 | -| atl.cpp:1036:5:1036:12 | CStringT | (const VARIANT &) | CStringT | CStringT | 0 | -| atl.cpp:1036:5:1036:12 | CStringT | (const VARIANT &) | CStringT | operator= | 0 | -| atl.cpp:1037:5:1037:12 | CStringT | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1037:5:1037:12 | CStringT | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1037:5:1037:12 | CStringT | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | -| atl.cpp:1037:5:1037:12 | CStringT | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 0 | -| atl.cpp:1037:5:1037:12 | CStringT | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1037:5:1037:12 | CStringT | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1038:5:1038:12 | CStringT | (const CStringT &) | CStringT | CStringT | 0 | -| atl.cpp:1038:5:1038:12 | CStringT | (const CStringT &) | CStringT | operator= | 0 | -| atl.cpp:1042:5:1042:12 | CStringT | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 0 | -| atl.cpp:1042:5:1042:12 | CStringT | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1042:5:1042:12 | CStringT | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1042:5:1042:12 | CStringT | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | -| atl.cpp:1042:5:1042:12 | CStringT | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1042:5:1042:12 | CStringT | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1043:5:1043:12 | CStringT | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1043:5:1043:12 | CStringT | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 0 | -| atl.cpp:1043:5:1043:12 | CStringT | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1043:5:1043:12 | CStringT | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | -| atl.cpp:1043:5:1043:12 | CStringT | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1043:5:1043:12 | CStringT | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | SRP_VBASE_new | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | _IO_gets | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | __mktemp | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | __nis_default_group | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | __nis_default_owner | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | __nis_default_ttl | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | __xpg_basename | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | ctermid | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | cuserid | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | defossilize | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | des_setparity | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | dirname | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | getwd | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | make_uppercase | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | mkdtemp | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | next_item | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | | strfry | 0 | -| atl.cpp:1045:5:1045:12 | CStringT | (char *) | CStringT | CStringT | 0 | -| atl.cpp:1046:5:1046:12 | CStringT | (unsigned char *) | CStringT | CStringT | 0 | -| atl.cpp:1047:5:1047:12 | CStringT | (wchar_t *) | CStringT | CStringT | 0 | -| atl.cpp:1049:5:1049:12 | CStringT | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (FTS *,int) | | fts_children | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (char **,int) | | addrsort | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (char,int) | CStringT | CStringT | 0 | -| atl.cpp:1049:5:1049:12 | CStringT | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | ftok | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (double,int) | | __ldexp | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (double,int) | | __scalbn | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (double[],int) | | getloadavg | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (float,int) | | __ldexpf | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (float,int) | | __scalbnf | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (gzFile,int) | | gzflush | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (gzFile,int) | | gzputc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | BN_security_bits | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | __isctype | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | acttab_alloc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | div | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (long double,int) | | __ldexpl | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:1049:5:1049:12 | CStringT | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (FTS *,int) | | fts_children | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (char **,int) | | addrsort | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | ftok | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (double,int) | | __ldexp | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (double,int) | | __scalbn | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (double[],int) | | getloadavg | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (float,int) | | __ldexpf | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (float,int) | | __scalbnf | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (gzFile,int) | | gzflush | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (gzFile,int) | | gzputc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | BN_security_bits | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | __isctype | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | acttab_alloc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | div | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (long double,int) | | __ldexpl | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:1050:5:1050:12 | CStringT | (wchar_t,int) | CStringT | CStringT | 0 | -| atl.cpp:1050:5:1050:12 | CStringT | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | AppendFormat | 0 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | AppendFormat | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | Format | 0 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | Format | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | FormatMessage | 0 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (PCXSTR,...) | CStringT | FormatMessage | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (UINT,...) | CStringT | AppendFormat | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (UINT,...) | CStringT | Format | 1 | -| atl.cpp:1061:10:1061:21 | AppendFormat | (UINT,...) | CStringT | FormatMessage | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (PCXSTR,...) | CStringT | AppendFormat | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (PCXSTR,...) | CStringT | Format | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (PCXSTR,...) | CStringT | FormatMessage | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | AppendFormat | 0 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | AppendFormat | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | Format | 0 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | Format | 1 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | FormatMessage | 0 | -| atl.cpp:1062:10:1062:21 | AppendFormat | (UINT,...) | CStringT | FormatMessage | 1 | -| atl.cpp:1070:9:1070:14 | Insert | (PCXSTR,PCXSTR) | CStringT | Replace | 1 | -| atl.cpp:1070:9:1070:14 | Insert | (const CStringT &,PCXSTR) | | operator+ | 1 | -| atl.cpp:1070:9:1070:14 | Insert | (int,PCXSTR) | CStringT | Insert | 0 | -| atl.cpp:1070:9:1070:14 | Insert | (int,PCXSTR) | CStringT | Insert | 1 | -| atl.cpp:1071:9:1071:14 | Insert | (XCHAR,XCHAR) | CStringT | Replace | 1 | -| atl.cpp:1071:9:1071:14 | Insert | (int,XCHAR) | CStringT | Insert | 0 | -| atl.cpp:1071:9:1071:14 | Insert | (int,XCHAR) | CStringT | Insert | 1 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ASN1_tag2str | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | Jim_SignalId | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | PKCS12_init | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | Symbol_Nth | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __btowc | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __current_locale_name | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __fdopendir | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __get_errlist | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __get_errname | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __math_invalid_i | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __math_invalidf_i | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __p_class | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __p_rcode | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __p_type | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __pkey_get | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __sigdescr_np | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | __strerrordesc_np | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | _tolower | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | _toupper | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | btowc | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | c_tolower | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | c_toupper | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | curlx_sitouz | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | inet6_option_space | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isalnum | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isalpha | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isblank | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | iscntrl | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isdigit | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isgraph | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | islower | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isprint | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ispunct | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isspace | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isupper | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | isxdigit | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ossl_tolower | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | ossl_toupper | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | sigabbrev_np | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | sqlite3_errstr | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | strerrorname_np | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | support_report_failure | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | svcudp_create | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | tls13_alert_code | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | toascii | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | tolower | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | toupper | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uabs | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uv__accept | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uv_err_name | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uv_strerror | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | | zError | 0 | -| atl.cpp:1072:14:1072:17 | Left | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (UINT) | CComBSTR | LoadString | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | Jim_IntHashFunction | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | __sleep | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | curlx_uitous | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | la_version | 0 | -| atl.cpp:1075:10:1075:19 | LoadString | (unsigned int) | | ssl3_get_cipher | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | BN_clear_bit | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | BN_mask_bits | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | BN_set_bit | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | BN_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | bn_expand2 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | bn_wexpand | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_find_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_set_init | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_set_retry_reason | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | BIO_set_shutdown | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (BIO *,int) | | TXT_DB_read | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (CURL *,int) | | curl_easy_pause | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DH *,int) | | DH_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DH *,int) | | DH_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DSA *,int) | | DSA_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DSA *,int) | | DSA_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_default_pbackfail | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_fwide | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_init | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_init_internal | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_new_file_attach | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_new_file_overflow | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_old_init | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_sputbackc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_str_overflow | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | _IO_str_pbackfail | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (FTS *,int) | | fts_children | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA *,int) | | RSA_clear_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA *,int) | | RSA_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_key_update | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_purpose | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_read_ahead | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_security_level | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_shutdown | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_trust | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL *,int) | | SSL_set_verify_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_CTX *,int) | | ssl_md | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509 *,int) | | X509_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509 *,int) | | X509_self_signed | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (_Float128,int) | | __ldexpf128 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (_Float128,int) | | __scalbnf128 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (acttab *,int) | | acttab_insert | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (addrinfo *,int) | | support_format_addrinfo | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (char **,int) | | addrsort | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (char *,int) | | Curl_str2addr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (char *,int) | | PEM_proc_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (char,int) | CStringT | CStringT | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const BIGNUM *,int) | | BN_get_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const BIO *,int) | | BIO_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const BIO *,int) | | BIO_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DH *,int) | | DH_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DH *,int) | | DH_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DH *,int) | | ossl_dh_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DSA *,int) | | DSA_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DSA *,int) | | DSA_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const DSA *,int) | | ossl_dsa_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const RSA *,int) | | RSA_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const RSA *,int) | | RSA_test_flags | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const RSA *,int) | | ossl_rsa_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const SSL *,int) | | SSL_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const UI *,int) | | UI_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509 *,int) | | X509_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509 *,int) | | X509_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const XCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const YCHAR *,int) | CStringT | CStringT | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | DH_meth_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | DSA_meth_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | Jim_StrDupLen | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | RSA_meth_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | ftok | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | gethostbyname2 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | parse_yesno | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const char *,int) | | res_gethostbyname2 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (const void *,int) | | inet6_rth_getaddr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (double,int) | | __ldexp | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (double,int) | | __scalbn | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (double[],int) | | getloadavg | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (fexcept_t *,int) | | fegetexceptflag | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (float,int) | | __ldexpf | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (float,int) | | __scalbnf | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (gzFile,int) | | gzflush | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (gzFile,int) | | gzputc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int *,int) | | X509_PURPOSE_set | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int *,int) | | X509_TRUST_set | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int *,int) | | __lll_unlock_elision | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | BN_security_bits | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | BN_security_bits | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | EVP_MD_meth_new | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | EVP_MD_meth_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | EVP_PKEY_meth_new | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | EVP_PKEY_meth_new | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | __isctype | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | __isctype | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | acttab_alloc | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | acttab_alloc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | div | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | div | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | inet6_rth_space | 0 | -| atl.cpp:1079:14:1079:16 | Mid | (int,int) | | inet6_rth_space | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (long double,int) | | __ldexpl | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (netlink_handle *,int) | | __netlink_request | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (ns_msg,int) | | ns_msg_getflag | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (obstack *,int) | | _obstack_newchunk | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (rule *,int) | | Configlist_add | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (rule *,int) | | Configlist_addbasis | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sigset_t *,int) | | sigaddset | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sigset_t *,int) | | sigdelset | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (timespec *,int) | | __timespec_get | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (timespec *,int) | | __timespec_getres | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (uint16_t,int) | | tls1_group_id2nid | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (unsigned char *,int) | | RAND_bytes | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (void *,int) | | DSO_dsobyaddr | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (void *,int) | | sqlite3_realloc | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (void *const *,int) | | __backtrace_symbols | 1 | -| atl.cpp:1079:14:1079:16 | Mid | (wchar_t,int) | CStringT | CStringT | 1 | -| atl.cpp:1081:9:1081:15 | Replace | (PCXSTR,PCXSTR) | CStringT | Replace | 0 | -| atl.cpp:1081:9:1081:15 | Replace | (PCXSTR,PCXSTR) | CStringT | Replace | 1 | -| atl.cpp:1081:9:1081:15 | Replace | (const CStringT &,PCXSTR) | | operator+ | 1 | -| atl.cpp:1081:9:1081:15 | Replace | (int,PCXSTR) | CStringT | Insert | 1 | -| atl.cpp:1082:9:1082:15 | Replace | (XCHAR,XCHAR) | CStringT | Replace | 0 | -| atl.cpp:1082:9:1082:15 | Replace | (XCHAR,XCHAR) | CStringT | Replace | 1 | -| atl.cpp:1082:9:1082:15 | Replace | (int,XCHAR) | CStringT | Insert | 1 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ASN1_STRING_type_new | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ASN1_tag2bit | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ASN1_tag2str | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | EVP_PKEY_asn1_get0 | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | Jim_ReturnCode | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | Jim_SignalId | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | OBJ_nid2ln | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | OBJ_nid2obj | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | OBJ_nid2sn | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | OSSL_STORE_INFO_type_string | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | OSSL_trace_get_category_name | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | PKCS12_init | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | Symbol_Nth | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | X509_PURPOSE_get0 | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | X509_PURPOSE_get_by_id | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | X509_TRUST_get0 | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | X509_TRUST_get_by_id | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __btowc | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __current_locale_name | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __fdopendir | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __get_errlist | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __get_errname | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __math_invalid_i | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __math_invalidf_i | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __p_class | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __p_rcode | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __p_type | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __pkey_get | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __sigdescr_np | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | __strerrordesc_np | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | _tolower | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | _toupper | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | btowc | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | c_tolower | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | c_toupper | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | curlx_sitouz | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | evp_pkey_type2name | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | inet6_option_space | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isalnum | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isalpha | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isblank | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | iscntrl | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isdigit | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isgraph | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | islower | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isprint | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ispunct | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isspace | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isupper | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | isxdigit | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ossl_cmp_bodytype_to_string | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ossl_tolower | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | ossl_toupper | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | sigabbrev_np | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | sqlite3_compileoption_get | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | sqlite3_errstr | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | strerrorname_np | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | support_report_failure | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | svcudp_create | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | tls13_alert_code | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | toascii | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | tolower | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | toupper | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uabs | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uv__accept | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uv_err_name | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uv_get_osfhandle | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uv_strerror | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | uv_translate_sys_error | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | | zError | 0 | -| atl.cpp:1083:14:1083:18 | Right | (int) | __pthread_cleanup_class | __setdoit | 0 | -| atl.cpp:1085:14:1085:26 | SpanExcluding | (PCXSTR) | | operator+= | 0 | -| atl.cpp:1085:14:1085:26 | SpanExcluding | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:1085:14:1085:26 | SpanExcluding | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:1086:14:1086:26 | SpanIncluding | (PCXSTR) | | operator+= | 0 | -| atl.cpp:1086:14:1086:26 | SpanIncluding | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:1086:14:1086:26 | SpanIncluding | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:1088:15:1088:18 | Trim | (XCHAR) | CStringT | operator= | 0 | -| atl.cpp:1089:15:1089:18 | Trim | (PCXSTR) | | operator+= | 0 | -| atl.cpp:1089:15:1089:18 | Trim | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:1089:15:1089:18 | Trim | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:1091:15:1091:22 | TrimLeft | (XCHAR) | CStringT | operator= | 0 | -| atl.cpp:1092:15:1092:22 | TrimLeft | (PCXSTR) | | operator+= | 0 | -| atl.cpp:1092:15:1092:22 | TrimLeft | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:1092:15:1092:22 | TrimLeft | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:1094:15:1094:23 | TrimRight | (XCHAR) | CStringT | operator= | 0 | -| atl.cpp:1095:15:1095:23 | TrimRight | (PCXSTR) | | operator+= | 0 | -| atl.cpp:1095:15:1095:23 | TrimRight | (PCXSTR) | CSimpleStringT | operator+= | 0 | -| atl.cpp:1095:15:1095:23 | TrimRight | (PCXSTR) | CStringT | operator= | 0 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (unsigned char *,int,unsigned long) | | UTF8_putc | 1 | -| atl.cpp:1231:5:1231:12 | CStrBufT | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| bsd.cpp:12:5:12:10 | accept | (CURLM *,curl_socket_t,int *) | | curl_multi_socket | 2 | -| bsd.cpp:12:5:12:10 | accept | (Curl_easy *,ssize_t *,int *) | | Curl_GetFTPResponse | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_CipherFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_CipherFinal_ex | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_DecryptFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_DecryptFinal_ex | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_EncryptFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_EncryptFinal_ex | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_OpenFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_SealFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_ENCODE_CTX *,unsigned char *,int *) | | EVP_DecodeFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (EVP_ENCODE_CTX *,unsigned char *,int *) | | EVP_EncodeFinal | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_DictPairs | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_GetBoolFromExpr | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_GetBoolean | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_GetIndex | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_GetReturnCode | 2 | -| bsd.cpp:12:5:12:10 | accept | (Jim_Interp *,Jim_Obj *,int *) | | Jim_GetSourceInfo | 2 | -| bsd.cpp:12:5:12:10 | accept | (LIBSSH2_SESSION *,size_t *,int *) | | libssh2_session_hostkey | 2 | -| bsd.cpp:12:5:12:10 | accept | (OPENSSL_STACK *,const void *,int *) | | OPENSSL_sk_find_all | 2 | -| bsd.cpp:12:5:12:10 | accept | (OSSL_DECODER *,const char *,int *) | | ossl_decoder_fast_is_a | 2 | -| bsd.cpp:12:5:12:10 | accept | (OSSL_LIB_CTX *,uint32_t,int *) | | ossl_rand_uniform_uint32 | 2 | -| bsd.cpp:12:5:12:10 | accept | (OSSL_PROVIDER *,size_t,int *) | | ossl_provider_test_operation_bit | 2 | -| bsd.cpp:12:5:12:10 | accept | (PACKET *,uint64_t *,int *) | | ossl_quic_wire_peek_frame_header | 2 | -| bsd.cpp:12:5:12:10 | accept | (PROV_DRBG *,OSSL_PARAM[],int *) | | ossl_drbg_get_ctx_params_no_lock | 2 | -| bsd.cpp:12:5:12:10 | accept | (QUIC_RSTREAM *,size_t *,int *) | | ossl_quic_rstream_available | 2 | -| bsd.cpp:12:5:12:10 | accept | (_Float128,_Float128,int *) | | __remquof128 | 2 | -| bsd.cpp:12:5:12:10 | accept | (const BIGNUM *,const BIGNUM *,int *) | | ossl_ffc_validate_private_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DH *,const BIGNUM *,int *) | | DH_check_pub_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DH *,const BIGNUM *,int *) | | ossl_dh_check_priv_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DH *,const BIGNUM *,int *) | | ossl_dh_check_pub_key_partial | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DSA *,const BIGNUM *,int *) | | ossl_dsa_check_priv_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DSA *,const BIGNUM *,int *) | | ossl_dsa_check_pub_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DSA *,const BIGNUM *,int *) | | ossl_dsa_check_pub_key_partial | 2 | -| bsd.cpp:12:5:12:10 | accept | (const DSA *,int,int *) | | ossl_dsa_check_params | 2 | -| bsd.cpp:12:5:12:10 | accept | (const FFC_PARAMS *,const BIGNUM *,int *) | | ossl_ffc_validate_public_key | 2 | -| bsd.cpp:12:5:12:10 | accept | (const FFC_PARAMS *,const BIGNUM *,int *) | | ossl_ffc_validate_public_key_partial | 2 | -| bsd.cpp:12:5:12:10 | accept | (const SSL *,const SSL_CTX *,int *) | | ssl_get_security_level_bits | 2 | -| bsd.cpp:12:5:12:10 | accept | (const X509 *,EVP_MD **,int *) | | X509_digest_sig | 2 | -| bsd.cpp:12:5:12:10 | accept | (const char *,const OPT_PAIR *,int *) | | opt_pair | 2 | -| bsd.cpp:12:5:12:10 | accept | (const char *,const char *,int *) | | __gconv_compare_alias_cache | 2 | -| bsd.cpp:12:5:12:10 | accept | (const res_sym *,const char *,int *) | | __sym_ston | 2 | -| bsd.cpp:12:5:12:10 | accept | (const res_sym *,int,int *) | | __sym_ntop | 2 | -| bsd.cpp:12:5:12:10 | accept | (const res_sym *,int,int *) | | __sym_ntos | 2 | -| bsd.cpp:12:5:12:10 | accept | (const unsigned char **,unsigned int,int *) | | ossl_b2i | 2 | -| bsd.cpp:12:5:12:10 | accept | (const uv_tcp_t *,sockaddr *,int *) | | uv_tcp_getpeername | 1 | -| bsd.cpp:12:5:12:10 | accept | (const uv_tcp_t *,sockaddr *,int *) | | uv_tcp_getpeername | 2 | -| bsd.cpp:12:5:12:10 | accept | (const uv_tcp_t *,sockaddr *,int *) | | uv_tcp_getsockname | 1 | -| bsd.cpp:12:5:12:10 | accept | (const uv_tcp_t *,sockaddr *,int *) | | uv_tcp_getsockname | 2 | -| bsd.cpp:12:5:12:10 | accept | (const uv_udp_t *,sockaddr *,int *) | | uv_udp_getpeername | 1 | -| bsd.cpp:12:5:12:10 | accept | (const uv_udp_t *,sockaddr *,int *) | | uv_udp_getpeername | 2 | -| bsd.cpp:12:5:12:10 | accept | (const uv_udp_t *,sockaddr *,int *) | | uv_udp_getsockname | 1 | -| bsd.cpp:12:5:12:10 | accept | (const uv_udp_t *,sockaddr *,int *) | | uv_udp_getsockname | 2 | -| bsd.cpp:12:5:12:10 | accept | (double,double,int *) | | __remquo | 2 | -| bsd.cpp:12:5:12:10 | accept | (float,float,int *) | | __remquof | 2 | -| bsd.cpp:12:5:12:10 | accept | (int,const char **,int *) | | sqlite3_keyword_name | 2 | -| bsd.cpp:12:5:12:10 | accept | (int,int,int *) | | ssl_set_version_bound | 2 | -| bsd.cpp:12:5:12:10 | accept | (long double,long double,int *) | | __remquol | 2 | -| bsd.cpp:12:5:12:10 | accept | (pthread_mutex_t *,int,int *) | | __pthread_mutex_setprioceiling | 2 | -| bsd.cpp:12:5:12:10 | accept | (size_t,size_t *,int *) | | __malloc_hugepage_config | 2 | -| bsd.cpp:12:5:12:10 | accept | (uv_handle_t *,int,int *) | | uv__socket_sockopt | 2 | -| bsd.cpp:12:5:12:10 | accept | (z_streamp,unsigned int *,int *) | | deflatePending | 2 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ASN1_STRING_type_new | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ASN1_tag2bit | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ASN1_tag2str | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | EVP_PKEY_asn1_get0 | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | Jim_ReturnCode | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | Jim_SignalId | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | OBJ_nid2ln | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | OBJ_nid2obj | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | OBJ_nid2sn | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | OSSL_STORE_INFO_type_string | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | OSSL_trace_get_category_name | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | PKCS12_init | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | Symbol_Nth | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | X509_PURPOSE_get0 | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | X509_PURPOSE_get_by_id | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | X509_TRUST_get0 | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | X509_TRUST_get_by_id | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __btowc | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __current_locale_name | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __fdopendir | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __get_errlist | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __get_errname | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __math_invalid_i | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __math_invalidf_i | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __p_class | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __p_rcode | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __p_type | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __pkey_get | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __sigdescr_np | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | __strerrordesc_np | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | _tolower | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | _toupper | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | btowc | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | c_tolower | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | c_toupper | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | curlx_sitouz | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | evp_pkey_type2name | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | inet6_option_space | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isalnum | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isalpha | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isblank | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | iscntrl | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isdigit | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isgraph | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | islower | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isprint | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ispunct | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isspace | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isupper | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | isxdigit | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ossl_cmp_bodytype_to_string | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ossl_tolower | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | ossl_toupper | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | sigabbrev_np | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | sqlite3_compileoption_get | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | sqlite3_errstr | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | strerrorname_np | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | support_report_failure | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | svcudp_create | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | tls13_alert_code | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | toascii | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | tolower | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | toupper | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uabs | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uv__accept | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uv_err_name | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uv_get_osfhandle | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uv_strerror | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | uv_translate_sys_error | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | | zError | 0 | -| constructor_delegation.cpp:8:2:8:8 | MyValue | (int) | __pthread_cleanup_class | __setdoit | 0 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (Curl_easy *,bool) | | Curl_creader_set_rewind | 1 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (Curl_easy *,bool) | | Curl_set_in_callback | 1 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (curl_socket_t[2],bool) | | Curl_eventfd | 1 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (support_fuse *,bool) | | support_fuse_filter_forget | 1 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (void *,bool) | | _dl_allocate_tls_init | 1 | -| constructor_delegation.cpp:9:2:9:8 | MyValue | (void *,bool) | | _dl_deallocate_tls | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | BN_clear_bit | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | BN_mask_bits | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | BN_set_bit | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | BN_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | bn_expand2 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | bn_wexpand | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_find_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_set_init | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_set_retry_reason | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | BIO_set_shutdown | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (BIO *,int) | | TXT_DB_read | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (CURL *,int) | | curl_easy_pause | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DH *,int) | | DH_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DH *,int) | | DH_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DSA *,int) | | DSA_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DSA *,int) | | DSA_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_default_pbackfail | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_fwide | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_init | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_init_internal | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_new_file_attach | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_new_file_overflow | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_old_init | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_sputbackc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_str_overflow | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | _IO_str_pbackfail | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (FTS *,int) | | fts_children | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA *,int) | | RSA_clear_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA *,int) | | RSA_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_key_update | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_purpose | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_read_ahead | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_security_level | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_shutdown | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_trust | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL *,int) | | SSL_set_verify_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_CTX *,int) | | ssl_md | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509 *,int) | | X509_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509 *,int) | | X509_self_signed | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (_Float128,int) | | __ldexpf128 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (_Float128,int) | | __scalbnf128 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (acttab *,int) | | acttab_insert | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (addrinfo *,int) | | support_format_addrinfo | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (char **,int) | | addrsort | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (char *,int) | | Curl_str2addr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (char *,int) | | PEM_proc_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (char,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const BIGNUM *,int) | | BN_get_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const BIO *,int) | | BIO_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const BIO *,int) | | BIO_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DH *,int) | | DH_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DH *,int) | | DH_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DH *,int) | | ossl_dh_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DSA *,int) | | DSA_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DSA *,int) | | DSA_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const DSA *,int) | | ossl_dsa_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const RSA *,int) | | RSA_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const RSA *,int) | | RSA_test_flags | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const RSA *,int) | | ossl_rsa_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const SSL *,int) | | SSL_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const UI *,int) | | UI_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509 *,int) | | X509_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509 *,int) | | X509_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const XCHAR *,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const YCHAR *,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | DH_meth_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | DSA_meth_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | Jim_StrDupLen | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | RSA_meth_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | ftok | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | gethostbyname2 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | parse_yesno | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const char *,int) | | res_gethostbyname2 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (const void *,int) | | inet6_rth_getaddr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (double,int) | | __ldexp | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (double,int) | | __scalbn | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (double[],int) | | getloadavg | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (fexcept_t *,int) | | fegetexceptflag | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (float,int) | | __ldexpf | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (float,int) | | __scalbnf | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (gzFile,int) | | gzflush | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (gzFile,int) | | gzputc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int *,int) | | X509_PURPOSE_set | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int *,int) | | X509_TRUST_set | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int *,int) | | __lll_unlock_elision | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | BN_security_bits | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | BN_security_bits | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | EVP_MD_meth_new | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | EVP_MD_meth_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | EVP_PKEY_meth_new | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | EVP_PKEY_meth_new | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | __isctype | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | __isctype | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | acttab_alloc | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | acttab_alloc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | div | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | div | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | inet6_rth_space | 0 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (int,int) | | inet6_rth_space | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (long double,int) | | __ldexpl | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (netlink_handle *,int) | | __netlink_request | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (ns_msg,int) | | ns_msg_getflag | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (obstack *,int) | | _obstack_newchunk | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (rule *,int) | | Configlist_add | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (rule *,int) | | Configlist_addbasis | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sigset_t *,int) | | sigaddset | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sigset_t *,int) | | sigdelset | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (timespec *,int) | | __timespec_get | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (timespec *,int) | | __timespec_getres | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (uint16_t,int) | | tls1_group_id2nid | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (unsigned char *,int) | | RAND_bytes | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (void *,int) | | DSO_dsobyaddr | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (void *,int) | | sqlite3_realloc | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (void *const *,int) | | __backtrace_symbols | 1 | -| constructor_delegation.cpp:10:2:10:8 | MyValue | (wchar_t,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,CURLcode,bool) | | Curl_http_done | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,Curl_chunker *,bool) | | Curl_httpchunk_init | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,Curl_chunker *,bool) | | Curl_httpchunk_reset | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,connectdata *,bool) | | Curl_cpool_disconnect | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,connectdata *,bool) | | Curl_on_disconnect | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,curltime *,bool) | | Curl_timeleft | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,pingpong *,bool) | | Curl_pp_state_timeout | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (Curl_easy *,size_t,bool) | | Curl_bump_headersize | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (GlobalConfig *,timeval *,bool) | | progress_meter | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (link_map *,Dl_serinfo *,bool) | | _dl_rtld_di_serinfo | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (link_map *,link_map_public *,bool) | | _dl_close_worker | 2 | -| constructor_delegation.cpp:11:2:11:8 | MyValue | (size_t,char *[],bool) | | add_locales_to_archive | 2 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | BN_clear_bit | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | BN_mask_bits | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | BN_set_bit | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | BN_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | bn_expand2 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | bn_wexpand | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_find_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_set_init | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_set_retry_reason | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | BIO_set_shutdown | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (BIO *,int) | | TXT_DB_read | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (CURL *,int) | | curl_easy_pause | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DH *,int) | | DH_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DH *,int) | | DH_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DSA *,int) | | DSA_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DSA *,int) | | DSA_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_default_pbackfail | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_fwide | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_init | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_init_internal | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_new_file_attach | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_new_file_overflow | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_old_init | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_sputbackc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_str_overflow | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | _IO_str_pbackfail | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (FTS *,int) | | fts_children | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA *,int) | | RSA_clear_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA *,int) | | RSA_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_key_update | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_purpose | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_read_ahead | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_security_level | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_shutdown | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_trust | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL *,int) | | SSL_set_verify_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_CTX *,int) | | ssl_md | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509 *,int) | | X509_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509 *,int) | | X509_self_signed | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (_Float128,int) | | __ldexpf128 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (_Float128,int) | | __scalbnf128 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (acttab *,int) | | acttab_insert | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (addrinfo *,int) | | support_format_addrinfo | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (char **,int) | | addrsort | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (char *,int) | | Curl_str2addr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (char *,int) | | PEM_proc_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (char,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const BIGNUM *,int) | | BN_get_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const BIO *,int) | | BIO_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const BIO *,int) | | BIO_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DH *,int) | | DH_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DH *,int) | | DH_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DH *,int) | | ossl_dh_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DSA *,int) | | DSA_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DSA *,int) | | DSA_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const DSA *,int) | | ossl_dsa_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const RSA *,int) | | RSA_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const RSA *,int) | | RSA_test_flags | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const RSA *,int) | | ossl_rsa_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const SSL *,int) | | SSL_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const UI *,int) | | UI_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509 *,int) | | X509_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509 *,int) | | X509_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const XCHAR *,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const YCHAR *,int) | CStringT | CStringT | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | DH_meth_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | DSA_meth_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | Jim_StrDupLen | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | RSA_meth_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | ftok | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | gethostbyname2 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | parse_yesno | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const char *,int) | | res_gethostbyname2 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (const void *,int) | | inet6_rth_getaddr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (double,int) | | __ldexp | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (double,int) | | __scalbn | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (double[],int) | | getloadavg | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (fexcept_t *,int) | | fegetexceptflag | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (float,int) | | __ldexpf | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (float,int) | | __scalbnf | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (gzFile,int) | | gzflush | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (gzFile,int) | | gzputc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int *,int) | | X509_PURPOSE_set | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int *,int) | | X509_TRUST_set | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int *,int) | | __lll_unlock_elision | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | BN_security_bits | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | EVP_MD_meth_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | EVP_PKEY_meth_new | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | __isctype | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | acttab_alloc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | div | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (int,int) | | inet6_rth_space | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (long double,int) | | __ldexpl | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (netlink_handle *,int) | | __netlink_request | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (ns_msg,int) | | ns_msg_getflag | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (obstack *,int) | | _obstack_newchunk | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (rule *,int) | | Configlist_add | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (rule *,int) | | Configlist_addbasis | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sigset_t *,int) | | sigaddset | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sigset_t *,int) | | sigdelset | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (timespec *,int) | | __timespec_get | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (timespec *,int) | | __timespec_getres | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (uint16_t,int) | | tls1_group_id2nid | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (unsigned char *,int) | | RAND_bytes | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (void *,int) | | DSO_dsobyaddr | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (void *,int) | | sqlite3_realloc | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (void *const *,int) | | __backtrace_symbols | 1 | -| constructor_delegation.cpp:19:2:19:15 | MyDerivedValue | (wchar_t,int) | CStringT | CStringT | 1 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ASN1_STRING_type_new | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ASN1_tag2bit | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ASN1_tag2str | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | EVP_PKEY_asn1_get0 | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | Jim_ReturnCode | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | Jim_SignalId | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | OBJ_nid2ln | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | OBJ_nid2obj | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | OBJ_nid2sn | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | OSSL_STORE_INFO_type_string | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | OSSL_trace_get_category_name | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | PKCS12_init | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | Symbol_Nth | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | X509_PURPOSE_get0 | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | X509_PURPOSE_get_by_id | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | X509_TRUST_get0 | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | X509_TRUST_get_by_id | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __btowc | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __current_locale_name | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __fdopendir | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __get_errlist | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __get_errname | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __math_invalid_i | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __math_invalidf_i | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __p_class | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __p_rcode | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __p_type | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __pkey_get | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __sigdescr_np | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | __strerrordesc_np | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | _tolower | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | _toupper | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | btowc | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | c_tolower | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | c_toupper | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | curlx_sitouz | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | evp_pkey_type2name | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | inet6_option_space | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isalnum | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isalpha | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isblank | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | iscntrl | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isdigit | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isgraph | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | islower | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isprint | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ispunct | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isspace | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isupper | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | isxdigit | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ossl_cmp_bodytype_to_string | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ossl_tolower | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | ossl_toupper | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | sigabbrev_np | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | sqlite3_compileoption_get | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | sqlite3_errstr | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | strerrorname_np | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | support_report_failure | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | svcudp_create | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | tls13_alert_code | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | toascii | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | tolower | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | toupper | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uabs | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uv__accept | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uv_err_name | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uv_get_osfhandle | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uv_strerror | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | uv_translate_sys_error | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | | zError | 0 | -| copyableclass.cpp:8:2:8:16 | MyCopyableClass | (int) | __pthread_cleanup_class | __setdoit | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ASN1_STRING_type_new | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ASN1_tag2bit | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ASN1_tag2str | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | EVP_PKEY_asn1_get0 | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | Jim_ReturnCode | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | Jim_SignalId | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | OBJ_nid2ln | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | OBJ_nid2obj | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | OBJ_nid2sn | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | OSSL_STORE_INFO_type_string | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | OSSL_trace_get_category_name | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | PKCS12_init | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | Symbol_Nth | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | X509_PURPOSE_get0 | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | X509_PURPOSE_get_by_id | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | X509_TRUST_get0 | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | X509_TRUST_get_by_id | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __btowc | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __current_locale_name | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __fdopendir | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __get_errlist | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __get_errname | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __math_invalid_i | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __math_invalidf_i | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __p_class | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __p_rcode | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __p_type | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __pkey_get | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __sigdescr_np | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | __strerrordesc_np | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | _tolower | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | _toupper | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | btowc | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | c_tolower | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | c_toupper | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | curlx_sitouz | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | evp_pkey_type2name | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | inet6_option_space | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isalnum | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isalpha | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isblank | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | iscntrl | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isdigit | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isgraph | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | islower | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isprint | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ispunct | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isspace | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isupper | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | isxdigit | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ossl_cmp_bodytype_to_string | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ossl_tolower | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | ossl_toupper | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | sigabbrev_np | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | sqlite3_compileoption_get | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | sqlite3_errstr | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | strerrorname_np | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | support_report_failure | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | svcudp_create | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | tls13_alert_code | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | toascii | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | tolower | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | toupper | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uabs | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uv__accept | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uv_err_name | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uv_get_osfhandle | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uv_strerror | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | uv_translate_sys_error | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | | zError | 0 | -| copyableclass_declonly.cpp:8:2:8:24 | MyCopyableClassDeclOnly | (int) | __pthread_cleanup_class | __setdoit | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | Curl_cpool_upkeep | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | __dlclose | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | __libc_dlclose | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | __libc_free | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | __malloc_usable_size | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | _dl_allocate_tls | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | _dl_close | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | malloc_usable_size | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | ossl_kdf_data_new | 0 | -| file://:0:0:0:0 | operator delete | (void *) | | support_shared_free | 0 | -| file://:0:0:0:0 | operator new | (unsigned long) | | BN_num_bits_word | 0 | -| file://:0:0:0:0 | operator new | (unsigned long) | | BUF_MEM_new_ex | 0 | -| file://:0:0:0:0 | operator new | (unsigned long) | | curlx_ultouc | 0 | -| file://:0:0:0:0 | operator new | (unsigned long) | | curlx_ultous | 0 | -| file://:0:0:0:0 | operator new | (unsigned long) | | next_prime | 0 | -| format.cpp:5:5:5:12 | snprintf | (StrAccum *,sqlite3_str *,const char *,...) | | sqlite3_str_appendf | 2 | -| format.cpp:5:5:5:12 | snprintf | (StrAccum *,sqlite3_str *,const char *,...) | | sqlite3_str_appendf | 3 | -| format.cpp:5:5:5:12 | snprintf | (char **,int,const char *,...) | | ___asprintf_chk | 2 | -| format.cpp:5:5:5:12 | snprintf | (char **,int,const char *,...) | | ___asprintf_chk | 3 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 0 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 1 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 2 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 3 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | __strfmon | 0 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | __strfmon | 1 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | __strfmon | 2 | -| format.cpp:5:5:5:12 | snprintf | (char *,size_t,const char *,...) | | __strfmon | 3 | -| format.cpp:5:5:5:12 | snprintf | (int,char *,const char *,...) | | sqlite3_snprintf | 2 | -| format.cpp:5:5:5:12 | snprintf | (int,char *,const char *,...) | | sqlite3_snprintf | 3 | -| format.cpp:5:5:5:12 | snprintf | (ucontext_t *,..(*)(..),int,...) | | __makecontext | 3 | -| format.cpp:6:5:6:11 | sprintf | (CURLSH *,CURLSHoption,...) | | curl_share_setopt | 2 | -| format.cpp:6:5:6:11 | sprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 1 | -| format.cpp:6:5:6:11 | sprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 2 | -| format.cpp:6:5:6:11 | sprintf | (char **,const char *,...) | | ___asprintf | 1 | -| format.cpp:6:5:6:11 | sprintf | (char **,const char *,...) | | ___asprintf | 2 | -| format.cpp:6:5:6:11 | sprintf | (curl_httppost **,curl_httppost **,...) | | curl_formadd | 2 | -| format.cpp:7:5:7:12 | swprintf | (StrAccum *,sqlite3_str *,const char *,...) | | sqlite3_str_appendf | 3 | -| format.cpp:7:5:7:12 | swprintf | (char **,int,const char *,...) | | ___asprintf_chk | 3 | -| format.cpp:7:5:7:12 | swprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 3 | -| format.cpp:7:5:7:12 | swprintf | (char *,size_t,const char *,...) | | __strfmon | 3 | -| format.cpp:7:5:7:12 | swprintf | (int,char *,const char *,...) | | sqlite3_snprintf | 3 | -| format.cpp:7:5:7:12 | swprintf | (ucontext_t *,..(*)(..),int,...) | | __makecontext | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (..(*)(..),..(*)(..),..(*)(..),void *) | | libssh2_session_init_ex | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,CMS_ContentInfo **,pem_password_cb *,void *) | | PEM_read_bio_CMS | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,DH **,pem_password_cb *,void *) | | PEM_read_bio_DHparams | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSAPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSA_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSAparams | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EC_GROUP **,pem_password_cb *,void *) | | PEM_read_bio_ECPKParameters | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_bio_ECPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_bio_EC_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_bio_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_bio_PrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | d2i_PKCS8PrivateKey_bio | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,NETSCAPE_CERT_SEQUENCE **,pem_password_cb *,void *) | | PEM_read_bio_NETSCAPE_CERT_SEQUENCE | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,PKCS7 **,pem_password_cb *,void *) | | PEM_read_bio_PKCS7 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,PKCS8_PRIV_KEY_INFO **,pem_password_cb *,void *) | | PEM_read_bio_PKCS8_PRIV_KEY_INFO | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSAPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSAPublicKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSA_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,SSL_SESSION **,pem_password_cb *,void *) | | PEM_read_bio_SSL_SESSION | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509 **,pem_password_cb *,void *) | | PEM_read_bio_X509 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509 **,pem_password_cb *,void *) | | PEM_read_bio_X509_AUX | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509_ACERT **,pem_password_cb *,void *) | | PEM_read_bio_X509_ACERT | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509_CRL **,pem_password_cb *,void *) | | PEM_read_bio_X509_CRL | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509_PUBKEY **,pem_password_cb *,void *) | | PEM_read_bio_X509_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509_REQ **,pem_password_cb *,void *) | | PEM_read_bio_X509_REQ | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,X509_SIG **,pem_password_cb *,void *) | | PEM_read_bio_PKCS8 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,size_t,..(*)(..),void *) | | ossl_quic_demux_new | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BIO *,stack_st_X509_INFO *,pem_password_cb *,void *) | | PEM_X509_INFO_read_bio | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (BrotliDecoderStateInternal *,brotli_alloc_func,brotli_free_func,void *) | | BrotliDecoderStateInit | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (Curl_easy *,connectdata *,Curl_cpool_conn_do_cb *,void *) | | Curl_cpool_do_locked | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (Curl_easy *,pingpong *,const char *,va_list) | | Curl_pp_vsendf | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (Curl_easy *,pingpong *,const char *,va_list) | | Curl_pp_vsendf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (Curl_hash *,void *,size_t,void *) | | Curl_hash_add | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (DSO *,int,long,void *) | | DSO_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (EVP_CIPHER_CTX *,int,int,void *) | | EVP_CIPHER_CTX_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,CMS_ContentInfo **,pem_password_cb *,void *) | | PEM_read_CMS | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,DH **,pem_password_cb *,void *) | | PEM_read_DHparams | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSAPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSA_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSAparams | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EC_GROUP **,pem_password_cb *,void *) | | PEM_read_ECPKParameters | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_ECPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_EC_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_PrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | d2i_PKCS8PrivateKey_fp | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,NETSCAPE_CERT_SEQUENCE **,pem_password_cb *,void *) | | PEM_read_NETSCAPE_CERT_SEQUENCE | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,PKCS7 **,pem_password_cb *,void *) | | PEM_read_PKCS7 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,PKCS8_PRIV_KEY_INFO **,pem_password_cb *,void *) | | PEM_read_PKCS8_PRIV_KEY_INFO | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSAPrivateKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSAPublicKey | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSA_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,SSL_SESSION **,pem_password_cb *,void *) | | PEM_read_SSL_SESSION | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509 **,pem_password_cb *,void *) | | PEM_read_X509 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509 **,pem_password_cb *,void *) | | PEM_read_X509_AUX | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509_ACERT **,pem_password_cb *,void *) | | PEM_read_X509_ACERT | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509_CRL **,pem_password_cb *,void *) | | PEM_read_X509_CRL | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509_PUBKEY **,pem_password_cb *,void *) | | PEM_read_X509_PUBKEY | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509_REQ **,pem_password_cb *,void *) | | PEM_read_X509_REQ | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,X509_SIG **,pem_password_cb *,void *) | | PEM_read_PKCS8 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,int,const char *,va_list) | | ___vfprintf_chk | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,int,const char *,va_list) | | ___vfprintf_chk | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (FILE *,stack_st_X509_INFO *,pem_password_cb *,void *) | | PEM_X509_INFO_read | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (HT *,size_t,..(*)(..),void *) | | ossl_ht_filter | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (MD5_SHA1_CTX *,int,int,void *) | | ossl_md5_sha1_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (MemoryManager *,brotli_alloc_func,brotli_free_func,void *) | | BrotliInitMemoryManager | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (OCB128_CONTEXT *,OCB128_CONTEXT *,void *,void *) | | CRYPTO_ocb128_copy_ctx | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (OPENSSL_LHASH *,OPENSSL_LH_DOALL_FUNCARG_THUNK,OPENSSL_LH_DOALL_FUNCARG,void *) | | OPENSSL_LH_doall_arg_thunk | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (OSSL_PROVIDER *,int,..(*)(..),void *) | | evp_names_do_all | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (OSSL_QTX *,ossl_mutate_packet_cb,ossl_finish_mutate_cb,void *) | | ossl_qtx_set_mutator | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (QUIC_CHANNEL *,ossl_mutate_packet_cb,ossl_finish_mutate_cb,void *) | | ossl_quic_channel_set_mutator | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (QUIC_RXFC *,uint64_t,..(*)(..),void *) | | ossl_quic_rxfc_init_standalone | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SHA_CTX *,int,int,void *) | | ossl_sha1_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL *,int,long,void *) | | SSL_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL *,int,long,void *) | | dtls1_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL *,int,long,void *) | | ossl_quic_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL *,int,long,void *) | | ssl3_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL *,ossl_statem_mutate_handshake_cb,ossl_statem_finish_mutate_handshake_cb,void *) | | ossl_statem_set_mutator | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL_CTX *,SSL_CTX_generate_session_ticket_fn,SSL_CTX_decrypt_session_ticket_fn,void *) | | SSL_CTX_set_session_ticket_cb | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL_CTX *,int,long,void *) | | SSL_CTX_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL_CTX *,int,long,void *) | | ossl_quic_ctx_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (SSL_CTX *,int,long,void *) | | ssl3_ctx_ctrl | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (X509_ALGOR *,ASN1_OBJECT *,int,void *) | | X509_ALGOR_set0 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,int,int,void *) | | PEM_def_callback | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,int,int,void *) | | ossl_pw_pem_password | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,int,int,void *) | | ossl_pw_pvk_password | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | BIO_vsnprintf | 0 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | BIO_vsnprintf | 1 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | BIO_vsnprintf | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | BIO_vsnprintf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | ___vsnprintf | 0 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | ___vsnprintf | 1 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | ___vsnprintf | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | ___vsnprintf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | curl_mvsnprintf | 0 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | curl_mvsnprintf | 1 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | curl_mvsnprintf | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,const char *,va_list) | | curl_mvsnprintf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,size_t,void *) | | Curl_ftp_parselist | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,size_t,void *) | | Curl_mime_read | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,size_t,void *) | | tool_header_cb | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,size_t,void *) | | tool_mime_stdin_read | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (char *,size_t,size_t,void *) | | tool_read_cb | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const OSSL_NAMEMAP *,int,..(*)(..),void *) | | ossl_namemap_doall_names | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const char *,const char *,__gnuc_va_list,va_list) | | _IO_vsscanf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const char *,const char *__restrict__,__gnuc_va_list,va_list) | | __isoc23_vscanf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const char *,const char *__restrict__,__gnuc_va_list,va_list) | | __isoc99_vscanf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const char *,int,void *,void *) | | support_readdir_r_check | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const wchar_t *,const wchar_t *__restrict__,__gnuc_va_list,va_list) | | __isoc23_vwscanf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (const wchar_t *,const wchar_t *__restrict__,__gnuc_va_list,va_list) | | __isoc99_vwscanf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (hash_table *,const void *,size_t,void *) | | insert_entry | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (int,char *,const char *,va_list) | | sqlite3_vsnprintf | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (int,char *,const char *,va_list) | | sqlite3_vsnprintf | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (int,int,const char *,va_list) | | ERR_vset_error | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (int,int,const char *,va_list) | | ERR_vset_error | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (int,unsigned long,..(*)(..),void *) | | RSA_generate_key | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (nghttp2_session *,const uint8_t *,size_t,void *) | | nghttp2_session_upgrade | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,const char *,..(*)(..),void *) | | sqlite3_recover_init_sql | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,const char *,..(*)(..),void *) | | sqlite3_rtree_geometry_callback | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,const char *,const sqlite3_module *,void *) | | sqlite3_create_module | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,const char *,int,void *) | | sqlite3_file_control | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,int,..(*)(..),void *) | | sqlite3_progress_handler | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (sqlite3 *,unsigned int,..(*)(..),void *) | | sqlite3_trace_v2 | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (void *,const char *,const char *,void *) | | _dl_vsym | 2 | -| format.cpp:14:5:14:13 | vsnprintf | (void *,const char *,const char *,void *) | | _dl_vsym | 3 | -| format.cpp:14:5:14:13 | vsnprintf | (wchar_t *,size_t,const wchar_t *,va_list) | | __vswprintf | 3 | -| format.cpp:16:5:16:13 | mysprintf | (StrAccum *,sqlite3_str *,const char *,...) | | sqlite3_str_appendf | 2 | -| format.cpp:16:5:16:13 | mysprintf | (StrAccum *,sqlite3_str *,const char *,...) | | sqlite3_str_appendf | 3 | -| format.cpp:16:5:16:13 | mysprintf | (char **,int,const char *,...) | | ___asprintf_chk | 2 | -| format.cpp:16:5:16:13 | mysprintf | (char **,int,const char *,...) | | ___asprintf_chk | 3 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 0 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 1 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 2 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | BIO_snprintf | 3 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | __strfmon | 0 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | __strfmon | 1 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | __strfmon | 2 | -| format.cpp:16:5:16:13 | mysprintf | (char *,size_t,const char *,...) | | __strfmon | 3 | -| format.cpp:16:5:16:13 | mysprintf | (int,char *,const char *,...) | | sqlite3_snprintf | 2 | -| format.cpp:16:5:16:13 | mysprintf | (int,char *,const char *,...) | | sqlite3_snprintf | 3 | -| format.cpp:16:5:16:13 | mysprintf | (ucontext_t *,..(*)(..),int,...) | | __makecontext | 3 | -| format.cpp:28:5:28:10 | sscanf | (CURLSH *,CURLSHoption,...) | | curl_share_setopt | 2 | -| format.cpp:28:5:28:10 | sscanf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 1 | -| format.cpp:28:5:28:10 | sscanf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 2 | -| format.cpp:28:5:28:10 | sscanf | (char **,const char *,...) | | ___asprintf | 1 | -| format.cpp:28:5:28:10 | sscanf | (char **,const char *,...) | | ___asprintf | 2 | -| format.cpp:28:5:28:10 | sscanf | (curl_httppost **,curl_httppost **,...) | | curl_formadd | 2 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | BIO_gethostbyname | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Curl_copy_header_value | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Curl_get_scheme_handler | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Curl_getdate_capped | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Jim_StrDup | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | OPENSSL_LH_strhash | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Strsafe | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | Symbol_new | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | UI_create_method | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | X509V3_parse_list | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | X509_LOOKUP_meth_new | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __basename | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __gconv_find_shlib | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __gettext | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __hash_string | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __nss_action_parse | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __strdup | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __textdomain | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __tzset_parse_tz | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | __tzstring | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | a2i_IPADDRESS | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | a2i_IPADDRESS_NC | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | a64l | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | charmap_opendir | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | ether_aton | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | getdate | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | inetstr2int | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | last_component | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | opt_path_end | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | opt_progname | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | ossl_lh_strcasehash | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | repertoire_read | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | res_gethostbyname | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | sgetsgent | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | sgetspent | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | strhash | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | uc_script_byname | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | uv__strdup | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| format.cpp:142:8:142:13 | strlen | (const char *) | | xstrdup | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | SRP_VBASE_new | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | _IO_gets | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | __mktemp | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | __nis_default_group | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | __nis_default_owner | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | __nis_default_ttl | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | __xpg_basename | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | ctermid | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | cuserid | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | defossilize | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | des_setparity | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | dirname | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | getwd | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | make_uppercase | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | mkdtemp | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | next_item | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | | strfry | 0 | -| map.cpp:8:6:8:9 | sink | (char *) | CStringT | CStringT | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | BIO_gethostbyname | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Curl_copy_header_value | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Curl_get_scheme_handler | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Curl_getdate_capped | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Jim_StrDup | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | OPENSSL_LH_strhash | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Strsafe | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | Symbol_new | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | UI_create_method | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | X509V3_parse_list | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | X509_LOOKUP_meth_new | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __basename | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __gconv_find_shlib | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __gettext | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __hash_string | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __nss_action_parse | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __strdup | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __textdomain | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __tzset_parse_tz | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | __tzstring | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | a2i_IPADDRESS | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | a2i_IPADDRESS_NC | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | a64l | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | charmap_opendir | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | ether_aton | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | getdate | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | inetstr2int | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | last_component | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | opt_path_end | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | opt_progname | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | ossl_lh_strcasehash | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | repertoire_read | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | res_gethostbyname | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | sgetsgent | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | sgetspent | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | strhash | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | uc_script_byname | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | uv__strdup | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| map.cpp:9:6:9:9 | sink | (const char *) | | xstrdup | 0 | -| map.cpp:442:7:442:19 | indirect_sink | (int *) | | rresvport | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ASN1_STRING_type_new | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ASN1_tag2bit | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ASN1_tag2str | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | EVP_PKEY_asn1_get0 | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | Jim_ReturnCode | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | Jim_SignalId | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | OBJ_nid2ln | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | OBJ_nid2obj | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | OBJ_nid2sn | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | OSSL_STORE_INFO_type_string | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | OSSL_trace_get_category_name | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | PKCS12_init | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | Symbol_Nth | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | X509_PURPOSE_get0 | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | X509_PURPOSE_get_by_id | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | X509_TRUST_get0 | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | X509_TRUST_get_by_id | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __btowc | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __current_locale_name | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __fdopendir | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __get_errlist | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __get_errname | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __math_invalid_i | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __math_invalidf_i | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __p_class | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __p_rcode | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __p_type | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __pkey_get | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __sigdescr_np | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | __strerrordesc_np | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | _tolower | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | _toupper | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | btowc | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | c_tolower | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | c_toupper | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | curlx_sitouz | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | evp_pkey_type2name | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | inet6_option_space | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isalnum | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isalpha | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isblank | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | iscntrl | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isdigit | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isgraph | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | islower | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isprint | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ispunct | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isspace | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isupper | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | isxdigit | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ossl_cmp_bodytype_to_string | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ossl_tolower | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | ossl_toupper | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | sigabbrev_np | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | sqlite3_compileoption_get | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | sqlite3_errstr | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | strerrorname_np | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | support_report_failure | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | svcudp_create | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | tls13_alert_code | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | toascii | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | tolower | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | toupper | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uabs | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uv__accept | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uv_err_name | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uv_get_osfhandle | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uv_strerror | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | uv_translate_sys_error | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | | zError | 0 | -| movableclass.cpp:8:2:8:15 | MyMovableClass | (int) | __pthread_cleanup_class | __setdoit | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | SRP_VBASE_new | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | _IO_gets | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | __mktemp | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | __nis_default_group | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | __nis_default_owner | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | __nis_default_ttl | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | __xpg_basename | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | ctermid | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | cuserid | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | defossilize | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | des_setparity | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | dirname | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | getwd | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | make_uppercase | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | mkdtemp | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | next_item | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | | strfry | 0 | -| set.cpp:8:6:8:9 | sink | (char *) | CStringT | CStringT | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2bit | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2str | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | Jim_ReturnCode | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | Jim_SignalId | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2ln | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2obj | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2sn | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | PKCS12_init | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | Symbol_Nth | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __btowc | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __current_locale_name | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __fdopendir | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __get_errlist | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __get_errname | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __math_invalid_i | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __math_invalidf_i | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __p_class | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __p_rcode | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __p_type | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __pkey_get | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __sigdescr_np | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | __strerrordesc_np | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | _tolower | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | _toupper | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | btowc | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | c_tolower | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | c_toupper | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | curlx_sitouz | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | evp_pkey_type2name | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | inet6_option_space | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isalnum | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isalpha | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isblank | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | iscntrl | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isdigit | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isgraph | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | islower | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isprint | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ispunct | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isspace | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isupper | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | isxdigit | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ossl_tolower | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | ossl_toupper | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | sigabbrev_np | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | sqlite3_errstr | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | strerrorname_np | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | support_report_failure | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | svcudp_create | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | tls13_alert_code | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | toascii | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | tolower | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | toupper | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uabs | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uv__accept | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uv_err_name | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uv_get_osfhandle | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uv_strerror | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | uv_translate_sys_error | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | | zError | 0 | -| smart_pointer.cpp:4:6:4:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| smart_pointer.cpp:5:6:5:9 | sink | (int *) | | rresvport | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __btowc | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __p_class | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __p_type | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | _tolower | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | _toupper | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | btowc | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isalnum | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isalpha | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isblank | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isdigit | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isgraph | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | islower | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isprint | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ispunct | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isspace | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isupper | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | toascii | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | tolower | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | toupper | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uabs | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | | zError | 0 | -| standalone_iterators.cpp:5:6:5:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __btowc | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __p_class | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __p_type | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | _tolower | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | _toupper | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | btowc | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isalnum | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isalpha | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isblank | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isdigit | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isgraph | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | islower | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isprint | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ispunct | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isspace | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isupper | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | toascii | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | tolower | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | toupper | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uabs | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | | zError | 0 | -| standalone_iterators.cpp:16:30:16:39 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __btowc | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __p_class | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __p_type | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | _tolower | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | _toupper | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | btowc | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isalnum | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isalpha | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isblank | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isdigit | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isgraph | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | islower | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isprint | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ispunct | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isspace | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isupper | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | toascii | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | tolower | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | toupper | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uabs | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | | zError | 0 | -| standalone_iterators.cpp:23:27:23:36 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __btowc | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __p_class | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __p_type | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | _tolower | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | _toupper | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | btowc | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isalnum | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isalpha | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isblank | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isdigit | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isgraph | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | islower | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isprint | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ispunct | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isspace | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isupper | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | toascii | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | tolower | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | toupper | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uabs | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | | zError | 0 | -| standalone_iterators.cpp:39:18:39:27 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __btowc | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __p_class | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __p_type | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | _tolower | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | _toupper | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | btowc | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isalnum | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isalpha | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isblank | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isdigit | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isgraph | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | islower | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isprint | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ispunct | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isspace | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isupper | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | toascii | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | tolower | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | toupper | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uabs | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | | zError | 0 | -| standalone_iterators.cpp:66:30:66:39 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __btowc | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __p_class | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __p_type | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | _tolower | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | _toupper | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | btowc | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isalnum | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isalpha | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isblank | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isdigit | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isgraph | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | islower | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isprint | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ispunct | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isspace | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isupper | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | toascii | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | tolower | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | toupper | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uabs | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | | zError | 0 | -| standalone_iterators.cpp:68:30:68:39 | operator-- | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ASN1_STRING_type_new | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ASN1_tag2bit | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ASN1_tag2str | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | EVP_PKEY_asn1_get0 | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | Jim_ReturnCode | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | Jim_SignalId | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | OBJ_nid2ln | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | OBJ_nid2obj | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | OBJ_nid2sn | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | OSSL_STORE_INFO_type_string | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | OSSL_trace_get_category_name | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | PKCS12_init | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | Symbol_Nth | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | X509_PURPOSE_get0 | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | X509_PURPOSE_get_by_id | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | X509_TRUST_get0 | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | X509_TRUST_get_by_id | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __btowc | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __current_locale_name | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __fdopendir | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __get_errlist | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __get_errname | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __math_invalid_i | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __math_invalidf_i | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __p_class | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __p_rcode | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __p_type | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __pkey_get | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __sigdescr_np | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | __strerrordesc_np | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | _tolower | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | _toupper | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | btowc | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | c_tolower | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | c_toupper | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | curlx_sitouz | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | evp_pkey_type2name | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | inet6_option_space | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isalnum | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isalpha | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isblank | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | iscntrl | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isdigit | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isgraph | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | islower | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isprint | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ispunct | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isspace | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isupper | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | isxdigit | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ossl_cmp_bodytype_to_string | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ossl_tolower | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | ossl_toupper | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | sigabbrev_np | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | sqlite3_compileoption_get | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | sqlite3_errstr | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | strerrorname_np | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | support_report_failure | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | svcudp_create | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | tls13_alert_code | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | toascii | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | tolower | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | toupper | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uabs | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uv__accept | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uv_err_name | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uv_get_osfhandle | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uv_strerror | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | uv_translate_sys_error | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | | zError | 0 | -| standalone_iterators.cpp:70:31:70:39 | operator= | (int) | __pthread_cleanup_class | __setdoit | 0 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | BN_clear_bit | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | BN_mask_bits | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | BN_set_bit | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | BN_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | bn_expand2 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | bn_wexpand | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_find_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_set_init | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_set_retry_reason | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | BIO_set_shutdown | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (BIO *,int) | | TXT_DB_read | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (CURL *,int) | | curl_easy_pause | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DH *,int) | | DH_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DH *,int) | | DH_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DSA *,int) | | DSA_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DSA *,int) | | DSA_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_default_pbackfail | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_fwide | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_init | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_init_internal | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_new_file_attach | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_new_file_overflow | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_old_init | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_sputbackc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_str_overflow | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | _IO_str_pbackfail | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (FTS *,int) | | fts_children | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA *,int) | | RSA_clear_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA *,int) | | RSA_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_key_update | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_purpose | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_read_ahead | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_security_level | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_shutdown | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_trust | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL *,int) | | SSL_set_verify_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_CTX *,int) | | ssl_md | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509 *,int) | | X509_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509 *,int) | | X509_self_signed | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (_Float128,int) | | __ldexpf128 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (_Float128,int) | | __scalbnf128 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (acttab *,int) | | acttab_insert | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (addrinfo *,int) | | support_format_addrinfo | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (char **,int) | | addrsort | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (char *,int) | | Curl_str2addr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (char *,int) | | PEM_proc_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (char,int) | CStringT | CStringT | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const BIGNUM *,int) | | BN_get_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const BIO *,int) | | BIO_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const BIO *,int) | | BIO_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DH *,int) | | DH_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DH *,int) | | DH_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DH *,int) | | ossl_dh_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DSA *,int) | | DSA_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DSA *,int) | | DSA_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const DSA *,int) | | ossl_dsa_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const RSA *,int) | | RSA_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const RSA *,int) | | RSA_test_flags | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const RSA *,int) | | ossl_rsa_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const SSL *,int) | | SSL_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const UI *,int) | | UI_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509 *,int) | | X509_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509 *,int) | | X509_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const XCHAR *,int) | CStringT | CStringT | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const YCHAR *,int) | CStringT | CStringT | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | DH_meth_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | DSA_meth_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | Jim_StrDupLen | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | RSA_meth_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | ftok | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | gethostbyname2 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | parse_yesno | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const char *,int) | | res_gethostbyname2 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (const void *,int) | | inet6_rth_getaddr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (double,int) | | __ldexp | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (double,int) | | __scalbn | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (double[],int) | | getloadavg | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (fexcept_t *,int) | | fegetexceptflag | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (float,int) | | __ldexpf | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (float,int) | | __scalbnf | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (gzFile,int) | | gzflush | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (gzFile,int) | | gzputc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int *,int) | | X509_PURPOSE_set | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int *,int) | | X509_TRUST_set | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int *,int) | | __lll_unlock_elision | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | BN_security_bits | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | EVP_MD_meth_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | EVP_PKEY_meth_new | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | __isctype | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | acttab_alloc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | div | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (int,int) | | inet6_rth_space | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (long double,int) | | __ldexpl | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (netlink_handle *,int) | | __netlink_request | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (ns_msg,int) | | ns_msg_getflag | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (obstack *,int) | | _obstack_newchunk | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (rule *,int) | | Configlist_add | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (rule *,int) | | Configlist_addbasis | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sigset_t *,int) | | sigaddset | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sigset_t *,int) | | sigdelset | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (timespec *,int) | | __timespec_get | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (timespec *,int) | | __timespec_getres | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (uint16_t,int) | | tls1_group_id2nid | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (unsigned char *,int) | | RAND_bytes | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (void *,int) | | DSO_dsobyaddr | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (void *,int) | | sqlite3_realloc | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (void *const *,int) | | __backtrace_symbols | 1 | -| standalone_iterators.cpp:103:27:103:36 | operator+= | (wchar_t,int) | CStringT | CStringT | 1 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errname | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errname | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errname | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errname | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __get_errname | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_class | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_class | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_class | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_class | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_class | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_type | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_type | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_type | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_type | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __p_type | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | _toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | btowc | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | c_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalnum | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalnum | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalnum | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalnum | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalnum | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalpha | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalpha | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalpha | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalpha | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isalpha | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isblank | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isblank | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isblank | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isblank | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isblank | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | iscntrl | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | iscntrl | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | iscntrl | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | iscntrl | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | iscntrl | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isgraph | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isgraph | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isgraph | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isgraph | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isgraph | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | islower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | islower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | islower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | islower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | islower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isprint | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isprint | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isprint | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isprint | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isprint | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ispunct | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ispunct | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ispunct | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ispunct | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ispunct | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isspace | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isspace | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isspace | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isspace | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isspace | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isxdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isxdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isxdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isxdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | isxdigit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toascii | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toascii | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toascii | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toascii | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toascii | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | tolower | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | toupper | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uabs | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uabs | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uabs | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uabs | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uabs | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv__accept | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv__accept | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv__accept | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv__accept | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv__accept | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | zError | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | zError | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | zError | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | zError | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | | zError | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:52:12:52:21 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ASN1_tag2bit | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ASN1_tag2str | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | Jim_ReturnCode | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | Jim_SignalId | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | OBJ_nid2ln | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | OBJ_nid2obj | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | OBJ_nid2sn | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | PKCS12_init | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | Symbol_Nth | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | X509_TRUST_get0 | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __btowc | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __current_locale_name | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __fdopendir | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __get_errlist | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __get_errname | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __math_invalid_i | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __math_invalidf_i | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __p_class | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __p_rcode | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __p_type | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __pkey_get | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __sigdescr_np | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | __strerrordesc_np | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | _tolower | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | _toupper | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | btowc | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | c_tolower | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | c_toupper | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | curlx_sitouz | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | evp_pkey_type2name | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | inet6_option_space | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isalnum | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isalpha | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isblank | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | iscntrl | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isdigit | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isgraph | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | islower | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isprint | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ispunct | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isspace | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isupper | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | isxdigit | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ossl_tolower | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | ossl_toupper | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | sigabbrev_np | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | sqlite3_errstr | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | strerrorname_np | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | support_report_failure | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | svcudp_create | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | tls13_alert_code | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | toascii | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | tolower | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | toupper | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uabs | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uv__accept | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uv_err_name | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uv_get_osfhandle | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uv_strerror | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | uv_translate_sys_error | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | | zError | 0 | -| stl.h:54:12:54:21 | operator-- | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ASN1_tag2bit | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ASN1_tag2str | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | Jim_ReturnCode | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | Jim_SignalId | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | OBJ_nid2ln | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | OBJ_nid2obj | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | OBJ_nid2sn | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | PKCS12_init | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | Symbol_Nth | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __btowc | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __current_locale_name | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __fdopendir | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __get_errlist | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __get_errname | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __math_invalid_i | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __math_invalidf_i | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __p_class | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __p_rcode | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __p_type | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __pkey_get | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __sigdescr_np | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | __strerrordesc_np | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | _tolower | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | _toupper | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | btowc | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | c_tolower | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | c_toupper | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | curlx_sitouz | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | evp_pkey_type2name | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | inet6_option_space | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isalnum | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isalpha | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isblank | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | iscntrl | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isdigit | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isgraph | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | islower | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isprint | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ispunct | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isspace | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isupper | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | isxdigit | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ossl_tolower | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | ossl_toupper | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | sigabbrev_np | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | sqlite3_errstr | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | strerrorname_np | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | support_report_failure | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | svcudp_create | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | tls13_alert_code | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | toascii | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | tolower | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | toupper | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uabs | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uv__accept | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uv_err_name | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uv_get_osfhandle | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uv_strerror | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | uv_translate_sys_error | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | | zError | 0 | -| stl.h:59:12:59:20 | operator+ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ASN1_tag2bit | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ASN1_tag2str | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | Jim_ReturnCode | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | Jim_SignalId | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | OBJ_nid2ln | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | OBJ_nid2obj | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | OBJ_nid2sn | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | PKCS12_init | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | Symbol_Nth | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | X509_TRUST_get0 | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __btowc | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __current_locale_name | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __fdopendir | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __get_errlist | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __get_errname | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __math_invalid_i | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __math_invalidf_i | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __p_class | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __p_rcode | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __p_type | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __pkey_get | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __sigdescr_np | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | __strerrordesc_np | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | _tolower | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | _toupper | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | btowc | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | c_tolower | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | c_toupper | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | curlx_sitouz | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | evp_pkey_type2name | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | inet6_option_space | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isalnum | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isalpha | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isblank | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | iscntrl | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isdigit | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isgraph | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | islower | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isprint | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ispunct | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isspace | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isupper | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | isxdigit | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ossl_tolower | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | ossl_toupper | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | sigabbrev_np | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | sqlite3_errstr | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | strerrorname_np | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | support_report_failure | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | svcudp_create | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | tls13_alert_code | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | toascii | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | tolower | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | toupper | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uabs | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uv__accept | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uv_err_name | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uv_get_osfhandle | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uv_strerror | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | uv_translate_sys_error | 0 | -| stl.h:60:12:60:20 | operator- | (int) | | zError | 0 | -| stl.h:60:12:60:20 | operator- | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_tag2bit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_tag2bit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_tag2str | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ASN1_tag2str | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Jim_ReturnCode | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Jim_ReturnCode | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Jim_SignalId | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Jim_SignalId | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2ln | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2ln | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2obj | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2obj | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2sn | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OBJ_nid2sn | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | PKCS12_init | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | PKCS12_init | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Symbol_Nth | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | Symbol_Nth | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_TRUST_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_TRUST_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __btowc | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __btowc | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __current_locale_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __current_locale_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __fdopendir | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __fdopendir | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __get_errlist | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __get_errlist | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __get_errname | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __get_errname | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __math_invalid_i | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __math_invalid_i | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __math_invalidf_i | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __math_invalidf_i | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_class | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_class | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_rcode | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_rcode | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_type | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __p_type | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __pkey_get | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __pkey_get | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __sigdescr_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __sigdescr_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __strerrordesc_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | __strerrordesc_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | _tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | _tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | _toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | _toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | btowc | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | btowc | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | c_tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | c_tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | c_toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | c_toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | curlx_sitouz | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | curlx_sitouz | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | evp_pkey_type2name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | evp_pkey_type2name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | inet6_option_space | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | inet6_option_space | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isalnum | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isalnum | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isalpha | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isalpha | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isblank | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isblank | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | iscntrl | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | iscntrl | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isdigit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isdigit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isgraph | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isgraph | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | islower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | islower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isprint | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isprint | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ispunct | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ispunct | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isspace | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isspace | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isxdigit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | isxdigit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | ossl_toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sigabbrev_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sigabbrev_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sqlite3_errstr | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | sqlite3_errstr | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | strerrorname_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | strerrorname_np | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | support_report_failure | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | support_report_failure | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | svcudp_create | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | svcudp_create | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | tls13_alert_code | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | tls13_alert_code | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | toascii | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | toascii | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | tolower | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | toupper | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uabs | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uabs | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv__accept | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv__accept | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_err_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_err_name | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_get_osfhandle | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_get_osfhandle | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_strerror | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_strerror | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_translate_sys_error | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | uv_translate_sys_error | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | zError | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | | zError | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:61:13:61:22 | operator+= | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ASN1_tag2bit | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ASN1_tag2str | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | Jim_ReturnCode | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | Jim_SignalId | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | OBJ_nid2ln | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | OBJ_nid2obj | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | OBJ_nid2sn | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | PKCS12_init | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | Symbol_Nth | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | X509_TRUST_get0 | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __btowc | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __current_locale_name | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __fdopendir | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __get_errlist | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __get_errname | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __math_invalid_i | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __math_invalidf_i | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __p_class | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __p_rcode | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __p_type | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __pkey_get | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __sigdescr_np | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | __strerrordesc_np | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | _tolower | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | _toupper | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | btowc | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | c_tolower | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | c_toupper | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | curlx_sitouz | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | evp_pkey_type2name | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | inet6_option_space | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isalnum | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isalpha | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isblank | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | iscntrl | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isdigit | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isgraph | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | islower | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isprint | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ispunct | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isspace | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isupper | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | isxdigit | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ossl_tolower | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | ossl_toupper | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | sigabbrev_np | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | sqlite3_errstr | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | strerrorname_np | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | support_report_failure | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | svcudp_create | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | tls13_alert_code | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | toascii | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | tolower | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | toupper | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uabs | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uv__accept | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uv_err_name | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uv_get_osfhandle | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uv_strerror | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | uv_translate_sys_error | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | | zError | 0 | -| stl.h:62:13:62:22 | operator-= | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ASN1_tag2bit | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ASN1_tag2str | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | Jim_ReturnCode | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | Jim_SignalId | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | OBJ_nid2ln | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | OBJ_nid2obj | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | OBJ_nid2sn | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | PKCS12_init | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | Symbol_Nth | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | X509_TRUST_get0 | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __btowc | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __current_locale_name | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __fdopendir | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __get_errlist | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __get_errname | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __math_invalid_i | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __math_invalidf_i | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __p_class | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __p_rcode | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __p_type | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __pkey_get | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __sigdescr_np | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | __strerrordesc_np | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | _tolower | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | _toupper | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | btowc | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | c_tolower | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | c_toupper | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | curlx_sitouz | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | evp_pkey_type2name | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | inet6_option_space | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isalnum | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isalpha | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isblank | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | iscntrl | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isdigit | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isgraph | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | islower | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isprint | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ispunct | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isspace | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isupper | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | isxdigit | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ossl_tolower | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | ossl_toupper | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | sigabbrev_np | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | sqlite3_errstr | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | strerrorname_np | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | support_report_failure | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | svcudp_create | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | tls13_alert_code | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | toascii | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | tolower | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | toupper | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uabs | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uv__accept | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uv_err_name | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uv_get_osfhandle | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uv_strerror | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | uv_translate_sys_error | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | | zError | 0 | -| stl.h:64:18:64:27 | operator[] | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_tag2bit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ASN1_tag2str | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Jim_ReturnCode | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Jim_SignalId | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2ln | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2obj | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OBJ_nid2sn | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | PKCS12_init | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | Symbol_Nth | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_TRUST_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __btowc | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __btowc | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __current_locale_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __fdopendir | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __get_errlist | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __get_errname | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __get_errname | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __math_invalid_i | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __math_invalidf_i | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_class | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_class | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_rcode | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_type | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __p_type | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __pkey_get | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __sigdescr_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | __strerrordesc_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | _tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | _tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | _toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | _toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | btowc | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | btowc | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | c_tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | c_tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | c_toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | c_toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | curlx_sitouz | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | evp_pkey_type2name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | inet6_option_space | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isalnum | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isalnum | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isalpha | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isalpha | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isblank | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isblank | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | iscntrl | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | iscntrl | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isdigit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isdigit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isgraph | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isgraph | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | islower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | islower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isprint | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isprint | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ispunct | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ispunct | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isspace | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isspace | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isxdigit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | isxdigit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | ossl_toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sigabbrev_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | sqlite3_errstr | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | strerrorname_np | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | support_report_failure | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | svcudp_create | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | tls13_alert_code | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | toascii | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | toascii | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | tolower | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | toupper | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uabs | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uabs | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv__accept | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv__accept | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_err_name | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_get_osfhandle | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_strerror | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | uv_translate_sys_error | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | zError | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | | zError | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:91:24:91:33 | operator++ | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | list | assign | 0 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | list | assign | 1 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:182:17:182:22 | assign | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | list | assign | 0 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | list | assign | 1 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:185:17:185:22 | insert | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | deque | insert | 0 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | deque | insert | 1 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | deque | insert | 2 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 0 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 1 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 2 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | list | insert | 0 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | list | insert | 1 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | list | insert | 2 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | vector | insert | 0 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | vector | insert | 1 | -| stl.h:190:17:190:23 | replace | (const_iterator,InputIt,InputIt) | vector | insert | 2 | -| stl.h:218:33:218:35 | get | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| stl.h:218:33:218:35 | get | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| stl.h:218:33:218:35 | get | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| stl.h:218:33:218:35 | get | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| stl.h:218:33:218:35 | get | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| stl.h:218:33:218:35 | get | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| stl.h:218:33:218:35 | get | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| stl.h:218:33:218:35 | get | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| stl.h:218:33:218:35 | get | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| stl.h:218:33:218:35 | get | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| stl.h:218:33:218:35 | get | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| stl.h:218:33:218:35 | get | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| stl.h:218:33:218:35 | get | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| stl.h:218:33:218:35 | get | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| stl.h:218:33:218:35 | get | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| stl.h:218:33:218:35 | get | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| stl.h:218:33:218:35 | get | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| stl.h:218:33:218:35 | get | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| stl.h:218:33:218:35 | get | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| stl.h:218:33:218:35 | get | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| stl.h:218:33:218:35 | get | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| stl.h:218:33:218:35 | get | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| stl.h:218:33:218:35 | get | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| stl.h:218:33:218:35 | get | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| stl.h:218:33:218:35 | get | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| stl.h:218:33:218:35 | get | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| stl.h:218:33:218:35 | get | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| stl.h:218:33:218:35 | get | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| stl.h:218:33:218:35 | get | (hash_table *,unsigned long) | | init_hash | 1 | -| stl.h:218:33:218:35 | get | (u_long,unsigned long) | | __p_option | 1 | -| stl.h:220:33:220:36 | read | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| stl.h:220:33:220:36 | read | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| stl.h:220:33:220:36 | read | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| stl.h:220:33:220:36 | read | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| stl.h:220:33:220:36 | read | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| stl.h:220:33:220:36 | read | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| stl.h:220:33:220:36 | read | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| stl.h:220:33:220:36 | read | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| stl.h:220:33:220:36 | read | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| stl.h:220:33:220:36 | read | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| stl.h:220:33:220:36 | read | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| stl.h:220:33:220:36 | read | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| stl.h:220:33:220:36 | read | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| stl.h:220:33:220:36 | read | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| stl.h:220:33:220:36 | read | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| stl.h:220:33:220:36 | read | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| stl.h:220:33:220:36 | read | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| stl.h:220:33:220:36 | read | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| stl.h:220:33:220:36 | read | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| stl.h:220:33:220:36 | read | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| stl.h:220:33:220:36 | read | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| stl.h:220:33:220:36 | read | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| stl.h:220:33:220:36 | read | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| stl.h:220:33:220:36 | read | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| stl.h:220:33:220:36 | read | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| stl.h:220:33:220:36 | read | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| stl.h:220:33:220:36 | read | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| stl.h:220:33:220:36 | read | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| stl.h:220:33:220:36 | read | (hash_table *,unsigned long) | | init_hash | 1 | -| stl.h:220:33:220:36 | read | (u_long,unsigned long) | | __p_option | 1 | -| stl.h:221:14:221:21 | readsome | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| stl.h:221:14:221:21 | readsome | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| stl.h:221:14:221:21 | readsome | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| stl.h:221:14:221:21 | readsome | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| stl.h:221:14:221:21 | readsome | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| stl.h:221:14:221:21 | readsome | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| stl.h:221:14:221:21 | readsome | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| stl.h:221:14:221:21 | readsome | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| stl.h:221:14:221:21 | readsome | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| stl.h:221:14:221:21 | readsome | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| stl.h:221:14:221:21 | readsome | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| stl.h:221:14:221:21 | readsome | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| stl.h:221:14:221:21 | readsome | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| stl.h:221:14:221:21 | readsome | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| stl.h:221:14:221:21 | readsome | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| stl.h:221:14:221:21 | readsome | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| stl.h:221:14:221:21 | readsome | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| stl.h:221:14:221:21 | readsome | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| stl.h:221:14:221:21 | readsome | (hash_table *,unsigned long) | | init_hash | 1 | -| stl.h:221:14:221:21 | readsome | (u_long,unsigned long) | | __p_option | 1 | -| stl.h:225:32:225:38 | getline | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| stl.h:225:32:225:38 | getline | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| stl.h:225:32:225:38 | getline | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| stl.h:225:32:225:38 | getline | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| stl.h:225:32:225:38 | getline | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| stl.h:225:32:225:38 | getline | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| stl.h:225:32:225:38 | getline | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| stl.h:225:32:225:38 | getline | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| stl.h:225:32:225:38 | getline | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| stl.h:225:32:225:38 | getline | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| stl.h:225:32:225:38 | getline | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| stl.h:225:32:225:38 | getline | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| stl.h:225:32:225:38 | getline | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| stl.h:225:32:225:38 | getline | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| stl.h:225:32:225:38 | getline | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| stl.h:225:32:225:38 | getline | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| stl.h:225:32:225:38 | getline | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| stl.h:225:32:225:38 | getline | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| stl.h:225:32:225:38 | getline | (hash_table *,unsigned long) | | init_hash | 1 | -| stl.h:225:32:225:38 | getline | (u_long,unsigned long) | | __p_option | 1 | -| stl.h:232:84:232:90 | getline | (const_iterator,InputIt,InputIt) | deque | insert | 2 | -| stl.h:232:84:232:90 | getline | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 2 | -| stl.h:232:84:232:90 | getline | (const_iterator,InputIt,InputIt) | list | insert | 2 | -| stl.h:232:84:232:90 | getline | (const_iterator,InputIt,InputIt) | vector | insert | 2 | -| stl.h:240:33:240:42 | operator<< | (int) | | ASN1_STRING_type_new | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ASN1_tag2bit | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ASN1_tag2str | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | Jim_ReturnCode | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | Jim_SignalId | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | OBJ_nid2ln | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | OBJ_nid2obj | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | OBJ_nid2sn | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | OSSL_trace_get_category_name | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | PKCS12_init | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | Symbol_Nth | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | X509_PURPOSE_get0 | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | X509_PURPOSE_get_by_id | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | X509_TRUST_get0 | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | X509_TRUST_get_by_id | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __btowc | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __current_locale_name | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __fdopendir | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __get_errlist | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __get_errname | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __math_invalid_i | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __math_invalidf_i | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __p_class | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __p_rcode | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __p_type | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __pkey_get | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __sigdescr_np | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | __strerrordesc_np | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | _tolower | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | _toupper | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | btowc | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | c_tolower | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | c_toupper | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | curlx_sitouz | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | evp_pkey_type2name | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | inet6_option_space | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isalnum | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isalpha | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isblank | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | iscntrl | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isdigit | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isgraph | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | islower | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isprint | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ispunct | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isspace | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isupper | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | isxdigit | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ossl_tolower | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | ossl_toupper | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | sigabbrev_np | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | sqlite3_compileoption_get | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | sqlite3_errstr | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | strerrorname_np | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | support_report_failure | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | svcudp_create | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | tls13_alert_code | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | toascii | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | tolower | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | toupper | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uabs | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uv__accept | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uv_err_name | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uv_get_osfhandle | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uv_strerror | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | uv_translate_sys_error | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | | zError | 0 | -| stl.h:240:33:240:42 | operator<< | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stl.h:243:33:243:37 | write | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| stl.h:243:33:243:37 | write | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| stl.h:243:33:243:37 | write | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| stl.h:243:33:243:37 | write | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| stl.h:243:33:243:37 | write | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| stl.h:243:33:243:37 | write | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| stl.h:243:33:243:37 | write | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| stl.h:243:33:243:37 | write | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| stl.h:243:33:243:37 | write | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| stl.h:243:33:243:37 | write | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| stl.h:243:33:243:37 | write | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| stl.h:243:33:243:37 | write | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| stl.h:243:33:243:37 | write | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| stl.h:243:33:243:37 | write | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| stl.h:243:33:243:37 | write | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| stl.h:243:33:243:37 | write | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| stl.h:243:33:243:37 | write | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| stl.h:243:33:243:37 | write | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| stl.h:243:33:243:37 | write | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| stl.h:243:33:243:37 | write | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| stl.h:243:33:243:37 | write | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| stl.h:243:33:243:37 | write | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| stl.h:243:33:243:37 | write | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| stl.h:243:33:243:37 | write | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| stl.h:243:33:243:37 | write | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| stl.h:243:33:243:37 | write | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| stl.h:243:33:243:37 | write | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| stl.h:243:33:243:37 | write | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| stl.h:243:33:243:37 | write | (hash_table *,unsigned long) | | init_hash | 1 | -| stl.h:243:33:243:37 | write | (u_long,unsigned long) | | __p_option | 1 | -| stl.h:294:12:294:17 | vector | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (const list &,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (const list &,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (const list &,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:294:12:294:17 | vector | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:294:12:294:17 | vector | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:294:12:294:17 | vector | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:294:12:294:17 | vector | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:294:12:294:17 | vector | (list &&,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (list &&,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (list &&,const Allocator &) | list | list | 1 | -| stl.h:294:12:294:17 | vector | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:294:12:294:17 | vector | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:294:12:294:17 | vector | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | deque | deque | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | deque | deque | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | list | list | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | list | list | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | -| stl.h:295:3:295:8 | vector | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | deque | deque | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | list | list | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 0 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 1 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 2 | -| stl.h:295:3:295:8 | vector | (size_type,const T &,const Allocator &) | vector | vector | 2 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | deque | deque | 0 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | deque | deque | 1 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | deque | deque | 2 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | list | list | 0 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | list | list | 1 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | list | list | 2 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | vector | vector | 0 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | vector | vector | 1 | -| stl.h:296:101:296:106 | vector | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | -| stl.h:296:101:296:106 | vector | (size_type,const T &,const Allocator &) | deque | deque | 2 | -| stl.h:296:101:296:106 | vector | (size_type,const T &,const Allocator &) | forward_list | forward_list | 2 | -| stl.h:296:101:296:106 | vector | (size_type,const T &,const Allocator &) | list | list | 2 | -| stl.h:296:101:296:106 | vector | (size_type,const T &,const Allocator &) | vector | vector | 2 | -| stl.h:301:11:301:19 | operator= | (const vector &) | vector | vector | 0 | -| stl.h:302:11:302:19 | operator= | (vector &&) | vector | vector | 0 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | list | assign | 0 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | list | assign | 1 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:303:106:303:111 | assign | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | deque | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | deque | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | deque | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | forward_list | insert_after | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | forward_list | insert_after | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | forward_list | insert_after | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | list | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | list | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | list | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | vector | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | vector | insert | 1 | -| stl.h:306:8:306:13 | assign | (const_iterator,const T &) | vector | insert | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | deque | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | forward_list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | list | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 0 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 1 | -| stl.h:306:8:306:13 | assign | (size_type,const T &) | vector | assign | 1 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __sleep | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | curlx_uitous | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | la_version | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:315:13:315:22 | operator[] | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | Jim_IntHashFunction | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | __sleep | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | __x86_get_cpuid_feature_leaf | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | curlx_uitous | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | la_version | 0 | -| stl.h:318:13:318:14 | at | (unsigned int) | | ssl3_get_cipher | 0 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | deque | insert | 0 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | deque | insert | 1 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 0 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 1 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | list | insert | 0 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | list | insert | 1 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | vector | insert | 0 | -| stl.h:331:12:331:17 | insert | (const_iterator,T &&) | vector | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | deque | insert | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | forward_list | insert_after | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | list | insert | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 0 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 1 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 2 | -| stl.h:333:42:333:47 | insert | (const_iterator,InputIt,InputIt) | vector | insert | 2 | -| stl.h:335:37:335:43 | emplace | (format_string,Args &&) | | format | 1 | -| stl.h:396:3:396:3 | pair | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (const deque &,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (const forward_list &,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (const list &,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (const list &,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (const list &,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (const list &,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (const list &,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (const vector &,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (deque &&,const Allocator &) | deque | deque | 1 | -| stl.h:396:3:396:3 | pair | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (forward_list &&,const Allocator &) | forward_list | forward_list | 1 | -| stl.h:396:3:396:3 | pair | (list &&,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (list &&,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (list &&,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (list &&,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (list &&,const Allocator &) | list | list | 1 | -| stl.h:396:3:396:3 | pair | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:396:3:396:3 | pair | (vector &&,const Allocator &) | vector | vector | 1 | -| stl.h:440:36:440:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:440:36:440:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:448:48:448:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:448:48:448:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:452:42:452:57 | insert_or_assign | (format_string,Args &&) | | format | 1 | -| stl.h:508:36:508:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:508:36:508:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:516:48:516:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:516:48:516:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:516:48:516:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:516:48:516:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:516:48:516:58 | try_emplace | (format_string,Args &&) | | format | 1 | -| stl.h:520:42:520:57 | insert_or_assign | (format_string,Args &&) | | format | 1 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | list | assign | 0 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | list | assign | 1 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:557:33:557:35 | set | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:569:36:569:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:569:36:569:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | deque | insert | 0 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | deque | insert | 1 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 0 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 1 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | list | insert | 0 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | list | insert | 1 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | vector | insert | 0 | -| stl.h:573:12:573:17 | insert | (const_iterator,T &&) | vector | insert | 1 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | list | assign | 0 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | list | assign | 1 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:574:38:574:43 | insert | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:611:33:611:45 | unordered_set | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| stl.h:611:33:611:45 | unordered_set | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| stl.h:611:33:611:45 | unordered_set | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| stl.h:611:33:611:45 | unordered_set | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| stl.h:611:33:611:45 | unordered_set | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| stl.h:611:33:611:45 | unordered_set | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| stl.h:611:33:611:45 | unordered_set | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| stl.h:611:33:611:45 | unordered_set | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| stl.h:623:36:623:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:623:36:623:47 | emplace_hint | (format_string,Args &&) | | format | 1 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | deque | insert | 0 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | deque | insert | 1 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 0 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | forward_list | insert_after | 1 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | list | insert | 0 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | list | insert | 1 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | vector | insert | 0 | -| stl.h:627:12:627:17 | insert | (const_iterator,T &&) | vector | insert | 1 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | deque | assign | 0 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | deque | assign | 1 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | forward_list | assign | 0 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | forward_list | assign | 1 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | list | assign | 0 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | list | assign | 1 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | vector | assign | 0 | -| stl.h:628:38:628:43 | insert | (InputIt,InputIt) | vector | assign | 1 | -| stl.h:678:33:678:38 | format | (format_string,Args &&) | | format | 0 | -| stl.h:678:33:678:38 | format | (format_string,Args &&) | | format | 0 | -| stl.h:678:33:678:38 | format | (format_string,Args &&) | | format | 1 | -| stl.h:678:33:678:38 | format | (format_string,Args &&) | | format | 1 | -| stl.h:683:6:683:48 | same_signature_as_format_but_different_name | (format_string,Args &&) | | format | 0 | -| stl.h:683:6:683:48 | same_signature_as_format_but_different_name | (format_string,Args &&) | | format | 1 | -| string.cpp:17:6:17:9 | sink | (const char *) | | BIO_gethostbyname | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Curl_copy_header_value | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Curl_get_scheme_handler | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Curl_getdate_capped | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Jim_StrDup | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | OPENSSL_LH_strhash | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Strsafe | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | Symbol_new | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | UI_create_method | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | X509V3_parse_list | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | X509_LOOKUP_meth_new | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __basename | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __gconv_find_shlib | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __gettext | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __hash_string | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __nss_action_parse | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __strdup | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __textdomain | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __tzset_parse_tz | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | __tzstring | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | a2i_IPADDRESS | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | a2i_IPADDRESS_NC | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | a64l | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | charmap_opendir | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | ether_aton | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | getdate | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | inetstr2int | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | last_component | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | opt_path_end | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | opt_progname | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | ossl_lh_strcasehash | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | repertoire_read | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | res_gethostbyname | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | sgetsgent | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | sgetspent | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | strhash | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | uc_script_byname | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | uv__strdup | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| string.cpp:17:6:17:9 | sink | (const char *) | | xstrdup | 0 | -| string.cpp:19:6:19:9 | sink | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| string.cpp:19:6:19:9 | sink | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| string.cpp:19:6:19:9 | sink | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| string.cpp:19:6:19:9 | sink | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| string.cpp:19:6:19:9 | sink | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| string.cpp:19:6:19:9 | sink | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| string.cpp:19:6:19:9 | sink | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| string.cpp:19:6:19:9 | sink | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| string.cpp:19:6:19:9 | sink | (CONF *,const char *) | | _CONF_new_section | 1 | -| string.cpp:19:6:19:9 | sink | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| string.cpp:19:6:19:9 | sink | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| string.cpp:19:6:19:9 | sink | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| string.cpp:19:6:19:9 | sink | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| string.cpp:19:6:19:9 | sink | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| string.cpp:19:6:19:9 | sink | (DSO *,const char *) | | DSO_convert_filename | 1 | -| string.cpp:19:6:19:9 | sink | (DSO *,const char *) | | DSO_set_filename | 1 | -| string.cpp:19:6:19:9 | sink | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| string.cpp:19:6:19:9 | sink | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| string.cpp:19:6:19:9 | sink | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| string.cpp:19:6:19:9 | sink | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| string.cpp:19:6:19:9 | sink | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| string.cpp:19:6:19:9 | sink | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| string.cpp:19:6:19:9 | sink | (GlobalConfig *,const char *) | | setvariable | 1 | -| string.cpp:19:6:19:9 | sink | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| string.cpp:19:6:19:9 | sink | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| string.cpp:19:6:19:9 | sink | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| string.cpp:19:6:19:9 | sink | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| string.cpp:19:6:19:9 | sink | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| string.cpp:19:6:19:9 | sink | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| string.cpp:19:6:19:9 | sink | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| string.cpp:19:6:19:9 | sink | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| string.cpp:19:6:19:9 | sink | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| string.cpp:19:6:19:9 | sink | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| string.cpp:19:6:19:9 | sink | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| string.cpp:19:6:19:9 | sink | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| string.cpp:19:6:19:9 | sink | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| string.cpp:19:6:19:9 | sink | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| string.cpp:19:6:19:9 | sink | (SSL *,const char *) | | SSL_add1_host | 1 | -| string.cpp:19:6:19:9 | sink | (SSL *,const char *) | | SSL_set1_host | 1 | -| string.cpp:19:6:19:9 | sink | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| string.cpp:19:6:19:9 | sink | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| string.cpp:19:6:19:9 | sink | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| string.cpp:19:6:19:9 | sink | (UI *,const char *) | | UI_add_error_string | 1 | -| string.cpp:19:6:19:9 | sink | (UI *,const char *) | | UI_add_info_string | 1 | -| string.cpp:19:6:19:9 | sink | (UI *,const char *) | | UI_dup_error_string | 1 | -| string.cpp:19:6:19:9 | sink | (UI *,const char *) | | UI_dup_info_string | 1 | -| string.cpp:19:6:19:9 | sink | (X509 *,const char *) | | x509_ctrl_string | 1 | -| string.cpp:19:6:19:9 | sink | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| string.cpp:19:6:19:9 | sink | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| string.cpp:19:6:19:9 | sink | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| string.cpp:19:6:19:9 | sink | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| string.cpp:19:6:19:9 | sink | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| string.cpp:19:6:19:9 | sink | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| string.cpp:19:6:19:9 | sink | (char **,const char *) | | Curl_setstropt | 1 | -| string.cpp:19:6:19:9 | sink | (char **,const char *) | | __strsep | 1 | -| string.cpp:19:6:19:9 | sink | (char *,const char *) | | xstrdup | 1 | -| string.cpp:19:6:19:9 | sink | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| string.cpp:19:6:19:9 | sink | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | Configcmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | Configcmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | Curl_timestrcmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | Curl_timestrcmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | DES_crypt | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | DES_crypt | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | OPENSSL_strcasecmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __bind_textdomain_codeset | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __bindtextdomain | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __bindtextdomain | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __dgettext | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __dgettext | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __gconv_compare_alias | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __gconv_compare_alias | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcasestr | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcasestr | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcspn_generic | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcspn_generic | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcspn_sse42 | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strcspn_sse42 | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strpbrk_generic | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strpbrk_generic | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strpbrk_sse42 | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strspn_generic | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strspn_generic | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strspn_sse42 | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strspn_sse42 | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strstr_generic | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strstr_generic | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strverscmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | __strverscmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | _dl_cache_libcmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | advance | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | advance | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | c_strcasecmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | c_strcasecmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | charmap_aliases | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | charmap_aliases | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | charmap_open | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | charmap_open | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | chroot_canon | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | chroot_canon | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | get_passwd | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | get_passwd | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | gzopen | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | gzopen | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | gzopen64 | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | gzopen64 | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | iconv_open | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | iconv_open | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | openssl_fopen | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | openssl_fopen | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | ossl_pem_check_suffix | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | ossl_v3_name_cmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | sqlite3_strglob | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | sqlite3_strglob | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | sqlite3_stricmp | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | sqlite3_stricmp | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | step | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | step | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | tempnam | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | tempnam | 1 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | xfopen | 0 | -| string.cpp:19:6:19:9 | sink | (const char *,const char *) | | xfopen | 1 | -| string.cpp:19:6:19:9 | sink | (const mntent *,const char *) | | __hasmntopt | 1 | -| string.cpp:19:6:19:9 | sink | (const nis_error,const char *) | | nis_sperror | 1 | -| string.cpp:19:6:19:9 | sink | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| string.cpp:19:6:19:9 | sink | (curl_off_t *,const char *) | | str2offset | 1 | -| string.cpp:19:6:19:9 | sink | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| string.cpp:19:6:19:9 | sink | (curl_slist **,const char *) | | add2list | 1 | -| string.cpp:19:6:19:9 | sink | (curl_slist *,const char *) | | curl_slist_append | 1 | -| string.cpp:19:6:19:9 | sink | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| string.cpp:19:6:19:9 | sink | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| string.cpp:19:6:19:9 | sink | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| string.cpp:19:6:19:9 | sink | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| string.cpp:19:6:19:9 | sink | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| string.cpp:19:6:19:9 | sink | (gzFile,const char *) | | gzputs | 1 | -| string.cpp:19:6:19:9 | sink | (int,const char *) | | BIO_meth_new | 1 | -| string.cpp:19:6:19:9 | sink | (int,const char *) | | _IO_new_fdopen | 1 | -| string.cpp:19:6:19:9 | sink | (int,const char *) | | gzdopen | 1 | -| string.cpp:19:6:19:9 | sink | (int,const char *) | | setlocale | 1 | -| string.cpp:19:6:19:9 | sink | (int,const char *) | | xsetlocale | 1 | -| string.cpp:19:6:19:9 | sink | (lemon *,const char *) | | file_makename | 1 | -| string.cpp:19:6:19:9 | sink | (long *,const char *) | | secs2ms | 1 | -| string.cpp:19:6:19:9 | sink | (long *,const char *) | | str2num | 1 | -| string.cpp:19:6:19:9 | sink | (long *,const char *) | | str2unum | 1 | -| string.cpp:19:6:19:9 | sink | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| string.cpp:19:6:19:9 | sink | (size_t *,const char *) | | next_protos_parse | 1 | -| string.cpp:19:6:19:9 | sink | (slist_wc **,const char *) | | easysrc_add | 1 | -| string.cpp:19:6:19:9 | sink | (slist_wc *,const char *) | | slist_wc_append | 1 | -| string.cpp:19:6:19:9 | sink | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| string.cpp:19:6:19:9 | sink | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| string.cpp:19:6:19:9 | sink | (stringtable *,const char *) | | stringtable_add | 1 | -| string.cpp:19:6:19:9 | sink | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| string.cpp:19:6:19:9 | sink | (unsigned long *,const char *) | | set_cert_ex | 1 | -| string.cpp:19:6:19:9 | sink | (unsigned long *,const char *) | | set_name_ex | 1 | -| string.cpp:19:6:19:9 | sink | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| string.cpp:20:6:20:9 | sink | (char) | | Curl_raw_tolower | 0 | -| string.cpp:20:6:20:9 | sink | (char) | | Curl_raw_toupper | 0 | -| string.cpp:20:6:20:9 | sink | (char) | | findshortopt | 0 | -| string.cpp:20:6:20:9 | sink | (char) | | operator+= | 0 | -| string.cpp:20:6:20:9 | sink | (char) | CComBSTR | Append | 0 | -| string.cpp:20:6:20:9 | sink | (char) | CSimpleStringT | operator+= | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ASN1_tag2bit | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ASN1_tag2str | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | Jim_ReturnCode | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | Jim_SignalId | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2ln | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2obj | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2sn | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | PKCS12_init | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | Symbol_Nth | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __btowc | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __current_locale_name | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __fdopendir | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __get_errlist | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __get_errname | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __math_invalid_i | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __math_invalidf_i | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __p_class | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __p_rcode | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __p_type | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __pkey_get | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __sigdescr_np | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | __strerrordesc_np | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | _tolower | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | _toupper | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | btowc | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | c_tolower | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | c_toupper | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | curlx_sitouz | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | evp_pkey_type2name | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | inet6_option_space | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isalnum | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isalpha | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isblank | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | iscntrl | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isdigit | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isgraph | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | islower | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isprint | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ispunct | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isspace | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isupper | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | isxdigit | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ossl_tolower | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | ossl_toupper | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | sigabbrev_np | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | sqlite3_errstr | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | strerrorname_np | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | support_report_failure | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | svcudp_create | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | tls13_alert_code | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | toascii | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | tolower | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | toupper | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uabs | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uv__accept | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uv_err_name | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uv_get_osfhandle | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uv_strerror | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | uv_translate_sys_error | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | | zError | 0 | -| stringstream.cpp:13:6:13:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ASN1_STRING_type_new | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ASN1_tag2bit | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ASN1_tag2str | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | Jim_ReturnCode | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | Jim_SignalId | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | OBJ_nid2ln | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | OBJ_nid2obj | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | OBJ_nid2sn | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | OSSL_trace_get_category_name | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | PKCS12_init | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | Symbol_Nth | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | X509_PURPOSE_get0 | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | X509_PURPOSE_get_by_id | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | X509_TRUST_get0 | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | X509_TRUST_get_by_id | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __btowc | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __current_locale_name | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __fdopendir | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __get_errlist | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __get_errname | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __math_invalid_i | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __math_invalidf_i | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __p_class | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __p_rcode | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __p_type | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __pkey_get | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __sigdescr_np | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | __strerrordesc_np | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | _tolower | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | _toupper | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | btowc | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | c_tolower | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | c_toupper | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | curlx_sitouz | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | evp_pkey_type2name | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | inet6_option_space | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isalnum | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isalpha | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isblank | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | iscntrl | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isdigit | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isgraph | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | islower | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isprint | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ispunct | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isspace | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isupper | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | isxdigit | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ossl_tolower | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | ossl_toupper | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | sigabbrev_np | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | sqlite3_compileoption_get | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | sqlite3_errstr | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | strerrorname_np | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | support_report_failure | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | svcudp_create | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | tls13_alert_code | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | toascii | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | tolower | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | toupper | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uabs | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uv__accept | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uv_err_name | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uv_get_osfhandle | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uv_strerror | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | uv_translate_sys_error | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | | zError | 0 | -| stringstream.cpp:26:6:26:29 | test_stringstream_string | (int) | __pthread_cleanup_class | __setdoit | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ASN1_STRING_type_new | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ASN1_tag2bit | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ASN1_tag2str | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | EVP_PKEY_asn1_get0 | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | Jim_ReturnCode | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | Jim_SignalId | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | OBJ_nid2ln | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | OBJ_nid2obj | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | OBJ_nid2sn | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | OSSL_STORE_INFO_type_string | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | OSSL_trace_get_category_name | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | PKCS12_init | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | Symbol_Nth | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | X509_PURPOSE_get0 | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | X509_PURPOSE_get_by_id | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | X509_TRUST_get0 | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | X509_TRUST_get_by_id | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __btowc | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __current_locale_name | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __fdopendir | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __get_errlist | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __get_errname | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __math_invalid_i | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __math_invalidf_i | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __p_class | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __p_rcode | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __p_type | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __pkey_get | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __sigdescr_np | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | __strerrordesc_np | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | _tolower | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | _toupper | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | btowc | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | c_tolower | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | c_toupper | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | curlx_sitouz | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | evp_pkey_type2name | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | inet6_option_space | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isalnum | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isalpha | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isblank | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | iscntrl | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isdigit | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isgraph | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | islower | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isprint | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ispunct | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isspace | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isupper | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | isxdigit | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ossl_cmp_bodytype_to_string | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ossl_tolower | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | ossl_toupper | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | sigabbrev_np | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | sqlite3_compileoption_get | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | sqlite3_errstr | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | strerrorname_np | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | support_report_failure | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | svcudp_create | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | tls13_alert_code | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | toascii | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | tolower | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | toupper | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uabs | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uv__accept | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uv_err_name | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uv_get_osfhandle | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uv_strerror | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | uv_translate_sys_error | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | | zError | 0 | -| stringstream.cpp:70:6:70:26 | test_stringstream_int | (int) | __pthread_cleanup_class | __setdoit | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ASN1_STRING_type_new | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ASN1_tag2bit | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ASN1_tag2str | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | EVP_PKEY_asn1_get0 | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | Jim_ReturnCode | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | Jim_SignalId | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | OBJ_nid2ln | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | OBJ_nid2obj | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | OBJ_nid2sn | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | OSSL_STORE_INFO_type_string | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | OSSL_trace_get_category_name | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | PKCS12_init | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | Symbol_Nth | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | X509_PURPOSE_get0 | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | X509_PURPOSE_get_by_id | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | X509_TRUST_get0 | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | X509_TRUST_get_by_id | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __btowc | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __current_locale_name | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __fdopendir | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __get_errlist | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __get_errname | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __math_invalid_i | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __math_invalidf_i | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __p_class | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __p_rcode | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __p_type | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __pkey_get | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __sigdescr_np | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | __strerrordesc_np | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | _tolower | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | _toupper | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | btowc | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | c_tolower | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | c_toupper | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | curlx_sitouz | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | evp_pkey_type2name | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | inet6_option_space | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isalnum | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isalpha | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isblank | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | iscntrl | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isdigit | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isgraph | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | islower | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isprint | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ispunct | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isspace | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isupper | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | isxdigit | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ossl_cmp_bodytype_to_string | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ossl_tolower | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | ossl_toupper | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | sigabbrev_np | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | sqlite3_compileoption_get | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | sqlite3_errstr | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | strerrorname_np | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | support_report_failure | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | svcudp_create | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | tls13_alert_code | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | toascii | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | tolower | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | toupper | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uabs | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uv__accept | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uv_err_name | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uv_get_osfhandle | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uv_strerror | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | uv_translate_sys_error | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | | zError | 0 | -| structlikeclass.cpp:8:2:8:16 | StructLikeClass | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (FTS *,int) | | fts_children | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (char **,int) | | addrsort | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | ftok | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (double,int) | | __ldexp | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (double,int) | | __scalbn | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (double[],int) | | getloadavg | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (float,int) | | __ldexpf | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (float,int) | | __scalbnf | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (gzFile,int) | | gzflush | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (gzFile,int) | | gzputc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | BN_security_bits | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | BN_security_bits | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | EVP_MD_meth_new | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | EVP_PKEY_meth_new | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | __isctype | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | __isctype | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | acttab_alloc | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | acttab_alloc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | div | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | div | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | inet6_rth_space | 0 | -| taint.cpp:4:6:4:21 | arithAssignments | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (long double,int) | | __ldexpl | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:4:6:4:21 | arithAssignments | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:22:5:22:13 | increment | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ASN1_tag2str | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | Jim_SignalId | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | PKCS12_init | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | Symbol_Nth | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __btowc | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __current_locale_name | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __fdopendir | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __get_errlist | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __get_errname | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __math_invalid_i | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __math_invalidf_i | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __p_class | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __p_rcode | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __p_type | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __pkey_get | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __sigdescr_np | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | __strerrordesc_np | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | _tolower | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | _toupper | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | btowc | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | c_tolower | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | c_toupper | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | curlx_sitouz | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | inet6_option_space | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isalnum | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isalpha | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isblank | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | iscntrl | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isdigit | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isgraph | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | islower | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isprint | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ispunct | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isspace | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isupper | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | isxdigit | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ossl_tolower | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | ossl_toupper | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | sigabbrev_np | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | sqlite3_errstr | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | strerrorname_np | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | support_report_failure | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | svcudp_create | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | tls13_alert_code | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | toascii | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | tolower | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | toupper | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uabs | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uv__accept | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uv_err_name | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uv_strerror | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | | zError | 0 | -| taint.cpp:22:5:22:13 | increment | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ASN1_tag2str | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | Jim_SignalId | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | PKCS12_init | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | Symbol_Nth | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __btowc | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __current_locale_name | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __fdopendir | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __get_errlist | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __get_errname | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __math_invalid_i | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __math_invalidf_i | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __p_class | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __p_rcode | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __p_type | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __pkey_get | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __sigdescr_np | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | __strerrordesc_np | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | _tolower | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | _toupper | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | btowc | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | c_tolower | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | c_toupper | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | curlx_sitouz | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | inet6_option_space | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isalnum | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isalpha | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isblank | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | iscntrl | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isdigit | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isgraph | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | islower | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isprint | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ispunct | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isspace | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isupper | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | isxdigit | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ossl_tolower | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | ossl_toupper | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | sigabbrev_np | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | sqlite3_errstr | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | strerrorname_np | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | support_report_failure | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | svcudp_create | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | tls13_alert_code | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | toascii | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | tolower | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | toupper | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uabs | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uv__accept | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uv_err_name | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uv_strerror | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | | zError | 0 | -| taint.cpp:23:5:23:8 | zero | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ASN1_tag2str | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | Jim_SignalId | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | PKCS12_init | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | Symbol_Nth | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __btowc | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __current_locale_name | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __fdopendir | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __get_errlist | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __get_errname | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __math_invalid_i | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __math_invalidf_i | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __p_class | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __p_rcode | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __p_type | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __pkey_get | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __sigdescr_np | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | __strerrordesc_np | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | _tolower | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | _toupper | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | btowc | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | c_tolower | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | c_toupper | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | curlx_sitouz | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | inet6_option_space | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isalnum | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isalpha | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isblank | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | iscntrl | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isdigit | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isgraph | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | islower | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isprint | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ispunct | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isspace | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isupper | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | isxdigit | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ossl_tolower | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | ossl_toupper | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | sigabbrev_np | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | sqlite3_errstr | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | strerrorname_np | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | support_report_failure | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | svcudp_create | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | tls13_alert_code | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | toascii | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | tolower | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | toupper | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uabs | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uv__accept | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uv_err_name | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uv_strerror | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | | zError | 0 | -| taint.cpp:100:6:100:15 | array_test | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:142:5:142:10 | select | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 1 | -| taint.cpp:142:5:142:10 | select | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_BIT_STRING *,unsigned char *,int) | | ASN1_BIT_STRING_set | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_OCTET_STRING **,const unsigned char *,int) | | ossl_cmp_asn1_octet_string_set1_bytes | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_OCTET_STRING *,const unsigned char *,int) | | ASN1_OCTET_STRING_set | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_STRING *,const void *,int) | | ASN1_STRING_set | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_TIME *,tm *,int) | | ossl_asn1_time_from_tm | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_TYPE *,unsigned char *,int) | | ASN1_TYPE_set_octetstring | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_item_embed_free | 2 | -| taint.cpp:142:5:142:10 | select | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_primitive_free | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const BIGNUM *,int) | | BN_lshift | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const BIGNUM *,int) | | BN_rshift | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const BIGNUM *,int) | | BN_with_flags | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const BIGNUM *,int) | | bn_lshift_fixed_top | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const BIGNUM *,int) | | bn_rshift_fixed_top | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const unsigned long *,int) | | bn_set_static_words | 2 | -| taint.cpp:142:5:142:10 | select | (BIGNUM *,const unsigned long *,int) | | bn_set_words | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,BIO *,int) | | OSSL_HTTP_REQ_CTX_new | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,BIO *,int) | | SMIME_crlf_copy | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,GENERAL_NAMES *,int) | | OSSL_GENERAL_NAMES_print | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,char *,int) | | BIO_get_line | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,const DSA *,int) | | DSA_print | 2 | -| taint.cpp:142:5:142:10 | select | (BIO *,const RSA *,int) | | RSA_print | 2 | -| taint.cpp:142:5:142:10 | select | (CERT *,X509_STORE **,int) | | ssl_cert_get_cert_store | 2 | -| taint.cpp:142:5:142:10 | select | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 2 | -| taint.cpp:142:5:142:10 | select | (Curl_easy *,connectdata *,int) | | Curl_conn_cf_discard_all | 2 | -| taint.cpp:142:5:142:10 | select | (Curl_easy *,connectdata *,int) | | Curl_http2_may_switch | 2 | -| taint.cpp:142:5:142:10 | select | (Curl_easy *,connectdata *,int) | | Curl_http2_switch | 2 | -| taint.cpp:142:5:142:10 | select | (Curl_easy *,connectdata *,int) | | Curl_ssl_cfilter_add | 2 | -| taint.cpp:142:5:142:10 | select | (Curl_sockaddr_ex *,const Curl_addrinfo *,int) | | Curl_sock_assign_addr | 2 | -| taint.cpp:142:5:142:10 | select | (DH *,const OSSL_PARAM[],int) | | ossl_dh_key_fromdata | 2 | -| taint.cpp:142:5:142:10 | select | (DSA *,const OSSL_PARAM[],int) | | ossl_dsa_key_fromdata | 2 | -| taint.cpp:142:5:142:10 | select | (ECX_KEY *,const OSSL_PARAM[],int) | | ossl_ecx_key_fromdata | 2 | -| taint.cpp:142:5:142:10 | select | (EC_KEY *,const OSSL_PARAM[],int) | | ossl_ec_key_fromdata | 2 | -| taint.cpp:142:5:142:10 | select | (ENGINE *,ENGINE_DYNAMIC_ID,int) | | engine_add_dynamic_id | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_export_to_provider | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_find_operation_cache | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY *,EVP_PKEY *,int) | | evp_keymgmt_util_copy | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,EVP_PKEY *,int) | | EVP_PKEY_derive_set_peer_ex | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_hkdf_info | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_tls1_prf_seed | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_key | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_salt | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_scrypt_salt | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_tls1_prf_secret | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set_mac_key | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,const void *,int) | | EVP_PKEY_CTX_set1_id | 2 | -| taint.cpp:142:5:142:10 | select | (EVP_PKEY_CTX *,int *,int) | | EVP_PKEY_CTX_set0_keygen_info | 2 | -| taint.cpp:142:5:142:10 | select | (FFC_PARAMS *,unsigned int,int) | | ossl_ffc_params_enable_flags | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,_IO_marker *,int) | | _IO_seekmark | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,_IO_marker *,int) | | _IO_seekwmark | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,__FILE *,int) | | fwide | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,const DSA *,int) | | DSA_print_fp | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,const RSA *,int) | | RSA_print_fp | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,off64_t,int) | | _IO_cookie_seek | 2 | -| taint.cpp:142:5:142:10 | select | (FILE *,rule *,int) | | RulePrint | 2 | -| taint.cpp:142:5:142:10 | select | (FTS *,FTSENT *,int) | | fts_set | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetCommand | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetGlobalVariable | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetVariable | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *,int) | | Jim_ListGetIndex | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *,int) | | Jim_UnsetVariable | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewDictObj | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewListObj | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,char *,int) | | Jim_NewStringObjNoAlloc | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 2 | -| taint.cpp:142:5:142:10 | select | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 2 | -| taint.cpp:142:5:142:10 | select | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 1 | -| taint.cpp:142:5:142:10 | select | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 2 | -| taint.cpp:142:5:142:10 | select | (LIBSSH2_SFTP_HANDLE *,LIBSSH2_SFTP_ATTRIBUTES *,int) | | libssh2_sftp_fstat_ex | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,OCSP_CERTID *,int) | | OCSP_resp_find | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,X509_EXTENSION *,int) | | OCSP_BASICRESP_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,const ASN1_OBJECT *,int) | | OCSP_BASICRESP_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,X509_EXTENSION *,int) | | OCSP_ONEREQ_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,const ASN1_OBJECT *,int) | | OCSP_ONEREQ_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,X509_EXTENSION *,int) | | OCSP_REQUEST_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,const ASN1_OBJECT *,int) | | OCSP_REQUEST_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,X509_EXTENSION *,int) | | OCSP_SINGLERESP_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,const ASN1_OBJECT *,int) | | OCSP_SINGLERESP_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (OPENSSL_STACK *,const void *,int) | | OPENSSL_sk_insert | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_referenceValue | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_secretValue | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 1 | -| taint.cpp:142:5:142:10 | select | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_PROVIDER *,OSSL_PROVIDER **,int) | | ossl_provider_add_to_store | 2 | -| taint.cpp:142:5:142:10 | select | (OSSL_QRL_ENC_LEVEL_SET *,uint32_t,int) | | ossl_qrl_enc_level_set_get | 2 | -| taint.cpp:142:5:142:10 | select | (PKCS7 *,stack_st_X509 *,int) | | PKCS7_get0_signers | 2 | -| taint.cpp:142:5:142:10 | select | (POLICYINFO *,const ASN1_OBJECT *,int) | | ossl_policy_data_new | 2 | -| taint.cpp:142:5:142:10 | select | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 2 | -| taint.cpp:142:5:142:10 | select | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 2 | -| taint.cpp:142:5:142:10 | select | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 2 | -| taint.cpp:142:5:142:10 | select | (QLOG *,uint32_t,int) | | ossl_qlog_set_event_type_enabled | 2 | -| taint.cpp:142:5:142:10 | select | (QUIC_RXFC *,uint64_t,int) | | ossl_quic_rxfc_on_rx_stream_frame | 2 | -| taint.cpp:142:5:142:10 | select | (QUIC_STREAM_ITER *,QUIC_STREAM_MAP *,int) | | ossl_quic_stream_iter_init | 2 | -| taint.cpp:142:5:142:10 | select | (QUIC_STREAM_MAP *,uint64_t,int) | | ossl_quic_stream_map_alloc | 2 | -| taint.cpp:142:5:142:10 | select | (RSA *,const OSSL_PARAM[],int) | | ossl_rsa_fromdata | 2 | -| taint.cpp:142:5:142:10 | select | (SSL *,const unsigned char *,int) | | SSL_use_certificate_ASN1 | 2 | -| taint.cpp:142:5:142:10 | select | (SSL *,const void *,int) | | SSL_write | 2 | -| taint.cpp:142:5:142:10 | select | (SSL *,void *,int) | | SSL_peek | 2 | -| taint.cpp:142:5:142:10 | select | (SSL *,void *,int) | | SSL_read | 2 | -| taint.cpp:142:5:142:10 | select | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CIPHER *,const SSL_CIPHER *,int) | | OBJ_bsearch_ssl_cipher_id | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,PACKET *,int) | | ssl_cache_cipherlist | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_close_construct_packet | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_set_handshake_header | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,WPACKET *,int) | | tls_close_construct_packet | 2 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 1 | -| taint.cpp:142:5:142:10 | select | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 2 | -| taint.cpp:142:5:142:10 | select | (TS_MSG_IMPRINT *,unsigned char *,int) | | TS_MSG_IMPRINT_set_msg | 2 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,X509_EXTENSION *,int) | | TS_REQ_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,const ASN1_OBJECT *,int) | | TS_REQ_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,X509_EXTENSION *,int) | | TS_TST_INFO_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,const ASN1_OBJECT *,int) | | TS_TST_INFO_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (X509 *,X509_EXTENSION *,int) | | X509_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (X509 *,int,int) | | X509_check_purpose | 1 | -| taint.cpp:142:5:142:10 | select | (X509 *,int,int) | | X509_check_purpose | 2 | -| taint.cpp:142:5:142:10 | select | (X509 *,int,int) | | X509_check_trust | 1 | -| taint.cpp:142:5:142:10 | select | (X509 *,int,int) | | X509_check_trust | 2 | -| taint.cpp:142:5:142:10 | select | (X509_CRL *,X509_EXTENSION *,int) | | X509_CRL_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (X509_PUBKEY *,unsigned char *,int) | | X509_PUBKEY_set0_public_key | 2 | -| taint.cpp:142:5:142:10 | select | (X509_REVOKED *,X509_EXTENSION *,int) | | X509_REVOKED_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (X509_STORE_CTX *,X509 *,int) | | ossl_x509_check_cert_time | 2 | -| taint.cpp:142:5:142:10 | select | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| taint.cpp:142:5:142:10 | select | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | -| taint.cpp:142:5:142:10 | select | (_Float128,_Float128,int) | | __kernel_sinf128 | 2 | -| taint.cpp:142:5:142:10 | select | (_Float128,_Float128,int) | | __kernel_tanf128 | 2 | -| taint.cpp:142:5:142:10 | select | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 2 | -| taint.cpp:142:5:142:10 | select | (action *,FILE *,int) | | PrintAction | 2 | -| taint.cpp:142:5:142:10 | select | (acttab *,int,int) | | acttab_action | 1 | -| taint.cpp:142:5:142:10 | select | (acttab *,int,int) | | acttab_action | 2 | -| taint.cpp:142:5:142:10 | select | (char *,size_t,int) | | __argz_stringify | 2 | -| taint.cpp:142:5:142:10 | select | (const ASN1_VALUE *,const ASN1_TEMPLATE *,int) | | ossl_asn1_do_adb | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,int[],int) | | BN_GF2m_poly2arr | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_bn2binpad | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_bn2lebinpad | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_bn2nativepad | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2bin | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2lebin | 2 | -| taint.cpp:142:5:142:10 | select | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2native | 2 | -| taint.cpp:142:5:142:10 | select | (const CMS_ContentInfo *,BIO *,int) | | ossl_cms_DigestedData_do_final | 2 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_signed_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_unsigned_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const Curl_easy *,const connectdata *,int) | | Curl_conn_is_http2 | 2 | -| taint.cpp:142:5:142:10 | select | (const EVP_MD *,const EVP_MD *,int) | | ossl_rsa_pss_params_create | 2 | -| taint.cpp:142:5:142:10 | select | (const EVP_PKEY *,const ASN1_OBJECT *,int) | | EVP_PKEY_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const OSSL_PARAM *,BIO *,int) | | OSSL_PARAM_print_to_bio | 2 | -| taint.cpp:142:5:142:10 | select | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 2 | -| taint.cpp:142:5:142:10 | select | (const SSL *,char *,int) | | SSL_get_shared_ciphers | 2 | -| taint.cpp:142:5:142:10 | select | (const SSL *,int,int) | | apps_ssl_info_callback | 1 | -| taint.cpp:142:5:142:10 | select | (const SSL *,int,int) | | apps_ssl_info_callback | 2 | -| taint.cpp:142:5:142:10 | select | (const SSL_CIPHER *,char *,int) | | SSL_CIPHER_description | 2 | -| taint.cpp:142:5:142:10 | select | (const X509 *,const ASN1_OBJECT *,int) | | X509_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_new_init | 2 | -| taint.cpp:142:5:142:10 | select | (const X509 *,int,int) | | X509_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509 *,int,int) | | X509_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509 *,int,int) | | X509_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (const X509 *,int,int) | | X509_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_ACERT *,const ASN1_OBJECT *,int) | | X509_ACERT_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,const ASN1_OBJECT *,int) | | X509_CRL_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,const X509 *,int) | | OSSL_CMP_CRLSTATUS_create | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_NAME *,char *,int) | | X509_NAME_oneline | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_NAME *,const ASN1_OBJECT *,int) | | X509_NAME_get_index_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_REQ *,const ASN1_OBJECT *,int) | | X509_REQ_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_REVOKED *,const ASN1_OBJECT *,int) | | X509_REVOKED_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,char **,int) | | __strtol | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,char **,int) | | __strtoul | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,char **,int) | | idn2_to_ascii_8z | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,const OSSL_PARAM *,int) | | print_param_types | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,const char *,int) | | CRYPTO_strdup | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,const char *,int) | | __dcgettext | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,const char *,int) | | sqlite3_strnicmp | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,int,int) | | __old_strpbrk_c2 | 1 | -| taint.cpp:142:5:142:10 | select | (const char *,int,int) | | __old_strpbrk_c2 | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,long *,int) | | Jim_StringToWide | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,size_t *,int) | | _dl_sysdep_read_whole_file | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,sqlite3_filename,int) | | sqlite3_uri_key | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,void *,int) | | support_readdir_check | 2 | -| taint.cpp:142:5:142:10 | select | (const char *,wordexp_t *,int) | | wordexp | 2 | -| taint.cpp:142:5:142:10 | select | (const cmsghdr *,uint8_t **,int) | | inet6_option_find | 2 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_ATTRIBUTE *,const ASN1_OBJECT *,int) | | X509at_get_attr_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_EXTENSION *,const ASN1_OBJECT *,int) | | X509v3_get_ext_by_OBJ | 2 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 1 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 2 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 1 | -| taint.cpp:142:5:142:10 | select | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 2 | -| taint.cpp:142:5:142:10 | select | (const uint8_t *,uint8_t **,int) | | idn2_lookup_u8 | 2 | -| taint.cpp:142:5:142:10 | select | (const unsigned char **,unsigned int,int) | | ossl_b2i_DSA_after_header | 2 | -| taint.cpp:142:5:142:10 | select | (const unsigned char **,unsigned int,int) | | ossl_b2i_RSA_after_header | 2 | -| taint.cpp:142:5:142:10 | select | (const void *,const void *,int) | | ossl_is_partially_overlapping | 2 | -| taint.cpp:142:5:142:10 | select | (const void *,socklen_t,int) | | res_gethostbyaddr | 2 | -| taint.cpp:142:5:142:10 | select | (const wchar_t *,wchar_t **,int) | | __wcstol | 2 | -| taint.cpp:142:5:142:10 | select | (const wchar_t *,wchar_t **,int) | | __wcstoul | 2 | -| taint.cpp:142:5:142:10 | select | (curl_mimepart *,curl_mime *,int) | | Curl_mime_set_subparts | 2 | -| taint.cpp:142:5:142:10 | select | (curl_mimepart *,curl_slist *,int) | | curl_mime_headers | 2 | -| taint.cpp:142:5:142:10 | select | (database_dyn *,size_t,int) | | mempool_alloc | 2 | -| taint.cpp:142:5:142:10 | select | (database_dyn *,time_t,int) | | prune_cache | 2 | -| taint.cpp:142:5:142:10 | select | (double,double,int) | | __kernel_standard | 2 | -| taint.cpp:142:5:142:10 | select | (float,float,int) | | __kernel_standard_f | 2 | -| taint.cpp:142:5:142:10 | select | (gconv_spec *,__gconv_t *,int) | | __gconv_open | 2 | -| taint.cpp:142:5:142:10 | select | (gzFile,char *,int) | | gzgets | 2 | -| taint.cpp:142:5:142:10 | select | (gzFile,int,int) | | gzsetparams | 1 | -| taint.cpp:142:5:142:10 | select | (gzFile,int,int) | | gzsetparams | 2 | -| taint.cpp:142:5:142:10 | select | (gzFile,off64_t,int) | | gzseek64 | 2 | -| taint.cpp:142:5:142:10 | select | (gzFile,off_t,int) | | gzseek | 2 | -| taint.cpp:142:5:142:10 | select | (int *,short *,int) | | __lll_lock_elision | 2 | -| taint.cpp:142:5:142:10 | select | (int,BIO_ADDR *,int) | | BIO_accept_ex | 2 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | ASN1_object_size | 0 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | ASN1_object_size | 1 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | ASN1_object_size | 2 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | EVP_CIPHER_meth_new | 0 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | EVP_CIPHER_meth_new | 1 | -| taint.cpp:142:5:142:10 | select | (int,int,int) | | EVP_CIPHER_meth_new | 2 | -| taint.cpp:142:5:142:10 | select | (long double,long double,int) | | __kernel_sinl | 2 | -| taint.cpp:142:5:142:10 | select | (long double,long double,int) | | __kernel_standard_l | 2 | -| taint.cpp:142:5:142:10 | select | (long double,long double,int) | | __kernel_tanl | 2 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_double | 1 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_double | 2 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_float | 1 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_float | 2 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_float128 | 1 | -| taint.cpp:142:5:142:10 | select | (mp_srcptr,int,int) | | __mpn_construct_float128 | 2 | -| taint.cpp:142:5:142:10 | select | (regex_t *,const char *,int) | | jim_regcomp | 2 | -| taint.cpp:142:5:142:10 | select | (requestlist *,requestlist *,int) | | __aio_remove_request | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3 *,int,int) | | sqlite3_limit | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3 *,int,int) | | sqlite3_limit | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_context *,const void *,int) | | sqlite3_result_error16 | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 2 | -| taint.cpp:142:5:142:10 | select | (sqlite3expert *,int,int) | | sqlite3_expert_report | 1 | -| taint.cpp:142:5:142:10 | select | (sqlite3expert *,int,int) | | sqlite3_expert_report | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 **,X509 *,int) | | ossl_x509_add_cert_new | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 **,stack_st_X509 *,int) | | ossl_x509_add_certs_new | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 *,ASIdentifiers *,int) | | X509v3_asid_validate_resource_set | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 *,IPAddrBlocks *,int) | | X509v3_addr_validate_resource_set | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 *,X509 *,int) | | X509_add_cert | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509 *,stack_st_X509 *,int) | | X509_add_certs | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 1 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 1 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 2 | -| taint.cpp:142:5:142:10 | select | (stack_st_X509_EXTENSION **,X509_EXTENSION *,int) | | X509v3_add_ext | 2 | -| taint.cpp:142:5:142:10 | select | (td_thragent_t *,uint32_t *,int) | | _td_check_sizeof | 2 | -| taint.cpp:142:5:142:10 | select | (uint8_t[56],const gf,int) | | gf_serialize | 2 | -| taint.cpp:142:5:142:10 | select | (uint32_t *,SSL_CONNECTION *,int) | | ssl_set_sig_mask | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned char *,const char *,int) | | data_string | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned char *,const unsigned char *,int) | | EVP_DecodeBlock | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned char *,const unsigned char *,int) | | EVP_EncodeBlock | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned char *,uint64_t,int) | | ossl_i2c_uint64_int | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned int,const char *,int) | | _IO_adjust_column | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned int,const wchar_t *,int) | | _IO_adjust_wcolumn | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned int,int,int) | | ossl_blob_length | 1 | -| taint.cpp:142:5:142:10 | select | (unsigned int,int,int) | | ossl_blob_length | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned long *,const BIGNUM *,int) | | bn_copy_words | 2 | -| taint.cpp:142:5:142:10 | select | (unsigned long *,const unsigned long *,int) | | bn_sqr_words | 2 | -| taint.cpp:142:5:142:10 | select | (uv__io_t *,uv__io_cb,int) | | uv__io_init | 2 | -| taint.cpp:142:5:142:10 | select | (uv_loop_t *,uv_fs_t *,int) | | uv__iou_fs_read_or_write | 2 | -| taint.cpp:142:5:142:10 | select | (uv_loop_t *,uv_pipe_t *,int) | | uv_pipe_init | 2 | -| taint.cpp:142:5:142:10 | select | (uv_loop_t *,uv_poll_t *,int) | | uv_poll_init | 2 | -| taint.cpp:142:5:142:10 | select | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start | 2 | -| taint.cpp:142:5:142:10 | select | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start_oneshot | 2 | -| taint.cpp:142:5:142:10 | select | (uv_stream_t *,int,int) | | uv__stream_open | 1 | -| taint.cpp:142:5:142:10 | select | (uv_stream_t *,int,int) | | uv__stream_open | 2 | -| taint.cpp:142:5:142:10 | select | (void *,cmsghdr **,int) | | inet6_option_init | 2 | -| taint.cpp:142:5:142:10 | select | (void *,const char *,int) | | CRYPTO_secure_free | 2 | -| taint.cpp:142:5:142:10 | select | (void *,curl_off_t,int) | | tool_mime_stdin_seek | 2 | -| taint.cpp:142:5:142:10 | select | (void *,socklen_t,int) | | inet6_opt_finish | 2 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ASN1_tag2str | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | Jim_SignalId | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | PKCS12_init | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | Symbol_Nth | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __btowc | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __current_locale_name | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __fdopendir | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __get_errlist | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __get_errname | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __math_invalid_i | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __math_invalidf_i | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __p_class | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __p_rcode | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __p_type | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __pkey_get | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __sigdescr_np | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | __strerrordesc_np | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | _tolower | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | _toupper | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | btowc | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | c_tolower | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | c_toupper | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | curlx_sitouz | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | inet6_option_space | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isalnum | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isalpha | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isblank | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | iscntrl | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isdigit | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isgraph | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | islower | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isprint | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ispunct | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isspace | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isupper | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | isxdigit | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ossl_tolower | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | ossl_toupper | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | sigabbrev_np | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | sqlite3_errstr | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | strerrorname_np | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | support_report_failure | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | svcudp_create | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | tls13_alert_code | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | toascii | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | tolower | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | toupper | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uabs | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uv__accept | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uv_err_name | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uv_strerror | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | | zError | 0 | -| taint.cpp:150:6:150:12 | fn_test | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:156:7:156:12 | strcpy | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:156:7:156:12 | strcpy | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:156:7:156:12 | strcpy | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:156:7:156:12 | strcpy | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:156:7:156:12 | strcpy | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:156:7:156:12 | strcpy | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:156:7:156:12 | strcpy | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:156:7:156:12 | strcpy | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:156:7:156:12 | strcpy | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:156:7:156:12 | strcpy | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:156:7:156:12 | strcpy | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:156:7:156:12 | strcpy | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:156:7:156:12 | strcpy | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:156:7:156:12 | strcpy | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:156:7:156:12 | strcpy | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:156:7:156:12 | strcpy | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:156:7:156:12 | strcpy | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:156:7:156:12 | strcpy | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:156:7:156:12 | strcpy | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:156:7:156:12 | strcpy | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:156:7:156:12 | strcpy | (char **,const char *) | | __strsep | 1 | -| taint.cpp:156:7:156:12 | strcpy | (char *,const char *) | | xstrdup | 0 | -| taint.cpp:156:7:156:12 | strcpy | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | advance | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | step | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:156:7:156:12 | strcpy | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:156:7:156:12 | strcpy | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:156:7:156:12 | strcpy | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:156:7:156:12 | strcpy | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:156:7:156:12 | strcpy | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:156:7:156:12 | strcpy | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:156:7:156:12 | strcpy | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:156:7:156:12 | strcpy | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:156:7:156:12 | strcpy | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:156:7:156:12 | strcpy | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:156:7:156:12 | strcpy | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:156:7:156:12 | strcpy | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:156:7:156:12 | strcpy | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:156:7:156:12 | strcpy | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (int,const char *) | | gzdopen | 1 | -| taint.cpp:156:7:156:12 | strcpy | (int,const char *) | | setlocale | 1 | -| taint.cpp:156:7:156:12 | strcpy | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:156:7:156:12 | strcpy | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:156:7:156:12 | strcpy | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:156:7:156:12 | strcpy | (long *,const char *) | | str2num | 1 | -| taint.cpp:156:7:156:12 | strcpy | (long *,const char *) | | str2unum | 1 | -| taint.cpp:156:7:156:12 | strcpy | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:156:7:156:12 | strcpy | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:156:7:156:12 | strcpy | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:156:7:156:12 | strcpy | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:156:7:156:12 | strcpy | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:156:7:156:12 | strcpy | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:156:7:156:12 | strcpy | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:156:7:156:12 | strcpy | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:156:7:156:12 | strcpy | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:157:7:157:12 | strcat | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:157:7:157:12 | strcat | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:157:7:157:12 | strcat | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:157:7:157:12 | strcat | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:157:7:157:12 | strcat | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:157:7:157:12 | strcat | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:157:7:157:12 | strcat | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:157:7:157:12 | strcat | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:157:7:157:12 | strcat | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:157:7:157:12 | strcat | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:157:7:157:12 | strcat | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:157:7:157:12 | strcat | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:157:7:157:12 | strcat | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:157:7:157:12 | strcat | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:157:7:157:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:157:7:157:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:157:7:157:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:157:7:157:12 | strcat | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:157:7:157:12 | strcat | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:157:7:157:12 | strcat | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:157:7:157:12 | strcat | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:157:7:157:12 | strcat | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:157:7:157:12 | strcat | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:157:7:157:12 | strcat | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:157:7:157:12 | strcat | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:157:7:157:12 | strcat | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:157:7:157:12 | strcat | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:157:7:157:12 | strcat | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:157:7:157:12 | strcat | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:157:7:157:12 | strcat | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:157:7:157:12 | strcat | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:157:7:157:12 | strcat | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:157:7:157:12 | strcat | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:157:7:157:12 | strcat | (char **,const char *) | | __strsep | 1 | -| taint.cpp:157:7:157:12 | strcat | (char *,const char *) | | xstrdup | 0 | -| taint.cpp:157:7:157:12 | strcat | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:157:7:157:12 | strcat | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | advance | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | step | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:157:7:157:12 | strcat | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:157:7:157:12 | strcat | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:157:7:157:12 | strcat | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:157:7:157:12 | strcat | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:157:7:157:12 | strcat | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:157:7:157:12 | strcat | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:157:7:157:12 | strcat | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:157:7:157:12 | strcat | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:157:7:157:12 | strcat | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:157:7:157:12 | strcat | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:157:7:157:12 | strcat | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:157:7:157:12 | strcat | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:157:7:157:12 | strcat | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:157:7:157:12 | strcat | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:157:7:157:12 | strcat | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:157:7:157:12 | strcat | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:157:7:157:12 | strcat | (int,const char *) | | gzdopen | 1 | -| taint.cpp:157:7:157:12 | strcat | (int,const char *) | | setlocale | 1 | -| taint.cpp:157:7:157:12 | strcat | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:157:7:157:12 | strcat | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:157:7:157:12 | strcat | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:157:7:157:12 | strcat | (long *,const char *) | | str2num | 1 | -| taint.cpp:157:7:157:12 | strcat | (long *,const char *) | | str2unum | 1 | -| taint.cpp:157:7:157:12 | strcat | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:157:7:157:12 | strcat | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:157:7:157:12 | strcat | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:157:7:157:12 | strcat | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:157:7:157:12 | strcat | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:157:7:157:12 | strcat | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:157:7:157:12 | strcat | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:157:7:157:12 | strcat | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:157:7:157:12 | strcat | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:157:7:157:12 | strcat | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:180:7:180:12 | callee | (int *) | | rresvport | 0 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_BIT_STRING *,unsigned char *,int) | | ASN1_BIT_STRING_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_OCTET_STRING **,const unsigned char *,int) | | ossl_cmp_asn1_octet_string_set1_bytes | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_OCTET_STRING *,const unsigned char *,int) | | ASN1_OCTET_STRING_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_STRING *,const void *,int) | | ASN1_STRING_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 1 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_TIME *,tm *,int) | | ossl_asn1_time_from_tm | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_TYPE *,unsigned char *,int) | | ASN1_TYPE_set_octetstring | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_item_embed_free | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_primitive_free | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const BIGNUM *,int) | | BN_lshift | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const BIGNUM *,int) | | BN_rshift | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const BIGNUM *,int) | | BN_with_flags | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const BIGNUM *,int) | | bn_lshift_fixed_top | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const BIGNUM *,int) | | bn_rshift_fixed_top | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const unsigned long *,int) | | bn_set_static_words | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIGNUM *,const unsigned long *,int) | | bn_set_words | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,BIO *,int) | | OSSL_HTTP_REQ_CTX_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,BIO *,int) | | SMIME_crlf_copy | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,GENERAL_NAMES *,int) | | OSSL_GENERAL_NAMES_print | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,char *,int) | | BIO_get_line | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,const DSA *,int) | | DSA_print | 2 | -| taint.cpp:190:7:190:12 | memcpy | (BIO *,const RSA *,int) | | RSA_print | 2 | -| taint.cpp:190:7:190:12 | memcpy | (CERT *,X509_STORE **,int) | | ssl_cert_get_cert_store | 2 | -| taint.cpp:190:7:190:12 | memcpy | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 1 | -| taint.cpp:190:7:190:12 | memcpy | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Curl_easy *,connectdata *,int) | | Curl_conn_cf_discard_all | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Curl_easy *,connectdata *,int) | | Curl_http2_may_switch | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Curl_easy *,connectdata *,int) | | Curl_http2_switch | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Curl_easy *,connectdata *,int) | | Curl_ssl_cfilter_add | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Curl_sockaddr_ex *,const Curl_addrinfo *,int) | | Curl_sock_assign_addr | 2 | -| taint.cpp:190:7:190:12 | memcpy | (DH *,const OSSL_PARAM[],int) | | ossl_dh_key_fromdata | 2 | -| taint.cpp:190:7:190:12 | memcpy | (DSA *,const OSSL_PARAM[],int) | | ossl_dsa_key_fromdata | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ECX_KEY *,const OSSL_PARAM[],int) | | ossl_ecx_key_fromdata | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EC_KEY *,const OSSL_PARAM[],int) | | ossl_ec_key_fromdata | 2 | -| taint.cpp:190:7:190:12 | memcpy | (ENGINE *,ENGINE_DYNAMIC_ID,int) | | engine_add_dynamic_id | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_export_to_provider | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_find_operation_cache | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY *,EVP_PKEY *,int) | | evp_keymgmt_util_copy | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,EVP_PKEY *,int) | | EVP_PKEY_derive_set_peer_ex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_hkdf_info | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_tls1_prf_seed | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_key | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_salt | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_scrypt_salt | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_tls1_prf_secret | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set_mac_key | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,const void *,int) | | EVP_PKEY_CTX_set1_id | 2 | -| taint.cpp:190:7:190:12 | memcpy | (EVP_PKEY_CTX *,int *,int) | | EVP_PKEY_CTX_set0_keygen_info | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FFC_PARAMS *,unsigned int,int) | | ossl_ffc_params_enable_flags | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,_IO_marker *,int) | | _IO_seekmark | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,_IO_marker *,int) | | _IO_seekwmark | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,__FILE *,int) | | fwide | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,const DSA *,int) | | DSA_print_fp | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,const RSA *,int) | | RSA_print_fp | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,off64_t,int) | | _IO_cookie_seek | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FILE *,rule *,int) | | RulePrint | 2 | -| taint.cpp:190:7:190:12 | memcpy | (FTS *,FTSENT *,int) | | fts_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetCommand | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetGlobalVariable | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetVariable | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *,int) | | Jim_ListGetIndex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *,int) | | Jim_UnsetVariable | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewDictObj | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewListObj | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,char *,int) | | Jim_NewStringObjNoAlloc | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 2 | -| taint.cpp:190:7:190:12 | memcpy | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 2 | -| taint.cpp:190:7:190:12 | memcpy | (LIBSSH2_SFTP_HANDLE *,LIBSSH2_SFTP_ATTRIBUTES *,int) | | libssh2_sftp_fstat_ex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_BASICRESP *,OCSP_CERTID *,int) | | OCSP_resp_find | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_BASICRESP *,X509_EXTENSION *,int) | | OCSP_BASICRESP_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_BASICRESP *,const ASN1_OBJECT *,int) | | OCSP_BASICRESP_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_ONEREQ *,X509_EXTENSION *,int) | | OCSP_ONEREQ_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_ONEREQ *,const ASN1_OBJECT *,int) | | OCSP_ONEREQ_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_REQUEST *,X509_EXTENSION *,int) | | OCSP_REQUEST_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_REQUEST *,const ASN1_OBJECT *,int) | | OCSP_REQUEST_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_SINGLERESP *,X509_EXTENSION *,int) | | OCSP_SINGLERESP_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_SINGLERESP *,const ASN1_OBJECT *,int) | | OCSP_SINGLERESP_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OPENSSL_STACK *,const void *,int) | | OPENSSL_sk_insert | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_referenceValue | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_secretValue | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_PROVIDER *,OSSL_PROVIDER **,int) | | ossl_provider_add_to_store | 2 | -| taint.cpp:190:7:190:12 | memcpy | (OSSL_QRL_ENC_LEVEL_SET *,uint32_t,int) | | ossl_qrl_enc_level_set_get | 2 | -| taint.cpp:190:7:190:12 | memcpy | (PKCS7 *,stack_st_X509 *,int) | | PKCS7_get0_signers | 2 | -| taint.cpp:190:7:190:12 | memcpy | (POLICYINFO *,const ASN1_OBJECT *,int) | | ossl_policy_data_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 2 | -| taint.cpp:190:7:190:12 | memcpy | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (QLOG *,uint32_t,int) | | ossl_qlog_set_event_type_enabled | 2 | -| taint.cpp:190:7:190:12 | memcpy | (QUIC_RXFC *,uint64_t,int) | | ossl_quic_rxfc_on_rx_stream_frame | 2 | -| taint.cpp:190:7:190:12 | memcpy | (QUIC_STREAM_ITER *,QUIC_STREAM_MAP *,int) | | ossl_quic_stream_iter_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (QUIC_STREAM_MAP *,uint64_t,int) | | ossl_quic_stream_map_alloc | 2 | -| taint.cpp:190:7:190:12 | memcpy | (RSA *,const OSSL_PARAM[],int) | | ossl_rsa_fromdata | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,const unsigned char *,int) | | SSL_use_certificate_ASN1 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,const void *,int) | | SSL_write | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_peek | 1 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_peek | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_read | 1 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_read | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 1 | -| taint.cpp:190:7:190:12 | memcpy | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CIPHER *,const SSL_CIPHER *,int) | | OBJ_bsearch_ssl_cipher_id | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CONNECTION *,PACKET *,int) | | ssl_cache_cipherlist | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_close_construct_packet | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_set_handshake_header | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CONNECTION *,WPACKET *,int) | | tls_close_construct_packet | 2 | -| taint.cpp:190:7:190:12 | memcpy | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_MSG_IMPRINT *,unsigned char *,int) | | TS_MSG_IMPRINT_set_msg | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_REQ *,X509_EXTENSION *,int) | | TS_REQ_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_REQ *,const ASN1_OBJECT *,int) | | TS_REQ_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_TST_INFO *,X509_EXTENSION *,int) | | TS_TST_INFO_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_TST_INFO *,const ASN1_OBJECT *,int) | | TS_TST_INFO_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509 *,X509_EXTENSION *,int) | | X509_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509 *,int,int) | | X509_check_purpose | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509 *,int,int) | | X509_check_trust | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509_CRL *,X509_EXTENSION *,int) | | X509_CRL_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509_PUBKEY *,unsigned char *,int) | | X509_PUBKEY_set0_public_key | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509_REVOKED *,X509_EXTENSION *,int) | | X509_REVOKED_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (X509_STORE_CTX *,X509 *,int) | | ossl_x509_check_cert_time | 2 | -| taint.cpp:190:7:190:12 | memcpy | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| taint.cpp:190:7:190:12 | memcpy | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | -| taint.cpp:190:7:190:12 | memcpy | (_Float128,_Float128,int) | | __kernel_sinf128 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (_Float128,_Float128,int) | | __kernel_tanf128 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 2 | -| taint.cpp:190:7:190:12 | memcpy | (action *,FILE *,int) | | PrintAction | 2 | -| taint.cpp:190:7:190:12 | memcpy | (acttab *,int,int) | | acttab_action | 2 | -| taint.cpp:190:7:190:12 | memcpy | (char *,size_t,int) | | __argz_stringify | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const ASN1_VALUE *,const ASN1_TEMPLATE *,int) | | ossl_asn1_do_adb | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,int[],int) | | BN_GF2m_poly2arr | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_bn2binpad | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_bn2lebinpad | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_bn2nativepad | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2bin | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2lebin | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2native | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const CMS_ContentInfo *,BIO *,int) | | ossl_cms_DigestedData_do_final | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_signed_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_unsigned_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const Curl_easy *,const connectdata *,int) | | Curl_conn_is_http2 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const EVP_MD *,const EVP_MD *,int) | | ossl_rsa_pss_params_create | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const EVP_PKEY *,const ASN1_OBJECT *,int) | | EVP_PKEY_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const OSSL_PARAM *,BIO *,int) | | OSSL_PARAM_print_to_bio | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const SSL *,char *,int) | | SSL_get_shared_ciphers | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const SSL *,int,int) | | apps_ssl_info_callback | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const SSL_CIPHER *,char *,int) | | SSL_CIPHER_description | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509 *,const ASN1_OBJECT *,int) | | X509_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_new_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509 *,int,int) | | X509_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509 *,int,int) | | X509_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_ACERT *,const ASN1_OBJECT *,int) | | X509_ACERT_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_CRL *,const ASN1_OBJECT *,int) | | X509_CRL_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_CRL *,const X509 *,int) | | OSSL_CMP_CRLSTATUS_create | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_NAME *,char *,int) | | X509_NAME_oneline | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_NAME *,const ASN1_OBJECT *,int) | | X509_NAME_get_index_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_REQ *,const ASN1_OBJECT *,int) | | X509_REQ_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_REVOKED *,const ASN1_OBJECT *,int) | | X509_REVOKED_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,char **,int) | | __strtol | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,char **,int) | | __strtoul | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,char **,int) | | idn2_to_ascii_8z | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,const OSSL_PARAM *,int) | | print_param_types | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,const char *,int) | | CRYPTO_strdup | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,const char *,int) | | __dcgettext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,const char *,int) | | sqlite3_strnicmp | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,int,int) | | __old_strpbrk_c2 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,long *,int) | | Jim_StringToWide | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,size_t *,int) | | _dl_sysdep_read_whole_file | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,sqlite3_filename,int) | | sqlite3_uri_key | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,void *,int) | | support_readdir_check | 1 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,void *,int) | | support_readdir_check | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const char *,wordexp_t *,int) | | wordexp | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const cmsghdr *,uint8_t **,int) | | inet6_option_find | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const stack_st_X509_ATTRIBUTE *,const ASN1_OBJECT *,int) | | X509at_get_attr_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const stack_st_X509_EXTENSION *,const ASN1_OBJECT *,int) | | X509v3_get_ext_by_OBJ | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const uint8_t *,uint8_t **,int) | | idn2_lookup_u8 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const unsigned char **,unsigned int,int) | | ossl_b2i_DSA_after_header | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const unsigned char **,unsigned int,int) | | ossl_b2i_RSA_after_header | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const void *,const void *,int) | | ossl_is_partially_overlapping | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const void *,socklen_t,int) | | res_gethostbyaddr | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const wchar_t *,wchar_t **,int) | | __wcstol | 2 | -| taint.cpp:190:7:190:12 | memcpy | (const wchar_t *,wchar_t **,int) | | __wcstoul | 2 | -| taint.cpp:190:7:190:12 | memcpy | (curl_mimepart *,curl_mime *,int) | | Curl_mime_set_subparts | 2 | -| taint.cpp:190:7:190:12 | memcpy | (curl_mimepart *,curl_slist *,int) | | curl_mime_headers | 2 | -| taint.cpp:190:7:190:12 | memcpy | (database_dyn *,size_t,int) | | mempool_alloc | 2 | -| taint.cpp:190:7:190:12 | memcpy | (database_dyn *,time_t,int) | | prune_cache | 2 | -| taint.cpp:190:7:190:12 | memcpy | (double,double,int) | | __kernel_standard | 2 | -| taint.cpp:190:7:190:12 | memcpy | (float,float,int) | | __kernel_standard_f | 2 | -| taint.cpp:190:7:190:12 | memcpy | (gconv_spec *,__gconv_t *,int) | | __gconv_open | 2 | -| taint.cpp:190:7:190:12 | memcpy | (gzFile,char *,int) | | gzgets | 2 | -| taint.cpp:190:7:190:12 | memcpy | (gzFile,int,int) | | gzsetparams | 2 | -| taint.cpp:190:7:190:12 | memcpy | (gzFile,off64_t,int) | | gzseek64 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (gzFile,off_t,int) | | gzseek | 2 | -| taint.cpp:190:7:190:12 | memcpy | (int *,short *,int) | | __lll_lock_elision | 2 | -| taint.cpp:190:7:190:12 | memcpy | (int,BIO_ADDR *,int) | | BIO_accept_ex | 2 | -| taint.cpp:190:7:190:12 | memcpy | (int,int,int) | | ASN1_object_size | 2 | -| taint.cpp:190:7:190:12 | memcpy | (int,int,int) | | EVP_CIPHER_meth_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (long double,long double,int) | | __kernel_sinl | 2 | -| taint.cpp:190:7:190:12 | memcpy | (long double,long double,int) | | __kernel_standard_l | 2 | -| taint.cpp:190:7:190:12 | memcpy | (long double,long double,int) | | __kernel_tanl | 2 | -| taint.cpp:190:7:190:12 | memcpy | (mp_srcptr,int,int) | | __mpn_construct_double | 2 | -| taint.cpp:190:7:190:12 | memcpy | (mp_srcptr,int,int) | | __mpn_construct_float | 2 | -| taint.cpp:190:7:190:12 | memcpy | (mp_srcptr,int,int) | | __mpn_construct_float128 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (regex_t *,const char *,int) | | jim_regcomp | 2 | -| taint.cpp:190:7:190:12 | memcpy | (requestlist *,requestlist *,int) | | __aio_remove_request | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3 *,int,int) | | sqlite3_limit | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_context *,const void *,int) | | sqlite3_result_error16 | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 2 | -| taint.cpp:190:7:190:12 | memcpy | (sqlite3expert *,int,int) | | sqlite3_expert_report | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 **,X509 *,int) | | ossl_x509_add_cert_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 **,stack_st_X509 *,int) | | ossl_x509_add_certs_new | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 *,ASIdentifiers *,int) | | X509v3_asid_validate_resource_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 *,IPAddrBlocks *,int) | | X509v3_addr_validate_resource_set | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 *,X509 *,int) | | X509_add_cert | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509 *,stack_st_X509 *,int) | | X509_add_certs | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 2 | -| taint.cpp:190:7:190:12 | memcpy | (stack_st_X509_EXTENSION **,X509_EXTENSION *,int) | | X509v3_add_ext | 2 | -| taint.cpp:190:7:190:12 | memcpy | (td_thragent_t *,uint32_t *,int) | | _td_check_sizeof | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uint8_t[56],const gf,int) | | gf_serialize | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uint32_t *,SSL_CONNECTION *,int) | | ssl_set_sig_mask | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned char *,const char *,int) | | data_string | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned char *,const unsigned char *,int) | | EVP_DecodeBlock | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned char *,const unsigned char *,int) | | EVP_EncodeBlock | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned char *,uint64_t,int) | | ossl_i2c_uint64_int | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned int,const char *,int) | | _IO_adjust_column | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned int,const wchar_t *,int) | | _IO_adjust_wcolumn | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned int,int,int) | | ossl_blob_length | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned long *,const BIGNUM *,int) | | bn_copy_words | 2 | -| taint.cpp:190:7:190:12 | memcpy | (unsigned long *,const unsigned long *,int) | | bn_sqr_words | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv__io_t *,uv__io_cb,int) | | uv__io_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_loop_t *,uv_fs_t *,int) | | uv__iou_fs_read_or_write | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_loop_t *,uv_pipe_t *,int) | | uv_pipe_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_loop_t *,uv_poll_t *,int) | | uv_poll_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start_oneshot | 2 | -| taint.cpp:190:7:190:12 | memcpy | (uv_stream_t *,int,int) | | uv__stream_open | 2 | -| taint.cpp:190:7:190:12 | memcpy | (void *,cmsghdr **,int) | | inet6_option_init | 2 | -| taint.cpp:190:7:190:12 | memcpy | (void *,const char *,int) | | CRYPTO_secure_free | 2 | -| taint.cpp:190:7:190:12 | memcpy | (void *,curl_off_t,int) | | tool_mime_stdin_seek | 2 | -| taint.cpp:190:7:190:12 | memcpy | (void *,socklen_t,int) | | inet6_opt_finish | 2 | -| taint.cpp:192:6:192:16 | test_memcpy | (int *) | | rresvport | 0 | -| taint.cpp:249:13:249:13 | _FUN | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:249:13:249:13 | _FUN | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:249:13:249:13 | _FUN | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:249:13:249:13 | _FUN | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:249:13:249:13 | _FUN | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:249:13:249:13 | _FUN | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:249:13:249:13 | _FUN | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:249:13:249:13 | _FUN | (FTS *,int) | | fts_children | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:249:13:249:13 | _FUN | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:249:13:249:13 | _FUN | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:249:13:249:13 | _FUN | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:249:13:249:13 | _FUN | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:249:13:249:13 | _FUN | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:249:13:249:13 | _FUN | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:249:13:249:13 | _FUN | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:249:13:249:13 | _FUN | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:249:13:249:13 | _FUN | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:249:13:249:13 | _FUN | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:249:13:249:13 | _FUN | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:249:13:249:13 | _FUN | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (char **,int) | | addrsort | 1 | -| taint.cpp:249:13:249:13 | _FUN | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | _FUN | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | ftok | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (double,int) | | __ldexp | 1 | -| taint.cpp:249:13:249:13 | _FUN | (double,int) | | __scalbn | 1 | -| taint.cpp:249:13:249:13 | _FUN | (double[],int) | | getloadavg | 1 | -| taint.cpp:249:13:249:13 | _FUN | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:249:13:249:13 | _FUN | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:249:13:249:13 | _FUN | (float,int) | | __ldexpf | 1 | -| taint.cpp:249:13:249:13 | _FUN | (float,int) | | __scalbnf | 1 | -| taint.cpp:249:13:249:13 | _FUN | (gzFile,int) | | gzflush | 1 | -| taint.cpp:249:13:249:13 | _FUN | (gzFile,int) | | gzputc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | BN_security_bits | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | BN_security_bits | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | EVP_MD_meth_new | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | EVP_PKEY_meth_new | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | __isctype | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | __isctype | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | acttab_alloc | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | acttab_alloc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | div | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | div | 1 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | inet6_rth_space | 0 | -| taint.cpp:249:13:249:13 | _FUN | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:249:13:249:13 | _FUN | (long double,int) | | __ldexpl | 1 | -| taint.cpp:249:13:249:13 | _FUN | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:249:13:249:13 | _FUN | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:249:13:249:13 | _FUN | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:249:13:249:13 | _FUN | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:249:13:249:13 | _FUN | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:249:13:249:13 | _FUN | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:249:13:249:13 | _FUN | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:249:13:249:13 | _FUN | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:249:13:249:13 | _FUN | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:249:13:249:13 | _FUN | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:249:13:249:13 | _FUN | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:249:13:249:13 | _FUN | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:249:13:249:13 | _FUN | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:249:13:249:13 | _FUN | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:249:13:249:13 | _FUN | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:249:13:249:13 | _FUN | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:249:13:249:13 | _FUN | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:249:13:249:13 | _FUN | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:249:13:249:13 | _FUN | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:249:13:249:13 | _FUN | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:249:13:249:13 | _FUN | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:249:13:249:13 | _FUN | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:249:13:249:13 | _FUN | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:249:13:249:13 | _FUN | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | operator() | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:249:13:249:13 | operator() | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:249:13:249:13 | operator() | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:249:13:249:13 | operator() | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:249:13:249:13 | operator() | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:249:13:249:13 | operator() | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:249:13:249:13 | operator() | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:249:13:249:13 | operator() | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:249:13:249:13 | operator() | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:249:13:249:13 | operator() | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:249:13:249:13 | operator() | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:249:13:249:13 | operator() | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:249:13:249:13 | operator() | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:249:13:249:13 | operator() | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:249:13:249:13 | operator() | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:249:13:249:13 | operator() | (FTS *,int) | | fts_children | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:249:13:249:13 | operator() | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:249:13:249:13 | operator() | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:249:13:249:13 | operator() | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:249:13:249:13 | operator() | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:249:13:249:13 | operator() | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:249:13:249:13 | operator() | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:249:13:249:13 | operator() | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:249:13:249:13 | operator() | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:249:13:249:13 | operator() | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:249:13:249:13 | operator() | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:249:13:249:13 | operator() | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:249:13:249:13 | operator() | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:249:13:249:13 | operator() | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:249:13:249:13 | operator() | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:249:13:249:13 | operator() | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:249:13:249:13 | operator() | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:249:13:249:13 | operator() | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:249:13:249:13 | operator() | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:249:13:249:13 | operator() | (char **,int) | | addrsort | 1 | -| taint.cpp:249:13:249:13 | operator() | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:249:13:249:13 | operator() | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | operator() | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:249:13:249:13 | operator() | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:249:13:249:13 | operator() | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:249:13:249:13 | operator() | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:249:13:249:13 | operator() | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:249:13:249:13 | operator() | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:249:13:249:13 | operator() | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:249:13:249:13 | operator() | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:249:13:249:13 | operator() | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:249:13:249:13 | operator() | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:249:13:249:13 | operator() | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | operator() | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | ftok | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:249:13:249:13 | operator() | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:249:13:249:13 | operator() | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:249:13:249:13 | operator() | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:249:13:249:13 | operator() | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:249:13:249:13 | operator() | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:249:13:249:13 | operator() | (double,int) | | __ldexp | 1 | -| taint.cpp:249:13:249:13 | operator() | (double,int) | | __scalbn | 1 | -| taint.cpp:249:13:249:13 | operator() | (double[],int) | | getloadavg | 1 | -| taint.cpp:249:13:249:13 | operator() | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:249:13:249:13 | operator() | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:249:13:249:13 | operator() | (float,int) | | __ldexpf | 1 | -| taint.cpp:249:13:249:13 | operator() | (float,int) | | __scalbnf | 1 | -| taint.cpp:249:13:249:13 | operator() | (gzFile,int) | | gzflush | 1 | -| taint.cpp:249:13:249:13 | operator() | (gzFile,int) | | gzputc | 1 | -| taint.cpp:249:13:249:13 | operator() | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:249:13:249:13 | operator() | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:249:13:249:13 | operator() | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | BN_security_bits | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | BN_security_bits | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | EVP_MD_meth_new | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | EVP_PKEY_meth_new | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | __isctype | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | __isctype | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | acttab_alloc | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | acttab_alloc | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | div | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | div | 1 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | inet6_rth_space | 0 | -| taint.cpp:249:13:249:13 | operator() | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:249:13:249:13 | operator() | (long double,int) | | __ldexpl | 1 | -| taint.cpp:249:13:249:13 | operator() | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:249:13:249:13 | operator() | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:249:13:249:13 | operator() | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:249:13:249:13 | operator() | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:249:13:249:13 | operator() | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:249:13:249:13 | operator() | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:249:13:249:13 | operator() | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:249:13:249:13 | operator() | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:249:13:249:13 | operator() | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:249:13:249:13 | operator() | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:249:13:249:13 | operator() | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:249:13:249:13 | operator() | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:249:13:249:13 | operator() | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:249:13:249:13 | operator() | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:249:13:249:13 | operator() | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:249:13:249:13 | operator() | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:249:13:249:13 | operator() | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:249:13:249:13 | operator() | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:249:13:249:13 | operator() | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:249:13:249:13 | operator() | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:249:13:249:13 | operator() | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:249:13:249:13 | operator() | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:249:13:249:13 | operator() | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:249:13:249:13 | operator() | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:249:13:249:13 | operator() | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:249:13:249:13 | operator() | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:249:13:249:13 | operator() | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:249:13:249:13 | operator() | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:266:5:266:6 | id | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ASN1_tag2str | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | Jim_SignalId | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | PKCS12_init | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | Symbol_Nth | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __btowc | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __current_locale_name | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __fdopendir | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __get_errlist | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __get_errname | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __math_invalid_i | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __math_invalidf_i | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __p_class | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __p_rcode | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __p_type | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __pkey_get | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __sigdescr_np | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | __strerrordesc_np | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | _tolower | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | _toupper | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | btowc | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | c_tolower | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | c_toupper | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | curlx_sitouz | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | inet6_option_space | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isalnum | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isalpha | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isblank | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | iscntrl | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isdigit | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isgraph | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | islower | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isprint | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ispunct | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isspace | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isupper | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | isxdigit | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ossl_tolower | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | ossl_toupper | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | sigabbrev_np | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | sqlite3_errstr | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | strerrorname_np | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | support_report_failure | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | svcudp_create | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | tls13_alert_code | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | toascii | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | tolower | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | toupper | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uabs | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uv__accept | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uv_err_name | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uv_strerror | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:266:5:266:6 | id | (int) | | zError | 0 | -| taint.cpp:266:5:266:6 | id | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:302:6:302:14 | myAssign2 | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (FTS *,int) | | fts_children | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (char **,int) | | addrsort | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | ftok | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (double,int) | | __ldexp | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (double,int) | | __scalbn | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (double[],int) | | getloadavg | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (float,int) | | __ldexpf | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (float,int) | | __scalbnf | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (gzFile,int) | | gzflush | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (gzFile,int) | | gzputc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | BN_security_bits | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | __isctype | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | acttab_alloc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | div | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (long double,int) | | __ldexpl | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:302:6:302:14 | myAssign2 | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (FTS *,int) | | fts_children | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (char **,int) | | addrsort | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | ftok | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (double,int) | | __ldexp | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (double,int) | | __scalbn | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (double[],int) | | getloadavg | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (float,int) | | __ldexpf | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (float,int) | | __scalbnf | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (gzFile,int) | | gzflush | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (gzFile,int) | | gzputc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | X509_PURPOSE_set | 0 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | X509_TRUST_set | 0 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | __lll_unlock_elision | 0 | -| taint.cpp:307:6:307:14 | myAssign3 | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | BN_security_bits | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | __isctype | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | acttab_alloc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | div | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (long double,int) | | __ldexpl | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:307:6:307:14 | myAssign3 | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (FTS *,int) | | fts_children | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (char **,int) | | addrsort | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | ftok | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (double,int) | | __ldexp | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (double,int) | | __scalbn | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (double[],int) | | getloadavg | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (float,int) | | __ldexpf | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (float,int) | | __scalbnf | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (gzFile,int) | | gzflush | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (gzFile,int) | | gzputc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | X509_PURPOSE_set | 0 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | X509_TRUST_set | 0 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | __lll_unlock_elision | 0 | -| taint.cpp:312:6:312:14 | myAssign4 | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | BN_security_bits | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | __isctype | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | acttab_alloc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | div | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (long double,int) | | __ldexpl | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:312:6:312:14 | myAssign4 | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Strsafe | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | Symbol_new | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | UI_create_method | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __basename | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __gettext | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __hash_string | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __strdup | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __textdomain | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | __tzstring | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | a64l | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | charmap_opendir | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | ether_aton | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | getdate | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | inetstr2int | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | last_component | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | opt_path_end | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | opt_progname | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | repertoire_read | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | sgetsgent | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | sgetspent | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | strhash | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | uc_script_byname | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | uv__strdup | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:361:7:361:12 | strdup | (const char *) | | xstrdup | 0 | -| taint.cpp:362:7:362:13 | strndup | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| taint.cpp:362:7:362:13 | strndup | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| taint.cpp:362:7:362:13 | strndup | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| taint.cpp:362:7:362:13 | strndup | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| taint.cpp:362:7:362:13 | strndup | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (BUF_MEM *,size_t) | | BUF_MEM_grow | 1 | -| taint.cpp:362:7:362:13 | strndup | (BUF_MEM *,size_t) | | BUF_MEM_grow_clean | 1 | -| taint.cpp:362:7:362:13 | strndup | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (Curl_hash *,size_t) | | Curl_init_dnscache | 1 | -| taint.cpp:362:7:362:13 | strndup | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_HPKE_SUITE,size_t) | | OSSL_HPKE_get_ciphertext_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_HTTP_REQ_CTX *,size_t) | | OSSL_HTTP_REQ_CTX_set_max_response_hdr_lines | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_LIB_CTX *,size_t) | | ossl_quic_lcidm_new | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_PARAM *,size_t) | | OSSL_PARAM_set_size_t | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_PQUEUE *,size_t) | | ossl_pqueue_remove | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_PROVIDER *,size_t) | | ossl_provider_set_operation_bit | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_QTX *,size_t) | | ossl_qtx_set_mdpl | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_add_unvalidated_credit | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_consume_unvalidated_credit | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_record_received_closing_bytes | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_frag_len | 1 | -| taint.cpp:362:7:362:13 | strndup | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_pipelines | 1 | -| taint.cpp:362:7:362:13 | strndup | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_release_record | 1 | -| taint.cpp:362:7:362:13 | strndup | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_resize_rbuf | 1 | -| taint.cpp:362:7:362:13 | strndup | (QUIC_RXFC *,size_t) | | ossl_quic_rxfc_set_max_window_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (QUIC_SSTREAM *,size_t) | | ossl_quic_sstream_set_buffer_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (QUIC_STREAM_MAP *,size_t) | | ossl_quic_stream_map_set_rr_stepping | 1 | -| taint.cpp:362:7:362:13 | strndup | (RAND_POOL *,size_t) | | ossl_rand_pool_add_begin | 1 | -| taint.cpp:362:7:362:13 | strndup | (SIPHASH *,size_t) | | SipHash_set_hash_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL *,size_t) | | SSL_set_block_padding | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL *,size_t) | | SSL_set_default_read_buffer_len | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL *,size_t) | | SSL_set_num_tickets | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CTX *,size_t) | | SSL_CTX_set_block_padding | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CTX *,size_t) | | SSL_CTX_set_default_read_buffer_len | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CTX *,size_t) | | SSL_CTX_set_num_tickets | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (WPACKET *,size_t) | | WPACKET_init_null | 1 | -| taint.cpp:362:7:362:13 | strndup | (WPACKET *,size_t) | | WPACKET_set_max_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (WPACKET *,size_t) | | WPACKET_start_sub_packet_len__ | 1 | -| taint.cpp:362:7:362:13 | strndup | (WPACKET *,size_t) | | ossl_quic_wire_encode_padding | 1 | -| taint.cpp:362:7:362:13 | strndup | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| taint.cpp:362:7:362:13 | strndup | (__gconv_step *,size_t) | | __gconv_close_transform | 1 | -| taint.cpp:362:7:362:13 | strndup | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_lmargin | 1 | -| taint.cpp:362:7:362:13 | strndup | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_rmargin | 1 | -| taint.cpp:362:7:362:13 | strndup | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_wmargin | 1 | -| taint.cpp:362:7:362:13 | strndup | (bufq *,size_t) | | Curl_bufq_skip | 1 | -| taint.cpp:362:7:362:13 | strndup | (bufq *,size_t) | | Curl_bufq_unwrite | 1 | -| taint.cpp:362:7:362:13 | strndup | (char *,size_t) | | RAND_file_name | 1 | -| taint.cpp:362:7:362:13 | strndup | (char *,size_t) | | __getcwd | 1 | -| taint.cpp:362:7:362:13 | strndup | (char *,size_t) | | __gets_chk | 1 | -| taint.cpp:362:7:362:13 | strndup | (char *,size_t) | | __getwd_chk | 1 | -| taint.cpp:362:7:362:13 | strndup | (char *,size_t) | | plain_method | 1 | -| taint.cpp:362:7:362:13 | strndup | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | Curl_getn_scheme_handler | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | Curl_getn_scheme_handler | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | Curl_memdup0 | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | Curl_memdup0 | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | OPENSSL_strnlen | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | OPENSSL_strnlen | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | __nss_module_allocate | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | __nss_module_allocate | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | __strndup | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | __strndup | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | charmap_hash | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | charmap_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | locfile_hash | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | locfile_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | mblen | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | mblen | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | uv__strndup | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | uv__strndup | 1 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | xstrndup | 0 | -| taint.cpp:362:7:362:13 | strndup | (const char *,size_t) | | xstrndup | 1 | -| taint.cpp:362:7:362:13 | strndup | (const uint8_t *,size_t) | | FuzzerTestOneInput | 1 | -| taint.cpp:362:7:362:13 | strndup | (const uint8_t *,size_t) | | nghttp2_hd_huff_encode_count | 1 | -| taint.cpp:362:7:362:13 | strndup | (const uint8_t *,size_t) | | ossl_ed448_pubkey_verify | 1 | -| taint.cpp:362:7:362:13 | strndup | (const void *,size_t) | | Curl_memdup | 1 | -| taint.cpp:362:7:362:13 | strndup | (const void *,size_t) | | __nis_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (const void *,size_t) | | __nss_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (const void *,size_t) | | compute_hashval | 1 | -| taint.cpp:362:7:362:13 | strndup | (const wchar_t *,size_t) | | __wcsnlen_generic | 1 | -| taint.cpp:362:7:362:13 | strndup | (const wchar_t *,size_t) | | wcswidth | 1 | -| taint.cpp:362:7:362:13 | strndup | (curl_pushheaders *,size_t) | | curl_pushheader_bynum | 1 | -| taint.cpp:362:7:362:13 | strndup | (dl_find_object_internal *,size_t) | | _dlfo_sort_mappings | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | Curl_dyn_init | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | Curl_dyn_setlen | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | Curl_dyn_tail | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | curlx_dyn_init | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | curlx_dyn_setlen | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynbuf *,size_t) | | curlx_dyn_tail | 1 | -| taint.cpp:362:7:362:13 | strndup | (dynhds *,size_t) | | Curl_dynhds_getn | 1 | -| taint.cpp:362:7:362:13 | strndup | (h1_req_parser *,size_t) | | Curl_h1_req_parse_init | 1 | -| taint.cpp:362:7:362:13 | strndup | (hash_table *,unsigned long) | | init_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (int,size_t) | | ossl_calculate_comp_expansion | 1 | -| taint.cpp:362:7:362:13 | strndup | (link_map *,size_t) | | _dl_make_tlsdesc_dynamic | 1 | -| taint.cpp:362:7:362:13 | strndup | (locale_file *,size_t) | | init_locale_data | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_bufs *,size_t) | | nghttp2_bufs_realloc | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_frame *,size_t) | | nghttp2_frame_trail_padlen | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_context *,size_t) | | nghttp2_hd_table_get | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_deflater **,size_t) | | nghttp2_hd_deflate_new | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_change_table_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_get_table_entry | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_change_table_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_get_table_entry | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_option *,size_t) | | nghttp2_option_set_max_continuations | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_option *,size_t) | | nghttp2_option_set_max_deflate_dynamic_table_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_option *,size_t) | | nghttp2_option_set_max_outbound_ack | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_option *,size_t) | | nghttp2_option_set_max_send_header_block_length | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_option *,size_t) | | nghttp2_option_set_max_settings | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_session *,size_t) | | nghttp2_session_consume_connection | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_session *,size_t) | | nghttp2_session_update_recv_connection_window_size | 1 | -| taint.cpp:362:7:362:13 | strndup | (nghttp2_stream *,size_t) | | nghttp2_http_on_data_chunk | 1 | -| taint.cpp:362:7:362:13 | strndup | (nss_action *,size_t) | | __nss_action_allocate | 1 | -| taint.cpp:362:7:362:13 | strndup | (pthread_attr_t *,size_t) | | __pthread_attr_setguardsize | 1 | -| taint.cpp:362:7:362:13 | strndup | (pthread_attr_t *,size_t) | | __pthread_attr_setstacksize | 1 | -| taint.cpp:362:7:362:13 | strndup | (size_t,size_t) | | __libc_memalign | 1 | -| taint.cpp:362:7:362:13 | strndup | (size_t,size_t) | | aligned_alloc | 1 | -| taint.cpp:362:7:362:13 | strndup | (u_long,unsigned long) | | __p_option | 1 | -| taint.cpp:362:7:362:13 | strndup | (uint8_t *,size_t) | | nghttp2_downcase | 1 | -| taint.cpp:362:7:362:13 | strndup | (uint8_t *,size_t) | | ossl_fnv1a_hash | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | JimDefaultAllocator | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | __arc4random_buf | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | __libc_realloc | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | __minimal_realloc | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | getentropy | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | uv__random_devurandom | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | uv__random_getrandom | 1 | -| taint.cpp:362:7:362:13 | strndup | (void *,size_t) | | xrealloc | 1 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Strsafe | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | Symbol_new | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | UI_create_method | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __basename | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __gettext | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __hash_string | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __strdup | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __textdomain | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | __tzstring | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | a64l | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | charmap_opendir | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | ether_aton | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | getdate | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | inetstr2int | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | last_component | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | opt_path_end | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | opt_progname | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | repertoire_read | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | sgetsgent | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | sgetspent | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | strhash | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | uc_script_byname | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | uv__strdup | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:364:7:364:13 | strdupa | (const char *) | | xstrdup | 0 | -| taint.cpp:365:7:365:14 | strndupa | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BUF_MEM *,size_t) | | BUF_MEM_grow | 1 | -| taint.cpp:365:7:365:14 | strndupa | (BUF_MEM *,size_t) | | BUF_MEM_grow_clean | 1 | -| taint.cpp:365:7:365:14 | strndupa | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (Curl_hash *,size_t) | | Curl_init_dnscache | 1 | -| taint.cpp:365:7:365:14 | strndupa | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_HPKE_SUITE,size_t) | | OSSL_HPKE_get_ciphertext_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_HTTP_REQ_CTX *,size_t) | | OSSL_HTTP_REQ_CTX_set_max_response_hdr_lines | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_LIB_CTX *,size_t) | | ossl_quic_lcidm_new | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_PARAM *,size_t) | | OSSL_PARAM_set_size_t | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_PQUEUE *,size_t) | | ossl_pqueue_remove | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_PROVIDER *,size_t) | | ossl_provider_set_operation_bit | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_QTX *,size_t) | | ossl_qtx_set_mdpl | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_add_unvalidated_credit | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_consume_unvalidated_credit | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_record_received_closing_bytes | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_frag_len | 1 | -| taint.cpp:365:7:365:14 | strndupa | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_pipelines | 1 | -| taint.cpp:365:7:365:14 | strndupa | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_release_record | 1 | -| taint.cpp:365:7:365:14 | strndupa | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_resize_rbuf | 1 | -| taint.cpp:365:7:365:14 | strndupa | (QUIC_RXFC *,size_t) | | ossl_quic_rxfc_set_max_window_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (QUIC_SSTREAM *,size_t) | | ossl_quic_sstream_set_buffer_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (QUIC_STREAM_MAP *,size_t) | | ossl_quic_stream_map_set_rr_stepping | 1 | -| taint.cpp:365:7:365:14 | strndupa | (RAND_POOL *,size_t) | | ossl_rand_pool_add_begin | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SIPHASH *,size_t) | | SipHash_set_hash_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL *,size_t) | | SSL_set_block_padding | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL *,size_t) | | SSL_set_default_read_buffer_len | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL *,size_t) | | SSL_set_num_tickets | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CTX *,size_t) | | SSL_CTX_set_block_padding | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CTX *,size_t) | | SSL_CTX_set_default_read_buffer_len | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CTX *,size_t) | | SSL_CTX_set_num_tickets | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (WPACKET *,size_t) | | WPACKET_init_null | 1 | -| taint.cpp:365:7:365:14 | strndupa | (WPACKET *,size_t) | | WPACKET_set_max_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (WPACKET *,size_t) | | WPACKET_start_sub_packet_len__ | 1 | -| taint.cpp:365:7:365:14 | strndupa | (WPACKET *,size_t) | | ossl_quic_wire_encode_padding | 1 | -| taint.cpp:365:7:365:14 | strndupa | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| taint.cpp:365:7:365:14 | strndupa | (__gconv_step *,size_t) | | __gconv_close_transform | 1 | -| taint.cpp:365:7:365:14 | strndupa | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_lmargin | 1 | -| taint.cpp:365:7:365:14 | strndupa | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_rmargin | 1 | -| taint.cpp:365:7:365:14 | strndupa | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_wmargin | 1 | -| taint.cpp:365:7:365:14 | strndupa | (bufq *,size_t) | | Curl_bufq_skip | 1 | -| taint.cpp:365:7:365:14 | strndupa | (bufq *,size_t) | | Curl_bufq_unwrite | 1 | -| taint.cpp:365:7:365:14 | strndupa | (char *,size_t) | | RAND_file_name | 1 | -| taint.cpp:365:7:365:14 | strndupa | (char *,size_t) | | __getcwd | 1 | -| taint.cpp:365:7:365:14 | strndupa | (char *,size_t) | | __gets_chk | 1 | -| taint.cpp:365:7:365:14 | strndupa | (char *,size_t) | | __getwd_chk | 1 | -| taint.cpp:365:7:365:14 | strndupa | (char *,size_t) | | plain_method | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | Curl_getn_scheme_handler | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | Curl_getn_scheme_handler | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | Curl_memdup0 | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | Curl_memdup0 | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | OPENSSL_strnlen | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | OPENSSL_strnlen | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | __nss_module_allocate | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | __nss_module_allocate | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | __strndup | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | __strndup | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | charmap_hash | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | charmap_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | locfile_hash | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | locfile_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | mblen | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | mblen | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | uv__strndup | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | uv__strndup | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | xstrndup | 0 | -| taint.cpp:365:7:365:14 | strndupa | (const char *,size_t) | | xstrndup | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const uint8_t *,size_t) | | FuzzerTestOneInput | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const uint8_t *,size_t) | | nghttp2_hd_huff_encode_count | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const uint8_t *,size_t) | | ossl_ed448_pubkey_verify | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const void *,size_t) | | Curl_memdup | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const void *,size_t) | | __nis_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const void *,size_t) | | __nss_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const void *,size_t) | | compute_hashval | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const wchar_t *,size_t) | | __wcsnlen_generic | 1 | -| taint.cpp:365:7:365:14 | strndupa | (const wchar_t *,size_t) | | wcswidth | 1 | -| taint.cpp:365:7:365:14 | strndupa | (curl_pushheaders *,size_t) | | curl_pushheader_bynum | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dl_find_object_internal *,size_t) | | _dlfo_sort_mappings | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | Curl_dyn_init | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | Curl_dyn_setlen | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | Curl_dyn_tail | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | curlx_dyn_init | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | curlx_dyn_setlen | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynbuf *,size_t) | | curlx_dyn_tail | 1 | -| taint.cpp:365:7:365:14 | strndupa | (dynhds *,size_t) | | Curl_dynhds_getn | 1 | -| taint.cpp:365:7:365:14 | strndupa | (h1_req_parser *,size_t) | | Curl_h1_req_parse_init | 1 | -| taint.cpp:365:7:365:14 | strndupa | (hash_table *,unsigned long) | | init_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (int,size_t) | | ossl_calculate_comp_expansion | 1 | -| taint.cpp:365:7:365:14 | strndupa | (link_map *,size_t) | | _dl_make_tlsdesc_dynamic | 1 | -| taint.cpp:365:7:365:14 | strndupa | (locale_file *,size_t) | | init_locale_data | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_bufs *,size_t) | | nghttp2_bufs_realloc | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_frame *,size_t) | | nghttp2_frame_trail_padlen | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_context *,size_t) | | nghttp2_hd_table_get | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_deflater **,size_t) | | nghttp2_hd_deflate_new | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_change_table_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_get_table_entry | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_change_table_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_get_table_entry | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_option *,size_t) | | nghttp2_option_set_max_continuations | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_option *,size_t) | | nghttp2_option_set_max_deflate_dynamic_table_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_option *,size_t) | | nghttp2_option_set_max_outbound_ack | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_option *,size_t) | | nghttp2_option_set_max_send_header_block_length | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_option *,size_t) | | nghttp2_option_set_max_settings | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_session *,size_t) | | nghttp2_session_consume_connection | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_session *,size_t) | | nghttp2_session_update_recv_connection_window_size | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nghttp2_stream *,size_t) | | nghttp2_http_on_data_chunk | 1 | -| taint.cpp:365:7:365:14 | strndupa | (nss_action *,size_t) | | __nss_action_allocate | 1 | -| taint.cpp:365:7:365:14 | strndupa | (pthread_attr_t *,size_t) | | __pthread_attr_setguardsize | 1 | -| taint.cpp:365:7:365:14 | strndupa | (pthread_attr_t *,size_t) | | __pthread_attr_setstacksize | 1 | -| taint.cpp:365:7:365:14 | strndupa | (size_t,size_t) | | __libc_memalign | 1 | -| taint.cpp:365:7:365:14 | strndupa | (size_t,size_t) | | aligned_alloc | 1 | -| taint.cpp:365:7:365:14 | strndupa | (u_long,unsigned long) | | __p_option | 1 | -| taint.cpp:365:7:365:14 | strndupa | (uint8_t *,size_t) | | nghttp2_downcase | 1 | -| taint.cpp:365:7:365:14 | strndupa | (uint8_t *,size_t) | | ossl_fnv1a_hash | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | JimDefaultAllocator | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | __arc4random_buf | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | __libc_realloc | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | __minimal_realloc | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | getentropy | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | uv__random_devurandom | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | uv__random_getrandom | 1 | -| taint.cpp:365:7:365:14 | strndupa | (void *,size_t) | | xrealloc | 1 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | _IO_gets | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | __mktemp | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | __nis_default_group | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | __nis_default_owner | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | __xpg_basename | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | ctermid | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | cuserid | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | defossilize | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | des_setparity | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | dirname | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | getwd | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | make_uppercase | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | mkdtemp | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | next_item | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | | strfry | 0 | -| taint.cpp:367:6:367:16 | test_strdup | (char *) | CStringT | CStringT | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ASN1_tag2str | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | Jim_SignalId | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | PKCS12_init | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | Symbol_Nth | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __btowc | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __current_locale_name | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __fdopendir | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __get_errlist | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __get_errname | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __math_invalid_i | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __math_invalidf_i | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __p_class | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __p_rcode | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __p_type | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __pkey_get | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __sigdescr_np | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | __strerrordesc_np | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | _tolower | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | _toupper | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | btowc | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | c_tolower | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | c_toupper | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | curlx_sitouz | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | inet6_option_space | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isalnum | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isalpha | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isblank | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | iscntrl | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isdigit | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isgraph | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | islower | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isprint | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ispunct | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isspace | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isupper | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | isxdigit | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ossl_tolower | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | ossl_toupper | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | sigabbrev_np | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | sqlite3_errstr | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | strerrorname_np | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | support_report_failure | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | svcudp_create | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | tls13_alert_code | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | toascii | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | tolower | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | toupper | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uabs | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uv__accept | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uv_err_name | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uv_strerror | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | | zError | 0 | -| taint.cpp:379:6:379:17 | test_strndup | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:387:6:387:16 | test_wcsdup | (wchar_t *) | CStringT | CStringT | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | _IO_gets | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | __mktemp | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | __nis_default_group | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | __nis_default_owner | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | __xpg_basename | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | ctermid | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | cuserid | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | defossilize | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | des_setparity | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | dirname | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | getwd | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | make_uppercase | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | mkdtemp | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | next_item | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | | strfry | 0 | -| taint.cpp:397:6:397:17 | test_strdupa | (char *) | CStringT | CStringT | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ASN1_tag2str | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | Jim_SignalId | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | PKCS12_init | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | Symbol_Nth | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __btowc | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __current_locale_name | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __fdopendir | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __get_errlist | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __get_errname | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __math_invalid_i | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __math_invalidf_i | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __p_class | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __p_rcode | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __p_type | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __pkey_get | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __sigdescr_np | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | __strerrordesc_np | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | _tolower | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | _toupper | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | btowc | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | c_tolower | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | c_toupper | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | curlx_sitouz | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | inet6_option_space | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isalnum | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isalpha | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isblank | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | iscntrl | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isdigit | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isgraph | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | islower | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isprint | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ispunct | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isspace | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isupper | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | isxdigit | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ossl_tolower | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | ossl_toupper | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | sigabbrev_np | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | sqlite3_errstr | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | strerrorname_np | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | support_report_failure | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | svcudp_create | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | tls13_alert_code | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | toascii | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | tolower | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | toupper | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uabs | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uv__accept | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uv_err_name | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uv_strerror | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | | zError | 0 | -| taint.cpp:409:6:409:18 | test_strndupa | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ASN1_tag2str | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | Jim_SignalId | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | PKCS12_init | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | Symbol_Nth | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __btowc | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __current_locale_name | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __fdopendir | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __get_errlist | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __get_errname | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __math_invalid_i | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __math_invalidf_i | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __p_class | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __p_rcode | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __p_type | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __pkey_get | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __sigdescr_np | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | __strerrordesc_np | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | _tolower | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | _toupper | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | btowc | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | c_tolower | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | c_toupper | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | curlx_sitouz | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | inet6_option_space | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isalnum | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isalpha | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isblank | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | iscntrl | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isdigit | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isgraph | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | islower | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isprint | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ispunct | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isspace | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isupper | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | isxdigit | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ossl_tolower | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | ossl_toupper | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | sigabbrev_np | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | sqlite3_errstr | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | strerrorname_np | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | support_report_failure | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | svcudp_create | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | tls13_alert_code | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | toascii | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | tolower | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | toupper | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uabs | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uv__accept | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uv_err_name | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uv_strerror | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | | zError | 0 | -| taint.cpp:421:2:421:9 | MyClass2 | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ASN1_STRING_type_new | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ASN1_tag2bit | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ASN1_tag2str | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | EVP_PKEY_asn1_get0 | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | Jim_ReturnCode | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | Jim_SignalId | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | OBJ_nid2ln | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | OBJ_nid2obj | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | OBJ_nid2sn | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | OSSL_STORE_INFO_type_string | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | OSSL_trace_get_category_name | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | PKCS12_init | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | Symbol_Nth | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | X509_PURPOSE_get0 | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | X509_PURPOSE_get_by_id | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | X509_TRUST_get0 | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | X509_TRUST_get_by_id | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __btowc | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __current_locale_name | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __fdopendir | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __get_errlist | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __get_errname | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __math_invalid_i | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __math_invalidf_i | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __p_class | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __p_rcode | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __p_type | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __pkey_get | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __sigdescr_np | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | __strerrordesc_np | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | _tolower | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | _toupper | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | btowc | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | c_tolower | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | c_toupper | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | curlx_sitouz | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | evp_pkey_type2name | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | inet6_option_space | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isalnum | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isalpha | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isblank | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | iscntrl | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isdigit | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isgraph | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | islower | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isprint | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ispunct | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isspace | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isupper | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | isxdigit | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ossl_cmp_bodytype_to_string | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ossl_tolower | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | ossl_toupper | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | sigabbrev_np | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | sqlite3_compileoption_get | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | sqlite3_errstr | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | strerrorname_np | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | support_report_failure | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | svcudp_create | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | tls13_alert_code | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | toascii | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | tolower | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | toupper | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uabs | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uv__accept | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uv_err_name | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uv_get_osfhandle | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uv_strerror | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | uv_translate_sys_error | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | | zError | 0 | -| taint.cpp:422:7:422:15 | setMember | (int) | __pthread_cleanup_class | __setdoit | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Strsafe | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | Symbol_new | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | UI_create_method | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __basename | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __gettext | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __hash_string | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __strdup | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __textdomain | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | __tzstring | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | a64l | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | charmap_opendir | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | ether_aton | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | getdate | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | inetstr2int | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | last_component | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | opt_path_end | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | opt_progname | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | repertoire_read | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | sgetsgent | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | sgetspent | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | strhash | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | uc_script_byname | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | uv__strdup | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:430:2:430:9 | MyClass3 | (const char *) | | xstrdup | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Strsafe | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | Symbol_new | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | UI_create_method | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __basename | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __gettext | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __hash_string | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __strdup | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __textdomain | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | __tzstring | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | a64l | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | charmap_opendir | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | ether_aton | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | getdate | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | inetstr2int | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | last_component | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | opt_path_end | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | opt_progname | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | repertoire_read | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | sgetsgent | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | sgetspent | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | strhash | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | uc_script_byname | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | uv__strdup | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:431:7:431:15 | setString | (const char *) | | xstrdup | 0 | -| taint.cpp:500:5:500:12 | getdelim | (URLGlob **,char *,curl_off_t *,FILE *) | | glob_url | 3 | -| taint.cpp:500:5:500:12 | getdelim | (char *,size_t,int,FILE *) | | __fgets_chk | 2 | -| taint.cpp:500:5:500:12 | getdelim | (char *,size_t,int,FILE *) | | __fgets_chk | 3 | -| taint.cpp:500:5:500:12 | getdelim | (char *,size_t,int,FILE *) | | __fgets_unlocked_chk | 2 | -| taint.cpp:500:5:500:12 | getdelim | (char *,size_t,int,FILE *) | | __fgets_unlocked_chk | 3 | -| taint.cpp:500:5:500:12 | getdelim | (const void *,size_t,size_t,FILE *) | | _IO_fwrite | 3 | -| taint.cpp:500:5:500:12 | getdelim | (void *,size_t,size_t,FILE *) | | _IO_fread | 3 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_default_uflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_feof | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_ferror | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_file_close_mmap | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_file_underflow_mmap | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_ftell | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_getc | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_getwc | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_new_file_underflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_peekc_locked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_str_count | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_str_underflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_sungetc | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_sungetwc | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_wdefault_uflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_wfile_underflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_wfile_underflow_mmap | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_wstr_count | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | _IO_wstr_underflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __fbufsize | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __feof_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __ferror_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __fileno | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __flbf | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __fopen_maybe_mmap | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __fpending | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __ftello | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __fwriting | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __getc_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __getwc_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __uflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __underflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __wuflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | __wunderflow | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | feof_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | ferror_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | fgetc_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | fgetgrent | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | fgetpwent | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | fgetsgent | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | fgetspent | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | getc_unlocked | 0 | -| taint.cpp:502:6:502:18 | test_getdelim | (FILE *) | | getmntent | 0 | -| taint.cpp:512:7:512:12 | strtok | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:512:7:512:12 | strtok | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:512:7:512:12 | strtok | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:512:7:512:12 | strtok | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:512:7:512:12 | strtok | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:512:7:512:12 | strtok | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:512:7:512:12 | strtok | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:512:7:512:12 | strtok | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:512:7:512:12 | strtok | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:512:7:512:12 | strtok | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:512:7:512:12 | strtok | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:512:7:512:12 | strtok | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:512:7:512:12 | strtok | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:512:7:512:12 | strtok | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:512:7:512:12 | strtok | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:512:7:512:12 | strtok | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:512:7:512:12 | strtok | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:512:7:512:12 | strtok | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:512:7:512:12 | strtok | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:512:7:512:12 | strtok | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:512:7:512:12 | strtok | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:512:7:512:12 | strtok | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:512:7:512:12 | strtok | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:512:7:512:12 | strtok | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:512:7:512:12 | strtok | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:512:7:512:12 | strtok | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:512:7:512:12 | strtok | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:512:7:512:12 | strtok | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:512:7:512:12 | strtok | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:512:7:512:12 | strtok | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:512:7:512:12 | strtok | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:512:7:512:12 | strtok | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:512:7:512:12 | strtok | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:512:7:512:12 | strtok | (char **,const char *) | | __strsep | 1 | -| taint.cpp:512:7:512:12 | strtok | (char *,const char *) | | xstrdup | 0 | -| taint.cpp:512:7:512:12 | strtok | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:512:7:512:12 | strtok | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | advance | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | step | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:512:7:512:12 | strtok | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:512:7:512:12 | strtok | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:512:7:512:12 | strtok | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:512:7:512:12 | strtok | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:512:7:512:12 | strtok | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:512:7:512:12 | strtok | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:512:7:512:12 | strtok | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:512:7:512:12 | strtok | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:512:7:512:12 | strtok | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:512:7:512:12 | strtok | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:512:7:512:12 | strtok | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:512:7:512:12 | strtok | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:512:7:512:12 | strtok | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:512:7:512:12 | strtok | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:512:7:512:12 | strtok | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:512:7:512:12 | strtok | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:512:7:512:12 | strtok | (int,const char *) | | gzdopen | 1 | -| taint.cpp:512:7:512:12 | strtok | (int,const char *) | | setlocale | 1 | -| taint.cpp:512:7:512:12 | strtok | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:512:7:512:12 | strtok | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:512:7:512:12 | strtok | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:512:7:512:12 | strtok | (long *,const char *) | | str2num | 1 | -| taint.cpp:512:7:512:12 | strtok | (long *,const char *) | | str2unum | 1 | -| taint.cpp:512:7:512:12 | strtok | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:512:7:512:12 | strtok | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:512:7:512:12 | strtok | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:512:7:512:12 | strtok | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:512:7:512:12 | strtok | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:512:7:512:12 | strtok | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:512:7:512:12 | strtok | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:512:7:512:12 | strtok | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:512:7:512:12 | strtok | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:512:7:512:12 | strtok | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | _IO_gets | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | __mktemp | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | __nis_default_group | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | __nis_default_owner | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | __xpg_basename | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | ctermid | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | cuserid | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | defossilize | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | des_setparity | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | dirname | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | getwd | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | make_uppercase | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | mkdtemp | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | next_item | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | | strfry | 0 | -| taint.cpp:514:6:514:16 | test_strtok | (char *) | CStringT | CStringT | 0 | -| taint.cpp:523:7:523:13 | _strset | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:523:7:523:13 | _strset | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:523:7:523:13 | _strset | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:523:7:523:13 | _strset | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:523:7:523:13 | _strset | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:523:7:523:13 | _strset | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:523:7:523:13 | _strset | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:523:7:523:13 | _strset | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:523:7:523:13 | _strset | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:523:7:523:13 | _strset | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:523:7:523:13 | _strset | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:523:7:523:13 | _strset | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:523:7:523:13 | _strset | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:523:7:523:13 | _strset | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:523:7:523:13 | _strset | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:523:7:523:13 | _strset | (FTS *,int) | | fts_children | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:523:7:523:13 | _strset | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:523:7:523:13 | _strset | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:523:7:523:13 | _strset | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:523:7:523:13 | _strset | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:523:7:523:13 | _strset | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:523:7:523:13 | _strset | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:523:7:523:13 | _strset | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:523:7:523:13 | _strset | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:523:7:523:13 | _strset | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:523:7:523:13 | _strset | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:523:7:523:13 | _strset | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:523:7:523:13 | _strset | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:523:7:523:13 | _strset | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:523:7:523:13 | _strset | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:523:7:523:13 | _strset | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:523:7:523:13 | _strset | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:523:7:523:13 | _strset | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:523:7:523:13 | _strset | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:523:7:523:13 | _strset | (char **,int) | | addrsort | 1 | -| taint.cpp:523:7:523:13 | _strset | (char *,int) | | Curl_str2addr | 0 | -| taint.cpp:523:7:523:13 | _strset | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:523:7:523:13 | _strset | (char *,int) | | PEM_proc_type | 0 | -| taint.cpp:523:7:523:13 | _strset | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:523:7:523:13 | _strset | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:523:7:523:13 | _strset | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:523:7:523:13 | _strset | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:523:7:523:13 | _strset | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:523:7:523:13 | _strset | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:523:7:523:13 | _strset | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:523:7:523:13 | _strset | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:523:7:523:13 | _strset | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:523:7:523:13 | _strset | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:523:7:523:13 | _strset | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:523:7:523:13 | _strset | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:523:7:523:13 | _strset | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | ftok | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:523:7:523:13 | _strset | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:523:7:523:13 | _strset | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:523:7:523:13 | _strset | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:523:7:523:13 | _strset | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:523:7:523:13 | _strset | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:523:7:523:13 | _strset | (double,int) | | __ldexp | 1 | -| taint.cpp:523:7:523:13 | _strset | (double,int) | | __scalbn | 1 | -| taint.cpp:523:7:523:13 | _strset | (double[],int) | | getloadavg | 1 | -| taint.cpp:523:7:523:13 | _strset | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:523:7:523:13 | _strset | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:523:7:523:13 | _strset | (float,int) | | __ldexpf | 1 | -| taint.cpp:523:7:523:13 | _strset | (float,int) | | __scalbnf | 1 | -| taint.cpp:523:7:523:13 | _strset | (gzFile,int) | | gzflush | 1 | -| taint.cpp:523:7:523:13 | _strset | (gzFile,int) | | gzputc | 1 | -| taint.cpp:523:7:523:13 | _strset | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:523:7:523:13 | _strset | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:523:7:523:13 | _strset | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | BN_security_bits | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | __isctype | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | acttab_alloc | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | div | 1 | -| taint.cpp:523:7:523:13 | _strset | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:523:7:523:13 | _strset | (long double,int) | | __ldexpl | 1 | -| taint.cpp:523:7:523:13 | _strset | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:523:7:523:13 | _strset | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:523:7:523:13 | _strset | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:523:7:523:13 | _strset | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:523:7:523:13 | _strset | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:523:7:523:13 | _strset | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:523:7:523:13 | _strset | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:523:7:523:13 | _strset | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:523:7:523:13 | _strset | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:523:7:523:13 | _strset | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:523:7:523:13 | _strset | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:523:7:523:13 | _strset | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:523:7:523:13 | _strset | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:523:7:523:13 | _strset | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:523:7:523:13 | _strset | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:523:7:523:13 | _strset | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:523:7:523:13 | _strset | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:523:7:523:13 | _strset | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:523:7:523:13 | _strset | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:523:7:523:13 | _strset | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:523:7:523:13 | _strset | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:523:7:523:13 | _strset | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:523:7:523:13 | _strset | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:523:7:523:13 | _strset | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:523:7:523:13 | _strset | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:523:7:523:13 | _strset | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:523:7:523:13 | _strset | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:523:7:523:13 | _strset | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:525:6:525:18 | test_strset_1 | (__printf_buffer *,char) | | __printf_buffer_putc_1 | 1 | -| taint.cpp:525:6:525:18 | test_strset_1 | (char **,char) | | Curl_str_single | 1 | -| taint.cpp:525:6:525:18 | test_strset_1 | (char **,char) | | __old_strsep_1c | 1 | -| taint.cpp:525:6:525:18 | test_strset_1 | (const CStringT &,char) | | operator+ | 1 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | _IO_gets | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | __mktemp | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | __nis_default_group | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | __nis_default_owner | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | __xpg_basename | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | ctermid | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | cuserid | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | defossilize | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | des_setparity | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | dirname | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | getwd | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | make_uppercase | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | mkdtemp | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | next_item | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | | strfry | 0 | -| taint.cpp:531:6:531:18 | test_strset_2 | (char *) | CStringT | CStringT | 0 | -| taint.cpp:538:7:538:13 | mempcpy | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_personal | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_salt | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_personal | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_salt | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (CCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ccm128_aad | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (CCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ccm128_tag | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (CMS_RecipientInfo *,const unsigned char *,size_t) | | CMS_RecipientInfo_kekri_id_cmp | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_alnum | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_bytes | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_hex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (DH *,const unsigned char *,size_t) | | ossl_dh_buf2key | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EC_GROUP *,const unsigned char *,size_t) | | EC_GROUP_set_seed | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EC_KEY *,const unsigned char *,size_t) | | ossl_ec_key_simple_oct2priv | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha1_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha256_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha512_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_MD_CTX *,const unsigned char *,size_t) | | EVP_DigestVerifyFinal | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_PKEY *,char *,size_t) | | EVP_PKEY_get_default_digest_name | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (EVP_RAND_CTX *,unsigned char *,size_t) | | EVP_RAND_nonce | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FFC_PARAMS *,const unsigned char *,size_t) | | ossl_ffc_params_set_seed | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const char *,size_t) | | _IO_new_do_write | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_default_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_default_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,void *,size_t) | | _IO_default_xsgetn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,void *,size_t) | | _IO_file_xsgetn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,void *,size_t) | | _IO_file_xsgetn_mmap | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (FILE *,void *,size_t) | | _IO_wdefault_xsgetn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_aad | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_setiv | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (GCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_gcm128_tag | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (KECCAK1600_CTX *,unsigned char *,size_t) | | ossl_sha3_squeeze | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (KECCAK1600_CTX *,unsigned char,size_t) | | ossl_sha3_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (LIBSSH2_CHANNEL *,const char *,size_t) | | libssh2_channel_signal_ex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (LIBSSH2_SFTP_HANDLE *,char *,size_t) | | libssh2_sftp_read | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (LIBSSH2_SFTP_HANDLE *,const char *,size_t) | | libssh2_sftp_write | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MD4_CTX *,const void *,size_t) | | MD4_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (MD4_CTX *,const void *,size_t) | | MD4_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MD5_CTX *,const void *,size_t) | | MD5_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (MD5_CTX *,const void *,size_t) | | MD5_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MDC2_CTX *,const unsigned char *,size_t) | | MDC2_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_pk_decode | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_sk_decode | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (MemoryManager *,const uint8_t *,size_t) | | CreatePreparedDictionary | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OCB128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ocb128_aad | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OCB128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ocb128_tag | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_HPKE_CTX *,const unsigned char *,size_t) | | OSSL_HPKE_CTX_set1_ikme | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_JSON_ENC *,const char *,size_t) | | ossl_json_str_len | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_entropy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_user_entropy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_PARAM *,void *,size_t) | | ossl_param_set_secure_block | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_default | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_multiblock | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (POLY1305 *,const unsigned char *,size_t) | | Poly1305_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_generic_initiv | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_ede3_initkey | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (PROV_GCM_CTX *,const unsigned char *,size_t) | | ossl_gcm_aad_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (QUIC_PN,unsigned char *,size_t) | | ossl_quic_wire_encode_pkt_hdr_pn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (QUIC_RXFC *,OSSL_STATM *,size_t) | | ossl_quic_rstream_new | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (QUIC_TLS *,const unsigned char *,size_t) | | ossl_quic_tls_set_transport_params | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (RAND_POOL *,const unsigned char *,size_t) | | ossl_rand_pool_adin_mix_in | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (RAND_POOL *,size_t,size_t) | | ossl_rand_pool_add_end | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT **,const unsigned char **,size_t) | | o2i_SCT | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,const unsigned char **,size_t) | | o2i_SCT_signature | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_extensions | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_log_id | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_signature | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_extensions | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_log_id | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_signature | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SIPHASH *,const unsigned char *,size_t) | | SipHash_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SIPHASH *,unsigned char *,size_t) | | SipHash_Final | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SIV128_CONTEXT *,const unsigned char *,size_t) | | ossl_siv128_set_tag | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SIV128_CONTEXT *,unsigned char *,size_t) | | ossl_siv128_get_tag | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_priv | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_pub | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL *,const unsigned char *,size_t) | | SSL_set1_client_cert_type | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL *,const unsigned char *,size_t) | | SSL_set1_server_cert_type | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL *,const unsigned char *,size_t) | | SSL_set_quic_tls_transport_params | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL *,size_t,size_t) | | SSL_set_block_padding_ex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_CONNECTION *,TLS_RECORD *,size_t) | | ssl_release_record | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_CONNECTION *,const unsigned char *,size_t) | | lookup_sess_in_cache | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_client_cert_type | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_server_cert_type | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_CTX *,size_t,size_t) | | SSL_CTX_set_block_padding_ex | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_alpn_selected | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_master_key | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (Strtab *,const char *,size_t) | | strtabadd | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,BUF_MEM *,size_t) | | WPACKET_init_len | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,const unsigned char *,size_t) | | ossl_quic_wire_encode_frame_new_token | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,int,size_t) | | WPACKET_memset | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,uint64_t,size_t) | | WPACKET_put_bytes__ | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,unsigned char *,size_t) | | WPACKET_init_der | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (WPACKET *,unsigned char *,size_t) | | dtls_raw_hello_verify_request | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_add1_host | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_email | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_host | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (X509_VERIFY_PARAM *,const unsigned char *,size_t) | | X509_VERIFY_PARAM_set1_ip | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (__printf_buffer *,char,size_t) | | __printf_buffer_pad_1 | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (__printf_buffer *,const char *,size_t) | | __printf_buffer_write | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (__printf_buffer_snprintf *,char *,size_t) | | __printf_buffer_snprintf_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (__wprintf_buffer *,const wchar_t *,size_t) | | __wprintf_buffer_write | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (__wprintf_buffer *,wchar_t,size_t) | | __wprintf_buffer_pad_1 | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (argp_fmtstream *,argp_fmtstream_t,size_t) | | __argp_fmtstream_ensure | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (argp_fmtstream_t,const char *,size_t) | | __argp_fmtstream_write | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (bufc_pool *,size_t,size_t) | | Curl_bufcp_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (bufq *,size_t,size_t) | | Curl_bufq_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char **,size_t *,size_t) | | Curl_str_number | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,const char *,size_t) | | Curl_strntolower | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,const char *,size_t) | | Curl_strntoupper | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,const char *,size_t) | | OPENSSL_strlcat | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,const char *,size_t) | | OPENSSL_strlcpy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,const char *,size_t) | | uv__strscpy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *,size_t,size_t) | | __getcwd_chk | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *__restrict__,const char *__restrict__,size_t) | | __strlcat | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (char *__restrict__,const char *__restrict__,size_t) | | __strlcpy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const CTLOG_STORE *,const uint8_t *,size_t) | | CTLOG_STORE_get0_log_by_id | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const EC_KEY *,unsigned char *,size_t) | | ossl_ec_key_simple_priv2oct | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const EVP_MD *,const OSSL_ITEM *,size_t) | | ossl_digest_md_to_nid | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const EVP_MD *,const unsigned char *,size_t) | | OSSL_STORE_SEARCH_by_key_fingerprint | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const OSSL_CMP_CTX *,char *,size_t) | | OSSL_CMP_CTX_snprint_PKIStatus | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const OSSL_CMP_PKISI *,char *,size_t) | | OSSL_CMP_snprint_PKIStatusInfo | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const OSSL_NAMEMAP *,int,size_t) | | ossl_namemap_num2name | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const OSSL_PARAM *,char **,size_t) | | OSSL_PARAM_get_utf8_string | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const SSL *,unsigned char *,size_t) | | SSL_get_client_random | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const SSL *,unsigned char *,size_t) | | SSL_get_server_random | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const SSL_SESSION *,unsigned char *,size_t) | | SSL_SESSION_get_master_key | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char **,size_t) | | OSSL_PARAM_construct_utf8_ptr | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char *,size_t) | | OSSL_PARAM_construct_utf8_string | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char *,size_t) | | __libc_ns_makecanon | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char *,size_t) | | __realpath_chk | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char *,size_t) | | getpass_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,char *,size_t) | | ns_makecanon | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,const char *,size_t) | | OPENSSL_strncasecmp | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,const char *,size_t) | | c_strncasecmp | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,uint16_t *,size_t) | | uv_wtf8_to_utf16 | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,unsigned char *,size_t) | | OSSL_PARAM_construct_BN | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,void **,size_t) | | OSSL_PARAM_construct_octet_ptr | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,void *,size_t) | | OSSL_PARAM_construct_octet_string | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const char *,void *,size_t) | | uv__random_readpath | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const charmap_t *,const char *,size_t) | | charmap_find_symbol | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const charmap_t *,const char *,size_t) | | charmap_find_value | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const repertoire_t *,const char *,size_t) | | repertoire_find_value | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const sockaddr *,char *,size_t) | | uv_ip_name | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const sockaddr_in6 *,char *,size_t) | | uv_ip6_name | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const sockaddr_in *,char *,size_t) | | uv_ip4_name | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const unsigned char *,char *,size_t) | | ___ns_name_ntop | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const unsigned char *,size_t,size_t) | | ossl_rand_pool_attach | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const void *,size_t,size_t) | | support_blob_repeat_allocate | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const void *,size_t,size_t) | | support_blob_repeat_allocate_shared | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const_nis_name,char *,size_t) | | nis_domain_of_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const_nis_name,char *,size_t) | | nis_leaf_of_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (const_nis_name,char *,size_t) | | nis_name_of_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (curl_mimepart *,const char *,size_t) | | curl_mime_data | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (curve448_scalar_t,const unsigned char *,size_t) | | ossl_curve448_scalar_decode_long | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (dynhds *,const char *,size_t) | | Curl_dynhds_get | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (dynhds *,const char *,size_t) | | Curl_dynhds_h1_add_line | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (dynhds *,size_t,size_t) | | Curl_dynhds_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int *,const char *,size_t) | | Curl_http_decode_status | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int *,int *,size_t) | | EVP_PBE_get | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,char *,size_t) | | Curl_strerror | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,char *,size_t) | | __strerror_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,char *,size_t) | | __ttyname_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,char *,size_t) | | uv_err_name_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,char *,size_t) | | uv_strerror_r | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,const void *,size_t) | | _nl_intern_locale_data | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (int,const void *,size_t) | | _nl_intern_locale_data | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,const void *,size_t) | | writeall | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (int,const void *,size_t) | | writeall | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,int,size_t) | | BrotliEncoderEstimatePeakMemoryUsage | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (int,void *,size_t) | | __readall | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (locale_file *,const uint32_t *,size_t) | | add_locale_uint32_array | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_buf *,uint8_t *,size_t) | | nghttp2_buf_wrap_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_extension *,nghttp2_origin_entry *,size_t) | | nghttp2_frame_origin_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_extpri_parse_priority | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_http_parse_priority | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_hd_deflater *,const nghttp2_nv *,size_t) | | nghttp2_hd_deflate_bound | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv2 | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_session *,int32_t,size_t) | | nghttp2_session_consume | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_session *,nghttp2_settings_entry *,size_t) | | nghttp2_session_update_local_settings | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (nghttp2_settings *,nghttp2_settings_entry *,size_t) | | nghttp2_frame_unpack_settings_payload | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (ns_rr_cursor *,const unsigned char *,size_t) | | __ns_rr_cursor_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (pthread_attr_t *,void *,size_t) | | __pthread_attr_setstack | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (scratch_buffer *,size_t,size_t) | | __libc_scratch_buffer_set_array_size | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (sfparse_parser *,const uint8_t *,size_t) | | sfparse_parser_init | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (size_t,OSSL_QTX_IOVEC *,size_t) | | ossl_quic_sstream_adjust_iov | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (stack_st_SCT **,const unsigned char **,size_t) | | o2i_SCT_LIST | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (ucs4_t *,const uint8_t *,size_t) | | u8_mbtouc_aux | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (uint8_t *,const nghttp2_settings_entry *,size_t) | | nghttp2_frame_pack_settings_payload | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 1 | -| taint.cpp:538:7:538:13 | mempcpy | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char **,const char *,size_t) | | _libssh2_store_str | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char **,const unsigned char *,size_t) | | _libssh2_store_bignum2_bytes | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char *,const unsigned char *,size_t) | | BUF_reverse | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char *,size_t *,size_t) | | ossl_cipher_padblock | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned char *,size_t *,size_t) | | ossl_cipher_unpadblock | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (unsigned int,char *,size_t) | | __initstate | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (uv_thread_t *,char *,size_t) | | uv__thread_getname | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (uv_thread_t *,char *,size_t) | | uv_thread_getaffinity | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (uv_thread_t *,char *,size_t) | | uv_thread_getname | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (void **,size_t,size_t) | | __posix_memalign | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (void *,size_t,size_t) | | Curl_hash_str | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (void *,size_t,size_t) | | __libc_reallocarray | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (void *,unsigned char *,size_t) | | ossl_drbg_clear_seed | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (wchar_t *,const wchar_t *,size_t) | | __wmemcpy | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (wchar_t *,const wchar_t *,size_t) | | __wmemmove | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcat | 2 | -| taint.cpp:538:7:538:13 | mempcpy | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcpy | 2 | -| taint.cpp:540:6:540:17 | test_mempcpy | (int *) | | rresvport | 0 | -| taint.cpp:548:7:548:13 | memccpy | (BIGNUM **,EVP_PKEY *,const unsigned char *,size_t) | | _libssh2_ecdh_gen_k | 3 | -| taint.cpp:548:7:548:13 | memccpy | (BIGNUM *,BIGNUM *,const unsigned char **,size_t) | | ossl_decode_der_dsa_sig | 3 | -| taint.cpp:548:7:548:13 | memccpy | (BIO *,X509 *,unsigned long,unsigned long) | | X509_print_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (BIO *,X509_ACERT *,unsigned long,unsigned long) | | X509_ACERT_print_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (BIO *,X509_REQ *,unsigned long,unsigned long) | | X509_REQ_print_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (BIO *,const X509_NAME *,int,unsigned long) | | X509_NAME_print_ex | 2 | -| taint.cpp:548:7:548:13 | memccpy | (BIO *,const X509_NAME *,int,unsigned long) | | X509_NAME_print_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (CCM128_CONTEXT *,const unsigned char *,size_t,size_t) | | CRYPTO_ccm128_setiv | 3 | -| taint.cpp:548:7:548:13 | memccpy | (CCM128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_ccm128_decrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (CCM128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_ccm128_encrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (EVP_KEYMGMT *,void *,char *,size_t) | | evp_keymgmt_util_get_deflt_digest_name | 3 | -| taint.cpp:548:7:548:13 | memccpy | (FILE *,const X509_NAME *,int,unsigned long) | | X509_NAME_print_ex_fp | 2 | -| taint.cpp:548:7:548:13 | memccpy | (FILE *,const X509_NAME *,int,unsigned long) | | X509_NAME_print_ex_fp | 3 | -| taint.cpp:548:7:548:13 | memccpy | (GCM128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_gcm128_decrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (GCM128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_gcm128_encrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (KECCAK1600_CTX *,unsigned char,size_t,size_t) | | ossl_keccak_init | 3 | -| taint.cpp:548:7:548:13 | memccpy | (LIBSSH2_CHANNEL *,int,char *,size_t) | | _libssh2_channel_read | 3 | -| taint.cpp:548:7:548:13 | memccpy | (LIBSSH2_CHANNEL *,int,char *,size_t) | | libssh2_channel_read_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (LIBSSH2_CHANNEL *,int,const char *,size_t) | | libssh2_channel_write_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (LIBSSH2_CHANNEL *,int,const unsigned char *,size_t) | | _libssh2_channel_write | 3 | -| taint.cpp:548:7:548:13 | memccpy | (MemoryManager *,HistogramCommand *,uint32_t *,size_t) | | BrotliHistogramReindexCommand | 3 | -| taint.cpp:548:7:548:13 | memccpy | (MemoryManager *,HistogramDistance *,uint32_t *,size_t) | | BrotliHistogramReindexDistance | 3 | -| taint.cpp:548:7:548:13 | memccpy | (MemoryManager *,HistogramLiteral *,uint32_t *,size_t) | | BrotliHistogramReindexLiteral | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OCB128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_ocb128_decrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OCB128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | CRYPTO_ocb128_encrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_HPKE_CTX *,const char *,const unsigned char *,size_t) | | OSSL_HPKE_CTX_set1_psk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_LIB_CTX *,const OSSL_PROPERTY_LIST *,char *,size_t) | | ossl_property_list_to_string | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_PARAM[],size_t,size_t,unsigned long) | | ossl_digest_default_get_params | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_PARAM_BLD *,const char *,const BIGNUM *,size_t) | | OSSL_PARAM_BLD_push_BN_pad | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_PARAM_BLD *,const char *,const char *,size_t) | | OSSL_PARAM_BLD_push_utf8_string | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_PARAM_BLD *,const char *,const void *,size_t) | | OSSL_PARAM_BLD_push_octet_string | 3 | -| taint.cpp:548:7:548:13 | memccpy | (OSSL_RECORD_LAYER *,size_t,size_t,size_t) | | tls_setup_write_buffer | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_chunked_cbc | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_chunked_cfb8 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_chunked_cfb128 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_chunked_ofb128 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_cbc | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_cfb1 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_cfb8 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_cfb128 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_ctr | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_generic_ofb128 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_cbc | 3 | -| taint.cpp:548:7:548:13 | memccpy | (PROV_CIPHER_CTX *,unsigned char *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_ecb | 3 | -| taint.cpp:548:7:548:13 | memccpy | (RAND_POOL *,const unsigned char *,size_t,size_t) | | ossl_rand_pool_add | 3 | -| taint.cpp:548:7:548:13 | memccpy | (SIV128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | ossl_siv128_decrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (SIV128_CONTEXT *,const unsigned char *,unsigned char *,size_t) | | ossl_siv128_encrypt | 3 | -| taint.cpp:548:7:548:13 | memccpy | (SSL *,uint64_t,const SSL_SHUTDOWN_EX_ARGS *,size_t) | | SSL_shutdown_ex | 3 | -| taint.cpp:548:7:548:13 | memccpy | (SSL_CONNECTION *,unsigned char **,const void *,size_t) | | construct_key_exchange_tbs | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,const void *,size_t,size_t) | | WPACKET_sub_memcpy__ | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,int,const unsigned char *,size_t) | | ossl_DER_w_octet_string | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,int,const unsigned char *,size_t) | | ossl_DER_w_precompiled | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,size_t,unsigned char **,size_t) | | WPACKET_sub_allocate_bytes__ | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,size_t,unsigned char **,size_t) | | WPACKET_sub_reserve_bytes__ | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,uint64_t,const unsigned char *,size_t) | | ossl_quic_wire_encode_transport_param_bytes | 3 | -| taint.cpp:548:7:548:13 | memccpy | (WPACKET *,unsigned char *,size_t,size_t) | | WPACKET_init_static_len | 3 | -| taint.cpp:548:7:548:13 | memccpy | (alloc_buffer *,size_t,size_t,size_t) | | __libc_alloc_buffer_alloc_array | 3 | -| taint.cpp:548:7:548:13 | memccpy | (char *,const wchar_t *,size_t,size_t) | | __wcstombs_chk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (char *__restrict__,const char *__restrict__,size_t,size_t) | | __strlcat_chk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (char *__restrict__,const char *__restrict__,size_t,size_t) | | __strlcpy_chk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const ML_DSA_KEY *,int,const uint8_t *,size_t) | | ossl_ml_dsa_mu_init | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const VECTOR *,uint32_t,uint8_t *,size_t) | | ossl_ml_dsa_w1_encode | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const char *,const char *,const char *,unsigned long) | | __dngettext | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const char *,u_char *,unsigned char *,size_t) | | __b64_pton | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const nis_error,const char *,char *,size_t) | | nis_sperror_r | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const u128[16],uint8_t *,const uint8_t *,size_t) | | ossl_polyval_ghash_hash | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const unsigned char *,size_t,unsigned char *,size_t) | | Curl_hexencode | 3 | -| taint.cpp:548:7:548:13 | memccpy | (const void *,size_t,const void *,size_t) | | __memmem | 3 | -| taint.cpp:548:7:548:13 | memccpy | (dynarray_header *,size_t,void *,size_t) | | __libc_dynarray_resize | 3 | -| taint.cpp:548:7:548:13 | memccpy | (dynarray_header *,size_t,void *,size_t) | | __libc_dynarray_resize_clear | 3 | -| taint.cpp:548:7:548:13 | memccpy | (in_addr_t,uint32_t,char *,size_t) | | inet_neta | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int *,X509 *,stack_st_X509 *,unsigned long) | | X509_chain_check_suiteb | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,ENGINE *,const unsigned char *,size_t) | | EVP_PKEY_new_raw_private_key | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,ENGINE *,const unsigned char *,size_t) | | EVP_PKEY_new_raw_public_key | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,char *,size_t,size_t) | | __ttyname_r_chk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,const char *,void *,size_t) | | inet_net_pton | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,const regex_t *,char *,size_t) | | jim_regerror | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,const void *,char *,size_t) | | uv_inet_ntop | 3 | -| taint.cpp:548:7:548:13 | memccpy | (int,int,size_t,size_t) | | ossl_rand_pool_new | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_extension *,int32_t,uint8_t *,size_t) | | nghttp2_frame_priority_update_init | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_goaway *,const uint8_t *,uint8_t *,size_t) | | nghttp2_frame_unpack_goaway_payload | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_hd_deflater *,nghttp2_bufs *,const nghttp2_nv *,size_t) | | nghttp2_hd_deflate_hd_bufs | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_session *,int32_t,const nghttp2_nv *,size_t) | | nghttp2_submit_trailer | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_session *,uint8_t,const nghttp2_settings_entry *,size_t) | | nghttp2_session_add_settings | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_session *,uint8_t,const nghttp2_settings_entry *,size_t) | | nghttp2_submit_settings | 3 | -| taint.cpp:548:7:548:13 | memccpy | (nghttp2_settings *,uint8_t,nghttp2_settings_entry *,size_t) | | nghttp2_frame_settings_init | 3 | -| taint.cpp:548:7:548:13 | memccpy | (resolv_context *,const char *,char *,size_t) | | __res_context_hostalias | 3 | -| taint.cpp:548:7:548:13 | memccpy | (size_t,size_t,size_t,size_t) | | Curl_multi_handle | 3 | -| taint.cpp:548:7:548:13 | memccpy | (u64[2],const u128[16],const u8 *,size_t) | | ossl_gcm_ghash_4bit | 3 | -| taint.cpp:548:7:548:13 | memccpy | (u_long,unsigned long,char *,size_t) | | ns_format_ttl | 3 | -| taint.cpp:548:7:548:13 | memccpy | (uint8_t *,size_t,const nghttp2_settings_entry *,size_t) | | nghttp2_pack_settings_payload | 3 | -| taint.cpp:548:7:548:13 | memccpy | (uint8_t *,size_t,const nghttp2_settings_entry *,size_t) | | nghttp2_pack_settings_payload2 | 3 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned char *,const unsigned char *,const unsigned char *,size_t) | | _libssh2_xor_data | 3 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned char *,size_t,const unsigned char *,size_t) | | _libssh2_kex_agree_instr | 3 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned long *,const unsigned long *,int,unsigned long) | | bn_mul_add_words | 2 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned long *,const unsigned long *,int,unsigned long) | | bn_mul_add_words | 3 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned long *,const unsigned long *,int,unsigned long) | | bn_mul_words | 2 | -| taint.cpp:548:7:548:13 | memccpy | (unsigned long *,const unsigned long *,int,unsigned long) | | bn_mul_words | 3 | -| taint.cpp:548:7:548:13 | memccpy | (uv_thread_t *,char *,char *,size_t) | | uv_thread_setaffinity | 3 | -| taint.cpp:548:7:548:13 | memccpy | (void *,const void *,int,size_t) | | __memccpy | 0 | -| taint.cpp:548:7:548:13 | memccpy | (void *,const void *,int,size_t) | | __memccpy | 1 | -| taint.cpp:548:7:548:13 | memccpy | (void *,const void *,int,size_t) | | __memccpy | 2 | -| taint.cpp:548:7:548:13 | memccpy | (void *,const void *,int,size_t) | | __memccpy | 3 | -| taint.cpp:548:7:548:13 | memccpy | (void *,unsigned char *,size_t *,size_t) | | ossl_ccm_stream_final | 3 | -| taint.cpp:548:7:548:13 | memccpy | (void *,unsigned char *,size_t *,size_t) | | ossl_cipher_generic_block_final | 3 | -| taint.cpp:548:7:548:13 | memccpy | (void *,unsigned char *,size_t *,size_t) | | ossl_gcm_stream_final | 3 | -| taint.cpp:548:7:548:13 | memccpy | (wchar_t *,const char *,size_t,size_t) | | __mbstowcs_chk | 3 | -| taint.cpp:548:7:548:13 | memccpy | (wchar_t *,const wchar_t *,size_t,size_t) | | __wmemmove_chk | 3 | -| taint.cpp:550:6:550:17 | test_memccpy | (int *) | | rresvport | 0 | -| taint.cpp:558:7:558:12 | strcat | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:558:7:558:12 | strcat | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:558:7:558:12 | strcat | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:558:7:558:12 | strcat | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:558:7:558:12 | strcat | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:558:7:558:12 | strcat | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:558:7:558:12 | strcat | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:558:7:558:12 | strcat | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:558:7:558:12 | strcat | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:558:7:558:12 | strcat | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:558:7:558:12 | strcat | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:558:7:558:12 | strcat | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:558:7:558:12 | strcat | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:558:7:558:12 | strcat | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:558:7:558:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:558:7:558:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:558:7:558:12 | strcat | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:558:7:558:12 | strcat | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:558:7:558:12 | strcat | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:558:7:558:12 | strcat | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:558:7:558:12 | strcat | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:558:7:558:12 | strcat | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:558:7:558:12 | strcat | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:558:7:558:12 | strcat | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:558:7:558:12 | strcat | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:558:7:558:12 | strcat | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:558:7:558:12 | strcat | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:558:7:558:12 | strcat | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:558:7:558:12 | strcat | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:558:7:558:12 | strcat | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:558:7:558:12 | strcat | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:558:7:558:12 | strcat | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:558:7:558:12 | strcat | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:558:7:558:12 | strcat | (char **,const char *) | | __strsep | 1 | -| taint.cpp:558:7:558:12 | strcat | (char *,const char *) | | xstrdup | 0 | -| taint.cpp:558:7:558:12 | strcat | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:558:7:558:12 | strcat | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | advance | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | step | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:558:7:558:12 | strcat | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:558:7:558:12 | strcat | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:558:7:558:12 | strcat | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:558:7:558:12 | strcat | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:558:7:558:12 | strcat | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:558:7:558:12 | strcat | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:558:7:558:12 | strcat | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:558:7:558:12 | strcat | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:558:7:558:12 | strcat | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:558:7:558:12 | strcat | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:558:7:558:12 | strcat | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:558:7:558:12 | strcat | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:558:7:558:12 | strcat | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:558:7:558:12 | strcat | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:558:7:558:12 | strcat | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:558:7:558:12 | strcat | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:558:7:558:12 | strcat | (int,const char *) | | gzdopen | 1 | -| taint.cpp:558:7:558:12 | strcat | (int,const char *) | | setlocale | 1 | -| taint.cpp:558:7:558:12 | strcat | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:558:7:558:12 | strcat | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:558:7:558:12 | strcat | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:558:7:558:12 | strcat | (long *,const char *) | | str2num | 1 | -| taint.cpp:558:7:558:12 | strcat | (long *,const char *) | | str2unum | 1 | -| taint.cpp:558:7:558:12 | strcat | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:558:7:558:12 | strcat | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:558:7:558:12 | strcat | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:558:7:558:12 | strcat | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:558:7:558:12 | strcat | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:558:7:558:12 | strcat | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:558:7:558:12 | strcat | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:558:7:558:12 | strcat | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:558:7:558:12 | strcat | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:558:7:558:12 | strcat | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:560:6:560:16 | test_strcat | (PKCS7 *,int,long,char *) | | PKCS7_ctrl | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (SSL_CTX *,srpsrvparm *,char *,char *) | | set_up_srp_verifier_file | 2 | -| taint.cpp:560:6:560:16 | test_strcat | (SSL_CTX *,srpsrvparm *,char *,char *) | | set_up_srp_verifier_file | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (SSL_HMAC *,void *,size_t,char *) | | ssl_hmac_init | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (SSL_HMAC *,void *,size_t,char *) | | ssl_hmac_old_init | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (_IO_strfile *,char *,int,char *) | | _IO_str_init_static | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (action **,e_action,symbol *,char *) | | Action_add | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (const char *,const char *,char *,char *) | | uv__idna_toascii | 2 | -| taint.cpp:560:6:560:16 | test_strcat | (const char *,const char *,char *,char *) | | uv__idna_toascii | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (int,const u_char *,const unsigned char *,char *) | | inet_nsap_ntoa | 3 | -| taint.cpp:560:6:560:16 | test_strcat | (int,u_int,u_int,char *) | | svcunix_create | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (..(*)(..),..(*)(..),..(*)(..),void *) | | libssh2_session_init_ex | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,CMS_ContentInfo **,pem_password_cb *,void *) | | PEM_read_bio_CMS | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,DH **,pem_password_cb *,void *) | | PEM_read_bio_DHparams | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSAPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSA_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,DSA **,pem_password_cb *,void *) | | PEM_read_bio_DSAparams | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EC_GROUP **,pem_password_cb *,void *) | | PEM_read_bio_ECPKParameters | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_bio_ECPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_bio_EC_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_bio_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_bio_PrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,EVP_PKEY **,pem_password_cb *,void *) | | d2i_PKCS8PrivateKey_bio | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,NETSCAPE_CERT_SEQUENCE **,pem_password_cb *,void *) | | PEM_read_bio_NETSCAPE_CERT_SEQUENCE | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,PKCS7 **,pem_password_cb *,void *) | | PEM_read_bio_PKCS7 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,PKCS8_PRIV_KEY_INFO **,pem_password_cb *,void *) | | PEM_read_bio_PKCS8_PRIV_KEY_INFO | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSAPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSAPublicKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,RSA **,pem_password_cb *,void *) | | PEM_read_bio_RSA_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,SSL_SESSION **,pem_password_cb *,void *) | | PEM_read_bio_SSL_SESSION | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509 **,pem_password_cb *,void *) | | PEM_read_bio_X509 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509 **,pem_password_cb *,void *) | | PEM_read_bio_X509_AUX | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509_ACERT **,pem_password_cb *,void *) | | PEM_read_bio_X509_ACERT | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509_CRL **,pem_password_cb *,void *) | | PEM_read_bio_X509_CRL | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509_PUBKEY **,pem_password_cb *,void *) | | PEM_read_bio_X509_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509_REQ **,pem_password_cb *,void *) | | PEM_read_bio_X509_REQ | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,X509_SIG **,pem_password_cb *,void *) | | PEM_read_bio_PKCS8 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,size_t,..(*)(..),void *) | | ossl_quic_demux_new | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BIO *,stack_st_X509_INFO *,pem_password_cb *,void *) | | PEM_X509_INFO_read_bio | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (BrotliDecoderStateInternal *,brotli_alloc_func,brotli_free_func,void *) | | BrotliDecoderStateInit | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (Curl_easy *,connectdata *,Curl_cpool_conn_do_cb *,void *) | | Curl_cpool_do_locked | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (Curl_hash *,void *,size_t,void *) | | Curl_hash_add | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (DSO *,int,long,void *) | | DSO_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (EVP_CIPHER_CTX *,int,int,void *) | | EVP_CIPHER_CTX_ctrl | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (EVP_CIPHER_CTX *,int,int,void *) | | EVP_CIPHER_CTX_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,CMS_ContentInfo **,pem_password_cb *,void *) | | PEM_read_CMS | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,DH **,pem_password_cb *,void *) | | PEM_read_DHparams | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSAPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSA_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,DSA **,pem_password_cb *,void *) | | PEM_read_DSAparams | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EC_GROUP **,pem_password_cb *,void *) | | PEM_read_ECPKParameters | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_ECPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EC_KEY **,pem_password_cb *,void *) | | PEM_read_EC_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | PEM_read_PrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,EVP_PKEY **,pem_password_cb *,void *) | | d2i_PKCS8PrivateKey_fp | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,NETSCAPE_CERT_SEQUENCE **,pem_password_cb *,void *) | | PEM_read_NETSCAPE_CERT_SEQUENCE | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,PKCS7 **,pem_password_cb *,void *) | | PEM_read_PKCS7 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,PKCS8_PRIV_KEY_INFO **,pem_password_cb *,void *) | | PEM_read_PKCS8_PRIV_KEY_INFO | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSAPrivateKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSAPublicKey | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,RSA **,pem_password_cb *,void *) | | PEM_read_RSA_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,SSL_SESSION **,pem_password_cb *,void *) | | PEM_read_SSL_SESSION | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509 **,pem_password_cb *,void *) | | PEM_read_X509 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509 **,pem_password_cb *,void *) | | PEM_read_X509_AUX | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509_ACERT **,pem_password_cb *,void *) | | PEM_read_X509_ACERT | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509_CRL **,pem_password_cb *,void *) | | PEM_read_X509_CRL | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509_PUBKEY **,pem_password_cb *,void *) | | PEM_read_X509_PUBKEY | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509_REQ **,pem_password_cb *,void *) | | PEM_read_X509_REQ | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,X509_SIG **,pem_password_cb *,void *) | | PEM_read_PKCS8 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (FILE *,stack_st_X509_INFO *,pem_password_cb *,void *) | | PEM_X509_INFO_read | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (HT *,size_t,..(*)(..),void *) | | ossl_ht_filter | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (MD5_SHA1_CTX *,int,int,void *) | | ossl_md5_sha1_ctrl | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (MD5_SHA1_CTX *,int,int,void *) | | ossl_md5_sha1_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (MemoryManager *,brotli_alloc_func,brotli_free_func,void *) | | BrotliInitMemoryManager | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (OCB128_CONTEXT *,OCB128_CONTEXT *,void *,void *) | | CRYPTO_ocb128_copy_ctx | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (OPENSSL_LHASH *,OPENSSL_LH_DOALL_FUNCARG_THUNK,OPENSSL_LH_DOALL_FUNCARG,void *) | | OPENSSL_LH_doall_arg_thunk | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (OSSL_PROVIDER *,int,..(*)(..),void *) | | evp_names_do_all | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (OSSL_QTX *,ossl_mutate_packet_cb,ossl_finish_mutate_cb,void *) | | ossl_qtx_set_mutator | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (QUIC_CHANNEL *,ossl_mutate_packet_cb,ossl_finish_mutate_cb,void *) | | ossl_quic_channel_set_mutator | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (QUIC_RXFC *,uint64_t,..(*)(..),void *) | | ossl_quic_rxfc_init_standalone | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SHA_CTX *,int,int,void *) | | ossl_sha1_ctrl | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SHA_CTX *,int,int,void *) | | ossl_sha1_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL *,int,long,void *) | | SSL_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL *,int,long,void *) | | dtls1_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL *,int,long,void *) | | ossl_quic_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL *,int,long,void *) | | ssl3_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL *,ossl_statem_mutate_handshake_cb,ossl_statem_finish_mutate_handshake_cb,void *) | | ossl_statem_set_mutator | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL_CTX *,SSL_CTX_generate_session_ticket_fn,SSL_CTX_decrypt_session_ticket_fn,void *) | | SSL_CTX_set_session_ticket_cb | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL_CTX *,int,long,void *) | | SSL_CTX_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL_CTX *,int,long,void *) | | ossl_quic_ctx_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (SSL_CTX *,int,long,void *) | | ssl3_ctx_ctrl | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (X509_ALGOR *,ASN1_OBJECT *,int,void *) | | X509_ALGOR_set0 | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (X509_ALGOR *,ASN1_OBJECT *,int,void *) | | X509_ALGOR_set0 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | PEM_def_callback | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | PEM_def_callback | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | ossl_pw_pem_password | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | ossl_pw_pem_password | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | ossl_pw_pvk_password | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,int,int,void *) | | ossl_pw_pvk_password | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,size_t,size_t,void *) | | Curl_ftp_parselist | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,size_t,size_t,void *) | | Curl_mime_read | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,size_t,size_t,void *) | | tool_header_cb | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,size_t,size_t,void *) | | tool_mime_stdin_read | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (char *,size_t,size_t,void *) | | tool_read_cb | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (const OSSL_NAMEMAP *,int,..(*)(..),void *) | | ossl_namemap_doall_names | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (const char *,int,void *,void *) | | support_readdir_r_check | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (hash_table *,const void *,size_t,void *) | | insert_entry | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (int,unsigned long,..(*)(..),void *) | | RSA_generate_key | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (nghttp2_session *,const uint8_t *,size_t,void *) | | nghttp2_session_upgrade | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,const char *,..(*)(..),void *) | | sqlite3_recover_init_sql | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,const char *,..(*)(..),void *) | | sqlite3_rtree_geometry_callback | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,const char *,const sqlite3_module *,void *) | | sqlite3_create_module | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,const char *,int,void *) | | sqlite3_file_control | 2 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,const char *,int,void *) | | sqlite3_file_control | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,int,..(*)(..),void *) | | sqlite3_progress_handler | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (sqlite3 *,unsigned int,..(*)(..),void *) | | sqlite3_trace_v2 | 3 | -| taint.cpp:570:16:570:25 | _mbsncat_l | (void *,const char *,const char *,void *) | | _dl_vsym | 3 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (ENGINE *,const char *,long,void *,..(*)(..),int) | | ENGINE_ctrl_cmd | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (ENGINE_TABLE **,ENGINE_CLEANUP_CB *,ENGINE *,const int *,int,int) | | engine_table_register | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (EVP_CIPHER_CTX **,..(*)(..),int,unsigned char *,size_t,int) | | _libssh2_cipher_crypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (EVP_CIPHER_CTX *,const EVP_CIPHER *,ENGINE *,const unsigned char *,const unsigned char *,int) | | EVP_CipherInit_ex | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (FILE *,const char *,int,int,int,int) | | _IO_file_open | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (GENERAL_NAME *,const X509V3_EXT_METHOD *,X509V3_CTX *,int,const char *,int) | | a2i_GENERAL_NAME | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (Jim_Interp *,Jim_Obj *,Jim_Obj *const *,int,Jim_Obj **,int) | | Jim_DictKeysVector | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (Jim_Interp *,Jim_Obj *,Jim_Obj *const *,int,Jim_Obj *,int) | | Jim_SetDictKeysVector | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (Jim_Interp *,Jim_Obj *,const char *const *,int *,const char *,int) | | Jim_GetEnum | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (LIBSSH2_KNOWNHOSTS *,libssh2_knownhost *,char *,size_t,size_t *,int) | | libssh2_knownhost_writeline | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (LIBSSH2_SFTP *,const char *,unsigned int,char *,unsigned int,int) | | libssh2_sftp_symlink_ex | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (LIBSSH2_SFTP *,const char *,unsigned int,unsigned long,long,int) | | libssh2_sftp_open_ex | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (PKCS7 *,stack_st_X509 *,X509_STORE *,BIO *,BIO *,int) | | PKCS7_verify | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (QUIC_STREAM_MAP *,..(*)(..),void *,QUIC_RXFC *,QUIC_RXFC *,int) | | ossl_quic_stream_map_init | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (RSA *,const unsigned char *,const EVP_MD *,const EVP_MD *,const unsigned char *,int) | | RSA_verify_PKCS1_PSS_mgf1 | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (RSA *,unsigned char *,const unsigned char *,const EVP_MD *,const EVP_MD *,int) | | RSA_padding_add_PKCS1_PSS_mgf1 | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (SSL_CONNECTION *,PACKET *,unsigned int,RAW_EXTENSION **,size_t *,int) | | tls_collect_extensions | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (SSL_CONNECTION *,int,RAW_EXTENSION *,X509 *,size_t,int) | | tls_parse_all_extensions | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (UI *,const char *,int,char *,int,int) | | UI_add_input_string | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (UI *,const char *,int,char *,int,int) | | UI_dup_input_string | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (X509V3_CTX *,X509 *,X509 *,X509_REQ *,X509_CRL *,int) | | X509V3_set_ctx | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (X509_ALGOR *,const ASN1_ITEM *,const char *,int,void *,int) | | PKCS12_item_i2d_encrypt | 4 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (X509_ALGOR *,const ASN1_ITEM *,const char *,int,void *,int) | | PKCS12_item_i2d_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (X509_PUBKEY *,ASN1_OBJECT *,int,void *,unsigned char *,int) | | X509_PUBKEY_set0_param | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const BIGNUM *,int,..(*)(..),BN_CTX *,void *,int) | | BN_is_prime_fasttest | 4 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const BIGNUM *,int,..(*)(..),BN_CTX *,void *,int) | | BN_is_prime_fasttest | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const X509_ALGOR *,const ASN1_ITEM *,const char *,int,const ASN1_OCTET_STRING *,int) | | PKCS12_item_decrypt_d2i | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const XTS128_CONTEXT *,const unsigned char[16],const unsigned char *,unsigned char *,size_t,int) | | CRYPTO_xts128_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const XTS128_CONTEXT *,const unsigned char[16],const unsigned char *,unsigned char *,size_t,int) | | ossl_crypto_xts128gb_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const char *,const char *,const char *,int,unsigned long,int) | | __dcigettext | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const char *,const char *,int,int,unsigned char *,int) | | ___res_querydomain | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const char *,const char *__restrict__,char **,char **__restrict__,int,int) | | __strtol_internal | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const char *,const char *__restrict__,char **,char **__restrict__,int,int) | | __strtoul_internal | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const u_char *,const unsigned char *,const u_char *,const unsigned char *,ns_sect,int) | | ns_skiprr | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,DES_key_schedule *,DES_cblock *,int) | | DES_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,DES_key_schedule *,DES_cblock *,int) | | DES_ncbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,IDEA_KEY_SCHEDULE *,unsigned char *,int) | | IDEA_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,RC2_KEY *,unsigned char *,int) | | RC2_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,const BF_KEY *,unsigned char *,int) | | BF_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,long,const CAST_KEY *,unsigned char *,int) | | CAST_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const unsigned char *,unsigned char *,size_t,const SEED_KEY_SCHEDULE *,unsigned char[16],int) | | SEED_cbc_encrypt | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const void *,const void *,int,int,..(*)(..),int) | | OBJ_bsearch_ex_ | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const void *,const void *,int,int,..(*)(..),int) | | ossl_bsearch | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const wchar_t *,const wchar_t *__restrict__,wchar_t **,wchar_t **__restrict__,int,int) | | __wcstol_internal | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (const wchar_t *,const wchar_t *__restrict__,wchar_t **,wchar_t **__restrict__,int,int) | | __wcstoul_internal | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (int,char **,gengetopt_args_info *,int,int,int) | | cmdline_parser2 | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (nghttp2_hd_inflater *,nghttp2_hd_nv *,int *,const uint8_t *,size_t,int) | | nghttp2_hd_inflate_hd_nv | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (nghttp2_hd_inflater *,nghttp2_nv *,int *,const uint8_t *,size_t,int) | | nghttp2_hd_inflate_hd2 | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (nghttp2_hd_inflater *,nghttp2_nv *,int *,const uint8_t *,size_t,int) | | nghttp2_hd_inflate_hd3 | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (nghttp2_hd_inflater *,nghttp2_nv *,int *,uint8_t *,size_t,int) | | nghttp2_hd_inflate_hd | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (res_state,const char *,int,int,unsigned char *,int) | | ___res_nquery | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (res_state,const char *,int,int,unsigned char *,int) | | ___res_nsearch | 5 | -| taint.cpp:572:6:572:20 | test__mbsncat_l | (unsigned char *,int,const unsigned char *,int,const unsigned char *,int) | | RSA_padding_add_PKCS1_OAEP | 5 | -| taint.cpp:589:7:589:12 | strsep | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:589:7:589:12 | strsep | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:589:7:589:12 | strsep | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:589:7:589:12 | strsep | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:589:7:589:12 | strsep | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:589:7:589:12 | strsep | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:589:7:589:12 | strsep | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:589:7:589:12 | strsep | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:589:7:589:12 | strsep | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:589:7:589:12 | strsep | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:589:7:589:12 | strsep | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:589:7:589:12 | strsep | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:589:7:589:12 | strsep | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:589:7:589:12 | strsep | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:589:7:589:12 | strsep | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:589:7:589:12 | strsep | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:589:7:589:12 | strsep | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:589:7:589:12 | strsep | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:589:7:589:12 | strsep | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:589:7:589:12 | strsep | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:589:7:589:12 | strsep | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:589:7:589:12 | strsep | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:589:7:589:12 | strsep | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:589:7:589:12 | strsep | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:589:7:589:12 | strsep | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:589:7:589:12 | strsep | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:589:7:589:12 | strsep | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:589:7:589:12 | strsep | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:589:7:589:12 | strsep | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:589:7:589:12 | strsep | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:589:7:589:12 | strsep | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:589:7:589:12 | strsep | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:589:7:589:12 | strsep | (char **,const char *) | | Curl_setstropt | 0 | -| taint.cpp:589:7:589:12 | strsep | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:589:7:589:12 | strsep | (char **,const char *) | | __strsep | 0 | -| taint.cpp:589:7:589:12 | strsep | (char **,const char *) | | __strsep | 1 | -| taint.cpp:589:7:589:12 | strsep | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:589:7:589:12 | strsep | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | advance | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | step | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:589:7:589:12 | strsep | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:589:7:589:12 | strsep | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:589:7:589:12 | strsep | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:589:7:589:12 | strsep | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:589:7:589:12 | strsep | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:589:7:589:12 | strsep | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:589:7:589:12 | strsep | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:589:7:589:12 | strsep | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:589:7:589:12 | strsep | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:589:7:589:12 | strsep | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:589:7:589:12 | strsep | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:589:7:589:12 | strsep | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:589:7:589:12 | strsep | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:589:7:589:12 | strsep | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:589:7:589:12 | strsep | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:589:7:589:12 | strsep | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:589:7:589:12 | strsep | (int,const char *) | | gzdopen | 1 | -| taint.cpp:589:7:589:12 | strsep | (int,const char *) | | setlocale | 1 | -| taint.cpp:589:7:589:12 | strsep | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:589:7:589:12 | strsep | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:589:7:589:12 | strsep | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:589:7:589:12 | strsep | (long *,const char *) | | str2num | 1 | -| taint.cpp:589:7:589:12 | strsep | (long *,const char *) | | str2unum | 1 | -| taint.cpp:589:7:589:12 | strsep | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:589:7:589:12 | strsep | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:589:7:589:12 | strsep | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:589:7:589:12 | strsep | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:589:7:589:12 | strsep | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:589:7:589:12 | strsep | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:589:7:589:12 | strsep | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:589:7:589:12 | strsep | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:589:7:589:12 | strsep | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:589:7:589:12 | strsep | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | _IO_gets | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | __mktemp | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | __nis_default_group | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | __nis_default_owner | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | __xpg_basename | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | ctermid | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | cuserid | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | defossilize | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | des_setparity | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | dirname | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | getwd | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | make_uppercase | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | mkdtemp | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | next_item | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | | strfry | 0 | -| taint.cpp:591:6:591:16 | test_strsep | (char *) | CStringT | CStringT | 0 | -| taint.cpp:602:7:602:13 | _strinc | (..(*)(..),void *) | | OSSL_STORE_do_all_loaders | 1 | -| taint.cpp:602:7:602:13 | _strinc | (..(*)(..),void *) | | _dlerror_run | 1 | -| taint.cpp:602:7:602:13 | _strinc | (..(*)(..),void *) | __pthread_cleanup_class | __pthread_cleanup_class | 1 | -| taint.cpp:602:7:602:13 | _strinc | (ASN1_SCTX *,void *) | | ASN1_SCTX_set_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (BIO *,void *) | | BIO_set_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (CONF_IMODULE *,void *) | | CONF_imodule_set_usr_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (CONF_MODULE *,void *) | | CONF_module_set_usr_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (CRYPTO_THREAD_LOCAL *,void *) | | CRYPTO_THREAD_set_local | 1 | -| taint.cpp:602:7:602:13 | _strinc | (Curl_tree *,void *) | | Curl_splayset | 1 | -| taint.cpp:602:7:602:13 | _strinc | (DH_METHOD *,void *) | | DH_meth_set0_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (DSA_METHOD *,void *) | | DSA_meth_set0_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_CIPHER_CTX *,void *) | | EVP_CIPHER_CTX_set_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_CIPHER_CTX *,void *) | | EVP_CIPHER_CTX_set_cipher_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_KEYMGMT *,void *) | | evp_keymgmt_util_make_pkey | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_MAC_CTX **,void *) | | _libssh2_hmac_final | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_PKEY_CTX *,void *) | | EVP_PKEY_CTX_get1_id | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_PKEY_CTX *,void *) | | EVP_PKEY_CTX_set_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (EVP_PKEY_CTX *,void *) | | EVP_PKEY_CTX_set_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (Jim_Stack *,void *) | | Jim_StackPush | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OPENSSL_LHASH *,void *) | | OPENSSL_LH_insert | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_CMP_CTX *,void *) | | OSSL_CMP_CTX_set_certConf_cb_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_CMP_CTX *,void *) | | OSSL_CMP_CTX_set_http_cb_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_CMP_CTX *,void *) | | OSSL_CMP_CTX_set_transfer_cb_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_DECODER *,void *) | | ossl_decoder_instance_new | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_DECODER_CTX *,void *) | | OSSL_DECODER_CTX_set_construct_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_ENCODER_CTX *,void *) | | OSSL_ENCODER_CTX_set_construct_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_QRX *,void *) | | ossl_qrx_set_msg_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_QTX *,void *) | | ossl_qtx_set_msg_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (OSSL_QUIC_TX_PACKETISER *,void *) | | ossl_quic_tx_packetiser_set_msg_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (QUIC_CHANNEL *,void *) | | ossl_quic_channel_set_msg_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (RSA_METHOD *,void *) | | RSA_meth_set0_app_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL *,void *) | | SSL_set0_security_ex_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL *,void *) | | SSL_set_async_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL *,void *) | | SSL_set_default_passwd_cb_userdata | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL *,void *) | | SSL_set_record_padding_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL_CTX *,void *) | | SSL_CTX_set0_security_ex_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL_CTX *,void *) | | SSL_CTX_set_async_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL_CTX *,void *) | | SSL_CTX_set_default_passwd_cb_userdata | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL_CTX *,void *) | | SSL_CTX_set_record_padding_callback_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (SSL_CTX *,void *) | | SSL_CTX_set_srp_cb_arg | 1 | -| taint.cpp:602:7:602:13 | _strinc | (UI *,void *) | | UI_add_user_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (X509_CRL *,void *) | | X509_CRL_set_meth_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (X509_LOOKUP *,void *) | | X509_LOOKUP_set_method_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (const OSSL_DISPATCH *,void *) | | ossl_prov_free_key | 1 | -| taint.cpp:602:7:602:13 | _strinc | (const OSSL_PARAM[],void *) | | ossl_store_handle_load_result | 1 | -| taint.cpp:602:7:602:13 | _strinc | (const char *,void *) | | collect_names | 0 | -| taint.cpp:602:7:602:13 | _strinc | (const char *,void *) | | collect_names | 1 | -| taint.cpp:602:7:602:13 | _strinc | (const md5_ctx *,void *) | | __md5_read_ctx | 1 | -| taint.cpp:602:7:602:13 | _strinc | (const void *,void *) | | inet6_rth_reverse | 1 | -| taint.cpp:602:7:602:13 | _strinc | (int,void *) | | OSSL_STORE_INFO_new | 1 | -| taint.cpp:602:7:602:13 | _strinc | (int,void *) | | sqlite3_randomness | 1 | -| taint.cpp:602:7:602:13 | _strinc | (md5_ctx *,void *) | | __md5_finish_ctx | 1 | -| taint.cpp:602:7:602:13 | _strinc | (nghttp2_queue *,void *) | | nghttp2_queue_push | 1 | -| taint.cpp:602:7:602:13 | _strinc | (nghttp2_session *,void *) | | nghttp2_session_set_user_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (obstack *,void *) | | _obstack_allocated_p | 1 | -| taint.cpp:602:7:602:13 | _strinc | (obstack *,void *) | | obstack_free | 1 | -| taint.cpp:602:7:602:13 | _strinc | (pthread_attr_t *,void *) | | __pthread_attr_setstackaddr | 1 | -| taint.cpp:602:7:602:13 | _strinc | (tunable_id_t,void *) | | __tunable_get_default | 1 | -| taint.cpp:602:7:602:13 | _strinc | (unsigned char *,void *) | | pitem_new | 1 | -| taint.cpp:602:7:602:13 | _strinc | (uv_handle_t *,void *) | | uv_handle_set_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (uv_key_t *,void *) | | uv_key_set | 1 | -| taint.cpp:602:7:602:13 | _strinc | (uv_loop_t *,void *) | | uv_loop_set_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (uv_req_t *,void *) | | uv_req_set_data | 1 | -| taint.cpp:602:7:602:13 | _strinc | (void *,void *) | | insque | 1 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | Curl_read16_be | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | Curl_read16_le | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | Curl_read32_le | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | _getlong | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | _getshort | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | _libssh2_ntohu32 | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | _libssh2_ntohu64 | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | | ossl_quic_vlint_decode_unchecked | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | CStringT | CStringT | 0 | -| taint.cpp:603:16:603:22 | _mbsinc | (const unsigned char *) | CStringT | operator= | 0 | -| taint.cpp:604:16:604:22 | _strdec | (MD4_CTX *,const unsigned char *) | | MD4_Transform | 1 | -| taint.cpp:604:16:604:22 | _strdec | (RIPEMD160_CTX *,const unsigned char *) | | RIPEMD160_Transform | 1 | -| taint.cpp:604:16:604:22 | _strdec | (SM3_CTX *,const unsigned char *) | | ossl_sm3_transform | 1 | -| taint.cpp:604:16:604:22 | _strdec | (TLS_RL_RECORD *,const unsigned char *) | | ossl_tls_rl_record_set_seq_num | 1 | -| taint.cpp:604:16:604:22 | _strdec | (const u_char *,const unsigned char *) | | ns_get16 | 1 | -| taint.cpp:604:16:604:22 | _strdec | (const u_char *,const unsigned char *) | | ns_get32 | 1 | -| taint.cpp:604:16:604:22 | _strdec | (const unsigned char **,const unsigned char *) | | ___ns_name_skip | 1 | -| taint.cpp:604:16:604:22 | _strdec | (const unsigned char *,const unsigned char *) | | ___dn_skipname | 0 | -| taint.cpp:604:16:604:22 | _strdec | (const unsigned char *,const unsigned char *) | | ___dn_skipname | 1 | -| taint.cpp:604:16:604:22 | _strdec | (const unsigned char *,const unsigned char *) | | __ns_name_length_uncompressed | 0 | -| taint.cpp:604:16:604:22 | _strdec | (const unsigned char *,const unsigned char *) | | __ns_name_length_uncompressed | 1 | -| taint.cpp:606:6:606:17 | test__strinc | (BIO *,const EVP_PKEY *,int,pem_password_cb *,void *) | | i2b_PVK_bio | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (BrotliDecoderState *,BrotliDecoderStateInternal *,brotli_decoder_metadata_start_func,brotli_decoder_metadata_chunk_func,void *) | | BrotliDecoderSetMetadataCallbacks | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (EVP_CIPHER_INFO *,unsigned char *,long *,pem_password_cb *,void *) | | PEM_do_header | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (EVP_PKEY *,EVP_KEYMGMT *,void *,OSSL_CALLBACK *,void *) | | evp_keymgmt_util_gen | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (EVP_PKEY_CTX *,int,int,int,void *) | | RSA_pkey_ctx_ctrl | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (OSSL_QUIC_TX_PACKETISER *,const unsigned char *,size_t,ossl_quic_initial_token_free_fn *,void *) | | ossl_quic_tx_packetiser_set_initial_token | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (char *,size_t,size_t *,const OSSL_PARAM[],void *) | | ossl_pw_passphrase_callback_dec | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (char *,size_t,size_t *,const OSSL_PARAM[],void *) | | ossl_pw_passphrase_callback_enc | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (const BIGNUM *,int,..(*)(..),BN_CTX *,void *) | | BN_is_prime | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (const char **,const char **,bool *,..(*)(..),void *) | | _dl_catch_error | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (const char *,const UI_METHOD *,void *,OSSL_STORE_post_process_info_fn,void *) | | OSSL_STORE_open | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (const char *,int,int,..(*)(..),void *) | | CONF_parse_list | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (nghttp2_extension *,uint8_t,uint8_t,int32_t,void *) | | nghttp2_frame_extension_init | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (nghttp2_session *,const uint8_t *,size_t,int,void *) | | nghttp2_session_upgrade2 | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (nghttp2_session *,int32_t,uint8_t,nghttp2_stream_state,void *) | | nghttp2_session_open_stream | 4 | -| taint.cpp:606:6:606:17 | test__strinc | (sqlite3 *,const char *,const char *,..(*)(..),void *) | | recoverInit | 4 | -| taint.cpp:616:6:616:17 | test__mbsinc | (PKCS7 *,int,long,char *) | | PKCS7_ctrl | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (SSL_CTX *,srpsrvparm *,char *,char *) | | set_up_srp_verifier_file | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (SSL_HMAC *,void *,size_t,char *) | | ssl_hmac_init | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (SSL_HMAC *,void *,size_t,char *) | | ssl_hmac_old_init | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (_IO_strfile *,char *,int,char *) | | _IO_str_init_static | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (action **,e_action,symbol *,char *) | | Action_add | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (const char *,const char *,char *,char *) | | uv__idna_toascii | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (int,const u_char *,const unsigned char *,char *) | | inet_nsap_ntoa | 3 | -| taint.cpp:616:6:616:17 | test__mbsinc | (int,u_int,u_int,char *) | | svcunix_create | 3 | -| taint.cpp:626:6:626:17 | test__strdec | (BIO *,const BIGNUM *,const char *,int,unsigned char *) | | print_bignum_var | 4 | -| taint.cpp:626:6:626:17 | test__strdec | (OSSL_LIB_CTX *,const char *,const QUIC_PKT_HDR *,const QUIC_CONN_ID *,unsigned char *) | | ossl_quic_calculate_retry_integrity_tag | 4 | -| taint.cpp:626:6:626:17 | test__strdec | (QUIC_HDR_PROTECTOR *,const unsigned char *,size_t,unsigned char *,unsigned char *) | | ossl_quic_hdr_protector_decrypt_fields | 3 | -| taint.cpp:626:6:626:17 | test__strdec | (QUIC_HDR_PROTECTOR *,const unsigned char *,size_t,unsigned char *,unsigned char *) | | ossl_quic_hdr_protector_decrypt_fields | 4 | -| taint.cpp:626:6:626:17 | test__strdec | (QUIC_HDR_PROTECTOR *,const unsigned char *,size_t,unsigned char *,unsigned char *) | | ossl_quic_hdr_protector_encrypt_fields | 3 | -| taint.cpp:626:6:626:17 | test__strdec | (QUIC_HDR_PROTECTOR *,const unsigned char *,size_t,unsigned char *,unsigned char *) | | ossl_quic_hdr_protector_encrypt_fields | 4 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Strsafe | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | Symbol_new | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | UI_create_method | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __basename | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __gettext | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __hash_string | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __strdup | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __textdomain | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | __tzstring | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | a64l | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | charmap_opendir | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | ether_aton | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | getdate | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | inetstr2int | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | last_component | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | opt_path_end | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | opt_progname | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | repertoire_read | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | sgetsgent | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | sgetspent | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | strhash | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | uc_script_byname | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | uv__strdup | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:645:14:645:22 | _strnextc | (const char *) | | xstrdup | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | BIO_gethostbyname | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Curl_copy_header_value | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Curl_get_scheme_handler | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Curl_getdate_capped | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Jim_StrDup | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | OPENSSL_LH_strhash | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | OSSL_STORE_SEARCH_by_alias | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Strsafe | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | Symbol_new | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | UI_create_method | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | X509V3_parse_list | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | X509_LOOKUP_meth_new | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __basename | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __gconv_find_shlib | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __gettext | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __hash_string | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __nss_action_parse | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __strdup | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __textdomain | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __tzset_parse_tz | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | __tzstring | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | a2i_IPADDRESS | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | a2i_IPADDRESS_NC | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | a64l | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | charmap_opendir | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | ether_aton | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | getdate | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | inetstr2int | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | last_component | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | new_glibc_hwcaps_subdirectory | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | opt_path_end | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | opt_progname | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | ossl_lh_strcasehash | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | repertoire_read | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | res_gethostbyname | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | sgetsgent | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | sgetspent | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | strhash | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | uc_script_byname | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | uv__strdup | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | uv_wtf8_length_as_utf16 | 0 | -| taint.cpp:647:6:647:19 | test__strnextc | (const char *) | | xstrdup | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | _IO_gets | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | __mktemp | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | __nis_default_group | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | __nis_default_owner | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | __xpg_basename | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | ctermid | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | cuserid | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | defossilize | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | des_setparity | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | dirname | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | getwd | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | make_uppercase | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | mkdtemp | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | next_item | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | | strfry | 0 | -| taint.cpp:665:6:665:25 | test_no_const_member | (char *) | CStringT | CStringT | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | _IO_gets | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | __mktemp | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | __nis_default_group | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | __nis_default_owner | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | __xpg_basename | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | ctermid | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | cuserid | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | defossilize | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | des_setparity | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | dirname | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | getwd | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | make_uppercase | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | mkdtemp | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | next_item | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | | strfry | 0 | -| taint.cpp:677:6:677:27 | test_with_const_member | (char *) | CStringT | CStringT | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | Curl_cpool_upkeep | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | __dlclose | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | __libc_dlclose | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | __libc_free | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | __malloc_usable_size | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | _dl_allocate_tls | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | _dl_close | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | malloc_usable_size | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | ossl_kdf_data_new | 0 | -| taint.cpp:683:6:683:20 | argument_source | (void *) | | support_shared_free | 0 | -| taint.cpp:707:8:707:14 | strncpy | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| taint.cpp:707:8:707:14 | strncpy | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| taint.cpp:707:8:707:14 | strncpy | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| taint.cpp:707:8:707:14 | strncpy | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| taint.cpp:707:8:707:14 | strncpy | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| taint.cpp:707:8:707:14 | strncpy | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| taint.cpp:707:8:707:14 | strncpy | (const char *,const char *,unsigned long) | | __ngettext | 1 | -| taint.cpp:707:8:707:14 | strncpy | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| taint.cpp:707:8:707:14 | strncpy | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| taint.cpp:709:6:709:17 | test_strncpy | (ARGS *,char *) | | chopup_args | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (BIO *,char *) | | BIO_set_callback_arg | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (SRP_VBASE *,char *) | | SRP_VBASE_get1_by_user | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (SRP_VBASE *,char *) | | SRP_VBASE_get_by_user | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (SSL_CTX *,char *) | | SSL_CTX_set_srp_password | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (SSL_CTX *,char *) | | SSL_CTX_set_srp_username | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (XDR *,char *) | | xdr_char | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | passwd2des_internal | 0 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | passwd2des_internal | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | xdecrypt | 0 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | xdecrypt | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | xencrypt | 0 | -| taint.cpp:709:6:709:17 | test_strncpy | (char *,char *) | | xencrypt | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const char *,char *) | | __old_realpath | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const char *,char *) | | __realpath | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const char *,char *) | | sha1sum_file | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const char *,char *) | | sha3sum_file | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const ether_addr *,char *) | | ether_ntoa_r | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (const tm *,char *) | | __asctime_r | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (curl_slist *,char *) | | Curl_slist_append_nodup | 1 | -| taint.cpp:709:6:709:17 | test_strncpy | (unsigned long,char *) | | ERR_error_string | 1 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_BIT_STRING *,int,int) | | ASN1_BIT_STRING_set_bit | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_BIT_STRING *,unsigned char *,int) | | ASN1_BIT_STRING_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_OCTET_STRING **,const unsigned char *,int) | | ossl_cmp_asn1_octet_string_set1_bytes | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_OCTET_STRING *,const unsigned char *,int) | | ASN1_OCTET_STRING_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_STRING *,const void *,int) | | ASN1_STRING_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_STRING *,void *,int) | | ASN1_STRING_set0 | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_TIME *,tm *,int) | | ossl_asn1_time_from_tm | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_TYPE *,unsigned char *,int) | | ASN1_TYPE_set_octetstring | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_item_embed_free | 2 | -| taint.cpp:725:10:725:15 | strtol | (ASN1_VALUE **,const ASN1_ITEM *,int) | | ossl_asn1_primitive_free | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const BIGNUM *,int) | | BN_lshift | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const BIGNUM *,int) | | BN_rshift | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const BIGNUM *,int) | | BN_with_flags | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const BIGNUM *,int) | | bn_lshift_fixed_top | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const BIGNUM *,int) | | bn_rshift_fixed_top | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const unsigned long *,int) | | bn_set_static_words | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIGNUM *,const unsigned long *,int) | | bn_set_words | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,BIO *,int) | | OSSL_HTTP_REQ_CTX_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,BIO *,int) | | SMIME_crlf_copy | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,GENERAL_NAMES *,int) | | OSSL_GENERAL_NAMES_print | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,char *,int) | | BIO_get_line | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,const DSA *,int) | | DSA_print | 2 | -| taint.cpp:725:10:725:15 | strtol | (BIO *,const RSA *,int) | | RSA_print | 2 | -| taint.cpp:725:10:725:15 | strtol | (CERT *,X509_STORE **,int) | | ssl_cert_get_cert_store | 2 | -| taint.cpp:725:10:725:15 | strtol | (CRYPTO_THREAD_ROUTINE,void *,int) | | ossl_crypto_thread_native_start | 2 | -| taint.cpp:725:10:725:15 | strtol | (Curl_easy *,connectdata *,int) | | Curl_conn_cf_discard_all | 2 | -| taint.cpp:725:10:725:15 | strtol | (Curl_easy *,connectdata *,int) | | Curl_http2_may_switch | 2 | -| taint.cpp:725:10:725:15 | strtol | (Curl_easy *,connectdata *,int) | | Curl_http2_switch | 2 | -| taint.cpp:725:10:725:15 | strtol | (Curl_easy *,connectdata *,int) | | Curl_ssl_cfilter_add | 2 | -| taint.cpp:725:10:725:15 | strtol | (Curl_sockaddr_ex *,const Curl_addrinfo *,int) | | Curl_sock_assign_addr | 2 | -| taint.cpp:725:10:725:15 | strtol | (DH *,const OSSL_PARAM[],int) | | ossl_dh_key_fromdata | 2 | -| taint.cpp:725:10:725:15 | strtol | (DSA *,const OSSL_PARAM[],int) | | ossl_dsa_key_fromdata | 2 | -| taint.cpp:725:10:725:15 | strtol | (ECX_KEY *,const OSSL_PARAM[],int) | | ossl_ecx_key_fromdata | 2 | -| taint.cpp:725:10:725:15 | strtol | (EC_KEY *,const OSSL_PARAM[],int) | | ossl_ec_key_fromdata | 2 | -| taint.cpp:725:10:725:15 | strtol | (ENGINE *,ENGINE_DYNAMIC_ID,int) | | engine_add_dynamic_id | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_export_to_provider | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY *,EVP_KEYMGMT *,int) | | evp_keymgmt_util_find_operation_cache | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY *,EVP_PKEY *,int) | | evp_keymgmt_util_copy | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,EVP_PKEY *,int) | | EVP_PKEY_derive_set_peer_ex | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const char *,int) | | EVP_PKEY_CTX_set1_pbe_pass | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_hkdf_info | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_add1_tls1_prf_seed | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_key | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_hkdf_salt | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_scrypt_salt | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set1_tls1_prf_secret | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const unsigned char *,int) | | EVP_PKEY_CTX_set_mac_key | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,const void *,int) | | EVP_PKEY_CTX_set1_id | 2 | -| taint.cpp:725:10:725:15 | strtol | (EVP_PKEY_CTX *,int *,int) | | EVP_PKEY_CTX_set0_keygen_info | 2 | -| taint.cpp:725:10:725:15 | strtol | (FFC_PARAMS *,unsigned int,int) | | ossl_ffc_params_enable_flags | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,_IO_marker *,int) | | _IO_seekmark | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,_IO_marker *,int) | | _IO_seekwmark | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,__FILE *,int) | | fwide | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,const DSA *,int) | | DSA_print_fp | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,const RSA *,int) | | RSA_print_fp | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,off64_t,int) | | _IO_cookie_seek | 2 | -| taint.cpp:725:10:725:15 | strtol | (FILE *,rule *,int) | | RulePrint | 2 | -| taint.cpp:725:10:725:15 | strtol | (FTS *,FTSENT *,int) | | fts_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetCommand | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetGlobalVariable | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *,int) | | Jim_GetVariable | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *,int) | | Jim_ListGetIndex | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *,int) | | Jim_UnsetVariable | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewDictObj | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,Jim_Obj *const *,int) | | Jim_NewListObj | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,char *,int) | | Jim_NewStringObjNoAlloc | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,const char *,int) | | Jim_GetGlobalVariableStr | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,const char *,int) | | Jim_GetVariableStr | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,const char *,int) | | Jim_MakeTempFile | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,const char *,int) | | Jim_NewStringObj | 2 | -| taint.cpp:725:10:725:15 | strtol | (Jim_Interp *,const char *,int) | | Jim_NewStringObjUtf8 | 2 | -| taint.cpp:725:10:725:15 | strtol | (LIBSSH2_SESSION *,int,int) | | libssh2_session_flag | 2 | -| taint.cpp:725:10:725:15 | strtol | (LIBSSH2_SFTP_HANDLE *,LIBSSH2_SFTP_ATTRIBUTES *,int) | | libssh2_sftp_fstat_ex | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_BASICRESP *,OCSP_CERTID *,int) | | OCSP_resp_find | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_BASICRESP *,X509_EXTENSION *,int) | | OCSP_BASICRESP_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_BASICRESP *,const ASN1_OBJECT *,int) | | OCSP_BASICRESP_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_BASICRESP *,int,int) | | OCSP_BASICRESP_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_ONEREQ *,X509_EXTENSION *,int) | | OCSP_ONEREQ_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_ONEREQ *,const ASN1_OBJECT *,int) | | OCSP_ONEREQ_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_ONEREQ *,int,int) | | OCSP_ONEREQ_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_REQUEST *,X509_EXTENSION *,int) | | OCSP_REQUEST_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_REQUEST *,const ASN1_OBJECT *,int) | | OCSP_REQUEST_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_REQUEST *,int,int) | | OCSP_REQUEST_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_SINGLERESP *,X509_EXTENSION *,int) | | OCSP_SINGLERESP_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_SINGLERESP *,const ASN1_OBJECT *,int) | | OCSP_SINGLERESP_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (OCSP_SINGLERESP *,int,int) | | OCSP_SINGLERESP_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (OPENSSL_STACK *,const void *,int) | | OPENSSL_sk_insert | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_referenceValue | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_CMP_CTX *,const unsigned char *,int) | | OSSL_CMP_CTX_set1_secretValue | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_CMP_CTX *,int,int) | | OSSL_CMP_CTX_set_option | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | EC_GROUP_new_by_curve_name_ex | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | EC_KEY_new_by_curve_name_ex | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | OSSL_PROVIDER_try_load | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_dsa_key_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | ossl_ml_kem_key_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | ossl_parse_query | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_name | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_LIB_CTX *,const char *,int) | | ossl_property_value | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_PROVIDER *,OSSL_PROVIDER **,int) | | ossl_provider_add_to_store | 2 | -| taint.cpp:725:10:725:15 | strtol | (OSSL_QRL_ENC_LEVEL_SET *,uint32_t,int) | | ossl_qrl_enc_level_set_get | 2 | -| taint.cpp:725:10:725:15 | strtol | (PKCS7 *,stack_st_X509 *,int) | | PKCS7_get0_signers | 2 | -| taint.cpp:725:10:725:15 | strtol | (POLICYINFO *,const ASN1_OBJECT *,int) | | ossl_policy_data_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (PROV_CTX *,const char *,int) | | ossl_prov_ctx_get_bool_param | 2 | -| taint.cpp:725:10:725:15 | strtol | (PROV_CTX *,const char *,int) | | ossl_prov_ml_dsa_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (PROV_CTX *,const char *,int) | | ossl_prov_ml_kem_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (QLOG *,uint32_t,int) | | ossl_qlog_set_event_type_enabled | 2 | -| taint.cpp:725:10:725:15 | strtol | (QUIC_RXFC *,uint64_t,int) | | ossl_quic_rxfc_on_rx_stream_frame | 2 | -| taint.cpp:725:10:725:15 | strtol | (QUIC_STREAM_ITER *,QUIC_STREAM_MAP *,int) | | ossl_quic_stream_iter_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (QUIC_STREAM_MAP *,uint64_t,int) | | ossl_quic_stream_map_alloc | 2 | -| taint.cpp:725:10:725:15 | strtol | (RSA *,const OSSL_PARAM[],int) | | ossl_rsa_fromdata | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL *,const unsigned char *,int) | | SSL_use_certificate_ASN1 | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL *,const void *,int) | | SSL_write | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL *,void *,int) | | SSL_peek | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL *,void *,int) | | SSL_read | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL *,void *,int) | | SSL_set_session_ticket_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CIPHER *,const SSL_CIPHER *,int) | | OBJ_bsearch_ssl_cipher_id | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CONNECTION *,PACKET *,int) | | ssl_cache_cipherlist | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_close_construct_packet | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CONNECTION *,WPACKET *,int) | | dtls1_set_handshake_header | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CONNECTION *,WPACKET *,int) | | tls_close_construct_packet | 2 | -| taint.cpp:725:10:725:15 | strtol | (SSL_CONNECTION *,int,int) | | ssl3_send_alert | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_MSG_IMPRINT *,unsigned char *,int) | | TS_MSG_IMPRINT_set_msg | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_REQ *,X509_EXTENSION *,int) | | TS_REQ_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_REQ *,const ASN1_OBJECT *,int) | | TS_REQ_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_REQ *,int,int) | | TS_REQ_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_TST_INFO *,X509_EXTENSION *,int) | | TS_TST_INFO_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_TST_INFO *,const ASN1_OBJECT *,int) | | TS_TST_INFO_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (TS_TST_INFO *,int,int) | | TS_TST_INFO_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509 *,X509_EXTENSION *,int) | | X509_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509 *,int,int) | | X509_check_purpose | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509 *,int,int) | | X509_check_trust | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509_CRL *,X509_EXTENSION *,int) | | X509_CRL_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509_PUBKEY *,unsigned char *,int) | | X509_PUBKEY_set0_public_key | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509_REVOKED *,X509_EXTENSION *,int) | | X509_REVOKED_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (X509_STORE_CTX *,X509 *,int) | | ossl_x509_check_cert_time | 2 | -| taint.cpp:725:10:725:15 | strtol | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | -| taint.cpp:725:10:725:15 | strtol | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | -| taint.cpp:725:10:725:15 | strtol | (_Float128,_Float128,int) | | __kernel_sinf128 | 2 | -| taint.cpp:725:10:725:15 | strtol | (_Float128,_Float128,int) | | __kernel_tanf128 | 2 | -| taint.cpp:725:10:725:15 | strtol | (_IO_strfile *,const char *,int) | | _IO_str_init_readonly | 2 | -| taint.cpp:725:10:725:15 | strtol | (action *,FILE *,int) | | PrintAction | 2 | -| taint.cpp:725:10:725:15 | strtol | (acttab *,int,int) | | acttab_action | 2 | -| taint.cpp:725:10:725:15 | strtol | (char *,size_t,int) | | __argz_stringify | 2 | -| taint.cpp:725:10:725:15 | strtol | (const ASN1_VALUE *,const ASN1_TEMPLATE *,int) | | ossl_asn1_do_adb | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,int[],int) | | BN_GF2m_poly2arr | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_bn2binpad | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_bn2lebinpad | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_bn2nativepad | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2bin | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2lebin | 2 | -| taint.cpp:725:10:725:15 | strtol | (const BIGNUM *,unsigned char *,int) | | BN_signed_bn2native | 2 | -| taint.cpp:725:10:725:15 | strtol | (const CMS_ContentInfo *,BIO *,int) | | ossl_cms_DigestedData_do_final | 2 | -| taint.cpp:725:10:725:15 | strtol | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_signed_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const CMS_SignerInfo *,const ASN1_OBJECT *,int) | | CMS_unsigned_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const CMS_SignerInfo *,int,int) | | CMS_signed_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const CMS_SignerInfo *,int,int) | | CMS_unsigned_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const Curl_easy *,const connectdata *,int) | | Curl_conn_is_http2 | 2 | -| taint.cpp:725:10:725:15 | strtol | (const EVP_MD *,const EVP_MD *,int) | | ossl_rsa_pss_params_create | 2 | -| taint.cpp:725:10:725:15 | strtol | (const EVP_PKEY *,const ASN1_OBJECT *,int) | | EVP_PKEY_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const EVP_PKEY *,int,int) | | EVP_PKEY_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const OSSL_PARAM *,BIO *,int) | | OSSL_PARAM_print_to_bio | 2 | -| taint.cpp:725:10:725:15 | strtol | (const OSSL_PROVIDER *,const char *,int) | | OSSL_PROVIDER_conf_get_bool | 2 | -| taint.cpp:725:10:725:15 | strtol | (const SSL *,char *,int) | | SSL_get_shared_ciphers | 2 | -| taint.cpp:725:10:725:15 | strtol | (const SSL *,int,int) | | apps_ssl_info_callback | 2 | -| taint.cpp:725:10:725:15 | strtol | (const SSL_CIPHER *,char *,int) | | SSL_CIPHER_description | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509 *,const ASN1_OBJECT *,int) | | X509_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509 *,const stack_st_X509 *,int) | | OSSL_ESS_signing_cert_new_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509 *,int,int) | | X509_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509 *,int,int) | | X509_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_ACERT *,const ASN1_OBJECT *,int) | | X509_ACERT_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_ACERT *,int,int) | | X509_ACERT_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_CRL *,const ASN1_OBJECT *,int) | | X509_CRL_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_CRL *,const X509 *,int) | | OSSL_CMP_CRLSTATUS_create | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_CRL *,int,int) | | X509_CRL_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_NAME *,char *,int) | | X509_NAME_oneline | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_NAME *,const ASN1_OBJECT *,int) | | X509_NAME_get_index_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_NAME *,int,int) | | X509_NAME_get_index_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_REQ *,const ASN1_OBJECT *,int) | | X509_REQ_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_REQ *,int,int) | | X509_REQ_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_REVOKED *,const ASN1_OBJECT *,int) | | X509_REVOKED_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_REVOKED *,int,int) | | X509_REVOKED_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (const X509_SIG *,const char *,int) | | PKCS8_decrypt | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtol | 0 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtol | 1 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtol | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtoul | 0 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtoul | 1 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | __strtoul | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | idn2_to_ascii_8z | 0 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | idn2_to_ascii_8z | 1 | -| taint.cpp:725:10:725:15 | strtol | (const char *,char **,int) | | idn2_to_ascii_8z | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,const OSSL_PARAM *,int) | | print_param_types | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,const char *,int) | | CRYPTO_strdup | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,const char *,int) | | __dcgettext | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,const char *,int) | | sqlite3_strnicmp | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,int,int) | | __old_strpbrk_c2 | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,long *,int) | | Jim_StringToWide | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,size_t *,int) | | _dl_sysdep_read_whole_file | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,sqlite3_filename,int) | | sqlite3_uri_key | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,void *,int) | | support_readdir_check | 2 | -| taint.cpp:725:10:725:15 | strtol | (const char *,wordexp_t *,int) | | wordexp | 2 | -| taint.cpp:725:10:725:15 | strtol | (const cmsghdr *,uint8_t **,int) | | inet6_option_find | 2 | -| taint.cpp:725:10:725:15 | strtol | (const stack_st_X509_ATTRIBUTE *,const ASN1_OBJECT *,int) | | X509at_get_attr_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const stack_st_X509_ATTRIBUTE *,int,int) | | X509at_get_attr_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const stack_st_X509_EXTENSION *,const ASN1_OBJECT *,int) | | X509v3_get_ext_by_OBJ | 2 | -| taint.cpp:725:10:725:15 | strtol | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_NID | 2 | -| taint.cpp:725:10:725:15 | strtol | (const stack_st_X509_EXTENSION *,int,int) | | X509v3_get_ext_by_critical | 2 | -| taint.cpp:725:10:725:15 | strtol | (const uint8_t *,uint8_t **,int) | | idn2_lookup_u8 | 2 | -| taint.cpp:725:10:725:15 | strtol | (const unsigned char **,unsigned int,int) | | ossl_b2i_DSA_after_header | 2 | -| taint.cpp:725:10:725:15 | strtol | (const unsigned char **,unsigned int,int) | | ossl_b2i_RSA_after_header | 2 | -| taint.cpp:725:10:725:15 | strtol | (const void *,const void *,int) | | ossl_is_partially_overlapping | 2 | -| taint.cpp:725:10:725:15 | strtol | (const void *,socklen_t,int) | | res_gethostbyaddr | 2 | -| taint.cpp:725:10:725:15 | strtol | (const wchar_t *,wchar_t **,int) | | __wcstol | 2 | -| taint.cpp:725:10:725:15 | strtol | (const wchar_t *,wchar_t **,int) | | __wcstoul | 2 | -| taint.cpp:725:10:725:15 | strtol | (curl_mimepart *,curl_mime *,int) | | Curl_mime_set_subparts | 2 | -| taint.cpp:725:10:725:15 | strtol | (curl_mimepart *,curl_slist *,int) | | curl_mime_headers | 2 | -| taint.cpp:725:10:725:15 | strtol | (database_dyn *,size_t,int) | | mempool_alloc | 2 | -| taint.cpp:725:10:725:15 | strtol | (database_dyn *,time_t,int) | | prune_cache | 2 | -| taint.cpp:725:10:725:15 | strtol | (double,double,int) | | __kernel_standard | 2 | -| taint.cpp:725:10:725:15 | strtol | (float,float,int) | | __kernel_standard_f | 2 | -| taint.cpp:725:10:725:15 | strtol | (gconv_spec *,__gconv_t *,int) | | __gconv_open | 2 | -| taint.cpp:725:10:725:15 | strtol | (gzFile,char *,int) | | gzgets | 2 | -| taint.cpp:725:10:725:15 | strtol | (gzFile,int,int) | | gzsetparams | 2 | -| taint.cpp:725:10:725:15 | strtol | (gzFile,off64_t,int) | | gzseek64 | 2 | -| taint.cpp:725:10:725:15 | strtol | (gzFile,off_t,int) | | gzseek | 2 | -| taint.cpp:725:10:725:15 | strtol | (int *,short *,int) | | __lll_lock_elision | 2 | -| taint.cpp:725:10:725:15 | strtol | (int,BIO_ADDR *,int) | | BIO_accept_ex | 2 | -| taint.cpp:725:10:725:15 | strtol | (int,int,int) | | ASN1_object_size | 2 | -| taint.cpp:725:10:725:15 | strtol | (int,int,int) | | EVP_CIPHER_meth_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (long double,long double,int) | | __kernel_sinl | 2 | -| taint.cpp:725:10:725:15 | strtol | (long double,long double,int) | | __kernel_standard_l | 2 | -| taint.cpp:725:10:725:15 | strtol | (long double,long double,int) | | __kernel_tanl | 2 | -| taint.cpp:725:10:725:15 | strtol | (mp_srcptr,int,int) | | __mpn_construct_double | 2 | -| taint.cpp:725:10:725:15 | strtol | (mp_srcptr,int,int) | | __mpn_construct_float | 2 | -| taint.cpp:725:10:725:15 | strtol | (mp_srcptr,int,int) | | __mpn_construct_float128 | 2 | -| taint.cpp:725:10:725:15 | strtol | (regex_t *,const char *,int) | | jim_regcomp | 2 | -| taint.cpp:725:10:725:15 | strtol | (requestlist *,requestlist *,int) | | __aio_remove_request | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3 *,const char *,int) | | sqlite3_overload_function | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3 *,int,int) | | sqlite3_limit | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_context *,const char *,int) | | sqlite3_result_error | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_context *,const void *,int) | | sqlite3_result_error16 | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_index_info *,int,int) | | sqlite3_vtab_in | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_stmt *,int,int) | | sqlite3_bind_int | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_stmt *,int,int) | | sqlite3_bind_zeroblob | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_stmt *,int,int) | | sqlite3_stmt_status | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3_str *,const char *,int) | | sqlite3_str_append | 2 | -| taint.cpp:725:10:725:15 | strtol | (sqlite3expert *,int,int) | | sqlite3_expert_report | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_ASN1_UTF8STRING *,const char *,int) | | ossl_cmp_sk_ASN1_UTF8STRING_push_str | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 **,X509 *,int) | | ossl_x509_add_cert_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 **,stack_st_X509 *,int) | | ossl_x509_add_certs_new | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 *,ASIdentifiers *,int) | | X509v3_asid_validate_resource_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 *,IPAddrBlocks *,int) | | X509v3_addr_validate_resource_set | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 *,X509 *,int) | | X509_add_cert | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509 *,stack_st_X509 *,int) | | X509_add_certs | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509_ALGOR **,int,int) | | CMS_add_simple_smimecap | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509_ALGOR *,int,int) | | PKCS7_simple_smimecap | 2 | -| taint.cpp:725:10:725:15 | strtol | (stack_st_X509_EXTENSION **,X509_EXTENSION *,int) | | X509v3_add_ext | 2 | -| taint.cpp:725:10:725:15 | strtol | (td_thragent_t *,uint32_t *,int) | | _td_check_sizeof | 2 | -| taint.cpp:725:10:725:15 | strtol | (uint8_t[56],const gf,int) | | gf_serialize | 2 | -| taint.cpp:725:10:725:15 | strtol | (uint32_t *,SSL_CONNECTION *,int) | | ssl_set_sig_mask | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned char *,const char *,int) | | data_string | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned char *,const unsigned char *,int) | | EVP_DecodeBlock | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned char *,const unsigned char *,int) | | EVP_EncodeBlock | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned char *,uint64_t,int) | | ossl_i2c_uint64_int | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned int,const char *,int) | | _IO_adjust_column | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned int,const wchar_t *,int) | | _IO_adjust_wcolumn | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned int,int,int) | | ossl_blob_length | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned long *,const BIGNUM *,int) | | bn_copy_words | 2 | -| taint.cpp:725:10:725:15 | strtol | (unsigned long *,const unsigned long *,int) | | bn_sqr_words | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv__io_t *,uv__io_cb,int) | | uv__io_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_loop_t *,uv_fs_t *,int) | | uv__iou_fs_read_or_write | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_loop_t *,uv_pipe_t *,int) | | uv_pipe_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_loop_t *,uv_poll_t *,int) | | uv_poll_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_signal_t *,uv_signal_cb,int) | | uv_signal_start_oneshot | 2 | -| taint.cpp:725:10:725:15 | strtol | (uv_stream_t *,int,int) | | uv__stream_open | 2 | -| taint.cpp:725:10:725:15 | strtol | (void *,cmsghdr **,int) | | inet6_option_init | 2 | -| taint.cpp:725:10:725:15 | strtol | (void *,const char *,int) | | CRYPTO_secure_free | 2 | -| taint.cpp:725:10:725:15 | strtol | (void *,curl_off_t,int) | | tool_mime_stdin_seek | 2 | -| taint.cpp:725:10:725:15 | strtol | (void *,socklen_t,int) | | inet6_opt_finish | 2 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | _IO_gets | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | __mktemp | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | __nis_default_group | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | __nis_default_owner | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | __xpg_basename | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | ctermid | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | cuserid | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | defossilize | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | des_setparity | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | dirname | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | getwd | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | make_uppercase | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | mkdtemp | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | next_item | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | | strfry | 0 | -| taint.cpp:727:6:727:16 | test_strtol | (char *) | CStringT | CStringT | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | BrotliEncoderMaxCompressedSize | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | EVP_PKEY_meth_get0 | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | __libc_malloc | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | __libc_valloc | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | _dl_early_allocate | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | curlx_uztosi | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | curlx_uztosz | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | curlx_uztoui | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | curlx_uztoul | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | malloc | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | ossl_get_extension_type | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | ossl_param_bytes_to_blocks | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | ossl_quic_sstream_new | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | ssl_cert_new | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | support_next_to_fault_allocate | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | support_next_to_fault_allocate_before | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | support_stack_alloc | 0 | -| taint.cpp:735:7:735:12 | malloc | (size_t) | | xalloc_sigstack | 0 | -| taint.cpp:735:7:735:12 | malloc | (unsigned long) | | BN_num_bits_word | 0 | -| taint.cpp:735:7:735:12 | malloc | (unsigned long) | | BUF_MEM_new_ex | 0 | -| taint.cpp:735:7:735:12 | malloc | (unsigned long) | | curlx_ultouc | 0 | -| taint.cpp:735:7:735:12 | malloc | (unsigned long) | | curlx_ultous | 0 | -| taint.cpp:735:7:735:12 | malloc | (unsigned long) | | next_prime | 0 | -| taint.cpp:736:7:736:13 | realloc | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_cert_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_nm_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_oid_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (ASN1_PCTX *,unsigned long) | | ASN1_PCTX_set_str_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (BIGNUM *,unsigned long) | | BN_add_word | 1 | -| taint.cpp:736:7:736:13 | realloc | (BIGNUM *,unsigned long) | | BN_div_word | 1 | -| taint.cpp:736:7:736:13 | realloc | (BIGNUM *,unsigned long) | | BN_set_word | 1 | -| taint.cpp:736:7:736:13 | realloc | (BIGNUM *,unsigned long) | | BN_sub_word | 1 | -| taint.cpp:736:7:736:13 | realloc | (BN_BLINDING *,unsigned long) | | BN_BLINDING_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (BUF_MEM *,size_t) | | BUF_MEM_grow | 1 | -| taint.cpp:736:7:736:13 | realloc | (BUF_MEM *,size_t) | | BUF_MEM_grow_clean | 1 | -| taint.cpp:736:7:736:13 | realloc | (CONF_IMODULE *,unsigned long) | | CONF_imodule_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (Curl_hash *,size_t) | | Curl_init_dnscache | 1 | -| taint.cpp:736:7:736:13 | realloc | (EVP_CIPHER *,unsigned long) | | EVP_CIPHER_meth_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (EVP_MD *,unsigned long) | | EVP_MD_meth_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (HMAC_CTX *,unsigned long) | | HMAC_CTX_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (OPENSSL_INIT_SETTINGS *,unsigned long) | | OPENSSL_INIT_set_config_file_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (OPENSSL_LHASH *,unsigned long) | | OPENSSL_LH_set_down_load | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_HPKE_SUITE,size_t) | | OSSL_HPKE_get_ciphertext_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_HTTP_REQ_CTX *,size_t) | | OSSL_HTTP_REQ_CTX_set_max_response_hdr_lines | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_HTTP_REQ_CTX *,unsigned long) | | OSSL_HTTP_REQ_CTX_set_max_response_length | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_LIB_CTX *,size_t) | | ossl_quic_lcidm_new | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_PARAM *,size_t) | | OSSL_PARAM_set_size_t | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_PARAM *,unsigned long) | | OSSL_PARAM_set_ulong | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_PQUEUE *,size_t) | | ossl_pqueue_remove | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_PROVIDER *,size_t) | | ossl_provider_set_operation_bit | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_QTX *,size_t) | | ossl_qtx_set_mdpl | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_add_unvalidated_credit | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_consume_unvalidated_credit | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_QUIC_TX_PACKETISER *,size_t) | | ossl_quic_tx_packetiser_record_received_closing_bytes | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_frag_len | 1 | -| taint.cpp:736:7:736:13 | realloc | (OSSL_RECORD_LAYER *,size_t) | | tls_set_max_pipelines | 1 | -| taint.cpp:736:7:736:13 | realloc | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_release_record | 1 | -| taint.cpp:736:7:736:13 | realloc | (QUIC_RSTREAM *,size_t) | | ossl_quic_rstream_resize_rbuf | 1 | -| taint.cpp:736:7:736:13 | realloc | (QUIC_RXFC *,size_t) | | ossl_quic_rxfc_set_max_window_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (QUIC_SSTREAM *,size_t) | | ossl_quic_sstream_set_buffer_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (QUIC_STREAM_MAP *,size_t) | | ossl_quic_stream_map_set_rr_stepping | 1 | -| taint.cpp:736:7:736:13 | realloc | (RAND_POOL *,size_t) | | ossl_rand_pool_add_begin | 1 | -| taint.cpp:736:7:736:13 | realloc | (SIPHASH *,size_t) | | SipHash_set_hash_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL *,size_t) | | SSL_set_block_padding | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL *,size_t) | | SSL_set_default_read_buffer_len | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL *,size_t) | | SSL_set_num_tickets | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL *,unsigned long) | | SSL_dane_clear_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL *,unsigned long) | | SSL_dane_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CONNECTION *,unsigned long) | | tls1_check_ec_tmp_key | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CTX *,size_t) | | SSL_CTX_set_block_padding | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CTX *,size_t) | | SSL_CTX_set_default_read_buffer_len | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CTX *,size_t) | | SSL_CTX_set_num_tickets | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_clear_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (SSL_CTX *,unsigned long) | | SSL_CTX_dane_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (WPACKET *,size_t) | | WPACKET_init_null | 1 | -| taint.cpp:736:7:736:13 | realloc | (WPACKET *,size_t) | | WPACKET_set_max_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (WPACKET *,size_t) | | WPACKET_start_sub_packet_len__ | 1 | -| taint.cpp:736:7:736:13 | realloc | (WPACKET *,size_t) | | ossl_quic_wire_encode_padding | 1 | -| taint.cpp:736:7:736:13 | realloc | (X509_STORE *,unsigned long) | | X509_STORE_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (X509_STORE_CTX *,unsigned long) | | X509_STORE_CTX_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_clear_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (X509_VERIFY_PARAM *,unsigned long) | | X509_VERIFY_PARAM_set_flags | 1 | -| taint.cpp:736:7:736:13 | realloc | (__gconv_step *,size_t) | | __gconv_close_transform | 1 | -| taint.cpp:736:7:736:13 | realloc | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_lmargin | 1 | -| taint.cpp:736:7:736:13 | realloc | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_rmargin | 1 | -| taint.cpp:736:7:736:13 | realloc | (argp_fmtstream_t,size_t) | | __argp_fmtstream_set_wmargin | 1 | -| taint.cpp:736:7:736:13 | realloc | (bufq *,size_t) | | Curl_bufq_skip | 1 | -| taint.cpp:736:7:736:13 | realloc | (bufq *,size_t) | | Curl_bufq_unwrite | 1 | -| taint.cpp:736:7:736:13 | realloc | (char *,size_t) | | RAND_file_name | 1 | -| taint.cpp:736:7:736:13 | realloc | (char *,size_t) | | __getcwd | 1 | -| taint.cpp:736:7:736:13 | realloc | (char *,size_t) | | __gets_chk | 1 | -| taint.cpp:736:7:736:13 | realloc | (char *,size_t) | | __getwd_chk | 1 | -| taint.cpp:736:7:736:13 | realloc | (char *,size_t) | | plain_method | 1 | -| taint.cpp:736:7:736:13 | realloc | (const BIGNUM *,unsigned long) | | BN_mod_word | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | Curl_getn_scheme_handler | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | Curl_memdup0 | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | OPENSSL_strnlen | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | __nss_module_allocate | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | __strndup | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | charmap_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | locfile_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | mblen | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | uv__strndup | 1 | -| taint.cpp:736:7:736:13 | realloc | (const char *,size_t) | | xstrndup | 1 | -| taint.cpp:736:7:736:13 | realloc | (const uint8_t *,size_t) | | FuzzerTestOneInput | 1 | -| taint.cpp:736:7:736:13 | realloc | (const uint8_t *,size_t) | | nghttp2_hd_huff_encode_count | 1 | -| taint.cpp:736:7:736:13 | realloc | (const uint8_t *,size_t) | | ossl_ed448_pubkey_verify | 1 | -| taint.cpp:736:7:736:13 | realloc | (const void *,size_t) | | Curl_memdup | 1 | -| taint.cpp:736:7:736:13 | realloc | (const void *,size_t) | | __nis_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (const void *,size_t) | | __nss_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (const void *,size_t) | | compute_hashval | 1 | -| taint.cpp:736:7:736:13 | realloc | (const wchar_t *,size_t) | | __wcsnlen_generic | 1 | -| taint.cpp:736:7:736:13 | realloc | (const wchar_t *,size_t) | | wcswidth | 1 | -| taint.cpp:736:7:736:13 | realloc | (curl_pushheaders *,size_t) | | curl_pushheader_bynum | 1 | -| taint.cpp:736:7:736:13 | realloc | (dl_find_object_internal *,size_t) | | _dlfo_sort_mappings | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | Curl_dyn_init | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | Curl_dyn_setlen | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | Curl_dyn_tail | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | curlx_dyn_init | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | curlx_dyn_setlen | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynbuf *,size_t) | | curlx_dyn_tail | 1 | -| taint.cpp:736:7:736:13 | realloc | (dynhds *,size_t) | | Curl_dynhds_getn | 1 | -| taint.cpp:736:7:736:13 | realloc | (h1_req_parser *,size_t) | | Curl_h1_req_parse_init | 1 | -| taint.cpp:736:7:736:13 | realloc | (hash_table *,unsigned long) | | init_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (int,size_t) | | ossl_calculate_comp_expansion | 1 | -| taint.cpp:736:7:736:13 | realloc | (link_map *,size_t) | | _dl_make_tlsdesc_dynamic | 1 | -| taint.cpp:736:7:736:13 | realloc | (locale_file *,size_t) | | init_locale_data | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_bufs *,size_t) | | nghttp2_bufs_realloc | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_frame *,size_t) | | nghttp2_frame_trail_padlen | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_context *,size_t) | | nghttp2_hd_table_get | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_deflater **,size_t) | | nghttp2_hd_deflate_new | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_change_table_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_deflater *,size_t) | | nghttp2_hd_deflate_get_table_entry | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_change_table_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_hd_inflater *,size_t) | | nghttp2_hd_inflate_get_table_entry | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_option *,size_t) | | nghttp2_option_set_max_continuations | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_option *,size_t) | | nghttp2_option_set_max_deflate_dynamic_table_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_option *,size_t) | | nghttp2_option_set_max_outbound_ack | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_option *,size_t) | | nghttp2_option_set_max_send_header_block_length | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_option *,size_t) | | nghttp2_option_set_max_settings | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_session *,size_t) | | nghttp2_session_consume_connection | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_session *,size_t) | | nghttp2_session_update_recv_connection_window_size | 1 | -| taint.cpp:736:7:736:13 | realloc | (nghttp2_stream *,size_t) | | nghttp2_http_on_data_chunk | 1 | -| taint.cpp:736:7:736:13 | realloc | (nss_action *,size_t) | | __nss_action_allocate | 1 | -| taint.cpp:736:7:736:13 | realloc | (pthread_attr_t *,size_t) | | __pthread_attr_setguardsize | 1 | -| taint.cpp:736:7:736:13 | realloc | (pthread_attr_t *,size_t) | | __pthread_attr_setstacksize | 1 | -| taint.cpp:736:7:736:13 | realloc | (size_t,size_t) | | __libc_memalign | 1 | -| taint.cpp:736:7:736:13 | realloc | (size_t,size_t) | | aligned_alloc | 1 | -| taint.cpp:736:7:736:13 | realloc | (u_long,unsigned long) | | __p_option | 1 | -| taint.cpp:736:7:736:13 | realloc | (uint8_t *,size_t) | | nghttp2_downcase | 1 | -| taint.cpp:736:7:736:13 | realloc | (uint8_t *,size_t) | | ossl_fnv1a_hash | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | JimDefaultAllocator | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | JimDefaultAllocator | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __arc4random_buf | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __arc4random_buf | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __libc_realloc | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __libc_realloc | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __minimal_realloc | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | __minimal_realloc | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | getentropy | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | getentropy | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | uv__random_devurandom | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | uv__random_devurandom | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | uv__random_getrandom | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | uv__random_getrandom | 1 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | xrealloc | 0 | -| taint.cpp:736:7:736:13 | realloc | (void *,size_t) | | xrealloc | 1 | -| taint.cpp:758:5:758:11 | sprintf | (CURLSH *,CURLSHoption,...) | | curl_share_setopt | 2 | -| taint.cpp:758:5:758:11 | sprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 1 | -| taint.cpp:758:5:758:11 | sprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 2 | -| taint.cpp:758:5:758:11 | sprintf | (char **,const char *,...) | | ___asprintf | 1 | -| taint.cpp:758:5:758:11 | sprintf | (char **,const char *,...) | | ___asprintf | 2 | -| taint.cpp:758:5:758:11 | sprintf | (curl_httppost **,curl_httppost **,...) | | curl_formadd | 2 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (ARGS *,char *) | | chopup_args | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (BIO *,char *) | | BIO_set_callback_arg | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (SRP_VBASE *,char *) | | SRP_VBASE_get1_by_user | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (SRP_VBASE *,char *) | | SRP_VBASE_get_by_user | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (SSL_CTX *,char *) | | SSL_CTX_set_srp_password | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (SSL_CTX *,char *) | | SSL_CTX_set_srp_username | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (XDR *,char *) | | xdr_char | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | passwd2des_internal | 0 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | passwd2des_internal | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | xdecrypt | 0 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | xdecrypt | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | xencrypt | 0 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (char *,char *) | | xencrypt | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const char *,char *) | | __old_realpath | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const char *,char *) | | __realpath | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const char *,char *) | | sha1sum_file | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const char *,char *) | | sha3sum_file | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const ether_addr *,char *) | | ether_ntoa_r | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (const tm *,char *) | | __asctime_r | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (curl_slist *,char *) | | Curl_slist_append_nodup | 1 | -| taint.cpp:760:6:760:23 | call_sprintf_twice | (unsigned long,char *) | | ERR_error_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:782:7:782:11 | fopen | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:782:7:782:11 | fopen | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:782:7:782:11 | fopen | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:782:7:782:11 | fopen | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:782:7:782:11 | fopen | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:782:7:782:11 | fopen | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:782:7:782:11 | fopen | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:782:7:782:11 | fopen | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:782:7:782:11 | fopen | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:782:7:782:11 | fopen | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:782:7:782:11 | fopen | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:782:7:782:11 | fopen | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:782:7:782:11 | fopen | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:782:7:782:11 | fopen | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:782:7:782:11 | fopen | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:782:7:782:11 | fopen | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:782:7:782:11 | fopen | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:782:7:782:11 | fopen | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:782:7:782:11 | fopen | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:782:7:782:11 | fopen | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:782:7:782:11 | fopen | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:782:7:782:11 | fopen | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:782:7:782:11 | fopen | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:782:7:782:11 | fopen | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:782:7:782:11 | fopen | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:782:7:782:11 | fopen | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:782:7:782:11 | fopen | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:782:7:782:11 | fopen | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:782:7:782:11 | fopen | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:782:7:782:11 | fopen | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:782:7:782:11 | fopen | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:782:7:782:11 | fopen | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:782:7:782:11 | fopen | (char **,const char *) | | __strsep | 1 | -| taint.cpp:782:7:782:11 | fopen | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:782:7:782:11 | fopen | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | Configcmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | Curl_timestrcmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | DES_crypt | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | OPENSSL_strcasecmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __bind_textdomain_codeset | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __bindtextdomain | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __dgettext | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __gconv_compare_alias | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcasestr | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcspn_generic | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcspn_sse42 | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strpbrk_generic | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strpbrk_sse42 | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strspn_generic | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strspn_sse42 | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strstr_generic | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strverscmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | _dl_cache_libcmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | advance | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | advance | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | c_strcasecmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | charmap_aliases | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | charmap_open | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | chroot_canon | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | get_passwd | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | gzopen | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | gzopen64 | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | iconv_open | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | openssl_fopen | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | ossl_pem_check_suffix | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | ossl_v3_name_cmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | sqlite3_strglob | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | sqlite3_stricmp | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | step | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | step | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | tempnam | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | xfopen | 0 | -| taint.cpp:782:7:782:11 | fopen | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:782:7:782:11 | fopen | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:782:7:782:11 | fopen | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:782:7:782:11 | fopen | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:782:7:782:11 | fopen | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:782:7:782:11 | fopen | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:782:7:782:11 | fopen | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:782:7:782:11 | fopen | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:782:7:782:11 | fopen | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:782:7:782:11 | fopen | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:782:7:782:11 | fopen | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:782:7:782:11 | fopen | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:782:7:782:11 | fopen | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:782:7:782:11 | fopen | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:782:7:782:11 | fopen | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:782:7:782:11 | fopen | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:782:7:782:11 | fopen | (int,const char *) | | gzdopen | 1 | -| taint.cpp:782:7:782:11 | fopen | (int,const char *) | | setlocale | 1 | -| taint.cpp:782:7:782:11 | fopen | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:782:7:782:11 | fopen | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:782:7:782:11 | fopen | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:782:7:782:11 | fopen | (long *,const char *) | | str2num | 1 | -| taint.cpp:782:7:782:11 | fopen | (long *,const char *) | | str2unum | 1 | -| taint.cpp:782:7:782:11 | fopen | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:782:7:782:11 | fopen | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:782:7:782:11 | fopen | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:782:7:782:11 | fopen | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:782:7:782:11 | fopen | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:782:7:782:11 | fopen | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:782:7:782:11 | fopen | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:782:7:782:11 | fopen | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:782:7:782:11 | fopen | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:782:7:782:11 | fopen | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (CTLOG **,const char *,const char *) | | CTLOG_new_from_base64 | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (CTLOG **,const char *,const char *) | | CTLOG_new_from_base64 | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (CURL *,char **,const char *) | | add_file_name_to_url | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (ENGINE *,const char *,const char *) | | make_engine_uri | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (ENGINE *,const char *,const char *) | | make_engine_uri | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (EVP_PKEY_CTX *,const char *,const char *) | | EVP_PKEY_CTX_ctrl_str | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (EVP_PKEY_CTX *,const char *,const char *) | | EVP_PKEY_CTX_ctrl_str | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (FFC_PARAMS *,const char *,const char *) | | ossl_ffc_set_digest | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (FFC_PARAMS *,const char *,const char *) | | ossl_ffc_set_digest | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (FILE *,const char *,const char *) | | _IO_new_proc_open | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (FILE *,const char *,const char *) | | _IO_new_proc_open | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (GlobalConfig *,char **,const char *) | | get_url_file_name | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (Jim_Interp *,Jim_Obj *,const char *) | | Jim_CompareStringImmediate | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (Jim_Interp *,const char *,const char *) | | Jim_SetVariableStrWithStr | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (Jim_Interp *,const char *,const char *) | | Jim_SetVariableStrWithStr | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (LIBSSH2_SESSION *,int,const char *) | | _libssh2_error | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (LIBSSH2_SESSION *,int,const char *) | | libssh2_session_set_last_error | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_CMP_MSG *,OSSL_LIB_CTX *,const char *) | | ossl_cmp_msg_set0_libctx | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_DECODER *,void *,const char *) | | ossl_decoder_instance_new_forprov | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_LIB_CTX *,EVP_PKEY *,const char *) | | EVP_PKEY_CTX_new_from_pkey | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_LIB_CTX *,const char *,const char *) | | EVP_PKEY_CTX_new_from_name | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_LIB_CTX *,const char *,const char *) | | EVP_PKEY_CTX_new_from_name | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_LIB_CTX *,const char *,const char *) | | ossl_slh_dsa_key_new | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_LIB_CTX *,const char *,const char *) | | ossl_slh_dsa_key_new | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (OSSL_NAMEMAP *,int,const char *) | | ossl_namemap_add_name | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (PROV_CTX *,const char *,const char *) | | ossl_prov_ctx_get_param | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (PROV_CTX *,const char *,const char *) | | ossl_prov_ctx_get_param | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (SRP_user_pwd *,const char *,const char *) | | SRP_user_pwd_set1_ids | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (SRP_user_pwd *,const char *,const char *) | | SRP_user_pwd_set1_ids | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (SSL_CONF_CTX *,const char *,const char *) | | SSL_CONF_cmd | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (SSL_CONF_CTX *,const char *,const char *) | | SSL_CONF_cmd | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (UI *,UI_STRING *,const char *) | | UI_set_result | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (UI *,const char *,const char *) | | UI_construct_prompt | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (UI *,const char *,const char *) | | UI_construct_prompt | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (X509 *,OSSL_LIB_CTX *,const char *) | | ossl_x509_set0_libctx | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (X509V3_EXT_METHOD *,X509V3_CTX *,const char *) | | s2i_ASN1_IA5STRING | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (X509V3_EXT_METHOD *,X509V3_CTX *,const char *) | | s2i_ASN1_UTF8STRING | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (X509_CRL *,OSSL_LIB_CTX *,const char *) | | ossl_x509_crl_set0_libctx | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (X509_REQ *,OSSL_LIB_CTX *,const char *) | | ossl_x509_req_set0_libctx | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (char **,size_t *,const char *) | | envz_remove | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (char[256],const char *,const char *) | | host2netname | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (char[256],const char *,const char *) | | host2netname | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (char[256],const uid_t,const char *) | | user2netname | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const ASN1_ITEM *,OSSL_LIB_CTX *,const char *) | | ASN1_item_new_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const EVP_CIPHER *,OSSL_LIB_CTX *,const char *) | | CMS_AuthEnvelopedData_create_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const EVP_CIPHER *,OSSL_LIB_CTX *,const char *) | | CMS_EnvelopedData_create_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const EVP_MD *,OSSL_LIB_CTX *,const char *) | | ossl_cms_DigestedData_create | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const OSSL_PARAM[],OSSL_LIB_CTX *,const char *) | | EC_GROUP_new_from_params | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const OSSL_PROPERTY_LIST *,OSSL_LIB_CTX *,const char *) | | ossl_property_find_property | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS8_PRIV_KEY_INFO *,OSSL_LIB_CTX *,const char *) | | EVP_PKCS82PKEY_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS8_PRIV_KEY_INFO *,OSSL_LIB_CTX *,const char *) | | ossl_ec_key_from_pkcs8 | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS8_PRIV_KEY_INFO *,OSSL_LIB_CTX *,const char *) | | ossl_ecx_key_from_pkcs8 | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS8_PRIV_KEY_INFO *,OSSL_LIB_CTX *,const char *) | | ossl_rsa_key_from_pkcs8 | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS12_SAFEBAG *,OSSL_LIB_CTX *,const char *) | | PKCS12_SAFEBAG_get1_cert_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const PKCS12_SAFEBAG *,OSSL_LIB_CTX *,const char *) | | PKCS12_SAFEBAG_get1_crl_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const QUIC_TSERVER_ARGS *,const char *,const char *) | | ossl_quic_tserver_new | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (const QUIC_TSERVER_ARGS *,const char *,const char *) | | ossl_quic_tserver_new | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const X509_ALGOR *,OSSL_LIB_CTX *,const char *) | | ossl_ec_key_param_from_x509_algor | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char **,char **,const char *) | | Curl_get_pathname | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_read | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,size_t,const char *) | | __argz_next | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,size_t,const char *) | | argz_next | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,size_t,const char *) | | envz_entry | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,size_t,const char *) | | envz_get | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (const char *,sqlite3_filename,const char *) | | sqlite3_uri_parameter | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (dl_exception *,const char *,const char *) | | _dl_exception_create | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (dl_exception *,const char *,const char *) | | _dl_exception_create | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (dynhds *,const char *,const char *) | | Curl_dynhds_cadd | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (dynhds *,const char *,const char *) | | Curl_dynhds_cadd | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (gconv_spec *,const char *,const char *) | | __gconv_create_spec | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (gconv_spec *,const char *,const char *) | | __gconv_create_spec | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (gz_statep,int,const char *) | | gz_error | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (http_resp **,int,const char *) | | Curl_http_resp_make | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,OSSL_LIB_CTX *,const char *) | | PKCS12_init_ex | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,char *const *,const char *) | | __posix_getopt | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,char *const *,const char *) | | getopt | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,dl_exception *,const char *) | | _dl_signal_cexception | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,dl_exception *,const char *) | | _dl_signal_exception | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (int,int,const char *) | | OSSL_CMP_STATUSINFO_new | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (lemon *,const char *,const char *) | | file_open | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (lemon *,const char *,const char *) | | file_open | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (locale_t,const char *,const char *) | | __translated_number_width | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (locale_t,const char *,const char *) | | __translated_number_width | 2 | -| taint.cpp:783:5:783:11 | fopen_s | (sqlite3 *,const char *,const char *) | | sqlite3_recover_init | 1 | -| taint.cpp:783:5:783:11 | fopen_s | (sqlite3 *,const char *,const char *) | | sqlite3_recover_init | 2 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | SRP_VBASE_new | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | _IO_gets | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | __mktemp | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | __nis_default_group | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | __nis_default_owner | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | __nis_default_ttl | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | __xpg_basename | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | ctermid | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | cuserid | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | defossilize | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | des_setparity | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | dirname | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | getwd | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | make_uppercase | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | mkdtemp | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | next_item | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | | strfry | 0 | -| taint.cpp:785:6:785:15 | fopen_test | (char *) | CStringT | CStringT | 0 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (ASN1_STRING *,unsigned int) | | ossl_asn1_string_set_bits_left | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (Curl_easy *,unsigned int) | | Curl_ssl_supports | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (EC_KEY *,unsigned int) | | EC_KEY_set_enc_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (EVP_ENCODE_CTX *,unsigned int) | | evp_encode_ctx_set_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (FFC_PARAMS *,unsigned int) | | ossl_ffc_params_set_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (OSSL_PARAM *,unsigned int) | | OSSL_PARAM_set_uint | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (QUIC_DEMUX *,unsigned int) | | ossl_quic_demux_set_mtu | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (QUIC_OBJ *,unsigned int) | | ossl_quic_obj_set_blocking_mode | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (RAND_POOL *,unsigned int) | | ossl_rand_pool_bytes_needed | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (SSL *,unsigned int) | | SSL_set_hostflags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_clear_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_set_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (TS_RESP_CTX *,unsigned int) | | TS_RESP_CTX_set_clock_precision_digits | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (WPACKET *,unsigned int) | | WPACKET_set_flags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (X509_STORE_CTX *,unsigned int) | | X509_STORE_CTX_set_current_reasons | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (X509_VERIFY_PARAM *,unsigned int) | | X509_VERIFY_PARAM_set_hostflags | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (char *,unsigned int) | | __nis_default_access | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (char *,unsigned int) | | utf8_fromunicode | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (char *,unsigned int) | | uv_buf_init | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (const uv__io_t *,unsigned int) | | uv__io_active | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (const uv_buf_t[],unsigned int) | | uv__count_bufs | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (const_nis_name,unsigned int) | | __create_ib_request | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (grouping_iterator *,unsigned int) | | __grouping_iterator_init_none | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (gzFile,unsigned int) | | gzbuffer | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (res_state,unsigned int) | | __res_get_nsaddr | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (unsigned int,unsigned int) | | __gnu_dev_makedev | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (unsigned int,unsigned int) | | gnu_dev_makedev | 1 | -| taint.cpp:801:6:801:26 | SysAllocStringByteLen | (z_streamp,unsigned int) | | inflate_fast | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (ASN1_STRING *,unsigned int) | | ossl_asn1_string_set_bits_left | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (Curl_easy *,unsigned int) | | Curl_ssl_supports | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (EC_KEY *,unsigned int) | | EC_KEY_set_enc_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (EVP_ENCODE_CTX *,unsigned int) | | evp_encode_ctx_set_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (FFC_PARAMS *,unsigned int) | | ossl_ffc_params_set_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (OSSL_PARAM *,unsigned int) | | OSSL_PARAM_set_uint | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (QUIC_DEMUX *,unsigned int) | | ossl_quic_demux_set_mtu | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (QUIC_OBJ *,unsigned int) | | ossl_quic_obj_set_blocking_mode | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (RAND_POOL *,unsigned int) | | ossl_rand_pool_bytes_needed | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (SSL *,unsigned int) | | SSL_set_hostflags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_clear_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (SSL_CONF_CTX *,unsigned int) | | SSL_CONF_CTX_set_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (TS_RESP_CTX *,unsigned int) | | TS_RESP_CTX_set_clock_precision_digits | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (WPACKET *,unsigned int) | | WPACKET_set_flags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (X509_STORE_CTX *,unsigned int) | | X509_STORE_CTX_set_current_reasons | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (X509_VERIFY_PARAM *,unsigned int) | | X509_VERIFY_PARAM_set_hostflags | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (char *,unsigned int) | | __nis_default_access | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (char *,unsigned int) | | utf8_fromunicode | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (char *,unsigned int) | | uv_buf_init | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (const uv__io_t *,unsigned int) | | uv__io_active | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (const uv_buf_t[],unsigned int) | | uv__count_bufs | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (const_nis_name,unsigned int) | | __create_ib_request | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (grouping_iterator *,unsigned int) | | __grouping_iterator_init_none | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (gzFile,unsigned int) | | gzbuffer | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (res_state,unsigned int) | | __res_get_nsaddr | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (unsigned int,unsigned int) | | __gnu_dev_makedev | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (unsigned int,unsigned int) | | gnu_dev_makedev | 1 | -| taint.cpp:802:6:802:22 | SysAllocStringLen | (z_streamp,unsigned int) | | inflate_fast | 1 | -| taint.cpp:815:7:815:12 | strchr | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| taint.cpp:815:7:815:12 | strchr | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | BN_clear_bit | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | BN_mask_bits | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | BN_set_bit | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | BN_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | bn_expand2 | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | bn_wexpand | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_find_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_set_init | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_set_retry_reason | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | BIO_set_shutdown | 1 | -| taint.cpp:815:7:815:12 | strchr | (BIO *,int) | | TXT_DB_read | 1 | -| taint.cpp:815:7:815:12 | strchr | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (CURL *,int) | | curl_easy_pause | 1 | -| taint.cpp:815:7:815:12 | strchr | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| taint.cpp:815:7:815:12 | strchr | (DH *,int) | | DH_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (DH *,int) | | DH_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (DSA *,int) | | DSA_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (DSA *,int) | | DSA_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| taint.cpp:815:7:815:12 | strchr | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| taint.cpp:815:7:815:12 | strchr | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| taint.cpp:815:7:815:12 | strchr | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| taint.cpp:815:7:815:12 | strchr | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| taint.cpp:815:7:815:12 | strchr | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| taint.cpp:815:7:815:12 | strchr | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| taint.cpp:815:7:815:12 | strchr | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| taint.cpp:815:7:815:12 | strchr | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_default_pbackfail | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_fwide | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_init | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_init_internal | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_new_file_attach | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_new_file_overflow | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_old_init | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_sputbackc | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_str_overflow | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | _IO_str_pbackfail | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| taint.cpp:815:7:815:12 | strchr | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| taint.cpp:815:7:815:12 | strchr | (FTS *,int) | | fts_children | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| taint.cpp:815:7:815:12 | strchr | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| taint.cpp:815:7:815:12 | strchr | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| taint.cpp:815:7:815:12 | strchr | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| taint.cpp:815:7:815:12 | strchr | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| taint.cpp:815:7:815:12 | strchr | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| taint.cpp:815:7:815:12 | strchr | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| taint.cpp:815:7:815:12 | strchr | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA *,int) | | RSA_clear_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA *,int) | | RSA_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| taint.cpp:815:7:815:12 | strchr | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_key_update | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_purpose | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_read_ahead | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_security_level | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_shutdown | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_trust | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL *,int) | | SSL_set_verify_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_CTX *,int) | | ssl_md | 1 | -| taint.cpp:815:7:815:12 | strchr | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509 *,int) | | X509_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509 *,int) | | X509_self_signed | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| taint.cpp:815:7:815:12 | strchr | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| taint.cpp:815:7:815:12 | strchr | (_Float128,int) | | __ldexpf128 | 1 | -| taint.cpp:815:7:815:12 | strchr | (_Float128,int) | | __scalbnf128 | 1 | -| taint.cpp:815:7:815:12 | strchr | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| taint.cpp:815:7:815:12 | strchr | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| taint.cpp:815:7:815:12 | strchr | (acttab *,int) | | acttab_insert | 1 | -| taint.cpp:815:7:815:12 | strchr | (addrinfo *,int) | | support_format_addrinfo | 1 | -| taint.cpp:815:7:815:12 | strchr | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| taint.cpp:815:7:815:12 | strchr | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| taint.cpp:815:7:815:12 | strchr | (char **,int) | | addrsort | 1 | -| taint.cpp:815:7:815:12 | strchr | (char *,int) | | Curl_str2addr | 1 | -| taint.cpp:815:7:815:12 | strchr | (char *,int) | | PEM_proc_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (char,int) | CStringT | CStringT | 1 | -| taint.cpp:815:7:815:12 | strchr | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| taint.cpp:815:7:815:12 | strchr | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| taint.cpp:815:7:815:12 | strchr | (const BIGNUM *,int) | | BN_get_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| taint.cpp:815:7:815:12 | strchr | (const BIO *,int) | | BIO_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const BIO *,int) | | BIO_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DH *,int) | | DH_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DH *,int) | | DH_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DH *,int) | | ossl_dh_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DSA *,int) | | DSA_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DSA *,int) | | DSA_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const DSA *,int) | | ossl_dsa_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| taint.cpp:815:7:815:12 | strchr | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| taint.cpp:815:7:815:12 | strchr | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| taint.cpp:815:7:815:12 | strchr | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| taint.cpp:815:7:815:12 | strchr | (const RSA *,int) | | RSA_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const RSA *,int) | | RSA_test_flags | 1 | -| taint.cpp:815:7:815:12 | strchr | (const RSA *,int) | | ossl_rsa_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const SSL *,int) | | SSL_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| taint.cpp:815:7:815:12 | strchr | (const UI *,int) | | UI_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509 *,int) | | X509_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509 *,int) | | X509_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| taint.cpp:815:7:815:12 | strchr | (const XCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:815:7:815:12 | strchr | (const YCHAR *,int) | CStringT | CStringT | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | DH_meth_new | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | DH_meth_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | DSA_meth_new | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | DSA_meth_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | Jim_StrDupLen | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | Jim_StrDupLen | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | RSA_meth_new | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | RSA_meth_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | ftok | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | ftok | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | gethostbyname2 | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | gethostbyname2 | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | parse_yesno | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | parse_yesno | 1 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | res_gethostbyname2 | 0 | -| taint.cpp:815:7:815:12 | strchr | (const char *,int) | | res_gethostbyname2 | 1 | -| taint.cpp:815:7:815:12 | strchr | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| taint.cpp:815:7:815:12 | strchr | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| taint.cpp:815:7:815:12 | strchr | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| taint.cpp:815:7:815:12 | strchr | (const void *,int) | | inet6_rth_getaddr | 1 | -| taint.cpp:815:7:815:12 | strchr | (double,int) | | __ldexp | 1 | -| taint.cpp:815:7:815:12 | strchr | (double,int) | | __scalbn | 1 | -| taint.cpp:815:7:815:12 | strchr | (double[],int) | | getloadavg | 1 | -| taint.cpp:815:7:815:12 | strchr | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| taint.cpp:815:7:815:12 | strchr | (fexcept_t *,int) | | fegetexceptflag | 1 | -| taint.cpp:815:7:815:12 | strchr | (float,int) | | __ldexpf | 1 | -| taint.cpp:815:7:815:12 | strchr | (float,int) | | __scalbnf | 1 | -| taint.cpp:815:7:815:12 | strchr | (gzFile,int) | | gzflush | 1 | -| taint.cpp:815:7:815:12 | strchr | (gzFile,int) | | gzputc | 1 | -| taint.cpp:815:7:815:12 | strchr | (int *,int) | | X509_PURPOSE_set | 1 | -| taint.cpp:815:7:815:12 | strchr | (int *,int) | | X509_TRUST_set | 1 | -| taint.cpp:815:7:815:12 | strchr | (int *,int) | | __lll_unlock_elision | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | BN_security_bits | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | EVP_MD_meth_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | EVP_PKEY_meth_new | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | __isctype | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | acttab_alloc | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | div | 1 | -| taint.cpp:815:7:815:12 | strchr | (int,int) | | inet6_rth_space | 1 | -| taint.cpp:815:7:815:12 | strchr | (long double,int) | | __ldexpl | 1 | -| taint.cpp:815:7:815:12 | strchr | (netlink_handle *,int) | | __netlink_request | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| taint.cpp:815:7:815:12 | strchr | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| taint.cpp:815:7:815:12 | strchr | (ns_msg,int) | | ns_msg_getflag | 1 | -| taint.cpp:815:7:815:12 | strchr | (obstack *,int) | | _obstack_newchunk | 1 | -| taint.cpp:815:7:815:12 | strchr | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| taint.cpp:815:7:815:12 | strchr | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| taint.cpp:815:7:815:12 | strchr | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| taint.cpp:815:7:815:12 | strchr | (rule *,int) | | Configlist_add | 1 | -| taint.cpp:815:7:815:12 | strchr | (rule *,int) | | Configlist_addbasis | 1 | -| taint.cpp:815:7:815:12 | strchr | (sigset_t *,int) | | sigaddset | 1 | -| taint.cpp:815:7:815:12 | strchr | (sigset_t *,int) | | sigdelset | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| taint.cpp:815:7:815:12 | strchr | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| taint.cpp:815:7:815:12 | strchr | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| taint.cpp:815:7:815:12 | strchr | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| taint.cpp:815:7:815:12 | strchr | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| taint.cpp:815:7:815:12 | strchr | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| taint.cpp:815:7:815:12 | strchr | (timespec *,int) | | __timespec_get | 1 | -| taint.cpp:815:7:815:12 | strchr | (timespec *,int) | | __timespec_getres | 1 | -| taint.cpp:815:7:815:12 | strchr | (uint16_t,int) | | tls1_group_id2nid | 1 | -| taint.cpp:815:7:815:12 | strchr | (unsigned char *,int) | | RAND_bytes | 1 | -| taint.cpp:815:7:815:12 | strchr | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| taint.cpp:815:7:815:12 | strchr | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| taint.cpp:815:7:815:12 | strchr | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| taint.cpp:815:7:815:12 | strchr | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| taint.cpp:815:7:815:12 | strchr | (void *,int) | | DSO_dsobyaddr | 1 | -| taint.cpp:815:7:815:12 | strchr | (void *,int) | | sqlite3_realloc | 1 | -| taint.cpp:815:7:815:12 | strchr | (void *const *,int) | | __backtrace_symbols | 1 | -| taint.cpp:815:7:815:12 | strchr | (wchar_t,int) | CStringT | CStringT | 1 | -| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | (const OSSL_PARAM *,const char **) | | OSSL_PARAM_get_utf8_ptr | 1 | -| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | (const OSSL_PARAM *,const char **) | | OSSL_PARAM_get_utf8_string_ptr | 1 | -| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | (const X509_NAME *,const char **) | | OCSP_url_svcloc_new | 1 | -| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | (int,const char **) | | _nl_load_locale_from_archive | 1 | -| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | (sqlite3_intck *,const char **) | | sqlite3_intck_error | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ASN1_GENERALIZEDTIME *,const char *) | | ASN1_GENERALIZEDTIME_set_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ASN1_TIME *,const char *) | | ASN1_TIME_set_string_X509 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ASN1_UTCTIME *,const char *) | | ASN1_UTCTIME_set_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (BIGNUM **,const char *) | | BN_asc2bn | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (BIGNUM **,const char *) | | BN_dec2bn | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (BIGNUM **,const char *) | | BN_hex2bn | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (CONF *,const char *) | | TS_CONF_get_tsa_section | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (CONF *,const char *) | | _CONF_new_section | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (CURLU *,const char *) | | Curl_url_set_authority | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Curl_easy *,const char *) | | Curl_cwriter_get_by_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Curl_easy *,const char *) | | Curl_rtsp_parseheader | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (DH_METHOD *,const char *) | | DH_meth_set1_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (DSA_METHOD *,const char *) | | DSA_meth_set1_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (DSO *,const char *) | | DSO_convert_filename | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (DSO *,const char *) | | DSO_set_filename | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ENGINE *,const char *) | | ENGINE_set_id | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ENGINE *,const char *) | | ENGINE_set_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (ENGINE *,const char *) | | OSSL_STORE_LOADER_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (EVP_PKEY *,const char *) | | CTLOG_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (EVP_PKEY_CTX *,const char *) | | app_paramgen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (EVP_PKEY_CTX *,const char *) | | pkey_ctrl_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (GlobalConfig *,const char *) | | setvariable | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Jim_Interp *,const char *) | | Jim_Eval | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Jim_Interp *,const char *) | | Jim_EvalFile | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Jim_Interp *,const char *) | | Jim_EvalFileGlobal | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Jim_Interp *,const char *) | | Jim_EvalGlobal | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (LIBSSH2_AGENT *,const char *) | | libssh2_agent_set_identity_path | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (LIBSSH2_SESSION *,const char *) | | libssh2_banner_set | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (LIBSSH2_SESSION *,const char *) | | libssh2_session_banner_set | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (Lmid_t,const char *) | | _dl_lookup_map | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OPENSSL_DIR_CTX **,const char *) | | OPENSSL_DIR_read | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_appname | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OPENSSL_INIT_SETTINGS *,const char *) | | OPENSSL_INIT_set_config_filename | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_no_proxy | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_proxy | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_server | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_CMP_CTX *,const char *) | | OSSL_CMP_CTX_set1_serverPath | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_structure | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_DECODER_CTX *,const char *) | | OSSL_DECODER_CTX_set_input_type | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_structure | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_ENCODER_CTX *,const char *) | | OSSL_ENCODER_CTX_set_output_type | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_JSON_ENC *,const char *) | | ossl_json_key | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_JSON_ENC *,const char *) | | ossl_json_str | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | CMS_ContentInfo_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | CTLOG_STORE_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | CT_POLICY_EVAL_CTX_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | EC_KEY_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_CTX_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_MSG_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | OSSL_CMP_SRV_CTX_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | OSSL_PROVIDER_load | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | PKCS7_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | SCT_CTX_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | TS_RESP_CTX_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | X509_CRL_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | X509_PUBKEY_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | X509_REQ_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | X509_STORE_CTX_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | X509_new_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | ossl_cmp_mock_srv_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | ossl_cms_Data_create | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_LIB_CTX *,const char *) | | ossl_parse_property | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_PARAM *,const char *) | | OSSL_PARAM_locate | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_ptr | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_PARAM *,const char *) | | OSSL_PARAM_set_utf8_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (OSSL_PROVIDER *,const char *) | | ossl_provider_set_module_path | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (PKCS7 *,const char *) | | ossl_pkcs7_set1_propq | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (RSA_METHOD *,const char *) | | RSA_meth_set1_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL *,const char *) | | SSL_add1_host | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL *,const char *) | | SSL_set1_host | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL *,const char *) | | SSL_set_cipher_list | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL *,const char *) | | SSL_use_psk_identity_hint | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_CONF_CTX *,const char *) | | SSL_CONF_CTX_set1_prefix | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_CONF_CTX *,const char *) | | SSL_CONF_cmd_value_type | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_CTX *,const char *) | | SSL_CTX_set_cipher_list | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_CTX *,const char *) | | SSL_CTX_use_psk_identity_hint | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_CTX *,const char *) | | ossl_quic_set_diag_title | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (SSL_SESSION *,const char *) | | SSL_SESSION_set1_hostname | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (UI *,const char *) | | UI_add_error_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (UI *,const char *) | | UI_add_info_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (UI *,const char *) | | UI_dup_error_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (UI *,const char *) | | UI_dup_info_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (X509 *,const char *) | | x509_ctrl_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (X509_REQ *,const char *) | | x509_req_ctrl_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_ip_asc | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (X509_VERIFY_PARAM *,const char *) | | X509_VERIFY_PARAM_set1_name | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (__printf_buffer *,const char *) | | __printf_buffer_puts_1 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (alloc_buffer,const char *) | | __libc_alloc_buffer_copy_string | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (argp_fmtstream_t,const char *) | | __argp_fmtstream_puts | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (char **,const char *) | | Curl_setstropt | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (char **,const char *) | | __strsep | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (char *,const char *) | | xstrdup | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const OSSL_PARAM *,const char *) | | OSSL_PARAM_locate_const | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char **,const char *) | | uv__utf8_decode1 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | Configcmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | Configcmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | Curl_timestrcmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | Curl_timestrcmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | DES_crypt | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | DES_crypt | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | OPENSSL_strcasecmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | OPENSSL_strcasecmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __bind_textdomain_codeset | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __bind_textdomain_codeset | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __bindtextdomain | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __bindtextdomain | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __dgettext | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __dgettext | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __gconv_compare_alias | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __gconv_compare_alias | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcasestr | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcasestr | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcspn_generic | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcspn_generic | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcspn_sse42 | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strcspn_sse42 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strpbrk_generic | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strpbrk_generic | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strpbrk_sse42 | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strpbrk_sse42 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strspn_generic | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strspn_generic | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strspn_sse42 | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strspn_sse42 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strstr_generic | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strstr_generic | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strverscmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | __strverscmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | _dl_cache_libcmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | _dl_cache_libcmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | advance | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | advance | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | c_strcasecmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | c_strcasecmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | charmap_aliases | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | charmap_aliases | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | charmap_open | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | charmap_open | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | chroot_canon | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | chroot_canon | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | get_passwd | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | get_passwd | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | gzopen | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | gzopen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | gzopen64 | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | gzopen64 | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | iconv_open | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | iconv_open | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | openssl_fopen | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | openssl_fopen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | ossl_pem_check_suffix | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | ossl_pem_check_suffix | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | ossl_v3_name_cmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | ossl_v3_name_cmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | sqlite3_strglob | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | sqlite3_strglob | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | sqlite3_stricmp | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | sqlite3_stricmp | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | step | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | step | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | tempnam | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | tempnam | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | xfopen | 0 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const char *,const char *) | | xfopen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const mntent *,const char *) | | __hasmntopt | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (const nis_error,const char *) | | nis_sperror | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (curl_mimepart *,const char *) | | curl_mime_filedata | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (curl_off_t *,const char *) | | str2offset | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (curl_pushheaders *,const char *) | | curl_pushheader_byname | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (curl_slist **,const char *) | | add2list | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (curl_slist *,const char *) | | curl_slist_append | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (dynbuf *,const char *) | | Curl_dyn_add | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (dynbuf *,const char *) | | curlx_dyn_add | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (dynhds *,const char *) | | Curl_dynhds_cget | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (dynhds *,const char *) | | Curl_dynhds_h1_cadd_line | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (gconv_fcts *,const char *) | | __wcsmbs_named_conv | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (gzFile,const char *) | | gzputs | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (int,const char *) | | BIO_meth_new | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (int,const char *) | | _IO_new_fdopen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (int,const char *) | | gzdopen | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (int,const char *) | | setlocale | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (int,const char *) | | xsetlocale | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (lemon *,const char *) | | file_makename | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (long *,const char *) | | secs2ms | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (long *,const char *) | | str2num | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (long *,const char *) | | str2unum | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (nss_module *,const char *) | | __nss_module_get_function | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (size_t *,const char *) | | next_protos_parse | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (slist_wc **,const char *) | | easysrc_add | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (slist_wc *,const char *) | | slist_wc_append | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sockaddr_un *,const char *) | | __sockaddr_un_set | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3 *,const char *) | | sqlite3_declare_vtab | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3 *,const char *) | | sqlite3_get_clientdata | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3 *,const char *) | | sqlite3_wal_checkpoint | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3_intck *,const char *) | | sqlite3_intck_test_sql | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3_stmt *,const char *) | | sqlite3_bind_parameter_index | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3_str *,const char *) | | sqlite3_str_appendall | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (sqlite3_value *,const char *) | | sqlite3_value_pointer | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (stringtable *,const char *) | | stringtable_add | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (unsigned char *,const char *) | | ossl_a2i_ipadd | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (unsigned long *,const char *) | | set_cert_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (unsigned long *,const char *) | | set_name_ex | 1 | -| taint.cpp:822:6:822:19 | take_const_ptr | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 | -| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2bit | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2str | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | Jim_ReturnCode | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | Jim_SignalId | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2ln | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2obj | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | OBJ_nid2sn | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | PKCS12_init | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | Symbol_Nth | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __btowc | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __current_locale_name | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __fdopendir | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __get_errlist | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __get_errname | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __math_invalid_i | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __math_invalidf_i | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __p_class | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __p_rcode | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __p_type | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __pkey_get | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __sigdescr_np | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | __strerrordesc_np | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | _tolower | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | _toupper | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | btowc | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | c_tolower | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | c_toupper | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | curlx_sitouz | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | evp_pkey_type2name | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | inet6_option_space | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isalnum | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isalpha | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isblank | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | iscntrl | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isdigit | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isgraph | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | islower | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isprint | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ispunct | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isspace | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isupper | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | isxdigit | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ossl_tolower | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | ossl_toupper | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | sigabbrev_np | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | sqlite3_errstr | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | strerrorname_np | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | support_report_failure | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | svcudp_create | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | tls13_alert_code | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | toascii | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | tolower | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | toupper | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uabs | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uv__accept | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uv_err_name | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uv_get_osfhandle | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uv_strerror | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | uv_translate_sys_error | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | | zError | 0 | -| thread.cpp:4:6:4:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| thread.cpp:18:6:18:22 | thread_function_3 | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | BN_clear_bit | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | BN_mask_bits | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | BN_set_bit | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | BN_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | bn_expand2 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | bn_wexpand | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_find_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_set_init | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_set_retry_reason | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | BIO_set_shutdown | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (BIO *,int) | | TXT_DB_read | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (CURL *,int) | | curl_easy_pause | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DH *,int) | | DH_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DH *,int) | | DH_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DSA *,int) | | DSA_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DSA *,int) | | DSA_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_default_pbackfail | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_fwide | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_init | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_init_internal | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_new_file_attach | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_new_file_overflow | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_old_init | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_sputbackc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_str_overflow | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | _IO_str_pbackfail | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (FTS *,int) | | fts_children | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA *,int) | | RSA_clear_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA *,int) | | RSA_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_key_update | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_purpose | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_read_ahead | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_security_level | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_shutdown | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_trust | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL *,int) | | SSL_set_verify_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_CTX *,int) | | ssl_md | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509 *,int) | | X509_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509 *,int) | | X509_self_signed | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (_Float128,int) | | __ldexpf128 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (_Float128,int) | | __scalbnf128 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (acttab *,int) | | acttab_insert | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (addrinfo *,int) | | support_format_addrinfo | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (char **,int) | | addrsort | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (char *,int) | | Curl_str2addr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (char *,int) | | PEM_proc_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (char,int) | CStringT | CStringT | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const BIGNUM *,int) | | BN_get_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const BIO *,int) | | BIO_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const BIO *,int) | | BIO_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DH *,int) | | DH_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DH *,int) | | DH_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DH *,int) | | ossl_dh_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DSA *,int) | | DSA_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DSA *,int) | | DSA_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const DSA *,int) | | ossl_dsa_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const RSA *,int) | | RSA_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const RSA *,int) | | RSA_test_flags | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const RSA *,int) | | ossl_rsa_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const SSL *,int) | | SSL_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const UI *,int) | | UI_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509 *,int) | | X509_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509 *,int) | | X509_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const XCHAR *,int) | CStringT | CStringT | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const YCHAR *,int) | CStringT | CStringT | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | DH_meth_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | DSA_meth_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | Jim_StrDupLen | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | RSA_meth_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | ftok | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | gethostbyname2 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | parse_yesno | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const char *,int) | | res_gethostbyname2 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (const void *,int) | | inet6_rth_getaddr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (double,int) | | __ldexp | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (double,int) | | __scalbn | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (double[],int) | | getloadavg | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (fexcept_t *,int) | | fegetexceptflag | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (float,int) | | __ldexpf | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (float,int) | | __scalbnf | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (gzFile,int) | | gzflush | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (gzFile,int) | | gzputc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int *,int) | | X509_PURPOSE_set | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int *,int) | | X509_TRUST_set | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int *,int) | | __lll_unlock_elision | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | BN_security_bits | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | EVP_MD_meth_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | EVP_PKEY_meth_new | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | __isctype | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | acttab_alloc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | div | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (int,int) | | inet6_rth_space | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (long double,int) | | __ldexpl | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (netlink_handle *,int) | | __netlink_request | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (ns_msg,int) | | ns_msg_getflag | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (obstack *,int) | | _obstack_newchunk | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (rule *,int) | | Configlist_add | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (rule *,int) | | Configlist_addbasis | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sigset_t *,int) | | sigaddset | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sigset_t *,int) | | sigdelset | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (timespec *,int) | | __timespec_get | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (timespec *,int) | | __timespec_getres | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (uint16_t,int) | | tls1_group_id2nid | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (unsigned char *,int) | | RAND_bytes | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (void *,int) | | DSO_dsobyaddr | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (void *,int) | | sqlite3_realloc | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (void *const *,int) | | __backtrace_symbols | 1 | -| thread.cpp:18:6:18:22 | thread_function_3 | (wchar_t,int) | CStringT | CStringT | 1 | -| vector.cpp:13:6:13:9 | sink | (int) | | ASN1_STRING_type_new | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ASN1_tag2bit | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ASN1_tag2str | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | EVP_PKEY_asn1_get0 | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | Jim_ReturnCode | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | Jim_SignalId | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2ln | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2obj | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | OBJ_nid2sn | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | OSSL_STORE_INFO_type_string | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | OSSL_trace_get_category_name | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | PKCS12_init | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | Symbol_Nth | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | X509_PURPOSE_get0 | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | X509_PURPOSE_get_by_id | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | X509_TRUST_get0 | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | X509_TRUST_get_by_id | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __btowc | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __current_locale_name | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __fdopendir | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __get_errlist | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __get_errname | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __math_invalid_i | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __math_invalidf_i | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __p_class | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __p_rcode | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __p_type | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __pkey_get | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __sigdescr_np | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | __strerrordesc_np | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | _tolower | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | _toupper | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | btowc | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | c_tolower | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | c_toupper | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | curlx_sitouz | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | evp_pkey_type2name | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | inet6_option_space | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isalnum | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isalpha | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isblank | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | iscntrl | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isdigit | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isgraph | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | islower | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isprint | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ispunct | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isspace | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isupper | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | isxdigit | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ossl_cmp_bodytype_to_string | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ossl_tolower | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | ossl_toupper | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | sigabbrev_np | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | sqlite3_compileoption_get | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | sqlite3_errstr | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | strerrorname_np | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | support_report_failure | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | svcudp_create | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | tls13_alert_code | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | toascii | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | tolower | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | toupper | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uabs | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uv__accept | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uv_err_name | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uv_get_osfhandle | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uv_strerror | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | uv_translate_sys_error | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | | zError | 0 | -| vector.cpp:13:6:13:9 | sink | (int) | __pthread_cleanup_class | __setdoit | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ASN1_STRING_type_new | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ASN1_tag2bit | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ASN1_tag2str | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | EVP_PKEY_asn1_get0 | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | Jim_ReturnCode | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | Jim_SignalId | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | OBJ_nid2ln | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | OBJ_nid2obj | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | OBJ_nid2sn | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | OSSL_STORE_INFO_type_string | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | OSSL_trace_get_category_name | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | PKCS12_init | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | Symbol_Nth | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | X509_PURPOSE_get0 | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | X509_PURPOSE_get_by_id | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | X509_TRUST_get0 | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | X509_TRUST_get_by_id | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __btowc | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __current_locale_name | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __fdopendir | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __get_errlist | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __get_errname | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __math_invalid_i | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __math_invalidf_i | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __p_class | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __p_rcode | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __p_type | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __pkey_get | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __sigdescr_np | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | __strerrordesc_np | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | _tolower | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | _toupper | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | btowc | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | c_tolower | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | c_toupper | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | curlx_sitouz | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | evp_pkey_type2name | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | inet6_option_space | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isalnum | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isalpha | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isblank | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | iscntrl | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isdigit | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isgraph | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | islower | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isprint | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ispunct | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isspace | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isupper | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | isxdigit | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ossl_cmp_bodytype_to_string | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ossl_tolower | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | ossl_toupper | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | sigabbrev_np | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | sqlite3_compileoption_get | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | sqlite3_errstr | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | strerrorname_np | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | support_report_failure | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | svcudp_create | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | tls13_alert_code | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | toascii | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | tolower | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | toupper | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uabs | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uv__accept | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uv_err_name | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uv_get_osfhandle | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uv_strerror | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | uv_translate_sys_error | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | | zError | 0 | -| vector.cpp:16:6:16:37 | test_range_based_for_loop_vector | (int) | __pthread_cleanup_class | __setdoit | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ASN1_STRING_type_new | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ASN1_tag2bit | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ASN1_tag2str | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | EVP_PKEY_asn1_get0 | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | Jim_ReturnCode | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | Jim_SignalId | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | OBJ_nid2ln | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | OBJ_nid2obj | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | OBJ_nid2sn | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | OSSL_STORE_INFO_type_string | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | OSSL_trace_get_category_name | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | PKCS12_init | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | Symbol_Nth | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | X509_PURPOSE_get0 | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | X509_PURPOSE_get_by_id | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | X509_TRUST_get0 | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | X509_TRUST_get_by_id | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __btowc | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __current_locale_name | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __fdopendir | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __get_errlist | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __get_errname | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __math_invalid_i | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __math_invalidf_i | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __p_class | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __p_rcode | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __p_type | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __pkey_get | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __sigdescr_np | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | __strerrordesc_np | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | _tolower | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | _toupper | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | btowc | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | c_tolower | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | c_toupper | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | curlx_sitouz | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | evp_pkey_type2name | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | inet6_option_space | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isalnum | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isalpha | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isblank | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | iscntrl | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isdigit | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isgraph | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | islower | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isprint | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ispunct | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isspace | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isupper | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | isxdigit | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ossl_cmp_bodytype_to_string | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ossl_tolower | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | ossl_toupper | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | sigabbrev_np | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | sqlite3_compileoption_get | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | sqlite3_errstr | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | strerrorname_np | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | support_report_failure | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | svcudp_create | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | tls13_alert_code | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | toascii | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | tolower | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | toupper | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uabs | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uv__accept | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uv_err_name | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uv_get_osfhandle | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uv_strerror | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | uv_translate_sys_error | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | | zError | 0 | -| vector.cpp:37:6:37:23 | test_element_taint | (int) | __pthread_cleanup_class | __setdoit | 0 | -| vector.cpp:279:6:279:9 | sink | (int *) | | rresvport | 0 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (ASN1_STRING *,int) | | ASN1_STRING_length_set | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (ASYNC_WAIT_CTX *,int) | | ASYNC_WAIT_CTX_set_status | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | BN_clear_bit | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | BN_mask_bits | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | BN_set_bit | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | BN_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | bn_expand2 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | bn_wexpand | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIGNUM *,int) | | ossl_bn_mask_bits_fixed_top | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_find_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_set_init | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_set_retry_reason | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | BIO_set_shutdown | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (BIO *,int) | | TXT_DB_read | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (CMS_SignerInfo *,int) | | CMS_signed_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (CMS_SignerInfo *,int) | | CMS_unsigned_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (CURL *,int) | | curl_easy_pause | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (Curl_easy *,int) | | Curl_conn_get_socket | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DH *,int) | | DH_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DH *,int) | | DH_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DH_METHOD *,int) | | DH_meth_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DSA *,int) | | DSA_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DSA *,int) | | DSA_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (DSA_METHOD *,int) | | DSA_meth_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EC_GROUP *,int) | | EC_GROUP_set_asn1_flag | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EC_GROUP *,int) | | EC_GROUP_set_curve_name | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EC_KEY *,int) | | EC_KEY_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EC_KEY *,int) | | EC_KEY_set_asn1_flag | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EC_KEY *,int) | | EC_KEY_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (ENGINE *,int) | | ENGINE_cmd_is_executable | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (ENGINE *,int) | | ENGINE_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_impl_ctx_size | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER *,int) | | EVP_CIPHER_meth_set_iv_length | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_key_length | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_set_num | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_KEYMGMT *,int) | | evp_keymgmt_util_query_operation_name | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_MD *,int) | | EVP_MD_meth_set_app_datasize | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_MD *,int) | | EVP_MD_meth_set_input_blocksize | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_MD *,int) | | EVP_MD_meth_set_result_size | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_MD_CTX *,int) | | EVP_MD_CTX_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_MD_CTX *,int) | | EVP_MD_CTX_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY *,int) | | EVP_PKEY_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY *,int) | | EVP_PKEY_save_parameters | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY *,int) | | EVP_PKEY_set_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_get_keygen_info | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_kdf_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_nid | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_paramgen_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dh_rfc5114 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_dhx_rfc5114 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_param_enc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ec_paramgen_curve_nid | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_ecdh_kdf_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_hkdf_mode | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_padding | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (EVP_PKEY_CTX *,int) | | EVP_PKEY_CTX_set_rsa_pss_saltlen | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FFC_PARAMS *,int) | | ossl_ffc_params_set_gindex | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FFC_PARAMS *,int) | | ossl_ffc_params_set_h | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FFC_PARAMS *,int) | | ossl_ffc_params_set_pcounter | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_default_pbackfail | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_fwide | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_init | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_init_internal | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_new_file_attach | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_new_file_overflow | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_old_init | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_sputbackc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_str_overflow | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | _IO_str_pbackfail | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | __printf_buffer_as_file_overflow | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FILE *,int) | | __wprintf_buffer_as_file_overflow | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (FTS *,int) | | fts_children | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_extended_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | _libssh2_channel_flush | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_flush_ex | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_handle_extended_data2 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_CHANNEL *,int) | | libssh2_channel_set_blocking | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_SESSION *,int) | | _libssh2_session_set_blocking | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_SESSION *,int) | | libssh2_hostkey_hash | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_SESSION *,int) | | libssh2_session_methods | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_SESSION *,int) | | libssh2_session_set_blocking | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LIBSSH2_SESSION *,int) | | libssh2_session_startup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (LPCOLESTR,int) | CComBSTR | Append | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_BASICRESP *,int) | | OCSP_BASICRESP_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_BASICRESP *,int) | | OCSP_resp_get0 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_ONEREQ *,int) | | OCSP_ONEREQ_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_REQUEST *,int) | | OCSP_REQUEST_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_REQUEST *,int) | | OCSP_REQUEST_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_REQUEST *,int) | | OCSP_request_onereq_get0 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OCSP_SINGLERESP *,int) | | OCSP_SINGLERESP_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OPENSSL_STACK *,int) | | OPENSSL_sk_delete | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OPENSSL_STACK *,int) | | OPENSSL_sk_reserve | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OPENSSL_sk_compfunc,int) | | OPENSSL_sk_new_reserve | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_deadline | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_ACKM *,int) | | ossl_ackm_get_ack_frame | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_ACKM *,int) | | ossl_ackm_get_largest_acked | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_ACKM *,int) | | ossl_ackm_on_pkt_space_discarded | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_set_serverPort | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_failInfoCode | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_CTX *,int) | | ossl_cmp_ctx_set_status | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_CTX *,int) | | ossl_cmp_msg_create | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_CTX *,int) | | ossl_cmp_pollReq_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_MSG *,int) | | ossl_cmp_msg_set_bodytype | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_PKIHEADER *,int) | | ossl_cmp_hdr_set_pvno | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_CertId | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_REVREPCONTENT *,int) | | ossl_cmp_revrepcontent_get_pkisi | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_raverified | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_accept_unprotected | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_grant_implicit_confirm | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CMP_SRV_CTX *,int) | | OSSL_CMP_SRV_CTX_set_send_unprotected_errors | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_CRMF_PKIPUBLICATIONINFO *,int) | | OSSL_CRMF_MSG_set_PKIPublicationInfo_action | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_DECODER_CTX *,int) | | OSSL_DECODER_CTX_set_selection | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_ENCODER_CTX *,int) | | OSSL_ENCODER_CTX_set_selection | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_get_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | OSSL_LIB_CTX_set_conf_diagnostics | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | ossl_ctx_global_properties | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | ossl_dh_new_by_nid_ex | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | ossl_lib_ctx_get_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_LIB_CTX *,int) | | ossl_mac_key_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_PARAM *,int) | | OSSL_PARAM_set_int | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_QRX *,int) | | ossl_qrx_get_bytes_received | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_RECORD_LAYER *,int) | | tls_set_first_handshake | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_RECORD_LAYER *,int) | | tls_set_plain_alerts | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (OSSL_STORE_CTX *,int) | | OSSL_STORE_expect | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (PKCS7 *,int) | | PKCS7_set_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_CHANNEL *,int) | | ossl_quic_channel_new_stream_local | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_ENGINE *,int) | | ossl_quic_engine_set_inhibit_tick | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_PORT *,int) | | ossl_quic_port_set_allow_incoming | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_RCIDM *,int) | | ossl_quic_rcidm_get_preferred_tx_dcid_changed | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_RSTREAM *,int) | | ossl_quic_rstream_set_cleanse | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_RXFC *,int) | | ossl_quic_rxfc_get_error | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_RXFC *,int) | | ossl_quic_rxfc_has_cwm_changed | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_SSTREAM *,int) | | ossl_quic_sstream_set_cleanse | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_STREAM_MAP *,int) | | ossl_quic_stream_map_get_accept_queue_len | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (QUIC_TXFC *,int) | | ossl_quic_txfc_has_become_blocked | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA *,int) | | RSA_clear_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA *,int) | | RSA_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA_METHOD *,int) | | RSA_meth_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_hashalg | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_maskgenhashalg | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_saltlen | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (RSA_PSS_PARAMS_30 *,int) | | ossl_rsa_pss_params_30_set_trailerfield | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_key_update | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_post_handshake_auth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_purpose | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_quic_tls_early_data_enabled | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_quiet_shutdown | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_read_ahead | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_security_level | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_shutdown | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_trust | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL *,int) | | SSL_set_verify_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CONNECTION *,int) | | dtls1_read_failed | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CONNECTION *,int) | | ossl_statem_send_fatal | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CONNECTION *,int) | | ossl_statem_set_in_init | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CONNECTION *,int) | | tls1_shared_group | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_post_handshake_auth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_purpose | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_quiet_shutdown | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_security_level | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_srp_strength | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_trust | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | SSL_CTX_set_verify_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_CTX *,int) | | ssl_md | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (SSL_SESSION *,int) | | SSL_SESSION_set_protocol_version | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_REQ *,int) | | TS_REQ_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_REQ *,int) | | TS_REQ_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_RESP_CTX *,int) | | TS_RESP_CTX_add_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_STATUS_INFO *,int) | | TS_STATUS_INFO_set_status | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_TST_INFO *,int) | | TS_TST_INFO_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_TST_INFO *,int) | | TS_TST_INFO_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_add_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (TS_VERIFY_CTX *,int) | | TS_VERIFY_CTX_set_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (WPACKET *,int) | | ossl_DER_w_begin_sequence | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509 *,int) | | X509_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509 *,int) | | X509_self_signed | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_ACERT *,int) | | X509_ACERT_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_ATTRIBUTE *,int) | | X509_ATTRIBUTE_get0_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_CRL *,int) | | X509_CRL_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_NAME *,int) | | X509_NAME_delete_entry | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_REQ *,int) | | X509_REQ_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_REVOKED *,int) | | X509_REVOKED_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE *,int) | | X509_STORE_set_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE *,int) | | X509_STORE_set_purpose | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE *,int) | | X509_STORE_set_trust | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_error_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_purpose | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_STORE_CTX *,int) | | X509_STORE_CTX_set_trust | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_get0_host | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_auth_level | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_depth | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_purpose | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (X509_VERIFY_PARAM *,int) | | X509_VERIFY_PARAM_set_trust | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (_Float128,int) | | __ldexpf128 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (_Float128,int) | | __scalbnf128 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (__sigset_t *,int) | | __sigaddset_compat | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (__sigset_t *,int) | | __sigdelset_compat | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (acttab *,int) | | acttab_insert | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (addrinfo *,int) | | support_format_addrinfo | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (aiocb_union *,int) | | __aio_enqueue_request | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (argp_fmtstream_t,int) | | __argp_fmtstream_putc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (char **,int) | | addrsort | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (char *,int) | | Curl_str2addr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (char *,int) | | PEM_proc_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (char,int) | CStringT | CStringT | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (connectdata *,int) | | Curl_conn_is_ssl | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const ASN1_BIT_STRING *,int) | | ASN1_BIT_STRING_get_bit | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const BIGNUM *,int) | | BN_get_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const BIGNUM *,int) | | BN_is_bit_set | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const BIO *,int) | | BIO_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const BIO *,int) | | BIO_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const CMS_SignerInfo *,int) | | CMS_signed_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const CMS_SignerInfo *,int) | | CMS_unsigned_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const CRYPTO_EX_DATA *,int) | | CRYPTO_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DH *,int) | | DH_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DH *,int) | | DH_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DH *,int) | | ossl_dh_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DSA *,int) | | DSA_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DSA *,int) | | DSA_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const DSA *,int) | | ossl_dsa_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const ECX_KEY *,int) | | ossl_ecx_key_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EC_KEY *,int) | | EC_KEY_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EC_KEY *,int) | | ossl_ec_key_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const ENGINE *,int) | | ENGINE_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EVP_CIPHER_CTX *,int) | | EVP_CIPHER_CTX_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EVP_MD_CTX *,int) | | EVP_MD_CTX_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EVP_PKEY *,int) | | EVP_PKEY_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const EVP_PKEY *,int) | | EVP_PKEY_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const ML_DSA_KEY *,int) | | ossl_ml_dsa_key_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const ML_KEM_KEY *,int) | | ossl_ml_kem_key_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OPENSSL_STACK *,int) | | OPENSSL_sk_value | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OSSL_CMP_CERTREPMESSAGE *,int) | | ossl_cmp_certrepmessage_get0_certresponse | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get0_newPkey | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OSSL_CMP_CTX *,int) | | OSSL_CMP_CTX_get_option | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OSSL_CMP_PKISI *,int) | | ossl_cmp_pkisi_check_pkifailureinfo | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const OSSL_CMP_POLLREPCONTENT *,int) | | ossl_cmp_pollrepcontent_get0_pollrep | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_local_stream_count_avail | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const QUIC_CHANNEL *,int) | | ossl_quic_channel_get_remote_stream_count_avail | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const RSA *,int) | | RSA_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const RSA *,int) | | RSA_test_flags | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const RSA *,int) | | ossl_rsa_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const SLH_DSA_KEY *,int) | | ossl_slh_dsa_key_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const SSL *,int) | | SSL_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const SSL_CTX *,int) | | SSL_CTX_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const SSL_SESSION *,int) | | SSL_SESSION_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const SSL_SESSION *,int) | | ssl_session_dup | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const UI *,int) | | UI_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const UI_METHOD *,int) | | UI_method_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509 *,int) | | X509_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509 *,int) | | X509_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_ACERT *,int) | | X509_ACERT_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_CRL *,int) | | X509_CRL_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_NAME *,int) | | X509_NAME_get_entry | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_POLICY_LEVEL *,int) | | X509_policy_level_get0_node | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_POLICY_TREE *,int) | | X509_policy_tree_get0_level | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_REQ *,int) | | X509_REQ_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_REVOKED *,int) | | X509_REVOKED_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_STORE *,int) | | X509_STORE_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const X509_STORE_CTX *,int) | | X509_STORE_CTX_get_ex_data | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const XCHAR *,int) | CStringT | CStringT | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const YCHAR *,int) | CStringT | CStringT | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | DH_meth_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | DSA_meth_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | Jim_StrDupLen | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | NETSCAPE_SPKI_b64_decode | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | RSA_meth_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | ftok | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | gethostbyname2 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | parse_yesno | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const char *,int) | | res_gethostbyname2 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const stack_st_X509_ATTRIBUTE *,int) | | X509at_get_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const stack_st_X509_EXTENSION *,int) | | X509v3_get_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const unsigned char *,int) | | Jim_GenHashFunction | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const unsigned char *,int) | | OPENSSL_uni2asc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const unsigned char *,int) | | OPENSSL_uni2utf8 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (const void *,int) | | inet6_rth_getaddr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (double,int) | | __ldexp | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (double,int) | | __scalbn | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (double[],int) | | getloadavg | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (dynhds *,int) | | Curl_dynhds_set_opts | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (fexcept_t *,int) | | fegetexceptflag | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (float,int) | | __ldexpf | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (float,int) | | __scalbnf | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (gzFile,int) | | gzflush | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (gzFile,int) | | gzputc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int *,int) | | X509_PURPOSE_set | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int *,int) | | X509_TRUST_set | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int *,int) | | __lll_unlock_elision | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | BN_security_bits | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | EVP_MD_meth_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | EVP_PKEY_meth_new | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | __isctype | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | acttab_alloc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | div | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (int,int) | | inet6_rth_space | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (long double,int) | | __ldexpl | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (netlink_handle *,int) | | __netlink_request | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_ping_ack | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_auto_window_update | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_closed_streams | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_http_messaging | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_recv_client_magic | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (nghttp2_option *,int) | | nghttp2_option_set_server_fallback_rfc7540_priorities | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (ns_msg,int) | | ns_msg_getflag | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (obstack *,int) | | _obstack_newchunk | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (posix_spawnattr_t *,int) | | posix_spawnattr_setcgroup_np | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (posix_spawnattr_t *,int) | | posix_spawnattr_setschedpolicy | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_attr_t *,int) | | __pthread_attr_setschedpolicy | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_barrierattr_t *,int) | | __pthread_barrierattr_setpshared | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_mutexattr_t *,int) | | ___pthread_mutexattr_settype | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprioceiling | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_mutexattr_t *,int) | | __pthread_mutexattr_setprotocol | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setkind_np | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (pthread_rwlockattr_t *,int) | | __pthread_rwlockattr_setpshared | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (rule *,int) | | Configlist_add | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (rule *,int) | | Configlist_addbasis | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sigset_t *,int) | | sigaddset | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sigset_t *,int) | | sigdelset | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3 *,int) | | sqlite3_busy_timeout | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3 *,int) | | sqlite3_db_name | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3 *,int) | | sqlite3_wal_autocheckpoint | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_backup *,int) | | sqlite3_backup_step | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_context *,int) | | sqlite3_aggregate_context | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_context *,int) | | sqlite3_result_error_code | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_index_info *,int) | | sqlite3_vtab_collation | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_bind_parameter_name | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_blob | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_bytes | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_bytes16 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_decltype | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_decltype16 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_double | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_int | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_int64 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_name | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_name16 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_text | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_text16 | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_type | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_column_value | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (sqlite3_stmt *,int) | | sqlite3_stmt_explain | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (stack_st_PKCS7 *,int) | | PKCS12_add_safes | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (stack_st_SSL_COMP *,int) | | ssl3_comp_find | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (stack_st_X509_ATTRIBUTE *,int) | | X509at_delete_attr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (stack_st_X509_EXTENSION *,int) | | X509v3_delete_ext | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (timespec *,int) | | __timespec_get | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (timespec *,int) | | __timespec_getres | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (uint16_t,int) | | tls1_group_id2nid | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (unsigned char *,int) | | RAND_bytes | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (unsigned char *,int) | | RAND_priv_bytes | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (unsigned char *,int) | | ossl_ipaddr_to_asc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (unsigned short,int) | | dtls1_get_queue_priority | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (uv_env_item_t *,int) | | uv_os_free_environ | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (void *,int) | | DSO_dsobyaddr | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (void *,int) | | sqlite3_realloc | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (void *const *,int) | | __backtrace_symbols | 1 | -| vector.cpp:333:6:333:35 | vector_iterator_assign_wrapper | (wchar_t,int) | CStringT | CStringT | 1 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ASN1_STRING_type_new | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ASN1_tag2bit | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ASN1_tag2str | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | EVP_PKEY_asn1_get0 | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | Jim_ReturnCode | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | Jim_SignalId | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | OBJ_nid2ln | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | OBJ_nid2obj | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | OBJ_nid2sn | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | OSSL_STORE_INFO_type_string | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | OSSL_trace_get_category_name | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | PKCS12_init | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | Symbol_Nth | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | X509_PURPOSE_get0 | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | X509_PURPOSE_get_by_id | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | X509_TRUST_get0 | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | X509_TRUST_get_by_id | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | X509_VERIFY_PARAM_get0 | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __btowc | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __current_locale_name | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __fdopendir | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __get_errlist | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __get_errname | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __math_invalid_i | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __math_invalidf_i | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __p_class | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __p_rcode | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __p_type | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __pkey_get | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __sigdescr_np | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | __strerrordesc_np | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | _tolower | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | _toupper | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | btowc | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | c_tolower | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | c_toupper | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | curlx_sitouz | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | evp_pkey_type2name | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | inet6_option_space | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isalnum | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isalpha | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isblank | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | iscntrl | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isdigit | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isgraph | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | islower | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isprint | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ispunct | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isspace | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isupper | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | isxdigit | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ossl_cmp_bodytype_to_string | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ossl_tolower | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | ossl_toupper | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | sigabbrev_np | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | sqlite3_compileoption_get | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | sqlite3_errstr | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | strerrorname_np | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | support_report_failure | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | svcudp_create | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | tls13_alert_code | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | toascii | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | tolower | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | toupper | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uabs | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uv__accept | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uv_err_name | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uv_get_osfhandle | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uv_strerror | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | uv_translate_sys_error | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | | zError | 0 | -| vector.cpp:337:6:337:32 | test_vector_output_iterator | (int) | __pthread_cleanup_class | __setdoit | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | SRP_VBASE_new | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | _IO_gets | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | __mktemp | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | __nis_default_group | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | __nis_default_owner | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | __nis_default_ttl | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | __xpg_basename | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | ctermid | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | cuserid | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | defossilize | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | des_setparity | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | dirname | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | getwd | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | make_uppercase | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | mkdtemp | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | next_item | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | | strfry | 0 | -| vector.cpp:417:6:417:25 | test_vector_inserter | (char *) | CStringT | CStringT | 0 | -| vector.cpp:454:7:454:12 | memcpy | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_personal | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_salt | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_personal | 2 | -| vector.cpp:454:7:454:12 | memcpy | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_salt | 2 | -| vector.cpp:454:7:454:12 | memcpy | (CCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ccm128_aad | 2 | -| vector.cpp:454:7:454:12 | memcpy | (CCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ccm128_tag | 2 | -| vector.cpp:454:7:454:12 | memcpy | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (CMS_RecipientInfo *,const unsigned char *,size_t) | | CMS_RecipientInfo_kekri_id_cmp | 2 | -| vector.cpp:454:7:454:12 | memcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_alnum | 2 | -| vector.cpp:454:7:454:12 | memcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_bytes | 2 | -| vector.cpp:454:7:454:12 | memcpy | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_hex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (DH *,const unsigned char *,size_t) | | ossl_dh_buf2key | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EC_GROUP *,const unsigned char *,size_t) | | EC_GROUP_set_seed | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EC_KEY *,const unsigned char *,size_t) | | ossl_ec_key_simple_oct2priv | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha1_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha256_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha512_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_MD_CTX *,const unsigned char *,size_t) | | EVP_DigestVerifyFinal | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_PKEY *,char *,size_t) | | EVP_PKEY_get_default_digest_name | 2 | -| vector.cpp:454:7:454:12 | memcpy | (EVP_RAND_CTX *,unsigned char *,size_t) | | EVP_RAND_nonce | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FFC_PARAMS *,const unsigned char *,size_t) | | ossl_ffc_params_set_seed | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const char *,size_t) | | _IO_new_do_write | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_default_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_default_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,void *,size_t) | | _IO_default_xsgetn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,void *,size_t) | | _IO_file_xsgetn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,void *,size_t) | | _IO_file_xsgetn_mmap | 2 | -| vector.cpp:454:7:454:12 | memcpy | (FILE *,void *,size_t) | | _IO_wdefault_xsgetn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_aad | 2 | -| vector.cpp:454:7:454:12 | memcpy | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_setiv | 2 | -| vector.cpp:454:7:454:12 | memcpy | (GCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_gcm128_tag | 2 | -| vector.cpp:454:7:454:12 | memcpy | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (KECCAK1600_CTX *,unsigned char *,size_t) | | ossl_sha3_squeeze | 2 | -| vector.cpp:454:7:454:12 | memcpy | (KECCAK1600_CTX *,unsigned char,size_t) | | ossl_sha3_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (LIBSSH2_CHANNEL *,const char *,size_t) | | libssh2_channel_signal_ex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (LIBSSH2_SFTP_HANDLE *,char *,size_t) | | libssh2_sftp_read | 2 | -| vector.cpp:454:7:454:12 | memcpy | (LIBSSH2_SFTP_HANDLE *,const char *,size_t) | | libssh2_sftp_write | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MD4_CTX *,const void *,size_t) | | MD4_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (MD4_CTX *,const void *,size_t) | | MD4_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 1 | -| vector.cpp:454:7:454:12 | memcpy | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MD5_CTX *,const void *,size_t) | | MD5_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (MD5_CTX *,const void *,size_t) | | MD5_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MDC2_CTX *,const unsigned char *,size_t) | | MDC2_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_pk_decode | 2 | -| vector.cpp:454:7:454:12 | memcpy | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_sk_decode | 2 | -| vector.cpp:454:7:454:12 | memcpy | (MemoryManager *,const uint8_t *,size_t) | | CreatePreparedDictionary | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OCB128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ocb128_aad | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OCB128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ocb128_tag | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_HPKE_CTX *,const unsigned char *,size_t) | | OSSL_HPKE_CTX_set1_ikme | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_JSON_ENC *,const char *,size_t) | | ossl_json_str_len | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 1 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_entropy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_user_entropy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 1 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 1 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 1 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_PARAM *,void *,size_t) | | ossl_param_set_secure_block | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_default | 2 | -| vector.cpp:454:7:454:12 | memcpy | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_multiblock | 2 | -| vector.cpp:454:7:454:12 | memcpy | (POLY1305 *,const unsigned char *,size_t) | | Poly1305_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_generic_initiv | 2 | -| vector.cpp:454:7:454:12 | memcpy | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_ede3_initkey | 2 | -| vector.cpp:454:7:454:12 | memcpy | (PROV_GCM_CTX *,const unsigned char *,size_t) | | ossl_gcm_aad_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (QUIC_PN,unsigned char *,size_t) | | ossl_quic_wire_encode_pkt_hdr_pn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (QUIC_RXFC *,OSSL_STATM *,size_t) | | ossl_quic_rstream_new | 2 | -| vector.cpp:454:7:454:12 | memcpy | (QUIC_TLS *,const unsigned char *,size_t) | | ossl_quic_tls_set_transport_params | 2 | -| vector.cpp:454:7:454:12 | memcpy | (RAND_POOL *,const unsigned char *,size_t) | | ossl_rand_pool_adin_mix_in | 2 | -| vector.cpp:454:7:454:12 | memcpy | (RAND_POOL *,size_t,size_t) | | ossl_rand_pool_add_end | 2 | -| vector.cpp:454:7:454:12 | memcpy | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 1 | -| vector.cpp:454:7:454:12 | memcpy | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT **,const unsigned char **,size_t) | | o2i_SCT | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,const unsigned char **,size_t) | | o2i_SCT_signature | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_extensions | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_log_id | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,const unsigned char *,size_t) | | SCT_set1_signature | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_extensions | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_log_id | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SCT *,unsigned char *,size_t) | | SCT_set0_signature | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SIPHASH *,const unsigned char *,size_t) | | SipHash_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SIPHASH *,unsigned char *,size_t) | | SipHash_Final | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SIV128_CONTEXT *,const unsigned char *,size_t) | | ossl_siv128_set_tag | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SIV128_CONTEXT *,unsigned char *,size_t) | | ossl_siv128_get_tag | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_priv | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_pub | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL *,const unsigned char *,size_t) | | SSL_set1_client_cert_type | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL *,const unsigned char *,size_t) | | SSL_set1_server_cert_type | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL *,const unsigned char *,size_t) | | SSL_set_quic_tls_transport_params | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL *,size_t,size_t) | | SSL_set_block_padding_ex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_CONNECTION *,TLS_RECORD *,size_t) | | ssl_release_record | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_CONNECTION *,const unsigned char *,size_t) | | lookup_sess_in_cache | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_client_cert_type | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_server_cert_type | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_CTX *,size_t,size_t) | | SSL_CTX_set_block_padding_ex | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_alpn_selected | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_master_key | 2 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 1 | -| vector.cpp:454:7:454:12 | memcpy | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 2 | -| vector.cpp:454:7:454:12 | memcpy | (Strtab *,const char *,size_t) | | strtabadd | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 1 | -| vector.cpp:454:7:454:12 | memcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 1 | -| vector.cpp:454:7:454:12 | memcpy | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,BUF_MEM *,size_t) | | WPACKET_init_len | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,const unsigned char *,size_t) | | ossl_quic_wire_encode_frame_new_token | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 1 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,int,size_t) | | WPACKET_memset | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,uint64_t,size_t) | | WPACKET_put_bytes__ | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,unsigned char *,size_t) | | WPACKET_init_der | 2 | -| vector.cpp:454:7:454:12 | memcpy | (WPACKET *,unsigned char *,size_t) | | dtls_raw_hello_verify_request | 2 | -| vector.cpp:454:7:454:12 | memcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_add1_host | 2 | -| vector.cpp:454:7:454:12 | memcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_email | 2 | -| vector.cpp:454:7:454:12 | memcpy | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_host | 2 | -| vector.cpp:454:7:454:12 | memcpy | (X509_VERIFY_PARAM *,const unsigned char *,size_t) | | X509_VERIFY_PARAM_set1_ip | 2 | -| vector.cpp:454:7:454:12 | memcpy | (__printf_buffer *,char,size_t) | | __printf_buffer_pad_1 | 2 | -| vector.cpp:454:7:454:12 | memcpy | (__printf_buffer *,const char *,size_t) | | __printf_buffer_write | 2 | -| vector.cpp:454:7:454:12 | memcpy | (__printf_buffer_snprintf *,char *,size_t) | | __printf_buffer_snprintf_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (__wprintf_buffer *,const wchar_t *,size_t) | | __wprintf_buffer_write | 2 | -| vector.cpp:454:7:454:12 | memcpy | (__wprintf_buffer *,wchar_t,size_t) | | __wprintf_buffer_pad_1 | 2 | -| vector.cpp:454:7:454:12 | memcpy | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 1 | -| vector.cpp:454:7:454:12 | memcpy | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 2 | -| vector.cpp:454:7:454:12 | memcpy | (argp_fmtstream *,argp_fmtstream_t,size_t) | | __argp_fmtstream_ensure | 2 | -| vector.cpp:454:7:454:12 | memcpy | (argp_fmtstream_t,const char *,size_t) | | __argp_fmtstream_write | 2 | -| vector.cpp:454:7:454:12 | memcpy | (bufc_pool *,size_t,size_t) | | Curl_bufcp_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (bufq *,size_t,size_t) | | Curl_bufq_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 1 | -| vector.cpp:454:7:454:12 | memcpy | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char **,size_t *,size_t) | | Curl_str_number | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,const char *,size_t) | | Curl_strntolower | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,const char *,size_t) | | Curl_strntoupper | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,const char *,size_t) | | OPENSSL_strlcat | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,const char *,size_t) | | OPENSSL_strlcpy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,const char *,size_t) | | uv__strscpy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *,size_t,size_t) | | __getcwd_chk | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *__restrict__,const char *__restrict__,size_t) | | __strlcat | 2 | -| vector.cpp:454:7:454:12 | memcpy | (char *__restrict__,const char *__restrict__,size_t) | | __strlcpy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const CTLOG_STORE *,const uint8_t *,size_t) | | CTLOG_STORE_get0_log_by_id | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const EC_KEY *,unsigned char *,size_t) | | ossl_ec_key_simple_priv2oct | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const EVP_MD *,const OSSL_ITEM *,size_t) | | ossl_digest_md_to_nid | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const EVP_MD *,const unsigned char *,size_t) | | OSSL_STORE_SEARCH_by_key_fingerprint | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const OSSL_CMP_CTX *,char *,size_t) | | OSSL_CMP_CTX_snprint_PKIStatus | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const OSSL_CMP_PKISI *,char *,size_t) | | OSSL_CMP_snprint_PKIStatusInfo | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const OSSL_NAMEMAP *,int,size_t) | | ossl_namemap_num2name | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const OSSL_PARAM *,char **,size_t) | | OSSL_PARAM_get_utf8_string | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const SSL *,unsigned char *,size_t) | | SSL_get_client_random | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const SSL *,unsigned char *,size_t) | | SSL_get_server_random | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const SSL_SESSION *,unsigned char *,size_t) | | SSL_SESSION_get_master_key | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char **,size_t) | | OSSL_PARAM_construct_utf8_ptr | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char *,size_t) | | OSSL_PARAM_construct_utf8_string | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char *,size_t) | | __libc_ns_makecanon | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char *,size_t) | | __realpath_chk | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char *,size_t) | | getpass_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,char *,size_t) | | ns_makecanon | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,const char *,size_t) | | OPENSSL_strncasecmp | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,const char *,size_t) | | c_strncasecmp | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,uint16_t *,size_t) | | uv_wtf8_to_utf16 | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,unsigned char *,size_t) | | OSSL_PARAM_construct_BN | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,void **,size_t) | | OSSL_PARAM_construct_octet_ptr | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,void *,size_t) | | OSSL_PARAM_construct_octet_string | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const char *,void *,size_t) | | uv__random_readpath | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const charmap_t *,const char *,size_t) | | charmap_find_symbol | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const charmap_t *,const char *,size_t) | | charmap_find_value | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const repertoire_t *,const char *,size_t) | | repertoire_find_value | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const sockaddr *,char *,size_t) | | uv_ip_name | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const sockaddr_in6 *,char *,size_t) | | uv_ip6_name | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const sockaddr_in *,char *,size_t) | | uv_ip4_name | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const unsigned char *,char *,size_t) | | ___ns_name_ntop | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const unsigned char *,size_t,size_t) | | ossl_rand_pool_attach | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 1 | -| vector.cpp:454:7:454:12 | memcpy | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const void *,size_t,size_t) | | support_blob_repeat_allocate | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const void *,size_t,size_t) | | support_blob_repeat_allocate_shared | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const_nis_name,char *,size_t) | | nis_domain_of_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const_nis_name,char *,size_t) | | nis_leaf_of_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (const_nis_name,char *,size_t) | | nis_name_of_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (curl_mimepart *,const char *,size_t) | | curl_mime_data | 2 | -| vector.cpp:454:7:454:12 | memcpy | (curve448_scalar_t,const unsigned char *,size_t) | | ossl_curve448_scalar_decode_long | 2 | -| vector.cpp:454:7:454:12 | memcpy | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 1 | -| vector.cpp:454:7:454:12 | memcpy | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 2 | -| vector.cpp:454:7:454:12 | memcpy | (dynhds *,const char *,size_t) | | Curl_dynhds_get | 2 | -| vector.cpp:454:7:454:12 | memcpy | (dynhds *,const char *,size_t) | | Curl_dynhds_h1_add_line | 2 | -| vector.cpp:454:7:454:12 | memcpy | (dynhds *,size_t,size_t) | | Curl_dynhds_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int *,const char *,size_t) | | Curl_http_decode_status | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int *,int *,size_t) | | EVP_PBE_get | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,char *,size_t) | | Curl_strerror | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,char *,size_t) | | __strerror_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,char *,size_t) | | __ttyname_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,char *,size_t) | | uv_err_name_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,char *,size_t) | | uv_strerror_r | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,const void *,size_t) | | _nl_intern_locale_data | 1 | -| vector.cpp:454:7:454:12 | memcpy | (int,const void *,size_t) | | _nl_intern_locale_data | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,const void *,size_t) | | writeall | 1 | -| vector.cpp:454:7:454:12 | memcpy | (int,const void *,size_t) | | writeall | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,int,size_t) | | BrotliEncoderEstimatePeakMemoryUsage | 2 | -| vector.cpp:454:7:454:12 | memcpy | (int,void *,size_t) | | __readall | 2 | -| vector.cpp:454:7:454:12 | memcpy | (locale_file *,const uint32_t *,size_t) | | add_locale_uint32_array | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_buf *,uint8_t *,size_t) | | nghttp2_buf_wrap_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_extension *,nghttp2_origin_entry *,size_t) | | nghttp2_frame_origin_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_extpri_parse_priority | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_http_parse_priority | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_hd_deflater *,const nghttp2_nv *,size_t) | | nghttp2_hd_deflate_bound | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv2 | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_session *,int32_t,size_t) | | nghttp2_session_consume | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_session *,nghttp2_settings_entry *,size_t) | | nghttp2_session_update_local_settings | 2 | -| vector.cpp:454:7:454:12 | memcpy | (nghttp2_settings *,nghttp2_settings_entry *,size_t) | | nghttp2_frame_unpack_settings_payload | 2 | -| vector.cpp:454:7:454:12 | memcpy | (ns_rr_cursor *,const unsigned char *,size_t) | | __ns_rr_cursor_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (pthread_attr_t *,void *,size_t) | | __pthread_attr_setstack | 2 | -| vector.cpp:454:7:454:12 | memcpy | (scratch_buffer *,size_t,size_t) | | __libc_scratch_buffer_set_array_size | 2 | -| vector.cpp:454:7:454:12 | memcpy | (sfparse_parser *,const uint8_t *,size_t) | | sfparse_parser_init | 2 | -| vector.cpp:454:7:454:12 | memcpy | (size_t,OSSL_QTX_IOVEC *,size_t) | | ossl_quic_sstream_adjust_iov | 2 | -| vector.cpp:454:7:454:12 | memcpy | (stack_st_SCT **,const unsigned char **,size_t) | | o2i_SCT_LIST | 2 | -| vector.cpp:454:7:454:12 | memcpy | (ucs4_t *,const uint8_t *,size_t) | | u8_mbtouc_aux | 2 | -| vector.cpp:454:7:454:12 | memcpy | (uint8_t *,const nghttp2_settings_entry *,size_t) | | nghttp2_frame_pack_settings_payload | 2 | -| vector.cpp:454:7:454:12 | memcpy | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 1 | -| vector.cpp:454:7:454:12 | memcpy | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char **,const char *,size_t) | | _libssh2_store_str | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char **,const unsigned char *,size_t) | | _libssh2_store_bignum2_bytes | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char *,const unsigned char *,size_t) | | BUF_reverse | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char *,size_t *,size_t) | | ossl_cipher_padblock | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned char *,size_t *,size_t) | | ossl_cipher_unpadblock | 2 | -| vector.cpp:454:7:454:12 | memcpy | (unsigned int,char *,size_t) | | __initstate | 2 | -| vector.cpp:454:7:454:12 | memcpy | (uv_thread_t *,char *,size_t) | | uv__thread_getname | 2 | -| vector.cpp:454:7:454:12 | memcpy | (uv_thread_t *,char *,size_t) | | uv_thread_getaffinity | 2 | -| vector.cpp:454:7:454:12 | memcpy | (uv_thread_t *,char *,size_t) | | uv_thread_getname | 2 | -| vector.cpp:454:7:454:12 | memcpy | (void **,size_t,size_t) | | __posix_memalign | 2 | -| vector.cpp:454:7:454:12 | memcpy | (void *,size_t,size_t) | | Curl_hash_str | 2 | -| vector.cpp:454:7:454:12 | memcpy | (void *,size_t,size_t) | | __libc_reallocarray | 2 | -| vector.cpp:454:7:454:12 | memcpy | (void *,unsigned char *,size_t) | | ossl_drbg_clear_seed | 2 | -| vector.cpp:454:7:454:12 | memcpy | (wchar_t *,const wchar_t *,size_t) | | __wmemcpy | 2 | -| vector.cpp:454:7:454:12 | memcpy | (wchar_t *,const wchar_t *,size_t) | | __wmemmove | 2 | -| vector.cpp:454:7:454:12 | memcpy | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcat | 2 | -| vector.cpp:454:7:454:12 | memcpy | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcpy | 2 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (BIO *,const EVP_PKEY *,int,pem_password_cb *,void *) | | i2b_PVK_bio | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (BrotliDecoderState *,BrotliDecoderStateInternal *,brotli_decoder_metadata_start_func,brotli_decoder_metadata_chunk_func,void *) | | BrotliDecoderSetMetadataCallbacks | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (EVP_CIPHER_INFO *,unsigned char *,long *,pem_password_cb *,void *) | | PEM_do_header | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (EVP_PKEY *,EVP_KEYMGMT *,void *,OSSL_CALLBACK *,void *) | | evp_keymgmt_util_gen | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (EVP_PKEY_CTX *,int,int,int,void *) | | RSA_pkey_ctx_ctrl | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (OSSL_QUIC_TX_PACKETISER *,const unsigned char *,size_t,ossl_quic_initial_token_free_fn *,void *) | | ossl_quic_tx_packetiser_set_initial_token | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (char *,size_t,size_t *,const OSSL_PARAM[],void *) | | ossl_pw_passphrase_callback_dec | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (char *,size_t,size_t *,const OSSL_PARAM[],void *) | | ossl_pw_passphrase_callback_enc | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (const BIGNUM *,int,..(*)(..),BN_CTX *,void *) | | BN_is_prime | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (const char **,const char **,bool *,..(*)(..),void *) | | _dl_catch_error | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (const char *,const UI_METHOD *,void *,OSSL_STORE_post_process_info_fn,void *) | | OSSL_STORE_open | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (const char *,int,int,..(*)(..),void *) | | CONF_parse_list | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (nghttp2_extension *,uint8_t,uint8_t,int32_t,void *) | | nghttp2_frame_extension_init | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (nghttp2_session *,const uint8_t *,size_t,int,void *) | | nghttp2_session_upgrade2 | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (nghttp2_session *,int32_t,uint8_t,nghttp2_stream_state,void *) | | nghttp2_session_open_stream | 4 | -| zmq.cpp:14:5:14:21 | zmq_msg_init_data | (sqlite3 *,const char *,const char *,..(*)(..),void *) | | recoverInit | 4 | -| zmq.cpp:17:6:17:13 | test_zmc | (BIO *,OCSP_REQUEST *,unsigned long) | | OCSP_REQUEST_print | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BIO *,OCSP_RESPONSE *,unsigned long) | | OCSP_RESPONSE_print | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BIO *,X509 *,unsigned long) | | ossl_x509_print_ex_brief | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BIO *,X509_CRL *,unsigned long) | | X509_CRL_print_ex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BIO *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2B_CTX *,const void *,size_t) | | ossl_blake2b_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_personal | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2B_PARAM *,const uint8_t *,size_t) | | ossl_blake2b_param_set_salt | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2S_CTX *,const void *,size_t) | | ossl_blake2s_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_personal | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (BLAKE2S_PARAM *,const uint8_t *,size_t) | | ossl_blake2s_param_set_salt | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (CCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ccm128_aad | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (CCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ccm128_tag | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (CMAC_CTX *,const void *,size_t) | | CMAC_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (CMS_RecipientInfo *,const unsigned char *,size_t) | | CMS_RecipientInfo_kekri_id_cmp | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_alnum | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_bytes | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (Curl_easy *,unsigned char *,size_t) | | Curl_rand_hex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (DH *,const unsigned char *,size_t) | | ossl_dh_buf2key | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EC_GROUP *,const unsigned char *,size_t) | | EC_GROUP_set_seed | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EC_KEY *,const unsigned char *,size_t) | | ossl_ec_key_simple_oct2priv | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MAC_CTX **,const void *,size_t) | | _libssh2_hmac_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha1_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha256_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MAC_CTX **,void *,size_t) | | _libssh2_hmac_sha512_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha1_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha256_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha384_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MD_CTX **,const void *,size_t) | | _libssh2_sha512_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_MD_CTX *,const unsigned char *,size_t) | | EVP_DigestVerifyFinal | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_PKEY *,char *,size_t) | | EVP_PKEY_get_default_digest_name | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_PKEY *,char *,size_t) | | EVP_PKEY_get_default_digest_name | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (EVP_RAND_CTX *,unsigned char *,size_t) | | EVP_RAND_nonce | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FFC_PARAMS *,const unsigned char *,size_t) | | ossl_ffc_params_set_seed | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const ASN1_STRING *,unsigned long) | | ASN1_STRING_print_ex_fp | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const char *,size_t) | | _IO_new_do_write | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | _IO_default_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | _IO_new_file_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | _IO_wdefault_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | _IO_wfile_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | __printf_buffer_as_file_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,const void *,size_t) | | __wprintf_buffer_as_file_xsputn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,void *,size_t) | | _IO_default_xsgetn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,void *,size_t) | | _IO_file_xsgetn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,void *,size_t) | | _IO_file_xsgetn_mmap | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (FILE *,void *,size_t) | | _IO_wdefault_xsgetn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_aad | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (GCM128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_gcm128_setiv | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (GCM128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_gcm128_tag | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (KECCAK1600_CTX *,const void *,size_t) | | ossl_sha3_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (KECCAK1600_CTX *,unsigned char *,size_t) | | ossl_sha3_squeeze | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (KECCAK1600_CTX *,unsigned char,size_t) | | ossl_sha3_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (LIBSSH2_CHANNEL *,const char *,size_t) | | libssh2_channel_signal_ex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (LIBSSH2_SFTP_HANDLE *,char *,size_t) | | libssh2_sftp_read | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (LIBSSH2_SFTP_HANDLE *,char *,size_t) | | libssh2_sftp_read | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (LIBSSH2_SFTP_HANDLE *,const char *,size_t) | | libssh2_sftp_write | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MD4_CTX *,const void *,size_t) | | MD4_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MD4_CTX *,const void *,size_t) | | md4_block_data_order | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MD5_CTX *,const void *,size_t) | | MD5_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MD5_SHA1_CTX *,const void *,size_t) | | ossl_md5_sha1_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MDC2_CTX *,const unsigned char *,size_t) | | MDC2_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_pk_decode | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (ML_DSA_KEY *,const uint8_t *,size_t) | | ossl_ml_dsa_sk_decode | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (MemoryManager *,const uint8_t *,size_t) | | CreatePreparedDictionary | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OCB128_CONTEXT *,const unsigned char *,size_t) | | CRYPTO_ocb128_aad | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OCB128_CONTEXT *,unsigned char *,size_t) | | CRYPTO_ocb128_tag | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_HPKE_CTX *,const unsigned char *,size_t) | | OSSL_HPKE_CTX_set1_ikme | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_JSON_ENC *,const char *,size_t) | | ossl_json_str_len | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_JSON_ENC *,const void *,size_t) | | ossl_json_str_hex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_entropy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_LIB_CTX *,unsigned char *,size_t) | | ossl_rand_cleanup_user_entropy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_ptr | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_PARAM *,const void *,size_t) | | OSSL_PARAM_set_octet_string_or_ptr | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_PARAM *,void *,size_t) | | ossl_param_set_secure_block | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_default | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (OSSL_RECORD_LAYER *,OSSL_RECORD_TEMPLATE *,size_t) | | tls_write_records_multiblock | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (POLY1305 *,const unsigned char *,size_t) | | Poly1305_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_generic_initiv | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (PROV_CIPHER_CTX *,const unsigned char *,size_t) | | ossl_cipher_hw_tdes_ede3_initkey | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (PROV_GCM_CTX *,const unsigned char *,size_t) | | ossl_gcm_aad_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (QUIC_PN,unsigned char *,size_t) | | ossl_quic_wire_encode_pkt_hdr_pn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (QUIC_RXFC *,OSSL_STATM *,size_t) | | ossl_quic_rstream_new | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (QUIC_TLS *,const unsigned char *,size_t) | | ossl_quic_tls_set_transport_params | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (RAND_POOL *,const unsigned char *,size_t) | | ossl_rand_pool_adin_mix_in | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (RAND_POOL *,size_t,size_t) | | ossl_rand_pool_add_end | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (RIPEMD160_CTX *,const void *,size_t) | | RIPEMD160_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (RIPEMD160_CTX *,const void *,size_t) | | ripemd160_block_data_order | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT **,const unsigned char **,size_t) | | o2i_SCT | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,const unsigned char **,size_t) | | o2i_SCT_signature | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,const unsigned char *,size_t) | | SCT_set1_extensions | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,const unsigned char *,size_t) | | SCT_set1_log_id | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,const unsigned char *,size_t) | | SCT_set1_signature | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,unsigned char *,size_t) | | SCT_set0_extensions | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,unsigned char *,size_t) | | SCT_set0_log_id | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SCT *,unsigned char *,size_t) | | SCT_set0_signature | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SHA256_CTX *,const void *,size_t) | | SHA224_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SHA256_CTX *,const void *,size_t) | | SHA256_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SHA512_CTX *,const void *,size_t) | | SHA384_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SHA512_CTX *,const void *,size_t) | | SHA512_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SHA_CTX *,const void *,size_t) | | SHA1_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SIPHASH *,const unsigned char *,size_t) | | SipHash_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SIPHASH *,unsigned char *,size_t) | | SipHash_Final | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SIV128_CONTEXT *,const unsigned char *,size_t) | | ossl_siv128_set_tag | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SIV128_CONTEXT *,unsigned char *,size_t) | | ossl_siv128_get_tag | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_priv | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SLH_DSA_KEY *,const uint8_t *,size_t) | | ossl_slh_dsa_set_pub | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SM3_CTX *,const void *,size_t) | | ossl_sm3_block_data_order | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SM3_CTX *,const void *,size_t) | | ossl_sm3_update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL *,const unsigned char *,size_t) | | SSL_set1_client_cert_type | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL *,const unsigned char *,size_t) | | SSL_set1_server_cert_type | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL *,const unsigned char *,size_t) | | SSL_set_quic_tls_transport_params | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL *,size_t,size_t) | | SSL_set_block_padding_ex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_CONNECTION *,TLS_RECORD *,size_t) | | ssl_release_record | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_CONNECTION *,const unsigned char *,size_t) | | lookup_sess_in_cache | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_client_cert_type | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_CTX *,const unsigned char *,size_t) | | SSL_CTX_set1_server_cert_type | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_CTX *,size_t,size_t) | | SSL_CTX_set_block_padding_ex | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_alpn_selected | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_SESSION *,const unsigned char *,size_t) | | SSL_SESSION_set1_master_key | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (SSL_SESSION *,const void *,size_t) | | SSL_SESSION_set1_ticket_appdata | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (Strtab *,const char *,size_t) | | strtabadd | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_BitUpdate | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WHIRLPOOL_CTX *,const void *,size_t) | | WHIRLPOOL_Update | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,BUF_MEM *,size_t) | | WPACKET_init_len | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,const unsigned char *,size_t) | | ossl_quic_wire_encode_frame_new_token | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,const void *,size_t) | | WPACKET_memcpy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,int,size_t) | | WPACKET_memset | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,uint64_t,size_t) | | WPACKET_put_bytes__ | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,unsigned char *,size_t) | | WPACKET_init_der | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (WPACKET *,unsigned char *,size_t) | | dtls_raw_hello_verify_request | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_add1_host | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_email | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (X509_VERIFY_PARAM *,const char *,size_t) | | X509_VERIFY_PARAM_set1_host | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (X509_VERIFY_PARAM *,const unsigned char *,size_t) | | X509_VERIFY_PARAM_set1_ip | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (__printf_buffer *,char,size_t) | | __printf_buffer_pad_1 | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (__printf_buffer *,const char *,size_t) | | __printf_buffer_write | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (__printf_buffer_snprintf *,char *,size_t) | | __printf_buffer_snprintf_init | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (__printf_buffer_snprintf *,char *,size_t) | | __printf_buffer_snprintf_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (__wprintf_buffer *,const wchar_t *,size_t) | | __wprintf_buffer_write | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (__wprintf_buffer *,wchar_t,size_t) | | __wprintf_buffer_pad_1 | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (alloc_buffer,const void *,size_t) | | __libc_alloc_buffer_copy_bytes | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (argp_fmtstream *,argp_fmtstream_t,size_t) | | __argp_fmtstream_ensure | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (argp_fmtstream_t,const char *,size_t) | | __argp_fmtstream_write | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (bufc_pool *,size_t,size_t) | | Curl_bufcp_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (bufq *,size_t,size_t) | | Curl_bufq_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (bufref *,const void *,size_t) | | Curl_bufref_memdup | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char **,size_t *,size_t) | | Curl_str_number | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,const char *,size_t) | | Curl_strntolower | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,const char *,size_t) | | Curl_strntoupper | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,const char *,size_t) | | OPENSSL_strlcat | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,const char *,size_t) | | OPENSSL_strlcpy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,const char *,size_t) | | uv__strscpy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *,size_t,size_t) | | __getcwd_chk | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *__restrict__,const char *__restrict__,size_t) | | __strlcat | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (char *__restrict__,const char *__restrict__,size_t) | | __strlcpy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const CTLOG_STORE *,const uint8_t *,size_t) | | CTLOG_STORE_get0_log_by_id | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const EC_KEY *,unsigned char *,size_t) | | ossl_ec_key_simple_priv2oct | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const EVP_MD *,const OSSL_ITEM *,size_t) | | ossl_digest_md_to_nid | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const EVP_MD *,const unsigned char *,size_t) | | OSSL_STORE_SEARCH_by_key_fingerprint | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_CMP_CTX *,char *,size_t) | | OSSL_CMP_CTX_snprint_PKIStatus | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_CMP_CTX *,char *,size_t) | | OSSL_CMP_CTX_snprint_PKIStatus | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_CMP_PKISI *,char *,size_t) | | OSSL_CMP_snprint_PKIStatusInfo | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_CMP_PKISI *,char *,size_t) | | OSSL_CMP_snprint_PKIStatusInfo | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_NAMEMAP *,int,size_t) | | ossl_namemap_num2name | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const OSSL_PARAM *,char **,size_t) | | OSSL_PARAM_get_utf8_string | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const SSL *,unsigned char *,size_t) | | SSL_get_client_random | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const SSL *,unsigned char *,size_t) | | SSL_get_server_random | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const SSL_SESSION *,unsigned char *,size_t) | | SSL_SESSION_get_master_key | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char **,size_t) | | OSSL_PARAM_construct_utf8_ptr | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | OSSL_PARAM_construct_utf8_string | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | OSSL_PARAM_construct_utf8_string | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | __libc_ns_makecanon | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | __libc_ns_makecanon | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | __realpath_chk | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | __realpath_chk | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | getpass_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | getpass_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | ns_makecanon | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,char *,size_t) | | ns_makecanon | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,const char *,size_t) | | OPENSSL_strncasecmp | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,const char *,size_t) | | c_strncasecmp | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,const char *,unsigned long) | | __ngettext | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,uint16_t *,size_t) | | uv_wtf8_to_utf16 | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,unsigned char *,size_t) | | OSSL_PARAM_construct_BN | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,void **,size_t) | | OSSL_PARAM_construct_octet_ptr | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,void *,size_t) | | OSSL_PARAM_construct_octet_string | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const char *,void *,size_t) | | uv__random_readpath | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const charmap_t *,const char *,size_t) | | charmap_find_symbol | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const charmap_t *,const char *,size_t) | | charmap_find_value | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const repertoire_t *,const char *,size_t) | | repertoire_find_value | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr *,char *,size_t) | | uv_ip_name | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr *,char *,size_t) | | uv_ip_name | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr_in6 *,char *,size_t) | | uv_ip6_name | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr_in6 *,char *,size_t) | | uv_ip6_name | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr_in *,char *,size_t) | | uv_ip4_name | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const sockaddr_in *,char *,size_t) | | uv_ip4_name | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const unsigned char *,char *,size_t) | | ___ns_name_ntop | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const unsigned char *,char *,size_t) | | ___ns_name_ntop | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const unsigned char *,size_t,size_t) | | ossl_rand_pool_attach | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const void *,const void *,size_t) | | chachapoly_timingsafe_bcmp | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const void *,size_t,size_t) | | support_blob_repeat_allocate | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const void *,size_t,size_t) | | support_blob_repeat_allocate_shared | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_domain_of_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_domain_of_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_leaf_of_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_leaf_of_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_name_of_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (const_nis_name,char *,size_t) | | nis_name_of_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (curl_mimepart *,const char *,size_t) | | curl_mime_data | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (curve448_scalar_t,const unsigned char *,size_t) | | ossl_curve448_scalar_decode_long | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (dynbuf *,const void *,size_t) | | Curl_dyn_addn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (dynbuf *,const void *,size_t) | | curlx_dyn_addn | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (dynhds *,const char *,size_t) | | Curl_dynhds_get | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (dynhds *,const char *,size_t) | | Curl_dynhds_h1_add_line | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (dynhds *,size_t,size_t) | | Curl_dynhds_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int *,const char *,size_t) | | Curl_http_decode_status | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int *,int *,size_t) | | EVP_PBE_get | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | Curl_strerror | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | Curl_strerror | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | __strerror_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | __strerror_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | __ttyname_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | __ttyname_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | uv_err_name_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | uv_err_name_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | uv_strerror_r | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,char *,size_t) | | uv_strerror_r | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,const void *,size_t) | | _nl_intern_locale_data | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,const void *,size_t) | | writeall | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,int,size_t) | | BrotliEncoderEstimatePeakMemoryUsage | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (int,void *,size_t) | | __readall | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (locale_file *,const uint32_t *,size_t) | | add_locale_uint32_array | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_buf *,uint8_t *,size_t) | | nghttp2_buf_wrap_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_extension *,nghttp2_origin_entry *,size_t) | | nghttp2_frame_origin_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_extpri_parse_priority | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_extpri *,const uint8_t *,size_t) | | nghttp2_http_parse_priority | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_hd_deflater *,const nghttp2_nv *,size_t) | | nghttp2_hd_deflate_bound | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_session *,const uint8_t *,size_t) | | nghttp2_session_mem_recv2 | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_session *,int32_t,size_t) | | nghttp2_session_consume | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_session *,nghttp2_settings_entry *,size_t) | | nghttp2_session_update_local_settings | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (nghttp2_settings *,nghttp2_settings_entry *,size_t) | | nghttp2_frame_unpack_settings_payload | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (ns_rr_cursor *,const unsigned char *,size_t) | | __ns_rr_cursor_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (pthread_attr_t *,void *,size_t) | | __pthread_attr_setstack | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (scratch_buffer *,size_t,size_t) | | __libc_scratch_buffer_set_array_size | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (sfparse_parser *,const uint8_t *,size_t) | | sfparse_parser_init | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (size_t,OSSL_QTX_IOVEC *,size_t) | | ossl_quic_sstream_adjust_iov | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (stack_st_SCT **,const unsigned char **,size_t) | | o2i_SCT_LIST | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (ucs4_t *,const uint8_t *,size_t) | | u8_mbtouc_aux | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (uint8_t *,const nghttp2_settings_entry *,size_t) | | nghttp2_frame_pack_settings_payload | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (uint8_t *,const void *,size_t) | | nghttp2_cpymem | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char **,const char *,size_t) | | _libssh2_store_str | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char **,const unsigned char *,size_t) | | _libssh2_store_bignum2_bytes | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char *,const unsigned char *,size_t) | | BUF_reverse | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char *,size_t *,size_t) | | ossl_cipher_padblock | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned char *,size_t *,size_t) | | ossl_cipher_unpadblock | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned int,char *,size_t) | | __initstate | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (unsigned int,char *,size_t) | | __initstate | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv__thread_getname | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv__thread_getname | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv_thread_getaffinity | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv_thread_getaffinity | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv_thread_getname | 1 | -| zmq.cpp:17:6:17:13 | test_zmc | (uv_thread_t *,char *,size_t) | | uv_thread_getname | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (void **,size_t,size_t) | | __posix_memalign | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (void *,size_t,size_t) | | Curl_hash_str | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (void *,size_t,size_t) | | __libc_reallocarray | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (void *,unsigned char *,size_t) | | ossl_drbg_clear_seed | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (wchar_t *,const wchar_t *,size_t) | | __wmemcpy | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (wchar_t *,const wchar_t *,size_t) | | __wmemmove | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcat | 2 | -| zmq.cpp:17:6:17:13 | test_zmc | (wchar_t *__restrict__,const wchar_t *__restrict__,size_t) | | __wcslcpy | 2 | +| atl.cpp:71:5:71:17 | _U_STRINGorID | ATL | (UINT) | _U_STRINGorID | _U_STRINGorID | 0 | +| atl.cpp:72:5:72:17 | _U_STRINGorID | ATL | (LPCTSTR) | _U_STRINGorID | _U_STRINGorID | 0 | +| atl.cpp:411:5:411:12 | CComBSTR | ATL | (const CComBSTR &) | CComBSTR | CComBSTR | 0 | +| atl.cpp:413:5:413:12 | CComBSTR | ATL | (int,LPCOLESTR) | CComBSTR | CComBSTR | 0 | +| atl.cpp:413:5:413:12 | CComBSTR | ATL | (int,LPCOLESTR) | CComBSTR | CComBSTR | 1 | +| atl.cpp:414:5:414:12 | CComBSTR | ATL | (int,LPCSTR) | CComBSTR | CComBSTR | 0 | +| atl.cpp:414:5:414:12 | CComBSTR | ATL | (int,LPCSTR) | CComBSTR | CComBSTR | 1 | +| atl.cpp:415:5:415:12 | CComBSTR | ATL | (LPCOLESTR) | CComBSTR | CComBSTR | 0 | +| atl.cpp:416:5:416:12 | CComBSTR | ATL | (LPCSTR) | CComBSTR | CComBSTR | 0 | +| atl.cpp:417:5:417:12 | CComBSTR | ATL | (CComBSTR &&) | CComBSTR | CComBSTR | 0 | +| atl.cpp:420:13:420:18 | Append | ATL | (const CComBSTR &) | CComBSTR | Append | 0 | +| atl.cpp:421:13:421:18 | Append | ATL | (wchar_t) | CComBSTR | Append | 0 | +| atl.cpp:422:13:422:18 | Append | ATL | (char) | CComBSTR | Append | 0 | +| atl.cpp:423:13:423:18 | Append | ATL | (LPCOLESTR) | CComBSTR | Append | 0 | +| atl.cpp:424:13:424:18 | Append | ATL | (LPCSTR) | CComBSTR | Append | 0 | +| atl.cpp:425:13:425:18 | Append | ATL | (LPCOLESTR,int) | CComBSTR | Append | 0 | +| atl.cpp:425:13:425:18 | Append | ATL | (LPCOLESTR,int) | CComBSTR | Append | 1 | +| atl.cpp:440:10:440:19 | LoadString | ATL | (HINSTANCE,UINT) | CComBSTR | LoadString | 0 | +| atl.cpp:440:10:440:19 | LoadString | ATL | (HINSTANCE,UINT) | CComBSTR | LoadString | 1 | +| atl.cpp:441:10:441:19 | LoadString | ATL | (UINT) | CComBSTR | LoadString | 0 | +| atl.cpp:540:5:540:17 | CComSafeArray | ATL | (const SAFEARRAY *) | CComSafeArray | CComSafeArray | 0 | +| atl.cpp:544:13:544:15 | Add | ATL | (const SAFEARRAY *) | CComSafeArray | Add | 0 | +| atl.cpp:546:13:546:15 | Add | ATL | (const T &,BOOL) | CComSafeArray | Add | 0 | +| atl.cpp:546:13:546:15 | Add | ATL | (const T &,BOOL) | CComSafeArray | Add | 1 | +| atl.cpp:915:5:915:18 | CSimpleStringT | ATL | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 0 | +| atl.cpp:915:5:915:18 | CSimpleStringT | ATL | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | +| atl.cpp:915:5:915:18 | CSimpleStringT | ATL | (const XCHAR *,int,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 2 | +| atl.cpp:916:5:916:18 | CSimpleStringT | ATL | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 0 | +| atl.cpp:916:5:916:18 | CSimpleStringT | ATL | (PCXSTR,IAtlStringMgr *) | CSimpleStringT | CSimpleStringT | 1 | +| atl.cpp:917:5:917:18 | CSimpleStringT | ATL | (const CSimpleStringT &) | CSimpleStringT | CSimpleStringT | 0 | +| atl.cpp:927:17:927:25 | CopyChars | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 0 | +| atl.cpp:927:17:927:25 | CopyChars | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 1 | +| atl.cpp:927:17:927:25 | CopyChars | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | +| atl.cpp:928:17:928:25 | CopyChars | ATL | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 0 | +| atl.cpp:928:17:928:25 | CopyChars | ATL | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 1 | +| atl.cpp:928:17:928:25 | CopyChars | ATL | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 2 | +| atl.cpp:928:17:928:25 | CopyChars | ATL | (XCHAR *,size_t,const XCHAR *,int) | CSimpleStringT | CopyChars | 3 | +| atl.cpp:929:17:929:35 | CopyCharsOverlapped | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 0 | +| atl.cpp:929:17:929:35 | CopyCharsOverlapped | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 1 | +| atl.cpp:929:17:929:35 | CopyCharsOverlapped | ATL | (XCHAR *,const XCHAR *,int) | CSimpleStringT | CopyCharsOverlapped | 2 | +| atl.cpp:1036:5:1036:12 | CStringT | ATL | (const VARIANT &) | CStringT | CStringT | 0 | +| atl.cpp:1037:5:1037:12 | CStringT | ATL | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1037:5:1037:12 | CStringT | ATL | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1037:5:1037:12 | CStringT | ATL | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 0 | +| atl.cpp:1037:5:1037:12 | CStringT | ATL | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1037:5:1037:12 | CStringT | ATL | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1038:5:1038:12 | CStringT | ATL | (const CStringT &) | CStringT | CStringT | 0 | +| atl.cpp:1042:5:1042:12 | CStringT | ATL | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 0 | +| atl.cpp:1042:5:1042:12 | CStringT | ATL | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1042:5:1042:12 | CStringT | ATL | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1042:5:1042:12 | CStringT | ATL | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1042:5:1042:12 | CStringT | ATL | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1043:5:1043:12 | CStringT | ATL | (LPCSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1043:5:1043:12 | CStringT | ATL | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 0 | +| atl.cpp:1043:5:1043:12 | CStringT | ATL | (LPCWSTR,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1043:5:1043:12 | CStringT | ATL | (const VARIANT &,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1043:5:1043:12 | CStringT | ATL | (const unsigned char *,IAtlStringMgr *) | CStringT | CStringT | 1 | +| atl.cpp:1045:5:1045:12 | CStringT | ATL | (char *) | CStringT | CStringT | 0 | +| atl.cpp:1046:5:1046:12 | CStringT | ATL | (unsigned char *) | CStringT | CStringT | 0 | +| atl.cpp:1047:5:1047:12 | CStringT | ATL | (wchar_t *) | CStringT | CStringT | 0 | +| atl.cpp:1049:5:1049:12 | CStringT | ATL | (char,int) | CStringT | CStringT | 0 | +| atl.cpp:1049:5:1049:12 | CStringT | ATL | (char,int) | CStringT | CStringT | 1 | +| atl.cpp:1049:5:1049:12 | CStringT | ATL | (const XCHAR *,int) | CStringT | CStringT | 1 | +| atl.cpp:1049:5:1049:12 | CStringT | ATL | (const YCHAR *,int) | CStringT | CStringT | 1 | +| atl.cpp:1049:5:1049:12 | CStringT | ATL | (wchar_t,int) | CStringT | CStringT | 1 | +| atl.cpp:1050:5:1050:12 | CStringT | ATL | (char,int) | CStringT | CStringT | 1 | +| atl.cpp:1050:5:1050:12 | CStringT | ATL | (const XCHAR *,int) | CStringT | CStringT | 1 | +| atl.cpp:1050:5:1050:12 | CStringT | ATL | (const YCHAR *,int) | CStringT | CStringT | 1 | +| atl.cpp:1050:5:1050:12 | CStringT | ATL | (wchar_t,int) | CStringT | CStringT | 0 | +| atl.cpp:1050:5:1050:12 | CStringT | ATL | (wchar_t,int) | CStringT | CStringT | 1 | +| atl.cpp:1061:10:1061:21 | AppendFormat | ATL | (PCXSTR,...) | CStringT | AppendFormat | 0 | +| atl.cpp:1061:10:1061:21 | AppendFormat | ATL | (PCXSTR,...) | CStringT | AppendFormat | 1 | +| atl.cpp:1061:10:1061:21 | AppendFormat | ATL | (UINT,...) | CStringT | AppendFormat | 1 | +| atl.cpp:1062:10:1062:21 | AppendFormat | ATL | (PCXSTR,...) | CStringT | AppendFormat | 1 | +| atl.cpp:1062:10:1062:21 | AppendFormat | ATL | (UINT,...) | CStringT | AppendFormat | 0 | +| atl.cpp:1062:10:1062:21 | AppendFormat | ATL | (UINT,...) | CStringT | AppendFormat | 1 | +| atl.cpp:1070:9:1070:14 | Insert | ATL | (int,PCXSTR) | CStringT | Insert | 0 | +| atl.cpp:1070:9:1070:14 | Insert | ATL | (int,PCXSTR) | CStringT | Insert | 1 | +| atl.cpp:1071:9:1071:14 | Insert | ATL | (int,XCHAR) | CStringT | Insert | 0 | +| atl.cpp:1071:9:1071:14 | Insert | ATL | (int,XCHAR) | CStringT | Insert | 1 | +| atl.cpp:1081:9:1081:15 | Replace | ATL | (PCXSTR,PCXSTR) | CStringT | Replace | 0 | +| atl.cpp:1081:9:1081:15 | Replace | ATL | (PCXSTR,PCXSTR) | CStringT | Replace | 1 | +| atl.cpp:1082:9:1082:15 | Replace | ATL | (XCHAR,XCHAR) | CStringT | Replace | 0 | +| atl.cpp:1082:9:1082:15 | Replace | ATL | (XCHAR,XCHAR) | CStringT | Replace | 1 | +| atl.cpp:1286:5:1286:10 | ComPtr | Microsoft::WRL | (const ComPtr &) | ComPtr | ComPtr | 0 | +| atl.cpp:1287:5:1287:10 | ComPtr | Microsoft::WRL | (ComPtr &&) | ComPtr | ComPtr | 0 | +| atl.cpp:1290:5:1290:10 | ComPtr | Microsoft::WRL | (T *) | ComPtr | ComPtr | 0 | +| atl.cpp:1290:5:1290:10 | ComPtr | Microsoft::WRL | (T *) | ComPtr | ComPtr | 0 | +| atl.cpp:1301:13:1301:18 | CopyTo | Microsoft::WRL | (T **) | ComPtr | CopyTo | 0 | +| atl.cpp:1303:13:1303:18 | CopyTo | Microsoft::WRL | (REFIID,void **) | ComPtr | CopyTo | 0 | +| atl.cpp:1303:13:1303:18 | CopyTo | Microsoft::WRL | (REFIID,void **) | ComPtr | CopyTo | 1 | +| atl.cpp:1306:13:1306:18 | CopyTo | Microsoft::WRL | (T **) | ComPtr | CopyTo | 0 | +| atl.cpp:1328:13:1328:21 | operator= | Microsoft::WRL | (T *) | ComPtr | operator= | 0 | +| atl.cpp:1330:13:1330:21 | operator= | Microsoft::WRL | (U *) | ComPtr | operator= | 0 | +| atl.cpp:1331:13:1331:21 | operator= | Microsoft::WRL | (const ComPtr &) | ComPtr | operator= | 0 | +| atl.cpp:1333:13:1333:21 | operator= | Microsoft::WRL | (const ComPtr &) | ComPtr | operator= | 0 | +| atl.cpp:1334:13:1334:21 | operator= | Microsoft::WRL | (ComPtr &&) | ComPtr | operator= | 0 | +| atl.cpp:1336:13:1336:21 | operator= | Microsoft::WRL | (ComPtr &&) | ComPtr | operator= | 0 | +| stl.h:294:12:294:17 | vector | std | (const vector &,const Allocator &) | vector | vector | 1 | +| stl.h:294:12:294:17 | vector | std | (const vector &,const Allocator &) | vector | vector | 1 | +| stl.h:294:12:294:17 | vector | std | (const vector &,const Allocator &) | vector | vector | 1 | +| stl.h:294:12:294:17 | vector | std | (vector &&,const Allocator &) | vector | vector | 1 | +| stl.h:294:12:294:17 | vector | std | (vector &&,const Allocator &) | vector | vector | 1 | +| stl.h:294:12:294:17 | vector | std | (vector &&,const Allocator &) | vector | vector | 1 | +| stl.h:295:3:295:8 | vector | std | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | +| stl.h:295:3:295:8 | vector | std | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 0 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 0 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 1 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 1 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 2 | +| stl.h:295:3:295:8 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 2 | +| stl.h:296:101:296:106 | vector | std | (InputIterator,InputIterator,const Allocator &) | vector | vector | 0 | +| stl.h:296:101:296:106 | vector | std | (InputIterator,InputIterator,const Allocator &) | vector | vector | 1 | +| stl.h:296:101:296:106 | vector | std | (InputIterator,InputIterator,const Allocator &) | vector | vector | 2 | +| stl.h:296:101:296:106 | vector | std | (size_type,const T &,const Allocator &) | vector | vector | 2 | +| stl.h:303:106:303:111 | assign | std | (InputIt,InputIt) | vector | assign | 0 | +| stl.h:303:106:303:111 | assign | std | (InputIt,InputIt) | vector | assign | 1 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 0 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 0 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 0 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 1 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 1 | +| stl.h:306:8:306:13 | assign | std | (size_type,const T &) | vector | assign | 1 | +| stl.h:331:12:331:17 | insert | std | (const_iterator,T &&) | vector | insert | 0 | +| stl.h:331:12:331:17 | insert | std | (const_iterator,T &&) | vector | insert | 1 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 0 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 0 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 1 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 1 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 2 | +| stl.h:333:42:333:47 | insert | std | (const_iterator,InputIt,InputIt) | vector | insert | 2 | +| stl.h:678:33:678:38 | format | std | (format_string,Args &&) | | format | 0 | +| stl.h:678:33:678:38 | format | std | (format_string,Args &&) | | format | 0 | +| stl.h:678:33:678:38 | format | std | (format_string,Args &&) | | format | 1 | +| stl.h:678:33:678:38 | format | std | (format_string,Args &&) | | format | 1 | +| taint.cpp:847:5:847:11 | toupper | | (int) | | toupper | 0 | +| taint.cpp:848:5:848:11 | tolower | | (int) | | tolower | 0 | getSignatureParameterName | (..(*)(..)) | | ASN1_SCTX_new | 0 | ..(*)(..) | | (..(*)(..)) | | ossl_pqueue_new | 0 | ..(*)(..) | @@ -21701,6 +2471,8 @@ getSignatureParameterName | (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 1 | const char * | | (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 2 | char ** | | (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 3 | OperationConfig * | +| (ComPtr &&) | ComPtr | ComPtr | 0 | ComPtr && | +| (ComPtr &&) | ComPtr | operator= | 0 | ComPtr && | | (CompoundDictionary *,const PreparedDictionary *) | | AttachPreparedDictionary | 0 | CompoundDictionary * | | (CompoundDictionary *,const PreparedDictionary *) | | AttachPreparedDictionary | 1 | const PreparedDictionary * | | (Curl_cfilter *) | | Curl_conn_cf_is_ssl | 0 | Curl_cfilter * | @@ -28531,6 +9303,8 @@ getSignatureParameterName | (RAND_POOL *,unsigned int) | | ossl_rand_pool_bytes_needed | 1 | unsigned int | | (RECORD_LAYER *,SSL_CONNECTION *) | | RECORD_LAYER_init | 0 | RECORD_LAYER * | | (RECORD_LAYER *,SSL_CONNECTION *) | | RECORD_LAYER_init | 1 | SSL_CONNECTION * | +| (REFIID,void **) | ComPtr | CopyTo | 0 | REFIID | +| (REFIID,void **) | ComPtr | CopyTo | 1 | void ** | | (RIO_NOTIFIER *) | | ossl_rio_notifier_cleanup | 0 | RIO_NOTIFIER * | | (RIPEMD160_CTX *,const unsigned char *) | | RIPEMD160_Transform | 0 | RIPEMD160_CTX * | | (RIPEMD160_CTX *,const unsigned char *) | | RIPEMD160_Transform | 1 | const unsigned char * | @@ -30114,6 +10888,10 @@ getSignatureParameterName | (Strtab *,const char *,size_t) | | strtabadd | 2 | size_t | | (Strtab *,size_t *) | | strtabfinalize | 0 | Strtab * | | (Strtab *,size_t *) | | strtabfinalize | 1 | size_t * | +| (T *) | ComPtr | ComPtr | 0 | func:0 * | +| (T *) | ComPtr | operator= | 0 | class:0 * | +| (T **) | ComPtr | CopyTo | 0 | func:0 ** | +| (T **) | ComPtr | CopyTo | 0 | class:0 ** | | (TLS_FEATURE *) | | TLS_FEATURE_free | 0 | TLS_FEATURE * | | (TLS_RL_RECORD *,const unsigned char *) | | ossl_tls_rl_record_set_seq_num | 0 | TLS_RL_RECORD * | | (TLS_RL_RECORD *,const unsigned char *) | | ossl_tls_rl_record_set_seq_num | 1 | const unsigned char * | @@ -30306,6 +11084,7 @@ getSignatureParameterName | (TXT_DB *,int,..(*)(..),OPENSSL_LH_HASHFUNC,OPENSSL_LH_COMPFUNC) | | TXT_DB_create_index | 2 | ..(*)(..) | | (TXT_DB *,int,..(*)(..),OPENSSL_LH_HASHFUNC,OPENSSL_LH_COMPFUNC) | | TXT_DB_create_index | 3 | OPENSSL_LH_HASHFUNC | | (TXT_DB *,int,..(*)(..),OPENSSL_LH_HASHFUNC,OPENSSL_LH_COMPFUNC) | | TXT_DB_create_index | 4 | OPENSSL_LH_COMPFUNC | +| (U *) | ComPtr | operator= | 0 | func:0 * | | (UI *) | | UI_get0_user_data | 0 | UI * | | (UI *) | | UI_get_method | 0 | UI * | | (UI *,UI_STRING *,const char *) | | UI_set_result | 0 | UI * | @@ -33256,6 +14035,8 @@ getSignatureParameterName | (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 1 | CURLUPart | | (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 2 | char ** | | (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 3 | unsigned int | +| (const ComPtr &) | ComPtr | ComPtr | 0 | const ComPtr & | +| (const ComPtr &) | ComPtr | operator= | 0 | const ComPtr & | | (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 0 | const Command * | | (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 1 | const size_t | | (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 2 | const BlockSplit * | @@ -46065,14 +26846,20 @@ getParameterTypeName | atl.cpp:196:12:196:14 | Add | 0 | INARGTYPclass:0 | | atl.cpp:198:12:198:17 | Append | 0 | const CAtlArray & | | atl.cpp:199:10:199:13 | Copy | 0 | const CAtlArray & | +| atl.cpp:201:8:201:12 | GetAt | 0 | decltype(...) | | atl.cpp:201:8:201:12 | GetAt | 0 | size_t | +| atl.cpp:205:10:205:22 | InsertArrayAt | 0 | decltype(...) | | atl.cpp:205:10:205:22 | InsertArrayAt | 0 | size_t | | atl.cpp:205:10:205:22 | InsertArrayAt | 1 | const CAtlArray * | +| atl.cpp:206:10:206:17 | InsertAt | 0 | decltype(...) | | atl.cpp:206:10:206:17 | InsertAt | 0 | size_t | | atl.cpp:206:10:206:17 | InsertAt | 1 | INARGTYPclass:0 | +| atl.cpp:206:10:206:17 | InsertAt | 2 | decltype(...) | | atl.cpp:206:10:206:17 | InsertAt | 2 | size_t | +| atl.cpp:211:10:211:18 | SetAtGrow | 0 | decltype(...) | | atl.cpp:211:10:211:18 | SetAtGrow | 0 | size_t | | atl.cpp:211:10:211:18 | SetAtGrow | 1 | INARGTYPclass:0 | +| atl.cpp:213:8:213:17 | operator[] | 0 | decltype(...) | | atl.cpp:213:8:213:17 | operator[] | 0 | size_t | | atl.cpp:259:5:259:12 | CAtlList | 0 | UINT | | atl.cpp:259:5:259:12 | CAtlList | 0 | UINT | @@ -46092,6 +26879,8 @@ getParameterTypeName | atl.cpp:267:14:267:17 | Find | 1 | POSITION | | atl.cpp:267:14:267:17 | Find | 1 | __POSITION * | | atl.cpp:267:14:267:17 | Find | 1 | __POSITION * | +| atl.cpp:268:14:268:22 | FindIndex | 0 | decltype(...) | +| atl.cpp:268:14:268:22 | FindIndex | 0 | decltype(...) | | atl.cpp:268:14:268:22 | FindIndex | 0 | size_t | | atl.cpp:268:14:268:22 | FindIndex | 0 | size_t | | atl.cpp:269:8:269:12 | GetAt | 0 | POSITION | @@ -46272,6 +27061,7 @@ getParameterTypeName | atl.cpp:927:17:927:25 | CopyChars | 2 | int | | atl.cpp:928:17:928:25 | CopyChars | 0 | XCHAR * | | atl.cpp:928:17:928:25 | CopyChars | 0 | char * | +| atl.cpp:928:17:928:25 | CopyChars | 1 | decltype(...) | | atl.cpp:928:17:928:25 | CopyChars | 1 | size_t | | atl.cpp:928:17:928:25 | CopyChars | 2 | const XCHAR * | | atl.cpp:928:17:928:25 | CopyChars | 2 | const char * | @@ -46355,6 +27145,27 @@ getParameterTypeName | atl.cpp:1231:5:1231:12 | CStrBufT | 1 | int | | atl.cpp:1231:5:1231:12 | CStrBufT | 2 | DWORD | | atl.cpp:1231:5:1231:12 | CStrBufT | 2 | unsigned long | +| atl.cpp:1286:5:1286:10 | ComPtr | 0 | const ComPtr & | +| atl.cpp:1287:5:1287:10 | ComPtr | 0 | ComPtr && | +| atl.cpp:1290:5:1290:10 | ComPtr | 0 | func:0 * | +| atl.cpp:1290:5:1290:10 | ComPtr | 0 | func:0 * | +| atl.cpp:1295:13:1295:14 | As | 0 | ComPtr * | +| atl.cpp:1301:13:1301:18 | CopyTo | 0 | Interfaceclass:0ype ** | +| atl.cpp:1301:13:1301:18 | CopyTo | 0 | class:0 ** | +| atl.cpp:1303:13:1303:18 | CopyTo | 0 | GUID * | +| atl.cpp:1303:13:1303:18 | CopyTo | 0 | REFIID | +| atl.cpp:1303:13:1303:18 | CopyTo | 1 | void ** | +| atl.cpp:1306:13:1306:18 | CopyTo | 0 | func:0 ** | +| atl.cpp:1321:10:1321:13 | Swap | 0 | ComPtr & | +| atl.cpp:1328:13:1328:21 | operator= | 0 | class:0 * | +| atl.cpp:1330:13:1330:21 | operator= | 0 | func:0 * | +| atl.cpp:1331:13:1331:21 | operator= | 0 | const ComPtr & | +| atl.cpp:1333:13:1333:21 | operator= | 0 | const ComPtr & | +| atl.cpp:1334:13:1334:21 | operator= | 0 | ComPtr && | +| atl.cpp:1336:13:1336:21 | operator= | 0 | ComPtr && | +| atl.cpp:1343:25:1343:28 | move | 0 | func:0 & | +| atl.cpp:1415:8:1415:8 | operator= | 0 | S && | +| atl.cpp:1415:8:1415:8 | operator= | 0 | const S & | | bsd.cpp:6:8:6:8 | operator= | 0 | const sockaddr & | | bsd.cpp:6:8:6:8 | operator= | 0 | sockaddr && | | bsd.cpp:12:5:12:10 | accept | 0 | int | @@ -47191,6 +28002,22 @@ getParameterTypeName | taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | 1 | const char ** | | taint.cpp:822:6:822:19 | take_const_ptr | 0 | const char * | | taint.cpp:822:6:822:19 | take_const_ptr | 1 | const char * | +| taint.cpp:836:6:836:18 | indirect_sink | 0 | FILE * | +| taint.cpp:837:5:837:11 | fprintf | 0 | FILE * | +| taint.cpp:837:5:837:11 | fprintf | 1 | const char * | +| taint.cpp:837:5:837:11 | fprintf | 2 | ... | +| taint.cpp:847:5:847:11 | toupper | 0 | int | +| taint.cpp:848:5:848:11 | tolower | 0 | int | +| taint.cpp:859:8:859:12 | iconv | 0 | iconv_t | +| taint.cpp:859:8:859:12 | iconv | 0 | int | +| taint.cpp:859:8:859:12 | iconv | 1 | char ** | +| taint.cpp:859:8:859:12 | iconv | 2 | size_t * | +| taint.cpp:859:8:859:12 | iconv | 2 | unsigned long * | +| taint.cpp:859:8:859:12 | iconv | 3 | char ** | +| taint.cpp:859:8:859:12 | iconv | 4 | size_t * | +| taint.cpp:859:8:859:12 | iconv | 4 | unsigned long * | +| taint.cpp:861:6:861:15 | test_iconv | 0 | size_t | +| taint.cpp:861:6:861:15 | test_iconv | 0 | unsigned long | | thread.cpp:4:6:4:9 | sink | 0 | int | | thread.cpp:6:8:6:8 | operator= | 0 | S && | | thread.cpp:6:8:6:8 | operator= | 0 | const S & | diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.ql b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.ql index 32c0e59c158..dc0027fcc6f 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.ql +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.ql @@ -2,7 +2,7 @@ import cpp import semmle.code.cpp.dataflow.ExternalFlow import ExternalFlowDebug -query predicate signatureMatches = signatureMatches_debug/5; +query predicate signatureMatches = signatureMatches_debug/6; query predicate getSignatureParameterName = getSignatureParameterName_debug/4; diff --git a/cpp/ql/test/library-tests/files/Files.expected b/cpp/ql/test/library-tests/files/Files.expected index 13f3a6b2da1..f94c07badcf 100644 --- a/cpp/ql/test/library-tests/files/Files.expected +++ b/cpp/ql/test/library-tests/files/Files.expected @@ -1,4 +1,4 @@ -| c.c | c.c | CFile, MetricFile | C | | | -| files1.cpp | files1.cpp | CppFile, MetricFile | C++ | swap | t | -| files1.h | files1.h | HeaderFile, MetricFile | | swap | | -| files2.cpp | files2.cpp | CppFile, MetricFile | C++ | g | x, y | +| c.c | c.c | CFile, GuardConditionImpl, MetricFile | C | | | +| files1.cpp | files1.cpp | CppFile, GuardConditionImpl, MetricFile | C++ | swap | t | +| files1.h | files1.h | GuardConditionImpl, HeaderFile, MetricFile | | swap | | +| files2.cpp | files2.cpp | CppFile, GuardConditionImpl, MetricFile | C++ | g | x, y | diff --git a/cpp/ql/test/library-tests/functions/routinetype/types.expected b/cpp/ql/test/library-tests/functions/routinetype/types.expected index d620bea517e..87d51330d76 100644 --- a/cpp/ql/test/library-tests/functions/routinetype/types.expected +++ b/cpp/ql/test/library-tests/functions/routinetype/types.expected @@ -1 +1 @@ -| routinetype.cpp:2:7:2:19 | myRoutineType | file://:0:0:0:0 | ..()(..) | RoutineType | +| routinetype.cpp:2:7:2:19 | myRoutineType | file://:0:0:0:0 | ..()(..) | GuardConditionImpl, RoutineType | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 6e62071e7d9..630a4ca5ceb 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -24550,6 +24550,547 @@ ir.cpp: # 2771| Type = [LValueReferenceType] ThreeWay & # 2771| ValueCategory = prvalue # 2772| getStmt(2): [ReturnStmt] return ... +# 2774| [TopLevelFunction] void test_allocation_with_initializer() +# 2774| : +# 2774| getEntryPoint(): [BlockStmt] { ... } +# 2775| getStmt(0): [DeclStmt] declaration +# 2775| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p1 +# 2775| Type = [IntPointerType] int * +# 2775| getVariable().getInitializer(): [Initializer] initializer for p1 +# 2775| getExpr(): [NewExpr] new +# 2775| Type = [IntPointerType] int * +# 2775| ValueCategory = prvalue +# 2775| getInitializer(): [Literal] 42 +# 2775| Type = [IntType] int +# 2775| Value = [Literal] 42 +# 2775| ValueCategory = prvalue +# 2776| getStmt(1): [DeclStmt] declaration +# 2776| getDeclarationEntry(0): [VariableDeclarationEntry] definition of p2 +# 2776| Type = [PointerType] long * +# 2776| getVariable().getInitializer(): [Initializer] initializer for p2 +# 2776| getExpr(): [NewExpr] new +# 2776| Type = [PointerType] long * +# 2776| ValueCategory = prvalue +# 2776| getInitializer(): [Literal] 42 +# 2776| Type = [IntType] int +# 2776| Value = [Literal] 42 +# 2776| ValueCategory = prvalue +# 2776| getInitializer().getFullyConverted(): [CStyleCast] (long)... +# 2776| Conversion = [IntegralConversion] integral conversion +# 2776| Type = [LongType] long +# 2776| Value = [CStyleCast] 42 +# 2776| ValueCategory = prvalue +# 2777| getStmt(2): [ReturnStmt] return ... +# 2779| [TopLevelFunction] void vla_sizeof_test(int, size_t, char) +# 2779| : +# 2779| getParameter(0): [Parameter] len1 +# 2779| Type = [IntType] int +# 2779| getParameter(1): [Parameter] len2 +# 2779| Type = [CTypedefType,Size_t] size_t +# 2779| getParameter(2): [Parameter] len3 +# 2779| Type = [PlainCharType] char +# 2779| getEntryPoint(): [BlockStmt] { ... } +# 2780| getStmt(0): [DeclStmt] declaration +# 2780| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2780| Type = [ArrayType] char[] +# 2780| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2780| getDimensionExpr(): [VariableAccess] len1 +# 2780| Type = [IntType] int +# 2780| ValueCategory = prvalue(load) +# 2780| getStmt(2): [VlaDeclStmt] VLA declaration +# 2781| getStmt(3): [DeclStmt] declaration +# 2781| getDeclarationEntry(0): [VariableDeclarationEntry] definition of x +# 2781| Type = [CTypedefType,Size_t] size_t +# 2781| getVariable().getInitializer(): [Initializer] initializer for x +# 2781| getExpr(): [SizeofExprOperator] sizeof() +# 2781| Type = [LongType] unsigned long +# 2781| ValueCategory = prvalue +# 2781| getExprOperand(): [VariableAccess] tmp1 +# 2781| Type = [ArrayType] char[] +# 2781| ValueCategory = lvalue +# 2781| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2781| Type = [ArrayType] char[] +# 2781| ValueCategory = lvalue +# 2782| getStmt(4): [DeclStmt] declaration +# 2782| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp2 +# 2782| Type = [ArrayType] int[][] +# 2782| getStmt(5): [VlaDimensionStmt] VLA dimension size +# 2782| getDimensionExpr(): [VariableAccess] len1 +# 2782| Type = [IntType] int +# 2782| ValueCategory = prvalue(load) +# 2782| getStmt(6): [VlaDimensionStmt] VLA dimension size +# 2782| getDimensionExpr(): [VariableAccess] len2 +# 2782| Type = [CTypedefType,Size_t] size_t +# 2782| ValueCategory = prvalue(load) +# 2782| getStmt(7): [VlaDeclStmt] VLA declaration +# 2783| getStmt(8): [DeclStmt] declaration +# 2783| getDeclarationEntry(0): [VariableDeclarationEntry] definition of y +# 2783| Type = [CTypedefType,Size_t] size_t +# 2783| getVariable().getInitializer(): [Initializer] initializer for y +# 2783| getExpr(): [SizeofExprOperator] sizeof() +# 2783| Type = [LongType] unsigned long +# 2783| ValueCategory = prvalue +# 2783| getExprOperand(): [VariableAccess] tmp2 +# 2783| Type = [ArrayType] int[][] +# 2783| ValueCategory = lvalue +# 2783| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2783| Type = [ArrayType] int[][] +# 2783| ValueCategory = lvalue +# 2784| getStmt(9): [DeclStmt] declaration +# 2784| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2784| Type = [CTypedefType,Size_t] size_t +# 2784| getVariable().getInitializer(): [Initializer] initializer for z +# 2784| getExpr(): [SizeofExprOperator] sizeof() +# 2784| Type = [LongType] unsigned long +# 2784| ValueCategory = prvalue +# 2784| getExprOperand(): [PointerDereferenceExpr] * ... +# 2784| Type = [ArrayType] int[] +# 2784| ValueCategory = lvalue +# 2784| getOperand(): [VariableAccess] tmp2 +# 2784| Type = [ArrayType] int[][] +# 2784| ValueCategory = lvalue +# 2784| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2784| Type = [PointerType] int(*)[] +# 2784| ValueCategory = prvalue +# 2784| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2784| Type = [ArrayType] int[] +# 2784| ValueCategory = lvalue +# 2785| getStmt(10): [DeclStmt] declaration +# 2785| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp3 +# 2785| Type = [ArrayType] int[][][] +# 2785| getStmt(11): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len1 +# 2785| Type = [IntType] int +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(12): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len2 +# 2785| Type = [CTypedefType,Size_t] size_t +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(13): [VlaDimensionStmt] VLA dimension size +# 2785| getDimensionExpr(): [VariableAccess] len3 +# 2785| Type = [PlainCharType] char +# 2785| ValueCategory = prvalue(load) +# 2785| getStmt(14): [VlaDeclStmt] VLA declaration +# 2786| getStmt(15): [DeclStmt] declaration +# 2786| getDeclarationEntry(0): [VariableDeclarationEntry] definition of w +# 2786| Type = [CTypedefType,Size_t] size_t +# 2786| getVariable().getInitializer(): [Initializer] initializer for w +# 2786| getExpr(): [SizeofExprOperator] sizeof() +# 2786| Type = [LongType] unsigned long +# 2786| ValueCategory = prvalue +# 2786| getExprOperand(): [VariableAccess] tmp3 +# 2786| Type = [ArrayType] int[][][] +# 2786| ValueCategory = lvalue +# 2786| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2786| Type = [ArrayType] int[][][] +# 2786| ValueCategory = lvalue +# 2787| getStmt(16): [DeclStmt] declaration +# 2787| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 2787| Type = [CTypedefType,Size_t] size_t +# 2787| getVariable().getInitializer(): [Initializer] initializer for v +# 2787| getExpr(): [SizeofExprOperator] sizeof() +# 2787| Type = [LongType] unsigned long +# 2787| ValueCategory = prvalue +# 2787| getExprOperand(): [PointerDereferenceExpr] * ... +# 2787| Type = [ArrayType] int[][] +# 2787| ValueCategory = lvalue +# 2787| getOperand(): [VariableAccess] tmp3 +# 2787| Type = [ArrayType] int[][][] +# 2787| ValueCategory = lvalue +# 2787| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2787| Type = [PointerType] int(*)[][] +# 2787| ValueCategory = prvalue +# 2787| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2787| Type = [ArrayType] int[][] +# 2787| ValueCategory = lvalue +# 2788| getStmt(17): [DeclStmt] declaration +# 2788| getDeclarationEntry(0): [VariableDeclarationEntry] definition of u +# 2788| Type = [CTypedefType,Size_t] size_t +# 2788| getVariable().getInitializer(): [Initializer] initializer for u +# 2788| getExpr(): [SizeofExprOperator] sizeof() +# 2788| Type = [LongType] unsigned long +# 2788| ValueCategory = prvalue +# 2788| getExprOperand(): [PointerDereferenceExpr] * ... +# 2788| Type = [ArrayType] int[] +# 2788| ValueCategory = lvalue +# 2788| getOperand(): [PointerDereferenceExpr] * ... +# 2788| Type = [ArrayType] int[][] +# 2788| ValueCategory = lvalue +# 2788| getOperand(): [VariableAccess] tmp3 +# 2788| Type = [ArrayType] int[][][] +# 2788| ValueCategory = lvalue +# 2788| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2788| Type = [PointerType] int(*)[][] +# 2788| ValueCategory = prvalue +# 2788| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2788| Type = [PointerType] int(*)[] +# 2788| ValueCategory = prvalue +# 2788| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2788| Type = [ArrayType] int[] +# 2788| ValueCategory = lvalue +# 2789| getStmt(18): [DeclStmt] declaration +# 2789| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 2789| Type = [CTypedefType,Size_t] size_t +# 2789| getVariable().getInitializer(): [Initializer] initializer for t +# 2789| getExpr(): [SizeofExprOperator] sizeof() +# 2789| Type = [LongType] unsigned long +# 2789| Value = [SizeofExprOperator] 4 +# 2789| ValueCategory = prvalue +# 2789| getExprOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [IntType] int +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [ArrayType] int[] +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [PointerDereferenceExpr] * ... +# 2789| Type = [ArrayType] int[][] +# 2789| ValueCategory = lvalue +# 2789| getOperand(): [VariableAccess] tmp3 +# 2789| Type = [ArrayType] int[][][] +# 2789| ValueCategory = lvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [PointerType] int(*)[][] +# 2789| ValueCategory = prvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [PointerType] int(*)[] +# 2789| ValueCategory = prvalue +# 2789| getOperand().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2789| Type = [IntPointerType] int * +# 2789| ValueCategory = prvalue +# 2789| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2789| Type = [IntType] int +# 2789| ValueCategory = lvalue +# 2790| getStmt(19): [ReturnStmt] return ... +# 2792| [TopLevelFunction] void vla_sizeof_test2(int, size_t, char) +# 2792| : +# 2792| getParameter(0): [Parameter] len1 +# 2792| Type = [IntType] int +# 2792| getParameter(1): [Parameter] len2 +# 2792| Type = [CTypedefType,Size_t] size_t +# 2792| getParameter(2): [Parameter] len3 +# 2792| Type = [PlainCharType] char +# 2792| getEntryPoint(): [BlockStmt] { ... } +# 2793| getStmt(0): [DeclStmt] declaration +# 2793| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2793| Type = [ArrayType] int[][] +# 2793| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2793| getDimensionExpr(): [VariableAccess] len1 +# 2793| Type = [IntType] int +# 2793| ValueCategory = prvalue(load) +# 2793| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2793| getDimensionExpr(): [VariableAccess] len2 +# 2793| Type = [CTypedefType,Size_t] size_t +# 2793| ValueCategory = prvalue(load) +# 2793| getStmt(3): [VlaDeclStmt] VLA declaration +# 2794| getStmt(4): [DeclStmt] declaration +# 2794| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2794| Type = [CTypedefType,Size_t] size_t +# 2794| getVariable().getInitializer(): [Initializer] initializer for z +# 2794| getExpr(): [SizeofExprOperator] sizeof() +# 2794| Type = [LongType] unsigned long +# 2794| ValueCategory = prvalue +# 2794| getExprOperand(): [ArrayExpr] access to array +# 2794| Type = [ArrayType] int[] +# 2794| ValueCategory = lvalue +# 2794| getArrayBase(): [VariableAccess] tmp1 +# 2794| Type = [ArrayType] int[][] +# 2794| ValueCategory = lvalue +# 2794| getArrayOffset(): [Literal] 1 +# 2794| Type = [IntType] int +# 2794| Value = [Literal] 1 +# 2794| ValueCategory = prvalue +# 2794| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2794| Type = [PointerType] int(*)[] +# 2794| ValueCategory = prvalue +# 2794| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2794| Type = [ArrayType] int[] +# 2794| ValueCategory = lvalue +# 2795| getStmt(5): [DeclStmt] declaration +# 2795| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp2 +# 2795| Type = [ArrayType] int[][][] +# 2795| getStmt(6): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len1 +# 2795| Type = [IntType] int +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(7): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len2 +# 2795| Type = [CTypedefType,Size_t] size_t +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(8): [VlaDimensionStmt] VLA dimension size +# 2795| getDimensionExpr(): [VariableAccess] len3 +# 2795| Type = [PlainCharType] char +# 2795| ValueCategory = prvalue(load) +# 2795| getStmt(9): [VlaDeclStmt] VLA declaration +# 2796| getStmt(10): [DeclStmt] declaration +# 2796| getDeclarationEntry(0): [VariableDeclarationEntry] definition of v +# 2796| Type = [CTypedefType,Size_t] size_t +# 2796| getVariable().getInitializer(): [Initializer] initializer for v +# 2796| getExpr(): [SizeofExprOperator] sizeof() +# 2796| Type = [LongType] unsigned long +# 2796| ValueCategory = prvalue +# 2796| getExprOperand(): [ArrayExpr] access to array +# 2796| Type = [ArrayType] int[][] +# 2796| ValueCategory = lvalue +# 2796| getArrayBase(): [VariableAccess] tmp2 +# 2796| Type = [ArrayType] int[][][] +# 2796| ValueCategory = lvalue +# 2796| getArrayOffset(): [Literal] 1 +# 2796| Type = [IntType] int +# 2796| Value = [Literal] 1 +# 2796| ValueCategory = prvalue +# 2796| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2796| Type = [PointerType] int(*)[][] +# 2796| ValueCategory = prvalue +# 2796| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2796| Type = [ArrayType] int[][] +# 2796| ValueCategory = lvalue +# 2797| getStmt(11): [DeclStmt] declaration +# 2797| getDeclarationEntry(0): [VariableDeclarationEntry] definition of u +# 2797| Type = [CTypedefType,Size_t] size_t +# 2797| getVariable().getInitializer(): [Initializer] initializer for u +# 2797| getExpr(): [SizeofExprOperator] sizeof() +# 2797| Type = [LongType] unsigned long +# 2797| ValueCategory = prvalue +# 2797| getExprOperand(): [ArrayExpr] access to array +# 2797| Type = [ArrayType] int[] +# 2797| ValueCategory = lvalue +# 2797| getArrayBase(): [ArrayExpr] access to array +# 2797| Type = [ArrayType] int[][] +# 2797| ValueCategory = lvalue +# 2797| getArrayBase(): [VariableAccess] tmp2 +# 2797| Type = [ArrayType] int[][][] +# 2797| ValueCategory = lvalue +# 2797| getArrayOffset(): [Literal] 1 +# 2797| Type = [IntType] int +# 2797| Value = [Literal] 1 +# 2797| ValueCategory = prvalue +# 2797| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2797| Type = [PointerType] int(*)[][] +# 2797| ValueCategory = prvalue +# 2797| getArrayOffset(): [Literal] 2 +# 2797| Type = [IntType] int +# 2797| Value = [Literal] 2 +# 2797| ValueCategory = prvalue +# 2797| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2797| Type = [PointerType] int(*)[] +# 2797| ValueCategory = prvalue +# 2797| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2797| Type = [ArrayType] int[] +# 2797| ValueCategory = lvalue +# 2798| getStmt(12): [DeclStmt] declaration +# 2798| getDeclarationEntry(0): [VariableDeclarationEntry] definition of t +# 2798| Type = [CTypedefType,Size_t] size_t +# 2798| getVariable().getInitializer(): [Initializer] initializer for t +# 2798| getExpr(): [SizeofExprOperator] sizeof() +# 2798| Type = [LongType] unsigned long +# 2798| Value = [SizeofExprOperator] 4 +# 2798| ValueCategory = prvalue +# 2798| getExprOperand(): [ArrayExpr] access to array +# 2798| Type = [IntType] int +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [ArrayExpr] access to array +# 2798| Type = [ArrayType] int[] +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [ArrayExpr] access to array +# 2798| Type = [ArrayType] int[][] +# 2798| ValueCategory = lvalue +# 2798| getArrayBase(): [VariableAccess] tmp2 +# 2798| Type = [ArrayType] int[][][] +# 2798| ValueCategory = lvalue +# 2798| getArrayOffset(): [Literal] 1 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 1 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [PointerType] int(*)[][] +# 2798| ValueCategory = prvalue +# 2798| getArrayOffset(): [Literal] 2 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 2 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [PointerType] int(*)[] +# 2798| ValueCategory = prvalue +# 2798| getArrayOffset(): [Literal] 3 +# 2798| Type = [IntType] int +# 2798| Value = [Literal] 3 +# 2798| ValueCategory = prvalue +# 2798| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2798| Type = [IntPointerType] int * +# 2798| ValueCategory = prvalue +# 2798| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2798| Type = [IntType] int +# 2798| ValueCategory = lvalue +# 2799| getStmt(13): [ReturnStmt] return ... +# 2801| [TopLevelFunction] size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| : +# 2801| getParameter(0): [Parameter] len1 +# 2801| Type = [IntType] int +# 2801| getParameter(1): [Parameter] len2 +# 2801| Type = [CTypedefType,Size_t] size_t +# 2801| getParameter(2): [Parameter] len3 +# 2801| Type = [PlainCharType] char +# 2801| getParameter(3): [Parameter] b +# 2801| Type = [BoolType] bool +# 2801| getEntryPoint(): [BlockStmt] { ... } +# 2802| getStmt(0): [DeclStmt] declaration +# 2802| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr +# 2802| Type = [CTypedefType,LocalTypedefType] arr +# 2802| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2802| getDimensionExpr(): [VariableAccess] len1 +# 2802| Type = [IntType] int +# 2802| ValueCategory = prvalue(load) +# 2802| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2802| getDimensionExpr(): [VariableAccess] len2 +# 2802| Type = [CTypedefType,Size_t] size_t +# 2802| ValueCategory = prvalue(load) +# 2802| getStmt(3): [VlaDeclStmt] VLA declaration +# 2803| getStmt(4): [DeclStmt] declaration +# 2803| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr2 +# 2803| Type = [CTypedefType,LocalTypedefType] arr2 +# 2803| getStmt(5): [VlaDeclStmt] VLA declaration +# 2804| getStmt(6): [DeclStmt] declaration +# 2804| getDeclarationEntry(0): [TypeDeclarationEntry] declaration of arr3 +# 2804| Type = [CTypedefType,LocalTypedefType] arr3 +# 2804| getStmt(7): [VlaDimensionStmt] VLA dimension size +# 2804| getDimensionExpr(): [VariableAccess] len3 +# 2804| Type = [PlainCharType] char +# 2804| ValueCategory = prvalue(load) +# 2804| getStmt(8): [VlaDeclStmt] VLA declaration +# 2806| getStmt(9): [IfStmt] if (...) ... +# 2806| getCondition(): [VariableAccess] b +# 2806| Type = [BoolType] bool +# 2806| ValueCategory = prvalue(load) +# 2806| getThen(): [BlockStmt] { ... } +# 2807| getStmt(0): [DeclStmt] declaration +# 2807| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp +# 2807| Type = [CTypedefType,LocalTypedefType] arr3 +# 2807| getStmt(1): [VlaDeclStmt] VLA declaration +# 2808| getStmt(2): [ReturnStmt] return ... +# 2808| getExpr(): [SizeofExprOperator] sizeof() +# 2808| Type = [LongType] unsigned long +# 2808| ValueCategory = prvalue +# 2808| getExprOperand(): [ArrayExpr] access to array +# 2808| Type = [CTypedefType,LocalTypedefType] arr2 +# 2808| ValueCategory = lvalue +# 2808| getArrayBase(): [VariableAccess] tmp +# 2808| Type = [CTypedefType,LocalTypedefType] arr3 +# 2808| ValueCategory = lvalue +# 2808| getArrayOffset(): [Literal] 1 +# 2808| Type = [IntType] int +# 2808| Value = [Literal] 1 +# 2808| ValueCategory = prvalue +# 2808| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2808| Type = [PointerType] arr2 * +# 2808| ValueCategory = prvalue +# 2808| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2808| Type = [CTypedefType,LocalTypedefType] arr2 +# 2808| ValueCategory = lvalue +# 2811| getStmt(10): [ReturnStmt] return ... +# 2811| getExpr(): [Literal] 0 +# 2811| Type = [IntType] int +# 2811| Value = [Literal] 0 +# 2811| ValueCategory = prvalue +# 2811| getExpr().getFullyConverted(): [CStyleCast] (size_t)... +# 2811| Conversion = [IntegralConversion] integral conversion +# 2811| Type = [CTypedefType,Size_t] size_t +# 2811| Value = [CStyleCast] 0 +# 2811| ValueCategory = prvalue +# 2814| [TopLevelFunction] void vla_sizeof_test4(int, size_t) +# 2814| : +# 2814| getParameter(0): [Parameter] len1 +# 2814| Type = [IntType] int +# 2814| getParameter(1): [Parameter] len2 +# 2814| Type = [CTypedefType,Size_t] size_t +# 2814| getEntryPoint(): [BlockStmt] { ... } +# 2815| getStmt(0): [DeclStmt] declaration +# 2815| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2815| Type = [ArrayType] int[][] +# 2815| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2815| getDimensionExpr(): [VariableAccess] len1 +# 2815| Type = [IntType] int +# 2815| ValueCategory = prvalue(load) +# 2815| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2815| getDimensionExpr(): [VariableAccess] len2 +# 2815| Type = [CTypedefType,Size_t] size_t +# 2815| ValueCategory = prvalue(load) +# 2815| getStmt(3): [VlaDeclStmt] VLA declaration +# 2816| getStmt(4): [DeclStmt] declaration +# 2816| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2816| Type = [CTypedefType,Size_t] size_t +# 2816| getVariable().getInitializer(): [Initializer] initializer for z +# 2816| getExpr(): [SizeofExprOperator] sizeof() +# 2816| Type = [LongType] unsigned long +# 2816| ValueCategory = prvalue +# 2816| getExprOperand(): [ArrayExpr] access to array +# 2816| Type = [ArrayType] int[] +# 2816| ValueCategory = lvalue +# 2816| getArrayBase(): [VariableAccess] tmp1 +# 2816| Type = [ArrayType] int[][] +# 2816| ValueCategory = lvalue +# 2816| getArrayOffset(): [Literal] 1 +# 2816| Type = [IntType] int +# 2816| Value = [Literal] 1 +# 2816| ValueCategory = prvalue +# 2816| getArrayBase().getFullyConverted(): [ArrayToPointerConversion] array to pointer conversion +# 2816| Type = [PointerType] int(*)[] +# 2816| ValueCategory = prvalue +# 2816| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2816| Type = [ArrayType] int[] +# 2816| ValueCategory = lvalue +# 2817| getStmt(5): [ReturnStmt] return ... +# 2819| [TopLevelFunction] void vla_sizeof_test5(int, size_t) +# 2819| : +# 2819| getParameter(0): [Parameter] len1 +# 2819| Type = [IntType] int +# 2819| getParameter(1): [Parameter] len2 +# 2819| Type = [CTypedefType,Size_t] size_t +# 2819| getEntryPoint(): [BlockStmt] { ... } +# 2820| getStmt(0): [DeclStmt] declaration +# 2820| getDeclarationEntry(0): [VariableDeclarationEntry] definition of tmp1 +# 2820| Type = [ArrayType] int[][] +# 2820| getStmt(1): [VlaDimensionStmt] VLA dimension size +# 2820| getDimensionExpr(): [VariableAccess] len1 +# 2820| Type = [IntType] int +# 2820| ValueCategory = prvalue(load) +# 2820| getStmt(2): [VlaDimensionStmt] VLA dimension size +# 2820| getDimensionExpr(): [VariableAccess] len2 +# 2820| Type = [CTypedefType,Size_t] size_t +# 2820| ValueCategory = prvalue(load) +# 2820| getStmt(3): [VlaDeclStmt] VLA declaration +# 2821| getStmt(4): [DeclStmt] declaration +# 2821| getDeclarationEntry(0): [VariableDeclarationEntry] definition of z +# 2821| Type = [CTypedefType,Size_t] size_t +# 2821| getVariable().getInitializer(): [Initializer] initializer for z +# 2821| getExpr(): [SizeofExprOperator] sizeof() +# 2821| Type = [LongType] unsigned long +# 2821| ValueCategory = prvalue +# 2821| getExprOperand(): [ArrayExpr] access to array +# 2821| Type = [ArrayType] int[] +# 2821| ValueCategory = lvalue +# 2821| getArrayBase(): [PointerDereferenceExpr] * ... +# 2821| Type = [ArrayType] int[][] +# 2821| ValueCategory = lvalue +# 2821| getOperand(): [AddressOfExpr] & ... +# 2821| Type = [PointerType] int(*)[][] +# 2821| ValueCategory = prvalue +# 2821| getOperand(): [VariableAccess] tmp1 +# 2821| Type = [ArrayType] int[][] +# 2821| ValueCategory = lvalue +# 2821| getArrayOffset(): [Literal] 1 +# 2821| Type = [IntType] int +# 2821| Value = [Literal] 1 +# 2821| ValueCategory = prvalue +# 2821| getArrayBase().getFullyConverted(): [ParenthesisExpr] (...) +# 2821| Type = [PointerType] int(*)[] +# 2821| ValueCategory = prvalue +# 2821| getExpr(): [ArrayToPointerConversion] array to pointer conversion +# 2821| Type = [PointerType] int(*)[] +# 2821| ValueCategory = prvalue +# 2821| getExprOperand().getFullyConverted(): [ParenthesisExpr] (...) +# 2821| Type = [ArrayType] int[] +# 2821| ValueCategory = lvalue +# 2822| getStmt(5): [ReturnStmt] return ... ir23.cpp: # 1| [TopLevelFunction] bool consteval_1() # 1| : diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected index 6bf6801a48b..566cf07423b 100644 --- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected @@ -20395,6 +20395,282 @@ ir.cpp: # 2769| v2769_14(void) = AliasedUse : ~m2771_8 # 2769| v2769_15(void) = ExitFunction : +# 2774| void test_allocation_with_initializer() +# 2774| Block 0 +# 2774| v2774_1(void) = EnterFunction : +# 2774| m2774_2(unknown) = AliasedDefinition : +# 2774| m2774_3(unknown) = InitializeNonLocal : +# 2774| m2774_4(unknown) = Chi : total:m2774_2, partial:m2774_3 +# 2775| r2775_1(glval) = VariableAddress[p1] : +# 2775| r2775_2(glval) = FunctionAddress[operator new] : +# 2775| r2775_3(unsigned long) = Constant[4] : +# 2775| r2775_4(void *) = Call[operator new] : func:r2775_2, 0:r2775_3 +# 2775| m2775_5(unknown) = ^CallSideEffect : ~m2774_4 +# 2775| m2775_6(unknown) = Chi : total:m2774_4, partial:m2775_5 +# 2775| m2775_7(unknown) = ^InitializeDynamicAllocation : &:r2775_4 +# 2775| r2775_8(int *) = Convert : r2775_4 +# 2775| r2775_9(int) = Constant[42] : +# 2775| m2775_10(int) = Store[?] : &:r2775_8, r2775_9 +# 2775| m2775_11(unknown) = Chi : total:m2775_7, partial:m2775_10 +# 2775| m2775_12(int *) = Store[p1] : &:r2775_1, r2775_8 +# 2776| r2776_1(glval) = VariableAddress[p2] : +# 2776| r2776_2(glval) = FunctionAddress[operator new] : +# 2776| r2776_3(unsigned long) = Constant[8] : +# 2776| r2776_4(void *) = Call[operator new] : func:r2776_2, 0:r2776_3 +# 2776| m2776_5(unknown) = ^CallSideEffect : ~m2775_6 +# 2776| m2776_6(unknown) = Chi : total:m2775_6, partial:m2776_5 +# 2776| m2776_7(unknown) = ^InitializeDynamicAllocation : &:r2776_4 +# 2776| r2776_8(long *) = Convert : r2776_4 +# 2776| r2776_9(long) = Constant[42] : +# 2776| m2776_10(long) = Store[?] : &:r2776_8, r2776_9 +# 2776| m2776_11(unknown) = Chi : total:m2776_7, partial:m2776_10 +# 2776| m2776_12(long *) = Store[p2] : &:r2776_1, r2776_8 +# 2777| v2777_1(void) = NoOp : +# 2774| v2774_5(void) = ReturnVoid : +# 2774| v2774_6(void) = AliasedUse : ~m2776_6 +# 2774| v2774_7(void) = ExitFunction : + +# 2779| void vla_sizeof_test(int, size_t, char) +# 2779| Block 0 +# 2779| v2779_1(void) = EnterFunction : +# 2779| m2779_2(unknown) = AliasedDefinition : +# 2779| m2779_3(unknown) = InitializeNonLocal : +# 2779| m2779_4(unknown) = Chi : total:m2779_2, partial:m2779_3 +# 2779| r2779_5(glval) = VariableAddress[len1] : +# 2779| m2779_6(int) = InitializeParameter[len1] : &:r2779_5 +# 2779| r2779_7(glval) = VariableAddress[len2] : +# 2779| m2779_8(unsigned long) = InitializeParameter[len2] : &:r2779_7 +# 2779| r2779_9(glval) = VariableAddress[len3] : +# 2779| m2779_10(char) = InitializeParameter[len3] : &:r2779_9 +# 2780| r2780_1(glval) = VariableAddress[tmp1] : +# 2780| m2780_2(char[]) = Uninitialized[tmp1] : &:r2780_1 +# 2780| r2780_3(glval) = VariableAddress[len1] : +# 2780| r2780_4(int) = Load[len1] : &:r2780_3, m2779_6 +# 2780| v2780_5(void) = NoOp : +# 2781| r2781_1(glval) = VariableAddress[x] : +# 2781| r2781_2(unsigned long) = Constant[1] : +# 2781| r2781_3(unsigned long) = Convert : r2780_4 +# 2781| r2781_4(unsigned long) = Mul : r2781_2, r2781_3 +# 2781| m2781_5(unsigned long) = Store[x] : &:r2781_1, r2781_4 +# 2782| r2782_1(glval) = VariableAddress[tmp2] : +# 2782| m2782_2(int[][]) = Uninitialized[tmp2] : &:r2782_1 +# 2782| r2782_3(glval) = VariableAddress[len1] : +# 2782| r2782_4(int) = Load[len1] : &:r2782_3, m2779_6 +# 2782| r2782_5(glval) = VariableAddress[len2] : +# 2782| r2782_6(unsigned long) = Load[len2] : &:r2782_5, m2779_8 +# 2782| v2782_7(void) = NoOp : +# 2783| r2783_1(glval) = VariableAddress[y] : +# 2783| r2783_2(unsigned long) = Constant[4] : +# 2783| r2783_3(unsigned long) = Convert : r2782_4 +# 2783| r2783_4(unsigned long) = Mul : r2783_2, r2783_3 +# 2783| r2783_5(unsigned long) = CopyValue : r2782_6 +# 2783| r2783_6(unsigned long) = Mul : r2783_4, r2783_5 +# 2783| m2783_7(unsigned long) = Store[y] : &:r2783_1, r2783_6 +# 2784| r2784_1(glval) = VariableAddress[z] : +# 2784| r2784_2(unsigned long) = Constant[4] : +# 2784| r2784_3(unsigned long) = CopyValue : r2782_6 +# 2784| r2784_4(unsigned long) = Mul : r2784_2, r2784_3 +# 2784| m2784_5(unsigned long) = Store[z] : &:r2784_1, r2784_4 +# 2785| r2785_1(glval) = VariableAddress[tmp3] : +# 2785| m2785_2(int[][][]) = Uninitialized[tmp3] : &:r2785_1 +# 2785| r2785_3(glval) = VariableAddress[len1] : +# 2785| r2785_4(int) = Load[len1] : &:r2785_3, m2779_6 +# 2785| r2785_5(glval) = VariableAddress[len2] : +# 2785| r2785_6(unsigned long) = Load[len2] : &:r2785_5, m2779_8 +# 2785| r2785_7(glval) = VariableAddress[len3] : +# 2785| r2785_8(char) = Load[len3] : &:r2785_7, m2779_10 +# 2785| v2785_9(void) = NoOp : +# 2786| r2786_1(glval) = VariableAddress[w] : +# 2786| r2786_2(unsigned long) = Constant[4] : +# 2786| r2786_3(unsigned long) = Convert : r2785_4 +# 2786| r2786_4(unsigned long) = Mul : r2786_2, r2786_3 +# 2786| r2786_5(unsigned long) = CopyValue : r2785_6 +# 2786| r2786_6(unsigned long) = Mul : r2786_4, r2786_5 +# 2786| r2786_7(unsigned long) = Convert : r2785_8 +# 2786| r2786_8(unsigned long) = Mul : r2786_6, r2786_7 +# 2786| m2786_9(unsigned long) = Store[w] : &:r2786_1, r2786_8 +# 2787| r2787_1(glval) = VariableAddress[v] : +# 2787| r2787_2(unsigned long) = Constant[4] : +# 2787| r2787_3(unsigned long) = CopyValue : r2785_6 +# 2787| r2787_4(unsigned long) = Mul : r2787_2, r2787_3 +# 2787| r2787_5(unsigned long) = Convert : r2785_8 +# 2787| r2787_6(unsigned long) = Mul : r2787_4, r2787_5 +# 2787| m2787_7(unsigned long) = Store[v] : &:r2787_1, r2787_6 +# 2788| r2788_1(glval) = VariableAddress[u] : +# 2788| r2788_2(unsigned long) = Constant[4] : +# 2788| r2788_3(unsigned long) = Convert : r2785_8 +# 2788| r2788_4(unsigned long) = Mul : r2788_2, r2788_3 +# 2788| m2788_5(unsigned long) = Store[u] : &:r2788_1, r2788_4 +# 2789| r2789_1(glval) = VariableAddress[t] : +# 2789| r2789_2(unsigned long) = Constant[4] : +# 2789| m2789_3(unsigned long) = Store[t] : &:r2789_1, r2789_2 +# 2790| v2790_1(void) = NoOp : +# 2779| v2779_11(void) = ReturnVoid : +# 2779| v2779_12(void) = AliasedUse : m2779_3 +# 2779| v2779_13(void) = ExitFunction : + +# 2792| void vla_sizeof_test2(int, size_t, char) +# 2792| Block 0 +# 2792| v2792_1(void) = EnterFunction : +# 2792| m2792_2(unknown) = AliasedDefinition : +# 2792| m2792_3(unknown) = InitializeNonLocal : +# 2792| m2792_4(unknown) = Chi : total:m2792_2, partial:m2792_3 +# 2792| r2792_5(glval) = VariableAddress[len1] : +# 2792| m2792_6(int) = InitializeParameter[len1] : &:r2792_5 +# 2792| r2792_7(glval) = VariableAddress[len2] : +# 2792| m2792_8(unsigned long) = InitializeParameter[len2] : &:r2792_7 +# 2792| r2792_9(glval) = VariableAddress[len3] : +# 2792| m2792_10(char) = InitializeParameter[len3] : &:r2792_9 +# 2793| r2793_1(glval) = VariableAddress[tmp1] : +# 2793| m2793_2(int[][]) = Uninitialized[tmp1] : &:r2793_1 +# 2793| r2793_3(glval) = VariableAddress[len1] : +# 2793| r2793_4(int) = Load[len1] : &:r2793_3, m2792_6 +# 2793| r2793_5(glval) = VariableAddress[len2] : +# 2793| r2793_6(unsigned long) = Load[len2] : &:r2793_5, m2792_8 +# 2793| v2793_7(void) = NoOp : +# 2794| r2794_1(glval) = VariableAddress[z] : +# 2794| r2794_2(unsigned long) = Constant[4] : +# 2794| r2794_3(unsigned long) = CopyValue : r2793_6 +# 2794| r2794_4(unsigned long) = Mul : r2794_2, r2794_3 +# 2794| m2794_5(unsigned long) = Store[z] : &:r2794_1, r2794_4 +# 2795| r2795_1(glval) = VariableAddress[tmp2] : +# 2795| m2795_2(int[][][]) = Uninitialized[tmp2] : &:r2795_1 +# 2795| r2795_3(glval) = VariableAddress[len1] : +# 2795| r2795_4(int) = Load[len1] : &:r2795_3, m2792_6 +# 2795| r2795_5(glval) = VariableAddress[len2] : +# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, m2792_8 +# 2795| r2795_7(glval) = VariableAddress[len3] : +# 2795| r2795_8(char) = Load[len3] : &:r2795_7, m2792_10 +# 2795| v2795_9(void) = NoOp : +# 2796| r2796_1(glval) = VariableAddress[v] : +# 2796| r2796_2(unsigned long) = Constant[4] : +# 2796| r2796_3(unsigned long) = CopyValue : r2795_6 +# 2796| r2796_4(unsigned long) = Mul : r2796_2, r2796_3 +# 2796| r2796_5(unsigned long) = Convert : r2795_8 +# 2796| r2796_6(unsigned long) = Mul : r2796_4, r2796_5 +# 2796| m2796_7(unsigned long) = Store[v] : &:r2796_1, r2796_6 +# 2797| r2797_1(glval) = VariableAddress[u] : +# 2797| r2797_2(unsigned long) = Constant[4] : +# 2797| r2797_3(unsigned long) = Convert : r2795_8 +# 2797| r2797_4(unsigned long) = Mul : r2797_2, r2797_3 +# 2797| m2797_5(unsigned long) = Store[u] : &:r2797_1, r2797_4 +# 2798| r2798_1(glval) = VariableAddress[t] : +# 2798| r2798_2(unsigned long) = Constant[4] : +# 2798| m2798_3(unsigned long) = Store[t] : &:r2798_1, r2798_2 +# 2799| v2799_1(void) = NoOp : +# 2792| v2792_11(void) = ReturnVoid : +# 2792| v2792_12(void) = AliasedUse : m2792_3 +# 2792| v2792_13(void) = ExitFunction : + +# 2801| size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| Block 0 +# 2801| v2801_1(void) = EnterFunction : +# 2801| m2801_2(unknown) = AliasedDefinition : +# 2801| m2801_3(unknown) = InitializeNonLocal : +# 2801| m2801_4(unknown) = Chi : total:m2801_2, partial:m2801_3 +# 2801| r2801_5(glval) = VariableAddress[len1] : +# 2801| m2801_6(int) = InitializeParameter[len1] : &:r2801_5 +# 2801| r2801_7(glval) = VariableAddress[len2] : +# 2801| m2801_8(unsigned long) = InitializeParameter[len2] : &:r2801_7 +# 2801| r2801_9(glval) = VariableAddress[len3] : +# 2801| m2801_10(char) = InitializeParameter[len3] : &:r2801_9 +# 2801| r2801_11(glval) = VariableAddress[b] : +# 2801| m2801_12(bool) = InitializeParameter[b] : &:r2801_11 +# 2802| r2802_1(glval) = VariableAddress[len1] : +# 2802| r2802_2(int) = Load[len1] : &:r2802_1, m2801_6 +# 2802| r2802_3(glval) = VariableAddress[len2] : +# 2802| r2802_4(unsigned long) = Load[len2] : &:r2802_3, m2801_8 +# 2802| v2802_5(void) = NoOp : +# 2803| v2803_1(void) = NoOp : +# 2804| r2804_1(glval) = VariableAddress[len3] : +# 2804| r2804_2(char) = Load[len3] : &:r2804_1, m2801_10 +# 2804| v2804_3(void) = NoOp : +# 2806| r2806_1(glval) = VariableAddress[b] : +# 2806| r2806_2(bool) = Load[b] : &:r2806_1, m2801_12 +# 2806| v2806_3(void) = ConditionalBranch : r2806_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2801| Block 1 +# 2801| m2801_13(unsigned long) = Phi : from 2:m2808_7, from 3:m2811_3 +# 2801| r2801_14(glval) = VariableAddress[#return] : +# 2801| v2801_15(void) = ReturnValue : &:r2801_14, m2801_13 +# 2801| v2801_16(void) = AliasedUse : m2801_3 +# 2801| v2801_17(void) = ExitFunction : + +# 2807| Block 2 +# 2807| r2807_1(glval) = VariableAddress[tmp] : +# 2807| m2807_2(long[][][]) = Uninitialized[tmp] : &:r2807_1 +# 2807| v2807_3(void) = NoOp : +# 2808| r2808_1(glval) = VariableAddress[#return] : +# 2808| r2808_2(unsigned long) = Constant[8] : +# 2808| r2808_3(unsigned long) = Convert : r2802_2 +# 2808| r2808_4(unsigned long) = Mul : r2808_2, r2808_3 +# 2808| r2808_5(unsigned long) = CopyValue : r2802_4 +# 2808| r2808_6(unsigned long) = Mul : r2808_4, r2808_5 +# 2808| m2808_7(unsigned long) = Store[#return] : &:r2808_1, r2808_6 +#-----| Goto -> Block 1 + +# 2811| Block 3 +# 2811| r2811_1(glval) = VariableAddress[#return] : +# 2811| r2811_2(unsigned long) = Constant[0] : +# 2811| m2811_3(unsigned long) = Store[#return] : &:r2811_1, r2811_2 +#-----| Goto -> Block 1 + +# 2814| void vla_sizeof_test4(int, size_t) +# 2814| Block 0 +# 2814| v2814_1(void) = EnterFunction : +# 2814| m2814_2(unknown) = AliasedDefinition : +# 2814| m2814_3(unknown) = InitializeNonLocal : +# 2814| m2814_4(unknown) = Chi : total:m2814_2, partial:m2814_3 +# 2814| r2814_5(glval) = VariableAddress[len1] : +# 2814| m2814_6(int) = InitializeParameter[len1] : &:r2814_5 +# 2814| r2814_7(glval) = VariableAddress[len2] : +# 2814| m2814_8(unsigned long) = InitializeParameter[len2] : &:r2814_7 +# 2815| r2815_1(glval) = VariableAddress[tmp1] : +# 2815| m2815_2(int[][]) = Uninitialized[tmp1] : &:r2815_1 +# 2815| r2815_3(glval) = VariableAddress[len1] : +# 2815| r2815_4(int) = Load[len1] : &:r2815_3, m2814_6 +# 2815| r2815_5(glval) = VariableAddress[len2] : +# 2815| r2815_6(unsigned long) = Load[len2] : &:r2815_5, m2814_8 +# 2815| v2815_7(void) = NoOp : +# 2816| r2816_1(glval) = VariableAddress[z] : +# 2816| r2816_2(unsigned long) = Constant[4] : +# 2816| r2816_3(unsigned long) = CopyValue : r2815_6 +# 2816| r2816_4(unsigned long) = Mul : r2816_2, r2816_3 +# 2816| m2816_5(unsigned long) = Store[z] : &:r2816_1, r2816_4 +# 2817| v2817_1(void) = NoOp : +# 2814| v2814_9(void) = ReturnVoid : +# 2814| v2814_10(void) = AliasedUse : m2814_3 +# 2814| v2814_11(void) = ExitFunction : + +# 2819| void vla_sizeof_test5(int, size_t) +# 2819| Block 0 +# 2819| v2819_1(void) = EnterFunction : +# 2819| m2819_2(unknown) = AliasedDefinition : +# 2819| m2819_3(unknown) = InitializeNonLocal : +# 2819| m2819_4(unknown) = Chi : total:m2819_2, partial:m2819_3 +# 2819| r2819_5(glval) = VariableAddress[len1] : +# 2819| m2819_6(int) = InitializeParameter[len1] : &:r2819_5 +# 2819| r2819_7(glval) = VariableAddress[len2] : +# 2819| m2819_8(unsigned long) = InitializeParameter[len2] : &:r2819_7 +# 2820| r2820_1(glval) = VariableAddress[tmp1] : +# 2820| m2820_2(int[][]) = Uninitialized[tmp1] : &:r2820_1 +# 2820| r2820_3(glval) = VariableAddress[len1] : +# 2820| r2820_4(int) = Load[len1] : &:r2820_3, m2819_6 +# 2820| r2820_5(glval) = VariableAddress[len2] : +# 2820| r2820_6(unsigned long) = Load[len2] : &:r2820_5, m2819_8 +# 2820| v2820_7(void) = NoOp : +# 2821| r2821_1(glval) = VariableAddress[z] : +# 2821| r2821_2(unsigned long) = Constant[4] : +# 2821| r2821_3(unsigned long) = CopyValue : r2820_6 +# 2821| r2821_4(unsigned long) = Mul : r2821_2, r2821_3 +# 2821| m2821_5(unsigned long) = Store[z] : &:r2821_1, r2821_4 +# 2822| v2822_1(void) = NoOp : +# 2819| v2819_9(void) = ReturnVoid : +# 2819| v2819_10(void) = AliasedUse : m2819_3 +# 2819| v2819_11(void) = ExitFunction : + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp index 74c41c7e916..3dce0a0e1ea 100644 --- a/cpp/ql/test/library-tests/ir/ir/ir.cpp +++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp @@ -2771,4 +2771,54 @@ void test_three_way(int a, int b, ThreeWay c, ThreeWay d) { auto y = c <=> d; } +void test_allocation_with_initializer() { + int* p1 = new int(42); + long* p2 = new long(42); +} + +void vla_sizeof_test(int len1, size_t len2, char len3) { + char tmp1[len1]; + size_t x = sizeof(tmp1); + int tmp2[len1][len2]; + size_t y = sizeof(tmp2); + size_t z = sizeof(*tmp2); + int tmp3[len1][len2][len3]; + size_t w = sizeof(tmp3); + size_t v = sizeof(*tmp3); + size_t u = sizeof(**tmp3); + size_t t = sizeof(***tmp3); +} + +void vla_sizeof_test2(int len1, size_t len2, char len3) { + int tmp1[len1][len2]; + size_t z = sizeof(tmp1[1]); + int tmp2[len1][len2][len3]; + size_t v = sizeof(tmp2[1]); + size_t u = sizeof(tmp2[1][2]); + size_t t = sizeof(tmp2[1][2][3]); +} + +size_t vla_sizeof_test3(int len1, size_t len2, char len3, bool b) { + typedef long arr[len1][len2]; + typedef arr arr2; + typedef arr2 arr3[len3]; + + if (b) { + arr3 tmp; + return sizeof(tmp[1]); + } + + return 0; +} + +void vla_sizeof_test4(int len1, size_t len2) { + int tmp1[len1][len2]; + size_t z = sizeof(1[tmp1]); +} + +void vla_sizeof_test5(int len1, size_t len2) { + int tmp1[len1][len2]; + size_t z = sizeof((*&tmp1)[1]); +} + // semmle-extractor-options: -std=c++20 --clang diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected index bf4cef8c3f4..1d8f885cd15 100644 --- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected +++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected @@ -18547,6 +18547,271 @@ ir.cpp: # 2769| v2769_13(void) = AliasedUse : ~m? # 2769| v2769_14(void) = ExitFunction : +# 2774| void test_allocation_with_initializer() +# 2774| Block 0 +# 2774| v2774_1(void) = EnterFunction : +# 2774| mu2774_2(unknown) = AliasedDefinition : +# 2774| mu2774_3(unknown) = InitializeNonLocal : +# 2775| r2775_1(glval) = VariableAddress[p1] : +# 2775| r2775_2(glval) = FunctionAddress[operator new] : +# 2775| r2775_3(unsigned long) = Constant[4] : +# 2775| r2775_4(void *) = Call[operator new] : func:r2775_2, 0:r2775_3 +# 2775| mu2775_5(unknown) = ^CallSideEffect : ~m? +# 2775| mu2775_6(unknown) = ^InitializeDynamicAllocation : &:r2775_4 +# 2775| r2775_7(int *) = Convert : r2775_4 +# 2775| r2775_8(int) = Constant[42] : +# 2775| mu2775_9(int) = Store[?] : &:r2775_7, r2775_8 +# 2775| mu2775_10(int *) = Store[p1] : &:r2775_1, r2775_7 +# 2776| r2776_1(glval) = VariableAddress[p2] : +# 2776| r2776_2(glval) = FunctionAddress[operator new] : +# 2776| r2776_3(unsigned long) = Constant[8] : +# 2776| r2776_4(void *) = Call[operator new] : func:r2776_2, 0:r2776_3 +# 2776| mu2776_5(unknown) = ^CallSideEffect : ~m? +# 2776| mu2776_6(unknown) = ^InitializeDynamicAllocation : &:r2776_4 +# 2776| r2776_7(long *) = Convert : r2776_4 +# 2776| r2776_8(long) = Constant[42] : +# 2776| mu2776_9(long) = Store[?] : &:r2776_7, r2776_8 +# 2776| mu2776_10(long *) = Store[p2] : &:r2776_1, r2776_7 +# 2777| v2777_1(void) = NoOp : +# 2774| v2774_4(void) = ReturnVoid : +# 2774| v2774_5(void) = AliasedUse : ~m? +# 2774| v2774_6(void) = ExitFunction : + +# 2779| void vla_sizeof_test(int, size_t, char) +# 2779| Block 0 +# 2779| v2779_1(void) = EnterFunction : +# 2779| mu2779_2(unknown) = AliasedDefinition : +# 2779| mu2779_3(unknown) = InitializeNonLocal : +# 2779| r2779_4(glval) = VariableAddress[len1] : +# 2779| mu2779_5(int) = InitializeParameter[len1] : &:r2779_4 +# 2779| r2779_6(glval) = VariableAddress[len2] : +# 2779| mu2779_7(unsigned long) = InitializeParameter[len2] : &:r2779_6 +# 2779| r2779_8(glval) = VariableAddress[len3] : +# 2779| mu2779_9(char) = InitializeParameter[len3] : &:r2779_8 +# 2780| r2780_1(glval) = VariableAddress[tmp1] : +# 2780| mu2780_2(char[]) = Uninitialized[tmp1] : &:r2780_1 +# 2780| r2780_3(glval) = VariableAddress[len1] : +# 2780| r2780_4(int) = Load[len1] : &:r2780_3, ~m? +# 2780| v2780_5(void) = NoOp : +# 2781| r2781_1(glval) = VariableAddress[x] : +# 2781| r2781_2(unsigned long) = Constant[1] : +# 2781| r2781_3(unsigned long) = Convert : r2780_4 +# 2781| r2781_4(unsigned long) = Mul : r2781_2, r2781_3 +# 2781| mu2781_5(unsigned long) = Store[x] : &:r2781_1, r2781_4 +# 2782| r2782_1(glval) = VariableAddress[tmp2] : +# 2782| mu2782_2(int[][]) = Uninitialized[tmp2] : &:r2782_1 +# 2782| r2782_3(glval) = VariableAddress[len1] : +# 2782| r2782_4(int) = Load[len1] : &:r2782_3, ~m? +# 2782| r2782_5(glval) = VariableAddress[len2] : +# 2782| r2782_6(unsigned long) = Load[len2] : &:r2782_5, ~m? +# 2782| v2782_7(void) = NoOp : +# 2783| r2783_1(glval) = VariableAddress[y] : +# 2783| r2783_2(unsigned long) = Constant[4] : +# 2783| r2783_3(unsigned long) = Convert : r2782_4 +# 2783| r2783_4(unsigned long) = Mul : r2783_2, r2783_3 +# 2783| r2783_5(unsigned long) = CopyValue : r2782_6 +# 2783| r2783_6(unsigned long) = Mul : r2783_4, r2783_5 +# 2783| mu2783_7(unsigned long) = Store[y] : &:r2783_1, r2783_6 +# 2784| r2784_1(glval) = VariableAddress[z] : +# 2784| r2784_2(unsigned long) = Constant[4] : +# 2784| r2784_3(unsigned long) = CopyValue : r2782_6 +# 2784| r2784_4(unsigned long) = Mul : r2784_2, r2784_3 +# 2784| mu2784_5(unsigned long) = Store[z] : &:r2784_1, r2784_4 +# 2785| r2785_1(glval) = VariableAddress[tmp3] : +# 2785| mu2785_2(int[][][]) = Uninitialized[tmp3] : &:r2785_1 +# 2785| r2785_3(glval) = VariableAddress[len1] : +# 2785| r2785_4(int) = Load[len1] : &:r2785_3, ~m? +# 2785| r2785_5(glval) = VariableAddress[len2] : +# 2785| r2785_6(unsigned long) = Load[len2] : &:r2785_5, ~m? +# 2785| r2785_7(glval) = VariableAddress[len3] : +# 2785| r2785_8(char) = Load[len3] : &:r2785_7, ~m? +# 2785| v2785_9(void) = NoOp : +# 2786| r2786_1(glval) = VariableAddress[w] : +# 2786| r2786_2(unsigned long) = Constant[4] : +# 2786| r2786_3(unsigned long) = Convert : r2785_4 +# 2786| r2786_4(unsigned long) = Mul : r2786_2, r2786_3 +# 2786| r2786_5(unsigned long) = CopyValue : r2785_6 +# 2786| r2786_6(unsigned long) = Mul : r2786_4, r2786_5 +# 2786| r2786_7(unsigned long) = Convert : r2785_8 +# 2786| r2786_8(unsigned long) = Mul : r2786_6, r2786_7 +# 2786| mu2786_9(unsigned long) = Store[w] : &:r2786_1, r2786_8 +# 2787| r2787_1(glval) = VariableAddress[v] : +# 2787| r2787_2(unsigned long) = Constant[4] : +# 2787| r2787_3(unsigned long) = CopyValue : r2785_6 +# 2787| r2787_4(unsigned long) = Mul : r2787_2, r2787_3 +# 2787| r2787_5(unsigned long) = Convert : r2785_8 +# 2787| r2787_6(unsigned long) = Mul : r2787_4, r2787_5 +# 2787| mu2787_7(unsigned long) = Store[v] : &:r2787_1, r2787_6 +# 2788| r2788_1(glval) = VariableAddress[u] : +# 2788| r2788_2(unsigned long) = Constant[4] : +# 2788| r2788_3(unsigned long) = Convert : r2785_8 +# 2788| r2788_4(unsigned long) = Mul : r2788_2, r2788_3 +# 2788| mu2788_5(unsigned long) = Store[u] : &:r2788_1, r2788_4 +# 2789| r2789_1(glval) = VariableAddress[t] : +# 2789| r2789_2(unsigned long) = Constant[4] : +# 2789| mu2789_3(unsigned long) = Store[t] : &:r2789_1, r2789_2 +# 2790| v2790_1(void) = NoOp : +# 2779| v2779_10(void) = ReturnVoid : +# 2779| v2779_11(void) = AliasedUse : ~m? +# 2779| v2779_12(void) = ExitFunction : + +# 2792| void vla_sizeof_test2(int, size_t, char) +# 2792| Block 0 +# 2792| v2792_1(void) = EnterFunction : +# 2792| mu2792_2(unknown) = AliasedDefinition : +# 2792| mu2792_3(unknown) = InitializeNonLocal : +# 2792| r2792_4(glval) = VariableAddress[len1] : +# 2792| mu2792_5(int) = InitializeParameter[len1] : &:r2792_4 +# 2792| r2792_6(glval) = VariableAddress[len2] : +# 2792| mu2792_7(unsigned long) = InitializeParameter[len2] : &:r2792_6 +# 2792| r2792_8(glval) = VariableAddress[len3] : +# 2792| mu2792_9(char) = InitializeParameter[len3] : &:r2792_8 +# 2793| r2793_1(glval) = VariableAddress[tmp1] : +# 2793| mu2793_2(int[][]) = Uninitialized[tmp1] : &:r2793_1 +# 2793| r2793_3(glval) = VariableAddress[len1] : +# 2793| r2793_4(int) = Load[len1] : &:r2793_3, ~m? +# 2793| r2793_5(glval) = VariableAddress[len2] : +# 2793| r2793_6(unsigned long) = Load[len2] : &:r2793_5, ~m? +# 2793| v2793_7(void) = NoOp : +# 2794| r2794_1(glval) = VariableAddress[z] : +# 2794| r2794_2(unsigned long) = Constant[4] : +# 2794| r2794_3(unsigned long) = CopyValue : r2793_6 +# 2794| r2794_4(unsigned long) = Mul : r2794_2, r2794_3 +# 2794| mu2794_5(unsigned long) = Store[z] : &:r2794_1, r2794_4 +# 2795| r2795_1(glval) = VariableAddress[tmp2] : +# 2795| mu2795_2(int[][][]) = Uninitialized[tmp2] : &:r2795_1 +# 2795| r2795_3(glval) = VariableAddress[len1] : +# 2795| r2795_4(int) = Load[len1] : &:r2795_3, ~m? +# 2795| r2795_5(glval) = VariableAddress[len2] : +# 2795| r2795_6(unsigned long) = Load[len2] : &:r2795_5, ~m? +# 2795| r2795_7(glval) = VariableAddress[len3] : +# 2795| r2795_8(char) = Load[len3] : &:r2795_7, ~m? +# 2795| v2795_9(void) = NoOp : +# 2796| r2796_1(glval) = VariableAddress[v] : +# 2796| r2796_2(unsigned long) = Constant[4] : +# 2796| r2796_3(unsigned long) = CopyValue : r2795_6 +# 2796| r2796_4(unsigned long) = Mul : r2796_2, r2796_3 +# 2796| r2796_5(unsigned long) = Convert : r2795_8 +# 2796| r2796_6(unsigned long) = Mul : r2796_4, r2796_5 +# 2796| mu2796_7(unsigned long) = Store[v] : &:r2796_1, r2796_6 +# 2797| r2797_1(glval) = VariableAddress[u] : +# 2797| r2797_2(unsigned long) = Constant[4] : +# 2797| r2797_3(unsigned long) = Convert : r2795_8 +# 2797| r2797_4(unsigned long) = Mul : r2797_2, r2797_3 +# 2797| mu2797_5(unsigned long) = Store[u] : &:r2797_1, r2797_4 +# 2798| r2798_1(glval) = VariableAddress[t] : +# 2798| r2798_2(unsigned long) = Constant[4] : +# 2798| mu2798_3(unsigned long) = Store[t] : &:r2798_1, r2798_2 +# 2799| v2799_1(void) = NoOp : +# 2792| v2792_10(void) = ReturnVoid : +# 2792| v2792_11(void) = AliasedUse : ~m? +# 2792| v2792_12(void) = ExitFunction : + +# 2801| size_t vla_sizeof_test3(int, size_t, char, bool) +# 2801| Block 0 +# 2801| v2801_1(void) = EnterFunction : +# 2801| mu2801_2(unknown) = AliasedDefinition : +# 2801| mu2801_3(unknown) = InitializeNonLocal : +# 2801| r2801_4(glval) = VariableAddress[len1] : +# 2801| mu2801_5(int) = InitializeParameter[len1] : &:r2801_4 +# 2801| r2801_6(glval) = VariableAddress[len2] : +# 2801| mu2801_7(unsigned long) = InitializeParameter[len2] : &:r2801_6 +# 2801| r2801_8(glval) = VariableAddress[len3] : +# 2801| mu2801_9(char) = InitializeParameter[len3] : &:r2801_8 +# 2801| r2801_10(glval) = VariableAddress[b] : +# 2801| mu2801_11(bool) = InitializeParameter[b] : &:r2801_10 +# 2802| r2802_1(glval) = VariableAddress[len1] : +# 2802| r2802_2(int) = Load[len1] : &:r2802_1, ~m? +# 2802| r2802_3(glval) = VariableAddress[len2] : +# 2802| r2802_4(unsigned long) = Load[len2] : &:r2802_3, ~m? +# 2802| v2802_5(void) = NoOp : +# 2803| v2803_1(void) = NoOp : +# 2804| r2804_1(glval) = VariableAddress[len3] : +# 2804| r2804_2(char) = Load[len3] : &:r2804_1, ~m? +# 2804| v2804_3(void) = NoOp : +# 2806| r2806_1(glval) = VariableAddress[b] : +# 2806| r2806_2(bool) = Load[b] : &:r2806_1, ~m? +# 2806| v2806_3(void) = ConditionalBranch : r2806_2 +#-----| False -> Block 3 +#-----| True -> Block 2 + +# 2801| Block 1 +# 2801| r2801_12(glval) = VariableAddress[#return] : +# 2801| v2801_13(void) = ReturnValue : &:r2801_12, ~m? +# 2801| v2801_14(void) = AliasedUse : ~m? +# 2801| v2801_15(void) = ExitFunction : + +# 2807| Block 2 +# 2807| r2807_1(glval) = VariableAddress[tmp] : +# 2807| mu2807_2(long[][][]) = Uninitialized[tmp] : &:r2807_1 +# 2807| v2807_3(void) = NoOp : +# 2808| r2808_1(glval) = VariableAddress[#return] : +# 2808| r2808_2(unsigned long) = Constant[8] : +# 2808| r2808_3(unsigned long) = Convert : r2802_2 +# 2808| r2808_4(unsigned long) = Mul : r2808_2, r2808_3 +# 2808| r2808_5(unsigned long) = CopyValue : r2802_4 +# 2808| r2808_6(unsigned long) = Mul : r2808_4, r2808_5 +# 2808| mu2808_7(unsigned long) = Store[#return] : &:r2808_1, r2808_6 +#-----| Goto -> Block 1 + +# 2811| Block 3 +# 2811| r2811_1(glval) = VariableAddress[#return] : +# 2811| r2811_2(unsigned long) = Constant[0] : +# 2811| mu2811_3(unsigned long) = Store[#return] : &:r2811_1, r2811_2 +#-----| Goto -> Block 1 + +# 2814| void vla_sizeof_test4(int, size_t) +# 2814| Block 0 +# 2814| v2814_1(void) = EnterFunction : +# 2814| mu2814_2(unknown) = AliasedDefinition : +# 2814| mu2814_3(unknown) = InitializeNonLocal : +# 2814| r2814_4(glval) = VariableAddress[len1] : +# 2814| mu2814_5(int) = InitializeParameter[len1] : &:r2814_4 +# 2814| r2814_6(glval) = VariableAddress[len2] : +# 2814| mu2814_7(unsigned long) = InitializeParameter[len2] : &:r2814_6 +# 2815| r2815_1(glval) = VariableAddress[tmp1] : +# 2815| mu2815_2(int[][]) = Uninitialized[tmp1] : &:r2815_1 +# 2815| r2815_3(glval) = VariableAddress[len1] : +# 2815| r2815_4(int) = Load[len1] : &:r2815_3, ~m? +# 2815| r2815_5(glval) = VariableAddress[len2] : +# 2815| r2815_6(unsigned long) = Load[len2] : &:r2815_5, ~m? +# 2815| v2815_7(void) = NoOp : +# 2816| r2816_1(glval) = VariableAddress[z] : +# 2816| r2816_2(unsigned long) = Constant[4] : +# 2816| r2816_3(unsigned long) = CopyValue : r2815_6 +# 2816| r2816_4(unsigned long) = Mul : r2816_2, r2816_3 +# 2816| mu2816_5(unsigned long) = Store[z] : &:r2816_1, r2816_4 +# 2817| v2817_1(void) = NoOp : +# 2814| v2814_8(void) = ReturnVoid : +# 2814| v2814_9(void) = AliasedUse : ~m? +# 2814| v2814_10(void) = ExitFunction : + +# 2819| void vla_sizeof_test5(int, size_t) +# 2819| Block 0 +# 2819| v2819_1(void) = EnterFunction : +# 2819| mu2819_2(unknown) = AliasedDefinition : +# 2819| mu2819_3(unknown) = InitializeNonLocal : +# 2819| r2819_4(glval) = VariableAddress[len1] : +# 2819| mu2819_5(int) = InitializeParameter[len1] : &:r2819_4 +# 2819| r2819_6(glval) = VariableAddress[len2] : +# 2819| mu2819_7(unsigned long) = InitializeParameter[len2] : &:r2819_6 +# 2820| r2820_1(glval) = VariableAddress[tmp1] : +# 2820| mu2820_2(int[][]) = Uninitialized[tmp1] : &:r2820_1 +# 2820| r2820_3(glval) = VariableAddress[len1] : +# 2820| r2820_4(int) = Load[len1] : &:r2820_3, ~m? +# 2820| r2820_5(glval) = VariableAddress[len2] : +# 2820| r2820_6(unsigned long) = Load[len2] : &:r2820_5, ~m? +# 2820| v2820_7(void) = NoOp : +# 2821| r2821_1(glval) = VariableAddress[z] : +# 2821| r2821_2(unsigned long) = Constant[4] : +# 2821| r2821_3(unsigned long) = CopyValue : r2820_6 +# 2821| r2821_4(unsigned long) = Mul : r2821_2, r2821_3 +# 2821| mu2821_5(unsigned long) = Store[z] : &:r2821_1, r2821_4 +# 2822| v2822_1(void) = NoOp : +# 2819| v2819_8(void) = ReturnVoid : +# 2819| v2819_9(void) = AliasedUse : ~m? +# 2819| v2819_10(void) = ExitFunction : + ir23.cpp: # 1| bool consteval_1() # 1| Block 0 diff --git a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp index 7234449a4ed..0c1a98b06bb 100644 --- a/cpp/ql/test/library-tests/ir/range-analysis/test.cpp +++ b/cpp/ql/test/library-tests/ir/range-analysis/test.cpp @@ -145,4 +145,15 @@ void nonterminating_without_operands_as_ssa(X *x) { while (x->n) { x->n--; } +} + +void test_with_irreduble_cfg(int i, int x) { + if (x < i) { + } else { + goto inLoop; + } + for(; i < x; i++) { + inLoop: + range(i); // $ range="<=InitializeParameter: x+0" + } } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected b/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected index 0ddac7d27a6..5a18945cc0f 100644 --- a/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected +++ b/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected @@ -23,7 +23,7 @@ | test.c:27:17:33:1 | test.c:27:17:33:1 | CONCAT | 1 | "Semmle" | "Semmle" | | test.c:42:1:42:13 | test.c:42:1:42:13 | APPLY | 0 | top | top | | test.c:42:1:42:13 | test.c:42:1:42:13 | APPLY | 1 | 3 | 3 | -| test.c:42:1:42:13 | test.c:42:7:41:24 | APPLY -> top | 0 | 3 | 3 | +| test.c:42:1:42:13 | test.c:42:7:42:7 | APPLY -> top | 0 | 3 | 3 | | test.c:42:1:42:13 | top_and_nested.h:2:16:2:24 | APPLY -> top -> nested | 0 | 3 | | | test.c:42:1:42:13 | top_and_nested.h:3:16:3:30 | APPLY -> top -> nested | 0 | 2 + (3) | | | test.c:47:1:47:23 | test.c:45:15:45:22 | DECLARE_STRING -> ID | 0 | string1 | string1 | @@ -49,7 +49,7 @@ | test.c:82:1:82:4 | test.c:82:1:82:4 | ID | 0 | | | | test.c:84:5:84:20 | test.c:84:5:84:20 | APPLY | 0 | ID | ID | | test.c:84:5:84:20 | test.c:84:5:84:20 | APPLY | 1 | ID(1) | 1 | -| test.c:84:5:84:20 | test.c:84:11:41:24 | APPLY -> ID | 0 | 1 | 1 | +| test.c:84:5:84:20 | test.c:84:11:84:11 | APPLY -> ID | 0 | 1 | 1 | | test.c:84:5:84:20 | test.c:84:15:84:19 | APPLY -> ID | 0 | 1 | 1 | | test.c:85:21:85:40 | test.c:85:21:85:40 | CMD_LINE_MACRO | 0 | 5 | 5 | | test.c:85:21:85:40 | test.c:85:21:85:40 | CMD_LINE_MACRO | 1 | 6 | 6 | diff --git a/cpp/ql/test/library-tests/permissive/accesses.expected b/cpp/ql/test/library-tests/permissive/accesses.expected index f3e66dcedaf..e69de29bb2d 100644 --- a/cpp/ql/test/library-tests/permissive/accesses.expected +++ b/cpp/ql/test/library-tests/permissive/accesses.expected @@ -1 +0,0 @@ -| permissive.cpp:6:5:6:7 | str | diff --git a/cpp/ql/test/library-tests/permissive/calls.expected b/cpp/ql/test/library-tests/permissive/calls.expected index 9d780e76405..e69de29bb2d 100644 --- a/cpp/ql/test/library-tests/permissive/calls.expected +++ b/cpp/ql/test/library-tests/permissive/calls.expected @@ -1 +0,0 @@ -| permissive.cpp:6:3:6:3 | call to f | permissive.cpp:2:13:2:13 | f | diff --git a/cpp/ql/test/library-tests/permissive/permissive.cpp b/cpp/ql/test/library-tests/permissive/permissive.cpp deleted file mode 100644 index 15f5b94ef61..00000000000 --- a/cpp/ql/test/library-tests/permissive/permissive.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// semmle-extractor-options: --edg --permissive -static void f(char* foo) {} - -static void g(void) { - const char* str = "foo"; - f(str); -} - diff --git a/cpp/ql/test/library-tests/preprocessor/preprocessor/preproc.expected b/cpp/ql/test/library-tests/preprocessor/preprocessor/preproc.expected index 7c448ba6550..e9198ba5ea0 100644 --- a/cpp/ql/test/library-tests/preprocessor/preprocessor/preproc.expected +++ b/cpp/ql/test/library-tests/preprocessor/preprocessor/preproc.expected @@ -1,101 +1,101 @@ -| a.h:0:0:0:0 | a.h | 1 | 1 | 1 | 19 | IncludeNext | "a.h" | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 3 | 1 | 3 | 11 | Macro | BAR | | -| pp23.cpp:0:0:0:0 | pp23.cpp | 5 | 1 | 5 | 10 | PreprocessorIfdef | FOO | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 7 | 1 | 7 | 12 | PreprocessorElifdef | BAR | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 8 | 1 | 8 | 16 | PreprocessorWarning | C++23 2 | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 9 | 1 | 9 | 6 | PreprocessorEndif | N/A | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 11 | 1 | 11 | 10 | PreprocessorIfdef | FOO | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 13 | 1 | 13 | 13 | PreprocessorElifndef | FOO | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 14 | 1 | 14 | 16 | PreprocessorWarning | C++23 3 | N/A | -| pp23.cpp:0:0:0:0 | pp23.cpp | 15 | 1 | 15 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 1 | 1 | 1 | 16 | PreprocessorIf | defined(FOO) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 3 | 1 | 3 | 19 | PreprocessorElif | !defined(BAR) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 4 | 1 | 4 | 11 | Macro | BAR | | -| pp.cpp:0:0:0:0 | pp.cpp | 5 | 1 | 5 | 17 | Macro | BAR_val | 1 | -| pp.cpp:0:0:0:0 | pp.cpp | 6 | 1 | 6 | 24 | Macro | BAR_fn() | BAR_val | -| pp.cpp:0:0:0:0 | pp.cpp | 7 | 1 | 7 | 5 | PreprocessorElse | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 9 | 1 | 9 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 11 | 1 | 11 | 10 | PreprocessorUndef | BAR | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 12 | 1 | 12 | 68 | Macro | SCARY(a,aa,aaah) | (aa ) | -| pp.cpp:0:0:0:0 | pp.cpp | 13 | 1 | 13 | 63 | Macro | LOG(fmt,__VA_ARGS__...) | printf("Warning: %s", fmt, __VA__ARGS__) | -| pp.cpp:0:0:0:0 | pp.cpp | 14 | 1 | 14 | 15 | Include | "pp.h" | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 16 | 1 | 16 | 5 | PreprocessorIf | 0 | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 17 | 1 | 17 | 5 | PreprocessorElse | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 18 | 1 | 18 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 20 | 1 | 20 | 5 | PreprocessorIf | 1 | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 21 | 1 | 21 | 5 | PreprocessorElse | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 22 | 1 | 22 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 24 | 1 | 24 | 13 | Import | "a.h" | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 30 | 2 | 30 | 32 | Macro | MACRO_FUNCTIONCONTEXT | 1 | -| pp.cpp:0:0:0:0 | pp.cpp | 36 | 2 | 36 | 29 | Macro | MACRO_CLASSCONTEXT | 2 | -| pp.cpp:0:0:0:0 | pp.cpp | 42 | 2 | 42 | 40 | Macro | MACRO_TEMPLATEFUNCTIONCONTEXT | 3 | -| pp.cpp:0:0:0:0 | pp.cpp | 49 | 2 | 49 | 37 | Macro | MACRO_TEMPLATECLASSCONTEXT | 4 | -| pp.cpp:0:0:0:0 | pp.cpp | 50 | 2 | 50 | 48 | Macro | MACRO_TEMPLATECLASSCONTEXT_REFERENCED | 5 | -| pp.cpp:0:0:0:0 | pp.cpp | 54 | 3 | 54 | 39 | Macro | MACRO_TEMPLATEMETHODCONTEXT | 6 | -| pp.cpp:0:0:0:0 | pp.cpp | 57 | 1 | 57 | 21 | PreprocessorIfdef | INSTANTIATION | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 59 | 1 | 59 | 6 | PreprocessorElse | | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 60 | 3 | 60 | 21 | Macro | IN_TEMPLATE | | -| pp.cpp:0:0:0:0 | pp.cpp | 61 | 1 | 61 | 7 | PreprocessorEndif | | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 69 | 1 | 69 | 21 | Macro | INSTANTIATION | | -| pp.cpp:0:0:0:0 | pp.cpp | 72 | 1 | 72 | 11 | Macro | BAR | | -| pp.cpp:0:0:0:0 | pp.cpp | 74 | 1 | 75 | 14 | PreprocessorIf | defined(BAR) && defined(BAR) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 76 | 1 | 76 | 20 | PreprocessorWarning | BAR defined | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 77 | 1 | 77 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 79 | 1 | 80 | 26 | PreprocessorIf | defined MACROTHREE && (defined(MACROONE)) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 81 | 1 | 81 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 83 | 1 | 83 | 26 | PreprocessorIf | defined SIMPLE_COMMENT | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 85 | 1 | 85 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 87 | 1 | 88 | 16 | PreprocessorIf | defined(FOO) && defined(BAR) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 90 | 1 | 90 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 92 | 1 | 94 | 17 | PreprocessorIf | defined(FOO) && defined(BAR) && !defined(BAZ) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 96 | 1 | 96 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 98 | 1 | 98 | 13 | Macro | FOO | 8 | -| pp.cpp:0:0:0:0 | pp.cpp | 99 | 1 | 99 | 13 | Macro | BAR | 2 | -| pp.cpp:0:0:0:0 | pp.cpp | 100 | 1 | 100 | 13 | Macro | BAZ | 4 | -| pp.cpp:0:0:0:0 | pp.cpp | 101 | 1 | 104 | 8 | PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 106 | 1 | 106 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 109 | 1 | 111 | 13 | PreprocessorIf | defined(FOO) && defined(BAR) && defined(BAZ) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 112 | 1 | 112 | 29 | Macro | CONDITIONAL_MACRO_4 | 4 | -| pp.cpp:0:0:0:0 | pp.cpp | 113 | 1 | 113 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 116 | 1 | 116 | 39 | PreprocessorIf | defined SIMPLE_COMMENT | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 118 | 1 | 118 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 120 | 1 | 120 | 12 | PreprocessorWarning | foo | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 122 | 1 | 122 | 12 | PreprocessorWarning | foo | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 126 | 1 | 126 | 12 | PreprocessorWarning | foo | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 129 | 1 | 129 | 12 | PreprocessorWarning | foo | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 134 | 1 | 134 | 13 | Macro | FOO | 8 | -| pp.cpp:0:0:0:0 | pp.cpp | 135 | 1 | 135 | 13 | Macro | BAR | 2 | -| pp.cpp:0:0:0:0 | pp.cpp | 136 | 1 | 136 | 13 | Macro | BAZ | 4 | -| pp.cpp:0:0:0:0 | pp.cpp | 137 | 1 | 142 | 8 | PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 144 | 1 | 144 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 146 | 1 | 146 | 11 | Macro | X | 1 | -| pp.cpp:0:0:0:0 | pp.cpp | 147 | 1 | 147 | 11 | Macro | Y | 2 | -| pp.cpp:0:0:0:0 | pp.cpp | 148 | 1 | 149 | 36 | PreprocessorIf | defined(X) && defined(Y) | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 151 | 1 | 151 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 153 | 1 | 157 | 3 | PreprocessorWarning | FOO BAR | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 160 | 1 | 160 | 12 | PreprocessorWarning | foo | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 166 | 1 | 166 | 22 | PreprocessorIf | A &&B | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 167 | 1 | 167 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 170 | 1 | 170 | 20 | PreprocessorIf | A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 171 | 1 | 171 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 173 | 1 | 175 | 6 | PreprocessorIf | A && B | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 176 | 1 | 176 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 179 | 1 | 183 | 9 | PreprocessorIfdef | FOOBAR | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 185 | 1 | 185 | 5 | PreprocessorElse | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 186 | 1 | 186 | 10 | PreprocessorWarning | b | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 187 | 1 | 187 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 190 | 1 | 194 | 9 | PreprocessorIf | FOOBAR | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 195 | 1 | 195 | 6 | PreprocessorEndif | N/A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 197 | 1 | 197 | 18 | PreprocessorIf | A | N/A | -| pp.cpp:0:0:0:0 | pp.cpp | 198 | 1 | 198 | 6 | PreprocessorEndif | N/A | N/A | -| pp.h:0:0:0:0 | pp.h | 1 | 1 | 1 | 12 | PreprocessorPragma | once | N/A | -| pp.h:0:0:0:0 | pp.h | 2 | 1 | 2 | 29 | PreprocessorWarning | "This should happen" | N/A | -| pp.h:0:0:0:0 | pp.h | 3 | 1 | 3 | 27 | PreprocessorLine | 33 "emerald_city.h" | N/A | -| pp.h:0:0:0:0 | pp.h | 4 | 1 | 4 | 30 | PreprocessorPragma | byte_order(big_endian) | N/A | -| pp.h:0:0:0:0 | pp.h | 5 | 1 | 5 | 33 | PreprocessorWarning | "Not in Kansas any more" | N/A | -| pp.h:0:0:0:0 | pp.h | 7 | 1 | 11 | 8 | Macro | MULTILINE | world a long | -| pp.h:0:0:0:0 | pp.h | 13 | 1 | 14 | 11 | PreprocessorUndef | MULTILINE | N/A | -| pp.h:0:0:0:0 | pp.h | 16 | 1 | 17 | 8 | Include | "pp.h" | N/A | -| ppms.cpp:0:0:0:0 | ppms.cpp | 3 | 1 | 3 | 18 | TypeLibraryImport | "test.tlb" | N/A | -| test.tlh:0:0:0:0 | test.tlh | 1 | 1 | 1 | 12 | PreprocessorPragma | once | N/A | -| test.tlh:0:0:0:0 | test.tlh | 3 | 1 | 3 | 21 | PreprocessorWarning | type library | N/A | +| a.h:0:0:0:0 | a.h | 1 | 1 | 1 | 19 | GuardConditionImpl, IncludeNext | "a.h" | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 3 | 1 | 3 | 11 | GuardConditionImpl, Macro | BAR | | +| pp23.cpp:0:0:0:0 | pp23.cpp | 5 | 1 | 5 | 10 | GuardConditionImpl, PreprocessorIfdef | FOO | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 7 | 1 | 7 | 12 | GuardConditionImpl, PreprocessorElifdef | BAR | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 8 | 1 | 8 | 16 | GuardConditionImpl, PreprocessorWarning | C++23 2 | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 9 | 1 | 9 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 11 | 1 | 11 | 10 | GuardConditionImpl, PreprocessorIfdef | FOO | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 13 | 1 | 13 | 13 | GuardConditionImpl, PreprocessorElifndef | FOO | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 14 | 1 | 14 | 16 | GuardConditionImpl, PreprocessorWarning | C++23 3 | N/A | +| pp23.cpp:0:0:0:0 | pp23.cpp | 15 | 1 | 15 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 1 | 1 | 1 | 16 | GuardConditionImpl, PreprocessorIf | defined(FOO) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 3 | 1 | 3 | 19 | GuardConditionImpl, PreprocessorElif | !defined(BAR) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 4 | 1 | 4 | 11 | GuardConditionImpl, Macro | BAR | | +| pp.cpp:0:0:0:0 | pp.cpp | 5 | 1 | 5 | 17 | GuardConditionImpl, Macro | BAR_val | 1 | +| pp.cpp:0:0:0:0 | pp.cpp | 6 | 1 | 6 | 24 | GuardConditionImpl, Macro | BAR_fn() | BAR_val | +| pp.cpp:0:0:0:0 | pp.cpp | 7 | 1 | 7 | 5 | GuardConditionImpl, PreprocessorElse | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 9 | 1 | 9 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 11 | 1 | 11 | 10 | GuardConditionImpl, PreprocessorUndef | BAR | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 12 | 1 | 12 | 68 | GuardConditionImpl, Macro | SCARY(a,aa,aaah) | (aa ) | +| pp.cpp:0:0:0:0 | pp.cpp | 13 | 1 | 13 | 63 | GuardConditionImpl, Macro | LOG(fmt,__VA_ARGS__...) | printf("Warning: %s", fmt, __VA__ARGS__) | +| pp.cpp:0:0:0:0 | pp.cpp | 14 | 1 | 14 | 15 | GuardConditionImpl, Include | "pp.h" | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 16 | 1 | 16 | 5 | GuardConditionImpl, PreprocessorIf | 0 | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 17 | 1 | 17 | 5 | GuardConditionImpl, PreprocessorElse | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 18 | 1 | 18 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 20 | 1 | 20 | 5 | GuardConditionImpl, PreprocessorIf | 1 | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 21 | 1 | 21 | 5 | GuardConditionImpl, PreprocessorElse | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 22 | 1 | 22 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 24 | 1 | 24 | 13 | GuardConditionImpl, Import | "a.h" | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 30 | 2 | 30 | 32 | GuardConditionImpl, Macro | MACRO_FUNCTIONCONTEXT | 1 | +| pp.cpp:0:0:0:0 | pp.cpp | 36 | 2 | 36 | 29 | GuardConditionImpl, Macro | MACRO_CLASSCONTEXT | 2 | +| pp.cpp:0:0:0:0 | pp.cpp | 42 | 2 | 42 | 40 | GuardConditionImpl, Macro | MACRO_TEMPLATEFUNCTIONCONTEXT | 3 | +| pp.cpp:0:0:0:0 | pp.cpp | 49 | 2 | 49 | 37 | GuardConditionImpl, Macro | MACRO_TEMPLATECLASSCONTEXT | 4 | +| pp.cpp:0:0:0:0 | pp.cpp | 50 | 2 | 50 | 48 | GuardConditionImpl, Macro | MACRO_TEMPLATECLASSCONTEXT_REFERENCED | 5 | +| pp.cpp:0:0:0:0 | pp.cpp | 54 | 3 | 54 | 39 | GuardConditionImpl, Macro | MACRO_TEMPLATEMETHODCONTEXT | 6 | +| pp.cpp:0:0:0:0 | pp.cpp | 57 | 1 | 57 | 21 | GuardConditionImpl, PreprocessorIfdef | INSTANTIATION | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 59 | 1 | 59 | 6 | GuardConditionImpl, PreprocessorElse | | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 60 | 3 | 60 | 21 | GuardConditionImpl, Macro | IN_TEMPLATE | | +| pp.cpp:0:0:0:0 | pp.cpp | 61 | 1 | 61 | 7 | GuardConditionImpl, PreprocessorEndif | | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 69 | 1 | 69 | 21 | GuardConditionImpl, Macro | INSTANTIATION | | +| pp.cpp:0:0:0:0 | pp.cpp | 72 | 1 | 72 | 11 | GuardConditionImpl, Macro | BAR | | +| pp.cpp:0:0:0:0 | pp.cpp | 74 | 1 | 75 | 14 | GuardConditionImpl, PreprocessorIf | defined(BAR) && defined(BAR) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 76 | 1 | 76 | 20 | GuardConditionImpl, PreprocessorWarning | BAR defined | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 77 | 1 | 77 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 79 | 1 | 80 | 26 | GuardConditionImpl, PreprocessorIf | defined MACROTHREE && (defined(MACROONE)) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 81 | 1 | 81 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 83 | 1 | 83 | 26 | GuardConditionImpl, PreprocessorIf | defined SIMPLE_COMMENT | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 85 | 1 | 85 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 87 | 1 | 88 | 16 | GuardConditionImpl, PreprocessorIf | defined(FOO) && defined(BAR) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 90 | 1 | 90 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 92 | 1 | 94 | 17 | GuardConditionImpl, PreprocessorIf | defined(FOO) && defined(BAR) && !defined(BAZ) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 96 | 1 | 96 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 98 | 1 | 98 | 13 | GuardConditionImpl, Macro | FOO | 8 | +| pp.cpp:0:0:0:0 | pp.cpp | 99 | 1 | 99 | 13 | GuardConditionImpl, Macro | BAR | 2 | +| pp.cpp:0:0:0:0 | pp.cpp | 100 | 1 | 100 | 13 | GuardConditionImpl, Macro | BAZ | 4 | +| pp.cpp:0:0:0:0 | pp.cpp | 101 | 1 | 104 | 8 | GuardConditionImpl, PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 106 | 1 | 106 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 109 | 1 | 111 | 13 | GuardConditionImpl, PreprocessorIf | defined(FOO) && defined(BAR) && defined(BAZ) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 112 | 1 | 112 | 29 | GuardConditionImpl, Macro | CONDITIONAL_MACRO_4 | 4 | +| pp.cpp:0:0:0:0 | pp.cpp | 113 | 1 | 113 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 116 | 1 | 116 | 39 | GuardConditionImpl, PreprocessorIf | defined SIMPLE_COMMENT | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 118 | 1 | 118 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 120 | 1 | 120 | 12 | GuardConditionImpl, PreprocessorWarning | foo | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 122 | 1 | 122 | 12 | GuardConditionImpl, PreprocessorWarning | foo | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 126 | 1 | 126 | 12 | GuardConditionImpl, PreprocessorWarning | foo | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 129 | 1 | 129 | 12 | GuardConditionImpl, PreprocessorWarning | foo | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 134 | 1 | 134 | 13 | GuardConditionImpl, Macro | FOO | 8 | +| pp.cpp:0:0:0:0 | pp.cpp | 135 | 1 | 135 | 13 | GuardConditionImpl, Macro | BAR | 2 | +| pp.cpp:0:0:0:0 | pp.cpp | 136 | 1 | 136 | 13 | GuardConditionImpl, Macro | BAZ | 4 | +| pp.cpp:0:0:0:0 | pp.cpp | 137 | 1 | 142 | 8 | GuardConditionImpl, PreprocessorIf | ((FOO / BAR) == 4) && ((BAZ * QUX) > 10) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 144 | 1 | 144 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 146 | 1 | 146 | 11 | GuardConditionImpl, Macro | X | 1 | +| pp.cpp:0:0:0:0 | pp.cpp | 147 | 1 | 147 | 11 | GuardConditionImpl, Macro | Y | 2 | +| pp.cpp:0:0:0:0 | pp.cpp | 148 | 1 | 149 | 36 | GuardConditionImpl, PreprocessorIf | defined(X) && defined(Y) | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 151 | 1 | 151 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 153 | 1 | 157 | 3 | GuardConditionImpl, PreprocessorWarning | FOO BAR | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 160 | 1 | 160 | 12 | GuardConditionImpl, PreprocessorWarning | foo | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 166 | 1 | 166 | 22 | GuardConditionImpl, PreprocessorIf | A &&B | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 167 | 1 | 167 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 170 | 1 | 170 | 20 | GuardConditionImpl, PreprocessorIf | A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 171 | 1 | 171 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 173 | 1 | 175 | 6 | GuardConditionImpl, PreprocessorIf | A && B | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 176 | 1 | 176 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 179 | 1 | 183 | 9 | GuardConditionImpl, PreprocessorIfdef | FOOBAR | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 185 | 1 | 185 | 5 | GuardConditionImpl, PreprocessorElse | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 186 | 1 | 186 | 10 | GuardConditionImpl, PreprocessorWarning | b | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 187 | 1 | 187 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 190 | 1 | 194 | 9 | GuardConditionImpl, PreprocessorIf | FOOBAR | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 195 | 1 | 195 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 197 | 1 | 197 | 18 | GuardConditionImpl, PreprocessorIf | A | N/A | +| pp.cpp:0:0:0:0 | pp.cpp | 198 | 1 | 198 | 6 | GuardConditionImpl, PreprocessorEndif | N/A | N/A | +| pp.h:0:0:0:0 | pp.h | 1 | 1 | 1 | 12 | GuardConditionImpl, PreprocessorPragma | once | N/A | +| pp.h:0:0:0:0 | pp.h | 2 | 1 | 2 | 29 | GuardConditionImpl, PreprocessorWarning | "This should happen" | N/A | +| pp.h:0:0:0:0 | pp.h | 3 | 1 | 3 | 27 | GuardConditionImpl, PreprocessorLine | 33 "emerald_city.h" | N/A | +| pp.h:0:0:0:0 | pp.h | 4 | 1 | 4 | 30 | GuardConditionImpl, PreprocessorPragma | byte_order(big_endian) | N/A | +| pp.h:0:0:0:0 | pp.h | 5 | 1 | 5 | 33 | GuardConditionImpl, PreprocessorWarning | "Not in Kansas any more" | N/A | +| pp.h:0:0:0:0 | pp.h | 7 | 1 | 11 | 8 | GuardConditionImpl, Macro | MULTILINE | world a long | +| pp.h:0:0:0:0 | pp.h | 13 | 1 | 14 | 11 | GuardConditionImpl, PreprocessorUndef | MULTILINE | N/A | +| pp.h:0:0:0:0 | pp.h | 16 | 1 | 17 | 8 | GuardConditionImpl, Include | "pp.h" | N/A | +| ppms.cpp:0:0:0:0 | ppms.cpp | 3 | 1 | 3 | 18 | GuardConditionImpl, TypeLibraryImport | "test.tlb" | N/A | +| test.tlh:0:0:0:0 | test.tlh | 1 | 1 | 1 | 12 | GuardConditionImpl, PreprocessorPragma | once | N/A | +| test.tlh:0:0:0:0 | test.tlh | 3 | 1 | 3 | 21 | GuardConditionImpl, PreprocessorWarning | type library | N/A | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c index db7c71e0050..26e6a49e6f6 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c @@ -700,7 +700,7 @@ void guard_with_exit(int x, int y) { // This test ensures that we correctly identify // that the upper bound for y is max_int when calling `out(y)`. - // The RangeSsa will place guardPhy on `out(y)`, and consequently there is no + // The RangeSsa will place guardPhi on `out(y)`, and consequently there is no // frontier phi node at out(y). } @@ -708,7 +708,7 @@ void test(int x) { if (x >= 10) { return; } - // The basic below has two predecessors. + // The basic block below has two predecessors. label: out(x); goto label; diff --git a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected index b516aa0ce87..76adedb8f05 100644 --- a/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected +++ b/cpp/ql/test/library-tests/syntax-zoo/dataflow-consistency.expected @@ -48,21 +48,10 @@ argHasPostUpdate | ir.cpp:623:5:623:5 | r | ArgumentNode is missing PostUpdateNode. | | ir.cpp:625:5:625:5 | s | ArgumentNode is missing PostUpdateNode. | postWithInFlow -| VacuousDestructorCall.cpp:10:22:10:22 | i [inner post update] | PostUpdateNode should not be the target of local flow. | | allocators.cpp:4:18:4:20 | m_x [post update] | PostUpdateNode should not be the target of local flow. | | allocators.cpp:4:24:4:26 | m_y [post update] | PostUpdateNode should not be the target of local flow. | | assignexpr.cpp:11:4:11:4 | i [post update] | PostUpdateNode should not be the target of local flow. | -| builtin.c:34:23:34:31 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. | -| builtin.c:39:37:39:45 | carry_out [inner post update] | PostUpdateNode should not be the target of local flow. | -| builtin.c:43:41:43:49 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. | -| builtin.c:51:30:51:38 | staticint [inner post update] | PostUpdateNode should not be the target of local flow. | -| builtin.c:54:29:54:38 | atomic_int [inner post update] | PostUpdateNode should not be the target of local flow. | | condition_decls.cpp:3:5:3:9 | m_ptr [post update] | PostUpdateNode should not be the target of local flow. | -| condition_decls.cpp:17:11:17:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| condition_decls.cpp:20:11:20:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| condition_decls.cpp:28:11:28:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| condition_decls.cpp:31:11:31:15 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | -| condition_decls.cpp:34:9:34:13 | m_ptr [inner post update] | PostUpdateNode should not be the target of local flow. | | conditional_destructors.cpp:6:13:6:15 | val [post update] | PostUpdateNode should not be the target of local flow. | | conditional_destructors.cpp:18:13:18:15 | val [post update] | PostUpdateNode should not be the target of local flow. | | cpp11.cpp:7:7:7:8 | el [post update] | PostUpdateNode should not be the target of local flow. | @@ -70,26 +59,16 @@ postWithInFlow | cpp11.cpp:82:11:82:14 | call to Val | PostUpdateNode should not be the target of local flow. | | cpp11.cpp:82:45:82:48 | call to Val | PostUpdateNode should not be the target of local flow. | | cpp11.cpp:82:51:82:51 | call to Val | PostUpdateNode should not be the target of local flow. | -| ir.cpp:177:5:177:5 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:177:5:177:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:178:5:178:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:178:7:178:7 | p [inner post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:183:5:183:5 | a [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:183:5:183:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:184:5:184:8 | access to array [post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:184:7:184:7 | a [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:342:5:342:6 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:342:6:342:6 | p [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:428:8:428:8 | x [post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:429:8:429:8 | y [post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:644:15:644:17 | m_a [post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:645:11:645:14 | this [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:645:17:645:19 | m_a [post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:646:9:646:11 | m_a [post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:655:11:655:14 | this [inner post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:747:8:747:8 | base_s [inner post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:756:8:756:8 | middle_s [inner post update] | PostUpdateNode should not be the target of local flow. | -| ir.cpp:765:8:765:8 | derived_s [inner post update] | PostUpdateNode should not be the target of local flow. | | ir.cpp:811:7:811:13 | call to Base | PostUpdateNode should not be the target of local flow. | | ir.cpp:812:7:812:26 | call to Base | PostUpdateNode should not be the target of local flow. | | ir.cpp:825:7:825:13 | call to Base | PostUpdateNode should not be the target of local flow. | @@ -97,7 +76,6 @@ postWithInFlow | misc.c:130:7:130:7 | i [post update] | PostUpdateNode should not be the target of local flow. | | misc.c:131:9:131:9 | i [post update] | PostUpdateNode should not be the target of local flow. | | misc.c:220:3:220:5 | * ... [post update] | PostUpdateNode should not be the target of local flow. | -| misc.c:220:4:220:5 | sp [inner post update] | PostUpdateNode should not be the target of local flow. | | static_init_templates.cpp:3:2:3:4 | ref [post update] | PostUpdateNode should not be the target of local flow. | | static_init_templates.cpp:21:2:21:4 | val [post update] | PostUpdateNode should not be the target of local flow. | | try_catch.cpp:7:8:7:8 | call to exception | PostUpdateNode should not be the target of local flow. | diff --git a/cpp/ql/test/library-tests/typedefs/Typedefs2.expected b/cpp/ql/test/library-tests/typedefs/Typedefs2.expected index 8645ce97fcd..d83c74bb55e 100644 --- a/cpp/ql/test/library-tests/typedefs/Typedefs2.expected +++ b/cpp/ql/test/library-tests/typedefs/Typedefs2.expected @@ -1,2 +1,2 @@ -| typedefs.cpp:6:6:6:7 | f1 | typedefs.cpp:8:15:8:18 | TYPE | CTypedefType, LocalTypedefType | -| typedefs.cpp:6:6:6:7 | f1 | typedefs.cpp:9:9:9:9 | D | DirectAccessHolder, LocalClass, MetricClass, StructLikeClass | +| typedefs.cpp:6:6:6:7 | f1 | typedefs.cpp:8:15:8:18 | TYPE | CTypedefType, GuardConditionImpl, LocalTypedefType | +| typedefs.cpp:6:6:6:7 | f1 | typedefs.cpp:9:9:9:9 | D | DirectAccessHolder, GuardConditionImpl, LocalClass, MetricClass, StructLikeClass | diff --git a/cpp/ql/test/library-tests/types/__wchar_t/wchar_t.expected b/cpp/ql/test/library-tests/types/__wchar_t/wchar_t.expected index d4c429faf17..d7faa82d924 100644 --- a/cpp/ql/test/library-tests/types/__wchar_t/wchar_t.expected +++ b/cpp/ql/test/library-tests/types/__wchar_t/wchar_t.expected @@ -1,3 +1,3 @@ -| file://:0:0:0:0 | __wchar_t * | IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | Wchar_t, WideCharType | -| file://:0:0:0:0 | const __wchar_t | SpecifiedType | Wchar_t, WideCharType | -| file://:0:0:0:0 | wchar_t | Wchar_t, WideCharType | | +| file://:0:0:0:0 | __wchar_t * | GuardConditionImpl, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | GuardConditionImpl, Wchar_t, WideCharType | +| file://:0:0:0:0 | const __wchar_t | GuardConditionImpl, SpecifiedType | GuardConditionImpl, Wchar_t, WideCharType | +| file://:0:0:0:0 | wchar_t | GuardConditionImpl, Wchar_t, WideCharType | | diff --git a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fastestminimumwidth.expected b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fastestminimumwidth.expected index 13fe25a4819..5eb5868fd8b 100644 --- a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fastestminimumwidth.expected +++ b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fastestminimumwidth.expected @@ -1,8 +1,8 @@ -| cstd_types.cpp:47:13:47:15 | if8 | CTypedefType, FastestMinimumWidthIntegralType, Int_fast8_t | -| cstd_types.cpp:48:14:48:17 | if16 | CTypedefType, FastestMinimumWidthIntegralType, Int_fast16_t | -| cstd_types.cpp:49:14:49:17 | if32 | CTypedefType, FastestMinimumWidthIntegralType, Int_fast32_t | -| cstd_types.cpp:50:14:50:17 | if64 | CTypedefType, FastestMinimumWidthIntegralType, Int_fast64_t | -| cstd_types.cpp:51:14:51:16 | uf8 | CTypedefType, FastestMinimumWidthIntegralType, UInt_fast8_t | -| cstd_types.cpp:52:15:52:18 | uf16 | CTypedefType, FastestMinimumWidthIntegralType, UInt_fast16_t | -| cstd_types.cpp:53:15:53:18 | uf32 | CTypedefType, FastestMinimumWidthIntegralType, UInt_fast32_t | -| cstd_types.cpp:54:15:54:18 | uf64 | CTypedefType, FastestMinimumWidthIntegralType, UInt_fast64_t | \ No newline at end of file +| cstd_types.cpp:47:13:47:15 | if8 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, Int_fast8_t | +| cstd_types.cpp:48:14:48:17 | if16 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, Int_fast16_t | +| cstd_types.cpp:49:14:49:17 | if32 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, Int_fast32_t | +| cstd_types.cpp:50:14:50:17 | if64 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, Int_fast64_t | +| cstd_types.cpp:51:14:51:16 | uf8 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, UInt_fast8_t | +| cstd_types.cpp:52:15:52:18 | uf16 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, UInt_fast16_t | +| cstd_types.cpp:53:15:53:18 | uf32 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, UInt_fast32_t | +| cstd_types.cpp:54:15:54:18 | uf64 | CTypedefType, FastestMinimumWidthIntegralType, GuardConditionImpl, UInt_fast64_t | diff --git a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidth.expected b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidth.expected index d1c64343636..efa8890d820 100644 --- a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidth.expected +++ b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidth.expected @@ -1,8 +1,8 @@ -| cstd_types.cpp:31:8:31:9 | i8 | CTypedefType, FixedWidthIntegralType, Int8_t | -| cstd_types.cpp:32:9:32:11 | i16 | CTypedefType, FixedWidthIntegralType, Int16_t | -| cstd_types.cpp:33:9:33:11 | i32 | CTypedefType, FixedWidthIntegralType, Int32_t | -| cstd_types.cpp:34:9:34:11 | i64 | CTypedefType, FixedWidthIntegralType, Int64_t | -| cstd_types.cpp:35:9:35:11 | ui8 | CTypedefType, FixedWidthIntegralType, UInt8_t | -| cstd_types.cpp:36:10:36:13 | ui16 | CTypedefType, FixedWidthIntegralType, UInt16_t | -| cstd_types.cpp:37:10:37:13 | ui32 | CTypedefType, FixedWidthIntegralType, UInt32_t | -| cstd_types.cpp:38:10:38:13 | ui64 | CTypedefType, FixedWidthIntegralType, UInt64_t | +| cstd_types.cpp:31:8:31:9 | i8 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, Int8_t | +| cstd_types.cpp:32:9:32:11 | i16 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, Int16_t | +| cstd_types.cpp:33:9:33:11 | i32 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, Int32_t | +| cstd_types.cpp:34:9:34:11 | i64 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, Int64_t | +| cstd_types.cpp:35:9:35:11 | ui8 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, UInt8_t | +| cstd_types.cpp:36:10:36:13 | ui16 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, UInt16_t | +| cstd_types.cpp:37:10:37:13 | ui32 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, UInt32_t | +| cstd_types.cpp:38:10:38:13 | ui64 | CTypedefType, FixedWidthIntegralType, GuardConditionImpl, UInt64_t | diff --git a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidthenum.expected b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidthenum.expected index d9884b22b00..89428e7a6ec 100644 --- a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidthenum.expected +++ b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_fixedwidthenum.expected @@ -1,2 +1,2 @@ -| cstd_types.cpp:74:4:74:6 | _e0 | Enum, FixedWidthEnumType | -| cstd_types.cpp:75:4:75:6 | _e1 | FixedWidthEnumType, ScopedEnum | +| cstd_types.cpp:74:4:74:6 | _e0 | Enum, FixedWidthEnumType, GuardConditionImpl | +| cstd_types.cpp:75:4:75:6 | _e1 | FixedWidthEnumType, GuardConditionImpl, ScopedEnum | diff --git a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_maximumwidth.expected b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_maximumwidth.expected index 0bf7779fcaf..b57ca4fb936 100644 --- a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_maximumwidth.expected +++ b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_maximumwidth.expected @@ -1,2 +1,2 @@ -| cstd_types.cpp:55:10:55:11 | im | CTypedefType, Intmax_t, MaximumWidthIntegralType | -| cstd_types.cpp:56:11:56:13 | uim | CTypedefType, MaximumWidthIntegralType, Uintmax_t | +| cstd_types.cpp:55:10:55:11 | im | CTypedefType, GuardConditionImpl, Intmax_t, MaximumWidthIntegralType | +| cstd_types.cpp:56:11:56:13 | uim | CTypedefType, GuardConditionImpl, MaximumWidthIntegralType, Uintmax_t | diff --git a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_minimumwidth.expected b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_minimumwidth.expected index 2984f07be8c..6aea5947473 100644 --- a/cpp/ql/test/library-tests/types/cstd_types/cstd_types_minimumwidth.expected +++ b/cpp/ql/test/library-tests/types/cstd_types/cstd_types_minimumwidth.expected @@ -1,8 +1,8 @@ -| cstd_types.cpp:39:15:39:16 | l8 | CTypedefType, Int_least8_t, MinimumWidthIntegralType | -| cstd_types.cpp:40:15:40:17 | l16 | CTypedefType, Int_least16_t, MinimumWidthIntegralType | -| cstd_types.cpp:41:15:41:17 | l32 | CTypedefType, Int_least32_t, MinimumWidthIntegralType | -| cstd_types.cpp:42:15:42:17 | l64 | CTypedefType, Int_least64_t, MinimumWidthIntegralType | -| cstd_types.cpp:43:15:43:17 | ul8 | CTypedefType, MinimumWidthIntegralType, UInt_least8_t | -| cstd_types.cpp:44:16:44:19 | ul16 | CTypedefType, MinimumWidthIntegralType, UInt_least16_t | -| cstd_types.cpp:45:16:45:19 | ul32 | CTypedefType, MinimumWidthIntegralType, UInt_least32_t | -| cstd_types.cpp:46:16:46:19 | ul64 | CTypedefType, MinimumWidthIntegralType, UInt_least64_t | +| cstd_types.cpp:39:15:39:16 | l8 | CTypedefType, GuardConditionImpl, Int_least8_t, MinimumWidthIntegralType | +| cstd_types.cpp:40:15:40:17 | l16 | CTypedefType, GuardConditionImpl, Int_least16_t, MinimumWidthIntegralType | +| cstd_types.cpp:41:15:41:17 | l32 | CTypedefType, GuardConditionImpl, Int_least32_t, MinimumWidthIntegralType | +| cstd_types.cpp:42:15:42:17 | l64 | CTypedefType, GuardConditionImpl, Int_least64_t, MinimumWidthIntegralType | +| cstd_types.cpp:43:15:43:17 | ul8 | CTypedefType, GuardConditionImpl, MinimumWidthIntegralType, UInt_least8_t | +| cstd_types.cpp:44:16:44:19 | ul16 | CTypedefType, GuardConditionImpl, MinimumWidthIntegralType, UInt_least16_t | +| cstd_types.cpp:45:16:45:19 | ul32 | CTypedefType, GuardConditionImpl, MinimumWidthIntegralType, UInt_least32_t | +| cstd_types.cpp:46:16:46:19 | ul64 | CTypedefType, GuardConditionImpl, MinimumWidthIntegralType, UInt_least64_t | diff --git a/cpp/ql/test/library-tests/types/integral_types_ms/vars.expected b/cpp/ql/test/library-tests/types/integral_types_ms/vars.expected index d2aac7454fd..1f168f7f942 100644 --- a/cpp/ql/test/library-tests/types/integral_types_ms/vars.expected +++ b/cpp/ql/test/library-tests/types/integral_types_ms/vars.expected @@ -1,4 +1,4 @@ -| integral_types.cpp:2:8:2:9 | i8 | file://:0:0:0:0 | char | MicrosoftInt8Type, PlainCharType | -| integral_types.cpp:3:9:3:11 | i16 | file://:0:0:0:0 | short | MicrosoftInt16Type, ShortType | -| integral_types.cpp:4:9:4:11 | i32 | file://:0:0:0:0 | int | IntType, MicrosoftInt32Type | -| integral_types.cpp:5:9:5:11 | i64 | file://:0:0:0:0 | long long | LongLongType, MicrosoftInt64Type | +| integral_types.cpp:2:8:2:9 | i8 | file://:0:0:0:0 | char | GuardConditionImpl, MicrosoftInt8Type, PlainCharType | +| integral_types.cpp:3:9:3:11 | i16 | file://:0:0:0:0 | short | GuardConditionImpl, MicrosoftInt16Type, ShortType | +| integral_types.cpp:4:9:4:11 | i32 | file://:0:0:0:0 | int | GuardConditionImpl, IntType, MicrosoftInt32Type | +| integral_types.cpp:5:9:5:11 | i64 | file://:0:0:0:0 | long long | GuardConditionImpl, LongLongType, MicrosoftInt64Type | diff --git a/cpp/ql/test/library-tests/types/wchar_t_typedef/wchar_t.expected b/cpp/ql/test/library-tests/types/wchar_t_typedef/wchar_t.expected index cebaff30994..c823ed839d3 100644 --- a/cpp/ql/test/library-tests/types/wchar_t_typedef/wchar_t.expected +++ b/cpp/ql/test/library-tests/types/wchar_t_typedef/wchar_t.expected @@ -1,3 +1,3 @@ -| file://:0:0:0:0 | wchar_t | Wchar_t, WideCharType | | -| file://:0:0:0:0 | wchar_t * | IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | CTypedefType, Wchar_t | -| ms.c:2:24:2:30 | wchar_t | CTypedefType, Wchar_t | | +| file://:0:0:0:0 | wchar_t | GuardConditionImpl, Wchar_t, WideCharType | | +| file://:0:0:0:0 | wchar_t * | GuardConditionImpl, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | CTypedefType, GuardConditionImpl, Wchar_t | +| ms.c:2:24:2:30 | wchar_t | CTypedefType, GuardConditionImpl, Wchar_t | | diff --git a/cpp/ql/test/library-tests/variables/variables/types.expected b/cpp/ql/test/library-tests/variables/variables/types.expected index c2ea5f7cfe3..5d8cec1cff8 100644 --- a/cpp/ql/test/library-tests/variables/variables/types.expected +++ b/cpp/ql/test/library-tests/variables/variables/types.expected @@ -1,108 +1,108 @@ -| ..()(..) | RoutineType | | | | | -| ..(*)(..) | FunctionPointerType | | ..()(..) | | | -| _Complex _Float16 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex _Float32 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex _Float32x | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex _Float64 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex _Float64x | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex _Float128 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex __bf16 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex __float128 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex __fp16 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex double | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex float | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex long double | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex std::float16_t | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Decimal32 | Decimal32Type | | | | | -| _Decimal64 | Decimal64Type | | | | | -| _Decimal128 | Decimal128Type | | | | | -| _Float16 | BinaryFloatingPointType, RealNumberType | | | | | -| _Float32 | BinaryFloatingPointType, RealNumberType | | | | | -| _Float32x | BinaryFloatingPointType, RealNumberType | | | | | -| _Float64 | BinaryFloatingPointType, RealNumberType | | | | | -| _Float64x | BinaryFloatingPointType, RealNumberType | | | | | -| _Float128 | BinaryFloatingPointType, RealNumberType | | | | | -| _Imaginary double | BinaryFloatingPointType, ImaginaryNumberType | | | | | -| _Imaginary float | BinaryFloatingPointType, ImaginaryNumberType | | | | | -| _Imaginary long double | BinaryFloatingPointType, ImaginaryNumberType | | | | | -| __SVCount_t | ScalableVectorCount | | | | | -| __bf16 | BinaryFloatingPointType, RealNumberType | | | | | -| __float128 | Float128Type | | | | | -| __fp16 | BinaryFloatingPointType, RealNumberType | | | | | -| __int128 | Int128Type | | | | | -| __mfp8 | BinaryFloatingPointType, RealNumberType | | | | | -| __va_list_tag | DirectAccessHolder, MetricClass, Struct, StructLikeClass | | | | | -| __va_list_tag & | LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | __va_list_tag | | | -| __va_list_tag && | PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, RValueReferenceType | | __va_list_tag | | | -| address | DirectAccessHolder, MetricClass, Struct, StructLikeClass | | | | | -| address & | LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | address | | | -| address && | PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, RValueReferenceType | | address | | | -| auto | AutoType | | | | | -| bool | BoolType | | | | | -| char | MicrosoftInt8Type, PlainCharType | | | | | -| char8_t | Char8Type | | | | | -| char16_t | Char16Type | | | | | -| char32_t | Char32Type | | | | | -| char * | CharPointerType, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | char | | | -| char *[3] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | -| char *[32] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | -| char *[] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | -| char[2] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[3] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[5] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[6] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[8] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[9] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[10] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[53] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| char[] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | -| const __va_list_tag | SpecifiedType | | __va_list_tag | | | -| const __va_list_tag & | LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | const __va_list_tag | | | -| const address | SpecifiedType | | address | | | -| const address & | LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | const address | | | -| const char | SpecifiedType | | char | | | -| const char * | IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | | const char | | | -| const char *[3] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char * | const char * | | | -| const char *[] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char * | const char * | | | -| const char[5] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const char[6] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const char[8] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const char[9] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const char[10] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const char[53] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | -| const double | SpecifiedType | | double | | | -| const int | SpecifiedType | | int | | | -| decltype(nullptr) | NullPointerType | | | | | -| double | DoubleType | | | | | -| error | ErroneousType | | | | | -| float | FloatType | | | | | -| float[3] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | float | float | | | -| int | IntType, MicrosoftInt32Type | | | | | -| int * | IntPointerType, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | int | | | -| int[4] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | -| int[8] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | -| int[10] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | -| int[10][20] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int[20] | int[20] | | | -| int[20] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | -| int[] | ArrayType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | -| long | LongType | | | | | -| long double | LongDoubleType | | | | | -| long long | LongLongType, MicrosoftInt64Type | | | | | -| short | MicrosoftInt16Type, ShortType | | | | | -| signed __int128 | Int128Type | | | | | -| signed char | SignedCharType | | | | | -| signed int | IntType | | | | | -| signed long | LongType | | | | | -| signed long long | LongLongType | | | | | -| signed short | ShortType | | | | | -| std::float16_t | BinaryFloatingPointType, RealNumberType | | | | | -| unknown | UnknownType | | | | | -| unsigned __int128 | Int128Type | | | | unsigned integral | -| unsigned char | UnsignedCharType | | | | unsigned integral | -| unsigned int | IntType | | | unsigned int | unsigned integral | -| unsigned long | LongType | | | | unsigned integral | -| unsigned long long | LongLongType | | | | unsigned integral | -| unsigned short | ShortType | | | | unsigned integral | -| void | VoidType | | | | | -| void * | IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, VoidPointerType | | void | | | -| wchar_t | Wchar_t, WideCharType | | | | | +| ..()(..) | GuardConditionImpl, RoutineType | | | | | +| ..(*)(..) | FunctionPointerType, GuardConditionImpl | | ..()(..) | | | +| _Complex _Float16 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex _Float32 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex _Float32x | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex _Float64 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex _Float64x | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex _Float128 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex __bf16 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex __float128 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex __fp16 | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex double | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex float | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex long double | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Complex std::float16_t | BinaryFloatingPointType, ComplexNumberType, GuardConditionImpl | | | | | +| _Decimal32 | Decimal32Type, GuardConditionImpl | | | | | +| _Decimal64 | Decimal64Type, GuardConditionImpl | | | | | +| _Decimal128 | Decimal128Type, GuardConditionImpl | | | | | +| _Float16 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Float32 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Float32x | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Float64 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Float64x | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Float128 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| _Imaginary double | BinaryFloatingPointType, GuardConditionImpl, ImaginaryNumberType | | | | | +| _Imaginary float | BinaryFloatingPointType, GuardConditionImpl, ImaginaryNumberType | | | | | +| _Imaginary long double | BinaryFloatingPointType, GuardConditionImpl, ImaginaryNumberType | | | | | +| __SVCount_t | GuardConditionImpl, ScalableVectorCount | | | | | +| __bf16 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| __float128 | Float128Type, GuardConditionImpl | | | | | +| __fp16 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| __int128 | GuardConditionImpl, Int128Type | | | | | +| __mfp8 | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| __va_list_tag | DirectAccessHolder, GuardConditionImpl, MetricClass, Struct, StructLikeClass | | | | | +| __va_list_tag & | GuardConditionImpl, LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | __va_list_tag | | | +| __va_list_tag && | GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, RValueReferenceType | | __va_list_tag | | | +| address | DirectAccessHolder, GuardConditionImpl, MetricClass, Struct, StructLikeClass | | | | | +| address & | GuardConditionImpl, LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | address | | | +| address && | GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, RValueReferenceType | | address | | | +| auto | AutoType, GuardConditionImpl | | | | | +| bool | BoolType, GuardConditionImpl | | | | | +| char | GuardConditionImpl, MicrosoftInt8Type, PlainCharType | | | | | +| char8_t | Char8Type, GuardConditionImpl | | | | | +| char16_t | Char16Type, GuardConditionImpl | | | | | +| char32_t | Char32Type, GuardConditionImpl | | | | | +| char * | CharPointerType, GuardConditionImpl, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | char | | | +| char *[3] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | +| char *[32] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | +| char *[] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char * | char * | | | +| char[2] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[3] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[5] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[6] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[8] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[9] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[10] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[53] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| char[] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | char | char | | | +| const __va_list_tag | GuardConditionImpl, SpecifiedType | | __va_list_tag | | | +| const __va_list_tag & | GuardConditionImpl, LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | const __va_list_tag | | | +| const address | GuardConditionImpl, SpecifiedType | | address | | | +| const address & | GuardConditionImpl, LValueReferenceType, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | const address | | | +| const char | GuardConditionImpl, SpecifiedType | | char | | | +| const char * | GuardConditionImpl, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, PointerType | | const char | | | +| const char *[3] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char * | const char * | | | +| const char *[] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char * | const char * | | | +| const char[5] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const char[6] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const char[8] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const char[9] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const char[10] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const char[53] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | const char | const char | | | +| const double | GuardConditionImpl, SpecifiedType | | double | | | +| const int | GuardConditionImpl, SpecifiedType | | int | | | +| decltype(nullptr) | GuardConditionImpl, NullPointerType | | | | | +| double | DoubleType, GuardConditionImpl | | | | | +| error | ErroneousType, GuardConditionImpl | | | | | +| float | FloatType, GuardConditionImpl | | | | | +| float[3] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | float | float | | | +| int | GuardConditionImpl, IntType, MicrosoftInt32Type | | | | | +| int * | GuardConditionImpl, IntPointerType, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | | int | | | +| int[4] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | +| int[8] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | +| int[10] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | +| int[10][20] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int[20] | int[20] | | | +| int[20] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | +| int[] | ArrayType, GuardConditionImpl, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection | int | int | | | +| long | GuardConditionImpl, LongType | | | | | +| long double | GuardConditionImpl, LongDoubleType | | | | | +| long long | GuardConditionImpl, LongLongType, MicrosoftInt64Type | | | | | +| short | GuardConditionImpl, MicrosoftInt16Type, ShortType | | | | | +| signed __int128 | GuardConditionImpl, Int128Type | | | | | +| signed char | GuardConditionImpl, SignedCharType | | | | | +| signed int | GuardConditionImpl, IntType | | | | | +| signed long | GuardConditionImpl, LongType | | | | | +| signed long long | GuardConditionImpl, LongLongType | | | | | +| signed short | GuardConditionImpl, ShortType | | | | | +| std::float16_t | BinaryFloatingPointType, GuardConditionImpl, RealNumberType | | | | | +| unknown | GuardConditionImpl, UnknownType | | | | | +| unsigned __int128 | GuardConditionImpl, Int128Type | | | | unsigned integral | +| unsigned char | GuardConditionImpl, UnsignedCharType | | | | unsigned integral | +| unsigned int | GuardConditionImpl, IntType | | | unsigned int | unsigned integral | +| unsigned long | GuardConditionImpl, LongType | | | | unsigned integral | +| unsigned long long | GuardConditionImpl, LongLongType | | | | unsigned integral | +| unsigned short | GuardConditionImpl, ShortType | | | | unsigned integral | +| void | GuardConditionImpl, VoidType | | | | | +| void * | GuardConditionImpl, IteratorByPointer, PointerOrArrayOrReferenceType, PointerOrArrayOrReferenceTypeIndirection, VoidPointerType | | void | | | +| wchar_t | GuardConditionImpl, Wchar_t, WideCharType | | | | | diff --git a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected index 692f7d81cd6..ceccd95ea3c 100644 --- a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected +++ b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected @@ -1,2 +1,7 @@ | main.cpp:3:5:3:5 | x | Poor global variable name 'x'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | | main.cpp:4:5:4:6 | ys | Poor global variable name 'ys'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | +| main.cpp:9:5:9:6 | v1 | Poor global variable name 'v1'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | +| main.cpp:10:5:10:6 | v2 | Poor global variable name 'v2'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | +| main.cpp:12:5:12:5 | v3 | Poor global variable name 'v3'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | +| main.cpp:14:5:14:5 | v4 | Poor global variable name 'v4'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | +| main.cpp:16:5:16:5 | v5 | Poor global variable name 'v5'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). | diff --git a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp index 1b1b7ee0280..e279fbf0257 100644 --- a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp +++ b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp @@ -5,3 +5,19 @@ int ys[1000000]; // BAD: too short int descriptive_name; // GOOD: sufficient static int z; // GOOD: not a global + +int v1; // BAD: too short +int v2; // BAD: too short +template +T v3; // BAD: too short +template +T v4; // BAD: too short +template +T v5; // BAD: too short + +void use_some_fs() { + v2 = 100; + v4 = 200; + v5 = 300; + v5 = "string"; +} diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/IncorrectCheckScanf.expected b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/IncorrectCheckScanf.expected index c0ed43fee9b..1591a287d9f 100644 --- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/IncorrectCheckScanf.expected +++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/IncorrectCheckScanf.expected @@ -1,5 +1,6 @@ | test.cpp:162:7:162:11 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | | test.cpp:171:7:171:11 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | +| test.cpp:193:7:193:11 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | | test.cpp:204:7:204:11 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | | test.cpp:436:7:436:11 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | | test.cpp:443:11:443:15 | call to scanf | The result of scanf is only checked against 0, but it can also return EOF. | diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected index 6dfe60dcb8c..9b7564b9123 100644 --- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected +++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected @@ -15,7 +15,6 @@ edges | test.cpp:141:19:141:20 | scanf output argument | test.cpp:143:8:143:8 | i | provenance | | | test.cpp:150:23:150:24 | scanf output argument | test.cpp:154:9:154:9 | i | provenance | | | test.cpp:181:19:181:20 | scanf output argument | test.cpp:185:8:185:8 | i | provenance | | -| test.cpp:193:19:193:20 | scanf output argument | test.cpp:197:8:197:8 | i | provenance | | | test.cpp:211:22:211:23 | scanf output argument | test.cpp:213:8:213:8 | i | provenance | | | test.cpp:221:22:221:23 | scanf output argument | test.cpp:223:8:223:8 | i | provenance | | | test.cpp:221:26:221:27 | scanf output argument | test.cpp:224:8:224:8 | j | provenance | | @@ -89,8 +88,6 @@ nodes | test.cpp:154:9:154:9 | i | semmle.label | i | | test.cpp:181:19:181:20 | scanf output argument | semmle.label | scanf output argument | | test.cpp:185:8:185:8 | i | semmle.label | i | -| test.cpp:193:19:193:20 | scanf output argument | semmle.label | scanf output argument | -| test.cpp:197:8:197:8 | i | semmle.label | i | | test.cpp:211:22:211:23 | scanf output argument | semmle.label | scanf output argument | | test.cpp:213:8:213:8 | i | semmle.label | i | | test.cpp:221:22:221:23 | scanf output argument | semmle.label | scanf output argument | diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp index 92f5d10ddd9..346cf607977 100644 --- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp +++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp @@ -194,7 +194,7 @@ int main() if (b >= 1) { - use(i); // BAD [NOT DETECTED]: scanf can return EOF (boolifies true) + use(i); // BAD: scanf can return EOF (boolifies true) } } diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp new file mode 100644 index 00000000000..57298515793 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp @@ -0,0 +1,121 @@ +typedef unsigned long size_t; +typedef struct sqlite3 sqlite3; +typedef struct sqlite3_stmt sqlite3_stmt; +typedef struct sqlite3_str sqlite3_str; + +int snprintf(char *str, size_t size, const char *format, ...); +int sqlite3_open(const char *filename, sqlite3 **ppDb); +int sqlite3_close(sqlite3*); +int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg); +int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail); +int sqlite3_step(sqlite3_stmt*); +int sqlite3_finalize(sqlite3_stmt*); +int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)); +sqlite3_str* sqlite3_str_new(sqlite3*); +void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...); +char* sqlite3_str_finish(sqlite3_str*); + +#define SQLITE_TRANSIENT ((void(*)(void*))-1) + +// Simulate a sensitive value +const char* getSensitivePassword() { + return "super_secret_password"; +} + +void storePasswordCleartext(sqlite3* db, const char* password) { + // BAD: Storing sensitive data in cleartext + char sql[256]; + // Unsafe: no escaping, for test purposes only + snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", password); // $ Source + char* errMsg = 0; + sqlite3_exec(db, sql, 0, 0, &errMsg); // $ Alert +} + +void storePasswordWithPrepare(sqlite3* db, const char* password) { + // BAD: Storing sensitive data in cleartext using sqlite3_prepare + char sql[256]; + snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", password); // $ Source + sqlite3_stmt* stmt = 0; + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); // $ Alert + sqlite3_step(stmt); + sqlite3_finalize(stmt); +} + +void storePasswordWithBind(sqlite3* db, const char* password) { + // BAD: Storing sensitive data in cleartext using sqlite3_bind_text + const char* sql = "INSERT INTO users(password) VALUES(?);"; + sqlite3_stmt* stmt = 0; + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); + sqlite3_bind_text(stmt, 1, password, -1, SQLITE_TRANSIENT); // $ Alert + sqlite3_step(stmt); + sqlite3_finalize(stmt); +} + +void storePasswordWithAppendf(sqlite3_str* pStr, const char* password) { + // BAD: Storing sensitive data in cleartext using sqlite3_str_appendf + sqlite3_str_appendf(pStr, "INSERT INTO users(password) VALUES('%s');", password); // $ Alert +} + +// Example sanitizer: hashes the sensitive value before storage +void hashSensitiveValue(const char* input, char* output, size_t outSize) { + // Dummy hash for illustration (not cryptographically secure) + unsigned int hash = 5381; + for (const char* p = input; *p; ++p) + hash = ((hash << 5) + hash) + (unsigned char)(*p); + snprintf(output, outSize, "%u", hash); +} + +void storeSanitizedPasswordCleartext(sqlite3* db, const char* password) { + // GOOD: Sanitizing sensitive data before storage + char hashed[64]; + hashSensitiveValue(password, hashed, sizeof(hashed)); + char sql[256]; + snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", hashed); + char* errMsg = 0; + sqlite3_exec(db, sql, 0, 0, &errMsg); +} + +void storeSanitizedPasswordWithBind(sqlite3* db, const char* password) { + // GOOD: Sanitizing sensitive data before storage with bind + char hashed[64]; + hashSensitiveValue(password, hashed, sizeof(hashed)); + const char* sql = "INSERT INTO users(password) VALUES(?);"; + sqlite3_stmt* stmt = 0; + sqlite3_prepare_v2(db, sql, -1, &stmt, 0); + sqlite3_bind_text(stmt, 1, hashed, -1, SQLITE_TRANSIENT); + sqlite3_step(stmt); + sqlite3_finalize(stmt); +} + +void storeSanitizedPasswordWithAppendf(sqlite3_str* pStr, const char* password) { + // GOOD: Sanitizing sensitive data before storage with appendf + char hashed[64]; + hashSensitiveValue(password, hashed, sizeof(hashed)); + sqlite3_str_appendf(pStr, "INSERT INTO users(password) VALUES('%s');", hashed); +} + +int main() { + sqlite3* db = 0; + sqlite3_open(":memory:", &db); + + // Create table + const char* createTableSQL = "CREATE TABLE users(id INTEGER PRIMARY KEY, password TEXT);"; + sqlite3_exec(db, createTableSQL, 0, 0, 0); + + const char* sensitive = getSensitivePassword(); + + storePasswordCleartext(db, sensitive); + storePasswordWithPrepare(db, sensitive); + storePasswordWithBind(db, sensitive); + storeSanitizedPasswordCleartext(db, sensitive); + storeSanitizedPasswordWithBind(db, sensitive); + + // If sqlite3_str is available + sqlite3_str* pStr = sqlite3_str_new(db); + storePasswordWithAppendf(pStr, sensitive); + storeSanitizedPasswordWithAppendf(pStr, sensitive); + sqlite3_str_finish(pStr); + + sqlite3_close(db); + return 0; +} diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected new file mode 100644 index 00000000000..89a7a2c5826 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected @@ -0,0 +1,16 @@ +#select +| CleartextSqliteDatabase.cpp:31:5:31:16 | call to sqlite3_exec | CleartextSqliteDatabase.cpp:29:77:29:84 | password | CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:29:77:29:84 | password | sensitive information | +| CleartextSqliteDatabase.cpp:39:5:39:22 | call to sqlite3_prepare_v2 | CleartextSqliteDatabase.cpp:37:77:37:84 | password | CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:37:77:37:84 | password | sensitive information | +| CleartextSqliteDatabase.cpp:49:5:49:21 | call to sqlite3_bind_text | CleartextSqliteDatabase.cpp:49:32:49:39 | password | CleartextSqliteDatabase.cpp:49:32:49:39 | password | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:49:32:49:39 | password | sensitive information | +| CleartextSqliteDatabase.cpp:56:5:56:23 | call to sqlite3_str_appendf | CleartextSqliteDatabase.cpp:56:76:56:83 | password | CleartextSqliteDatabase.cpp:56:76:56:83 | password | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:56:76:56:83 | password | sensitive information | +edges +| CleartextSqliteDatabase.cpp:29:77:29:84 | password | CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | provenance | TaintFunction | +| CleartextSqliteDatabase.cpp:37:77:37:84 | password | CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | provenance | TaintFunction | +nodes +| CleartextSqliteDatabase.cpp:29:77:29:84 | password | semmle.label | password | +| CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | semmle.label | *sql | +| CleartextSqliteDatabase.cpp:37:77:37:84 | password | semmle.label | password | +| CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | semmle.label | *sql | +| CleartextSqliteDatabase.cpp:49:32:49:39 | password | semmle.label | password | +| CleartextSqliteDatabase.cpp:56:76:56:83 | password | semmle.label | password | +subpaths diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref new file mode 100644 index 00000000000..d5adb06122d --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref @@ -0,0 +1,4 @@ +query: Security/CWE/CWE-313/CleartextSqliteDatabase.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/ms_vacopy.c b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/ms_vacopy.c new file mode 100644 index 00000000000..4aef7d79eb5 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/ms_vacopy.c @@ -0,0 +1,8 @@ +#include + +int va_copy_test(va_list va) { + va_list va2; + va_copy(va2, va); + return 0; +} +// semmle-extractor-options: --microsoft diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/too_many_constants.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/too_many_constants.cpp new file mode 100644 index 00000000000..2e794f387ce --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-457/semmle/tests/too_many_constants.cpp @@ -0,0 +1,42 @@ +struct S { + int a; + int b; + int c; + unsigned long *d; + + union { + struct { + const char *e; + int f; + S *g; + const char *h; + int i; + bool j; + bool k; + const char *l; + char **m; + } n; + + struct { + bool o; + bool p; + } q; + } r; +}; + +int too_many_constants_init(S *s); + +char *too_many_constants(const char *h, bool k, int i) { + const char *e = ""; + char l[64] = ""; + char *m; + + S s[] = { + {.a = 0, .c = 0, .d = nullptr, .r = {.n = {.e = e, .f = 1, .g = nullptr, .h = h, .i = i, .j = false, .k = k, .l = l, .m = &m}}}, + {.a = 0, .c = 0, .d = nullptr, .r = {.q = {.o = true, .p = true}}} + }; + + too_many_constants_init(s); + + return m; // GOOD - initialized by too_many_constants_init +} diff --git a/csharp/actions/create-extractor-pack/action.yml b/csharp/actions/create-extractor-pack/action.yml index 2386fe15101..b6737b45ad6 100644 --- a/csharp/actions/create-extractor-pack/action.yml +++ b/csharp/actions/create-extractor-pack/action.yml @@ -7,7 +7,7 @@ runs: - name: Setup dotnet uses: actions/setup-dotnet@v4 with: - dotnet-version: 9.0.100 + dotnet-version: 9.0.300 - name: Build Extractor shell: bash run: scripts/create-extractor-pack.sh @@ -17,7 +17,7 @@ runs: run: | CODEQL_PATH=$(gh codeql version --format=json | jq -r .unpackedLocation) # The legacy ASP extractor is not in this repo, so take the one from the nightly build - mv "$CODEQL_PATH/csharp/tools/extractor-asp.jar" "${{ github.workspace }}/csharp/extractor-pack/tools" + mv "$CODEQL_PATH/csharp/tools/extractor-asp.jar" "$GITHUB_WORKSPACE/csharp/extractor-pack/tools" # Safe guard against using the bundled extractor rm -rf "$CODEQL_PATH/csharp" env: diff --git a/csharp/codeql-extractor.yml b/csharp/codeql-extractor.yml index c4d7352cc43..da7d665f7a7 100644 --- a/csharp/codeql-extractor.yml +++ b/csharp/codeql-extractor.yml @@ -4,12 +4,15 @@ aliases: display_name: "C#" version: 1.22.1 column_kind: "utf16" +overlay_support_version: 20250626 extra_env_vars: DOTNET_GENERATE_ASPNET_CERTIFICATE: "false" build_modes: - autobuild - manual - none +default_queries: + - codeql/csharp-queries github_api_languages: - C# scc_languages: diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 72c46c89934..4713679cd23 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -43,5 +43,5 @@ MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,,5 -System,54,47,12165,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5929,6236 +System,54,47,12241,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,6003,6238 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index c1c3f927fd7..061662f9714 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",47,12165,54,5 + System,"``System.*``, ``System``",47,12241,54,5 Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Data.SqlClient``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2257,159,4 - Totals,,107,14429,407,9 + Totals,,107,14505,407,9 diff --git a/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme new file mode 100644 index 00000000000..605f8505340 --- /dev/null +++ b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme @@ -0,0 +1,1478 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..66044cfa5bb --- /dev/null +++ b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme @@ -0,0 +1,1460 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties new file mode 100644 index 00000000000..f9e0669d521 --- /dev/null +++ b/csharp/downgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties @@ -0,0 +1,4 @@ +description: Delete databaseMetadata and overlayChangedFiles relations +compatibility: full +databaseMetadata.rel: delete +overlayChangedFiles.rel: delete diff --git a/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/old.dbscheme b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/old.dbscheme new file mode 100644 index 00000000000..68b5aec54e5 --- /dev/null +++ b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/old.dbscheme @@ -0,0 +1,1484 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/semmlecode.csharp.dbscheme b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..605f8505340 --- /dev/null +++ b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/semmlecode.csharp.dbscheme @@ -0,0 +1,1478 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/upgrade.properties b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/upgrade.properties new file mode 100644 index 00000000000..950235727fe --- /dev/null +++ b/csharp/downgrades/68b5aec54e50fe7e375df3777b756a746ca3a37c/upgrade.properties @@ -0,0 +1,2 @@ +description: Remove @locatable type +compatibility: full diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index c71013bf7a0..4a4fd651a5b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -138,7 +138,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching } // The version number should be kept in sync with the version .NET version used for building the application. - public const string LatestDotNetSdkVersion = "9.0.100"; + public const string LatestDotNetSdkVersion = "9.0.300"; /// /// Returns a script for downloading relevant versions of the diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs index a690e3f880f..e3efce09481 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNetCliInvoker.cs @@ -44,7 +44,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching // Configure the proxy settings, if applicable. if (this.proxy != null) { - logger.LogInfo($"Setting up Dependabot proxy at {this.proxy.Address}"); + logger.LogDebug($"Configuring environment variables for the Dependabot proxy at {this.proxy.Address}"); startInfo.EnvironmentVariables["HTTP_PROXY"] = this.proxy.Address; startInfo.EnvironmentVariables["HTTPS_PROXY"] = this.proxy.Address; @@ -57,11 +57,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching private bool RunCommandAux(string args, string? workingDirectory, out IList output, bool silent) { var dirLog = string.IsNullOrWhiteSpace(workingDirectory) ? "" : $" in {workingDirectory}"; - logger.LogInfo($"Running '{Exec} {args}'{dirLog}"); var pi = MakeDotnetStartInfo(args, workingDirectory); var threadId = Environment.CurrentManagedThreadId; void onOut(string s) => logger.Log(silent ? Severity.Debug : Severity.Info, s, threadId); void onError(string s) => logger.LogError(s, threadId); + logger.LogInfo($"Running '{Exec} {args}'{dirLog}"); var exitCode = pi.ReadOutput(out output, onOut, onError); if (exitCode != 0) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs index 9ddf7686bad..573c8954bf4 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -53,6 +54,20 @@ namespace Semmle.Extraction.CSharp.Standalone } progressMonitor.MissingSummary(analyser.ExtractionContext!.MissingTypes.Count(), analyser.ExtractionContext!.MissingNamespaces.Count()); + + // If extracting a base database, we need to create an empty metadata file. + if (EnvironmentVariables.GetBaseMetaDataOutPath() is string baseMetaDataOutPath) + { + try + { + analyser.Logger.LogInfo($"Creating base metadata file at {baseMetaDataOutPath}"); + File.WriteAllText(baseMetaDataOutPath, string.Empty); + } + catch (Exception ex) + { + analyser.Logger.LogError($"Failed to create base metadata file: {ex.Message}"); + } + } }); } finally @@ -143,7 +158,8 @@ namespace Semmle.Extraction.CSharp.Standalone var pathTransformer = new PathTransformer(canonicalPathCache); var progressMonitor = new ExtractionProgress(logger); - using var analyser = new StandaloneAnalyser(progressMonitor, fileLogger, pathTransformer, canonicalPathCache, false); + var overlayInfo = OverlayInfoFactory.Make(logger, options.SrcDir); + using var analyser = new StandaloneAnalyser(progressMonitor, fileLogger, pathTransformer, canonicalPathCache, overlayInfo, false); try { var extractionInput = new ExtractionInput(dependencyManager.AllSourceFiles, dependencyManager.ReferenceFiles, dependencyManager.CompilationInfos); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs index 66e45387d87..fe01e0f9b58 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Accessor.cs @@ -63,8 +63,10 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.accessors(this, kind, Symbol.Name, parent, unboundAccessor); - foreach (var l in Locations) - trapFile.accessor_location(this, l); + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.accessor_location, this, Locations); + } Overrides(trapFile); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs index e4799c05507..ded4320cba8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Attribute.cs @@ -57,13 +57,26 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { + // In this case, we don't extract the attribute again, as it was extracted using * ID + // originally and we re-use that. + if (Context.OnlyScaffold && (ReportingLocation is null || !ReportingLocation.IsInSource)) + { + return; + } + var type = Type.Create(Context, Symbol.AttributeClass); trapFile.attributes(this, kind, type.TypeRef, entity); - trapFile.attribute_location(this, Location); + + if (Context.OnlyScaffold) + { + return; + } + + WriteLocationToTrap(trapFile.attribute_location, this, Location); if (attributeSyntax is not null) { - trapFile.attribute_location(this, Assembly.CreateOutputAssembly(Context)); + WriteLocationToTrap(trapFile.attribute_location, this, Assembly.CreateOutputAssembly(Context)); TypeMention.Create(Context, attributeSyntax.Name, this, type); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedEntity.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedEntity.cs index 96bef973211..2002fe0f1d7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedEntity.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedEntity.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.IO; using Microsoft.CodeAnalysis; @@ -52,6 +54,22 @@ namespace Semmle.Extraction.CSharp.Entities } } + protected static void WriteLocationToTrap(Action writeAction, T1 entity, Location l) + { + if (l is not EmptyLocation) + { + writeAction(entity, l); + } + } + + protected static void WriteLocationsToTrap(Action writeAction, T1 entity, IEnumerable locations) + { + foreach (var loc in locations) + { + WriteLocationToTrap(writeAction, entity, loc); + } + } + public override bool NeedsPopulation { get; } public override int GetHashCode() => Symbol is null ? 0 : Symbol.GetHashCode(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedSymbol.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedSymbol.cs index c39eb6076b5..92861e97fdd 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedSymbol.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Base/CachedSymbol.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentBlock.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentBlock.cs index 3c4cdcffc0e..af579a47dc5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentBlock.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentBlock.cs @@ -10,9 +10,13 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { + if (Context.OnlyScaffold) + { + return; + } trapFile.commentblock(this); - trapFile.commentblock_location(this, Context.CreateLocation(Symbol.Location)); Symbol.CommentLines.ForEach((l, child) => trapFile.commentblock_child(this, l, child)); + WriteLocationToTrap(trapFile.commentblock_location, this, Context.CreateLocation(Symbol.Location)); } public override bool NeedsPopulation => true; @@ -27,6 +31,10 @@ namespace Semmle.Extraction.CSharp.Entities public void BindTo(Label entity, CommentBinding binding) { + if (Context.OnlyScaffold) + { + return; + } Context.TrapWriter.Writer.commentblock_binding(this, entity, binding); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentLine.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentLine.cs index 7638eefce12..f7db5dbe294 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentLine.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentLine.cs @@ -21,9 +21,14 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { - location = Context.CreateLocation(Location); + if (Context.OnlyScaffold) + { + return; + } trapFile.commentline(this, Type == CommentLineType.MultilineContinuation ? CommentLineType.Multiline : Type, Text, RawText); - trapFile.commentline_location(this, location); + location = Context.CreateLocation(Location); + WriteLocationToTrap(trapFile.commentline_location, this, location); + } public override Microsoft.CodeAnalysis.Location? ReportingLocation => location?.Symbol; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs index b4c0cdca730..667ed8f4301 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs @@ -21,6 +21,11 @@ namespace Semmle.Extraction.CSharp.Entities protected override void Populate(TextWriter trapFile) { + if (Context.OnlyScaffold) + { + return; + } + var key = diagnostic.Id; var messageCount = compilation.messageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); if (messageCount > limit) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs index c3ce2bb6d29..2c3b25b2e1c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Constructor.cs @@ -29,13 +29,6 @@ namespace Semmle.Extraction.CSharp.Entities ContainingType!.PopulateGenerics(); trapFile.constructors(this, Symbol.ContainingType.Name, ContainingType, (Constructor)OriginalDefinition); - trapFile.constructor_location(this, Location); - - if (MakeSynthetic) - { - // Create a synthetic empty body for primary and default constructors. - Statements.SyntheticEmptyBlock.Create(Context, this, 0, Location); - } if (Symbol.IsImplicitlyDeclared) { @@ -43,6 +36,23 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.numlines(this, lineCounts); } ExtractCompilerGenerated(trapFile); + + if (Context.OnlyScaffold) + { + return; + } + + if (MakeSynthetic) + { + // Create a synthetic empty body for primary and default constructors. + Statements.SyntheticEmptyBlock.Create(Context, this, 0, Location); + } + + if (Context.ExtractLocation(Symbol) && (!IsDefault || IsBestSourceLocation)) + { + WriteLocationToTrap(trapFile.constructor_location, this, Location); + } + } protected override void ExtractInitializers(TextWriter trapFile) @@ -50,7 +60,7 @@ namespace Semmle.Extraction.CSharp.Entities // Do not extract initializers for constructed types. // Extract initializers for constructors with a body, primary constructors // and default constructors for classes and structs declared in source code. - if (Block is null && ExpressionBody is null && !MakeSynthetic) + if (Block is null && ExpressionBody is null && !MakeSynthetic || Context.OnlyScaffold) { return; } @@ -103,6 +113,7 @@ namespace Semmle.Extraction.CSharp.Entities } var baseConstructorTarget = Create(Context, baseConstructor); + var info = new ExpressionInfo(Context, AnnotatedTypeSymbol.CreateNotAnnotated(baseType), Location, @@ -168,7 +179,15 @@ namespace Semmle.Extraction.CSharp.Entities Symbol.ContainingType.IsSourceDeclaration() && !Symbol.ContainingType.IsAnonymousType; - private bool MakeSynthetic => IsPrimary || IsDefault; + /// + /// Returns true if we consider the reporting location of this constructor entity the best + /// location of the constructor. + /// For partial classes with default constructors, Roslyn consider each partial class declaration + /// as the possible location for the implicit default constructor. + /// + private bool IsBestSourceLocation => ReportingLocation is not null && Context.IsLocationInContext(ReportingLocation); + + private bool MakeSynthetic => (IsPrimary || (IsDefault && IsBestSourceLocation)) && !Context.OnlyScaffold; [return: NotNullIfNotNull(nameof(constructor))] public static new Constructor? Create(Context cx, IMethodSymbol? constructor) @@ -222,7 +241,8 @@ namespace Semmle.Extraction.CSharp.Entities if (Symbol.IsImplicitlyDeclared) { - return ContainingType!.ReportingLocation; + var best = Symbol.Locations.Where(l => l.IsInSource).BestOrDefault(); + return best ?? ContainingType!.ReportingLocation; } return Symbol.ContainingType.Locations.FirstOrDefault(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Destructor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Destructor.cs index b6a9c8e8f1b..0681d55377a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Destructor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Destructor.cs @@ -15,7 +15,11 @@ namespace Semmle.Extraction.CSharp.Entities ContainingType!.PopulateGenerics(); trapFile.destructors(this, $"~{Symbol.ContainingType.Name}", ContainingType, OriginalDefinition(Context, this, Symbol)); - trapFile.destructor_location(this, Location); + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationToTrap(trapFile.destructor_location, this, Location); + } } private static new Destructor OriginalDefinition(Context cx, Destructor original, IMethodSymbol symbol) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs index 888e1ba7304..bbd90989617 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs @@ -37,7 +37,6 @@ namespace Semmle.Extraction.CSharp.Entities Method.Create(Context, remover); PopulateModifiers(trapFile); - BindComments(); var declSyntaxReferences = IsSourceDeclaration ? Symbol.DeclaringSyntaxReferences.Select(d => d.GetSyntax()).ToArray() @@ -51,8 +50,17 @@ namespace Semmle.Extraction.CSharp.Entities TypeMention.Create(Context, syntax.ExplicitInterfaceSpecifier!.Name, this, explicitInterface); } - foreach (var l in Locations) - trapFile.event_location(this, l); + if (Context.OnlyScaffold) + { + return; + } + + BindComments(); + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.event_location, this, Locations); + } foreach (var syntaxType in declSyntaxReferences .OfType() diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs index 1df6be7a273..254e7c76956 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs @@ -48,8 +48,10 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.event_accessors(this, kind, Symbol.Name, parent, unboundAccessor); - foreach (var l in Locations) - trapFile.event_accessor_location(this, l); + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.event_accessor_location, this, Locations); + } Overrides(trapFile); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs index a5cb6e316f4..93107fc6dab 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs @@ -40,6 +40,7 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.expr_parent_top_level(this, info.Child, info.Parent); else trapFile.expr_parent(this, info.Child, info.Parent); + trapFile.expr_location(this, Location); if (Type.HasValue && !Type.Value.HasObliviousNullability()) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/ExtractionMessage.cs index f8a771ae6d0..922094529b0 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/ExtractionMessage.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/ExtractionMessage.cs @@ -28,6 +28,11 @@ namespace Semmle.Extraction.CSharp.Entities protected override void Populate(TextWriter trapFile) { + if (Context.OnlyScaffold) + { + return; + } + // For the time being we're counting the number of messages per severity, we could introduce other groupings in the future var key = msg.Severity.ToString(); groupedMessageCounts.AddOrUpdate(key, 1, (_, c) => c + 1); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index 0a91eb57ecd..9a010aad376 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -49,8 +49,15 @@ namespace Semmle.Extraction.CSharp.Entities } } - foreach (var l in Locations) - trapFile.field_location(this, l); + if (Context.OnlyScaffold) + { + return; + } + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.field_location, this, Locations); + } if (!IsSourceDeclaration || !Symbol.FromSource()) return; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Indexer.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Indexer.cs index 1235b120253..870c2eb7650 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Indexer.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Indexer.cs @@ -19,8 +19,6 @@ namespace Semmle.Extraction.CSharp.Entities var type = Type.Create(Context, Symbol.Type); trapFile.indexers(this, Symbol.GetName(useMetadataName: true), ContainingType!, type.TypeRef, OriginalDefinition); - foreach (var l in Locations) - trapFile.indexer_location(this, l); var getter = BodyDeclaringSymbol.GetMethod; var setter = BodyDeclaringSymbol.SetMethod; @@ -40,20 +38,8 @@ namespace Semmle.Extraction.CSharp.Entities Parameter.Create(Context, Symbol.Parameters[i], this, original); } - if (IsSourceDeclaration) - { - var expressionBody = ExpressionBody; - if (expressionBody is not null) - { - // The expression may need to reference parameters in the getter. - // So we need to arrange that the expression is populated after the getter. - Context.PopulateLater(() => Expression.CreateFromNode(new ExpressionNodeInfo(Context, expressionBody, this, 0).SetType(Symbol.GetAnnotatedType()))); - } - } - PopulateAttributes(); PopulateModifiers(trapFile); - BindComments(); var declSyntaxReferences = IsSourceDeclaration ? Symbol.DeclaringSyntaxReferences. @@ -68,6 +54,28 @@ namespace Semmle.Extraction.CSharp.Entities TypeMention.Create(Context, syntax.ExplicitInterfaceSpecifier!.Name, this, explicitInterface); } + if (Context.OnlyScaffold) + { + return; + } + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.indexer_location, this, Locations); + } + + if (IsSourceDeclaration) + { + var expressionBody = ExpressionBody; + if (expressionBody is not null) + { + // The expression may need to reference parameters in the getter. + // So we need to arrange that the expression is populated after the getter. + Context.PopulateLater(() => Expression.CreateFromNode(new ExpressionNodeInfo(Context, expressionBody, this, 0).SetType(Symbol.GetAnnotatedType()))); + } + } + + BindComments(); foreach (var syntax in declSyntaxReferences) TypeMention.Create(Context, syntax.Type, this, type); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/LocalVariable.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/LocalVariable.cs index f1c6813a66d..22174f7e945 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/LocalVariable.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/LocalVariable.cs @@ -41,7 +41,12 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.localvars(this, Kinds.VariableKind.None, Symbol.Name, @var, Type.Create(Context, parent.Type).TypeRef, parent); } - trapFile.localvar_location(this, Location); + if (Context.OnlyScaffold) + { + return; + } + + WriteLocationToTrap(trapFile.localvar_location, this, Location); DefineConstantValue(trapFile); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/GeneratedLocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/EmptyLocation.cs similarity index 54% rename from csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/GeneratedLocation.cs rename to csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/EmptyLocation.cs index d12f1ca51e0..f81db35fdbc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/GeneratedLocation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/EmptyLocation.cs @@ -2,11 +2,11 @@ using System.IO; namespace Semmle.Extraction.CSharp.Entities { - public class GeneratedLocation : SourceLocation + public class EmptyLocation : SourceLocation { private readonly File generatedFile; - private GeneratedLocation(Context cx) + private EmptyLocation(Context cx) : base(cx, null) { generatedFile = GeneratedFile.Create(cx); @@ -26,15 +26,16 @@ namespace Semmle.Extraction.CSharp.Entities public override int GetHashCode() => 98732567; - public override bool Equals(object? obj) => obj is not null && obj.GetType() == typeof(GeneratedLocation); + public override bool Equals(object? obj) => obj is not null && obj.GetType() == typeof(EmptyLocation); - public static GeneratedLocation Create(Context cx) => GeneratedLocationFactory.Instance.CreateEntity(cx, typeof(GeneratedLocation), null); + public static EmptyLocation Create(Context cx) + => EmptyLocationFactory.Instance.CreateEntity(cx, typeof(EmptyLocation), null); - private class GeneratedLocationFactory : CachedEntityFactory + private class EmptyLocationFactory : CachedEntityFactory { - public static GeneratedLocationFactory Instance { get; } = new GeneratedLocationFactory(); + public static EmptyLocationFactory Instance { get; } = new EmptyLocationFactory(); - public override GeneratedLocation Create(Context cx, string? init) => new GeneratedLocation(cx); + public override EmptyLocation Create(Context cx, string? init) => new EmptyLocation(cx); } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/NonGeneratedSourceLocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/NonGeneratedSourceLocation.cs index 69e9ea4e9dc..7a13138ff6a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/NonGeneratedSourceLocation.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Locations/NonGeneratedSourceLocation.cs @@ -40,8 +40,29 @@ namespace Semmle.Extraction.CSharp.Entities get; } + private static void WriteStarId(EscapingTextWriter writer) + { + writer.Write('*'); + } + + public sealed override void WriteQuotedId(EscapingTextWriter writer) + { + if (Context.ExtractionContext.IsStandalone) + { + WriteStarId(writer); + return; + } + base.WriteQuotedId(writer); + } + public override void WriteId(EscapingTextWriter trapFile) { + if (Context.ExtractionContext.IsStandalone) + { + WriteStarId(trapFile); + return; + } + trapFile.Write("loc,"); trapFile.WriteSubId(FileEntity); trapFile.Write(','); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs index 6ba5cca01cf..c1b0f1a65bc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Method.cs @@ -48,7 +48,7 @@ namespace Semmle.Extraction.CSharp.Entities protected virtual void PopulateMethodBody(TextWriter trapFile) { - if (!IsSourceDeclaration) + if (!IsSourceDeclaration || Context.OnlyScaffold) return; var block = Block; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs index 12684c304a4..3eaafdca23b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs @@ -35,7 +35,6 @@ namespace Semmle.Extraction.CSharp.Entities var ns = Namespace.Create(Context, @namespace); trapFile.namespace_declarations(this, ns); - trapFile.namespace_declaration_location(this, Context.CreateLocation(node.Name.GetLocation())); var visitor = new Populators.TypeOrNamespaceVisitor(Context, trapFile, this); @@ -48,6 +47,12 @@ namespace Semmle.Extraction.CSharp.Entities { trapFile.parent_namespace_declaration(this, parent); } + + if (Context.OnlyScaffold) + { + return; + } + WriteLocationToTrap(trapFile.namespace_declaration_location, this, Context.CreateLocation(node.Name.GetLocation())); } public static NamespaceDeclaration Create(Context cx, BaseNamespaceDeclarationSyntax decl, NamespaceDeclaration parent) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs index bd3a637a624..22bcd1dce2c 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs @@ -34,6 +34,16 @@ namespace Semmle.Extraction.CSharp.Entities var returnType = Type.Create(Context, Symbol.ReturnType); trapFile.methods(this, Name, ContainingType, returnType.TypeRef, OriginalDefinition); + PopulateGenerics(trapFile); + Overrides(trapFile); + ExtractRefReturn(trapFile, Symbol, this); + ExtractCompilerGenerated(trapFile); + + if (Context.OnlyScaffold) + { + return; + } + if (IsSourceDeclaration) { foreach (var declaration in Symbol.DeclaringSyntaxReferences.Select(s => s.GetSyntax()).OfType()) @@ -43,13 +53,10 @@ namespace Semmle.Extraction.CSharp.Entities } } - foreach (var l in Locations) - trapFile.method_location(this, l); - - PopulateGenerics(trapFile); - Overrides(trapFile); - ExtractRefReturn(trapFile, Symbol, this); - ExtractCompilerGenerated(trapFile); + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.method_location, this, Locations); + } } private bool IsCompilerGeneratedDelegate() => diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs index 76d518776ca..49ef9a4a6e9 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Parameter.cs @@ -115,15 +115,23 @@ namespace Semmle.Extraction.CSharp.Entities var type = Type.Create(Context, Symbol.Type); trapFile.@params(this, Name, type.TypeRef, Ordinal, ParamKind, Parent!, Original); - foreach (var l in Symbol.Locations) - trapFile.param_location(this, Context.CreateLocation(l)); + if (Context.OnlyScaffold) + { + return; + } + + if (Context.ExtractLocation(Symbol)) + { + var locations = Context.GetLocations(Symbol); + WriteLocationsToTrap(trapFile.param_location, this, locations); + } if (!Symbol.Locations.Any() && Symbol.ContainingSymbol is IMethodSymbol ms && ms.Name == WellKnownMemberNames.TopLevelStatementsEntryPointMethodName && ms.ContainingType.Name == WellKnownMemberNames.TopLevelStatementsEntryPointTypeName) { - trapFile.param_location(this, Context.CreateLocation()); + WriteLocationToTrap(trapFile.param_location, this, Context.CreateLocation()); } if (Symbol.HasExplicitDefaultValue && Context.Defines(Symbol)) @@ -247,7 +255,6 @@ namespace Semmle.Extraction.CSharp.Entities var typeKey = VarargsType.Create(Context); // !! Maybe originaldefinition is wrong trapFile.@params(this, "", typeKey, Ordinal, Kind.None, Parent!, this); - trapFile.param_location(this, GeneratedLocation.Create(Context)); } protected override int Ordinal => ((Method)Parent!).OriginalDefinition.Symbol.Parameters.Length; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PreprocessorDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PreprocessorDirective.cs index da39613e124..4b0da499b80 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PreprocessorDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PreprocessorDirective.cs @@ -13,10 +13,15 @@ namespace Semmle.Extraction.CSharp.Entities PopulatePreprocessor(trapFile); trapFile.preprocessor_directive_active(this, Symbol.IsActive); - trapFile.preprocessor_directive_location(this, Context.CreateLocation(ReportingLocation)); var compilation = Compilation.Create(Context); trapFile.preprocessor_directive_compilation(this, compilation); + + if (Context.OnlyScaffold) + { + return; + } + WriteLocationToTrap(trapFile.preprocessor_directive_location, this, Context.CreateLocation(ReportingLocation)); } protected abstract void PopulatePreprocessor(TextWriter trapFile); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs index f8845a667cc..d48d778cb75 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Property.cs @@ -40,7 +40,6 @@ namespace Semmle.Extraction.CSharp.Entities { PopulateAttributes(); PopulateModifiers(trapFile); - BindComments(); PopulateNullability(trapFile, Symbol.GetAnnotatedType()); PopulateRefKind(trapFile, Symbol.RefKind); @@ -69,8 +68,17 @@ namespace Semmle.Extraction.CSharp.Entities TypeMention.Create(Context, syntax.ExplicitInterfaceSpecifier!.Name, this, explicitInterface); } - foreach (var l in Locations) - trapFile.property_location(this, l); + if (Context.OnlyScaffold) + { + return; + } + + BindComments(); + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.property_location, this, Locations); + } if (IsSourceDeclaration && Symbol.FromSource()) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/TypeMention.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/TypeMention.cs index d41ba5dc195..aac4c5f5b3f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/TypeMention.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/TypeMention.cs @@ -59,6 +59,11 @@ namespace Semmle.Extraction.CSharp.Entities protected override void Populate(TextWriter trapFile) { + if (Context.OnlyScaffold) + { + return; + } + switch (syntax.Kind()) { case SyntaxKind.ArrayType: diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/DynamicType.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/DynamicType.cs index 5a840e3b9ef..b1413b206ae 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/DynamicType.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/DynamicType.cs @@ -16,10 +16,14 @@ namespace Semmle.Extraction.CSharp.Entities public override void Populate(TextWriter trapFile) { trapFile.types(this, Kinds.TypeKind.DYNAMIC, "dynamic"); - trapFile.type_location(this, Location); trapFile.has_modifiers(this, Modifier.Create(Context, "public")); trapFile.parent_namespace(this, Namespace.Create(Context, Context.Compilation.GlobalNamespace)); + if (Context.OnlyScaffold) + { + return; + } + WriteLocationToTrap(trapFile.type_location, this, Location); } public override void WriteId(EscapingTextWriter trapFile) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs index 96c523d5bbd..dcf2bffe095 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs @@ -81,10 +81,9 @@ namespace Semmle.Extraction.CSharp.Entities } // Class location - if (!Symbol.IsGenericType || Symbol.IsReallyUnbound()) + if ((!Symbol.IsGenericType || Symbol.IsReallyUnbound()) && !Context.OnlyScaffold) { - foreach (var l in Locations) - trapFile.type_location(this, l); + WriteLocationsToTrap(trapFile.type_location, this, Locations); } if (Symbol.IsAnonymousType) @@ -112,15 +111,18 @@ namespace Semmle.Extraction.CSharp.Entities } } - private static IEnumerable GetLocations(INamedTypeSymbol type) + private IEnumerable GetLocations(INamedTypeSymbol type) { - return type.Locations - .Where(l => l.IsInMetadata) - .Concat(type.DeclaringSyntaxReferences + var metadataLocations = type.Locations + .Where(l => l.IsInMetadata); + var sourceLocations = type.DeclaringSyntaxReferences .Select(loc => loc.GetSyntax()) .OfType() .Select(l => l.FixedLocation()) - ); + .Where(Context.IsLocationInContext); + + return metadataLocations + .Concat(sourceLocations); } public override Microsoft.CodeAnalysis.Location? ReportingLocation => GetLocations(Symbol).BestOrDefault(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TupleType.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TupleType.cs index d97e4b9dad5..f20be262e30 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TupleType.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TupleType.cs @@ -51,11 +51,15 @@ namespace Semmle.Extraction.CSharp.Entities trapFile.tuple_element(this, index++, element); } + if (Context.OnlyScaffold) + { + return; + } // Note: symbol.Locations seems to be very inconsistent // about what locations are available for a tuple type. // Sometimes it's the source code, and sometimes it's empty. - foreach (var l in Symbol.Locations) - trapFile.type_location(this, Context.CreateLocation(l)); + var locations = Context.GetLocations(Symbol); + WriteLocationsToTrap(trapFile.type_location, this, locations); } private readonly Lazy tupleElementsLazy; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs index 266fbfa5d60..3e79a8f8101 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/Type.cs @@ -222,7 +222,7 @@ namespace Semmle.Extraction.CSharp.Entities private IEnumerable GetBaseTypeDeclarations() { - if (!IsSourceDeclaration || !Symbol.FromSource()) + if (!IsSourceDeclaration || !Symbol.FromSource() || Context.OnlyScaffold) { return Enumerable.Empty(); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TypeParameter.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TypeParameter.cs index 25fda9eabe9..7d117dcd427 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TypeParameter.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/TypeParameter.cs @@ -26,9 +26,15 @@ namespace Semmle.Extraction.CSharp.Entities var parentNs = Namespace.Create(Context, Symbol.TypeParameterKind == TypeParameterKind.Method ? Context.Compilation.GlobalNamespace : Symbol.ContainingNamespace); trapFile.parent_namespace(this, parentNs); - foreach (var l in Symbol.Locations) + if (Context.OnlyScaffold) { - trapFile.type_location(this, Context.CreateLocation(l)); + return; + } + + if (Context.ExtractLocation(Symbol)) + { + var locations = Context.GetLocations(Symbol); + WriteLocationsToTrap(trapFile.type_location, this, locations); } if (IsSourceDeclaration) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs index 141bded87ac..fc9358ffc2d 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UserOperator.cs @@ -26,8 +26,18 @@ namespace Semmle.Extraction.CSharp.Entities returnType.TypeRef, (UserOperator)OriginalDefinition); - foreach (var l in Locations) - trapFile.operator_location(this, l); + ContainingType.PopulateGenerics(); + Overrides(trapFile); + + if (Context.OnlyScaffold) + { + return; + } + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.operator_location, this, Locations); + } if (IsSourceDeclaration) { @@ -37,9 +47,6 @@ namespace Semmle.Extraction.CSharp.Entities foreach (var declaration in declSyntaxReferences.OfType()) TypeMention.Create(Context, declaration.Type, this, returnType); } - - ContainingType.PopulateGenerics(); - Overrides(trapFile); } public override bool NeedsPopulation => Context.Defines(Symbol) || IsImplicitOperator(out _); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs index 04fe80dbcde..f1de4a1d699 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs @@ -20,6 +20,11 @@ namespace Semmle.Extraction.CSharp.Entities protected override void Populate(TextWriter trapFile) { + if (Context.OnlyScaffold) + { + return; + } + // This is guaranteed to be non-null as we only deal with "using namespace" not "using X = Y" var name = node.Name!; diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs index 3ea99a0d772..1ba8827c9d2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs @@ -41,16 +41,20 @@ namespace Semmle.Extraction.CSharp public IPathCache PathCache { get; } + public IOverlayInfo OverlayInfo { get; } + protected Analyser( IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, + IOverlayInfo overlayInfo, bool addAssemblyTrapPrefix) { Logger = logger; PathTransformer = pathTransformer; PathCache = pathCache; + OverlayInfo = overlayInfo; this.addAssemblyTrapPrefix = addAssemblyTrapPrefix; this.progressMonitor = pm; @@ -158,7 +162,7 @@ namespace Semmle.Extraction.CSharp if (compilation.GetAssemblyOrModuleSymbol(r) is IAssemblySymbol assembly) { - var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix); + var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), OverlayInfo, addAssemblyTrapPrefix); foreach (var module in assembly.Modules) { @@ -195,7 +199,7 @@ namespace Semmle.Extraction.CSharp var currentTaskId = IncrementTaskCount(); ReportProgressTaskStarted(currentTaskId, sourcePath); - var cx = new Context(ExtractionContext, compilation, trapWriter, new SourceScope(tree), addAssemblyTrapPrefix); + var cx = new Context(ExtractionContext, compilation, trapWriter, new SourceScope(tree), OverlayInfo, addAssemblyTrapPrefix); // Ensure that the file itself is populated in case the source file is totally empty var root = tree.GetRoot(); Entities.File.Create(cx, root.SyntaxTree.FilePath); @@ -234,10 +238,13 @@ namespace Semmle.Extraction.CSharp var assembly = compilation.Assembly; var trapWriter = transformedAssemblyPath.CreateTrapWriter(Logger, options.TrapCompression, discardDuplicates: false); compilationTrapFile = trapWriter; // Dispose later - var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix); + var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), OverlayInfo, addAssemblyTrapPrefix); compilationEntity = Entities.Compilation.Create(cx); + // Ensure that the empty location is always created. + Entities.EmptyLocation.Create(cx); + ExtractionContext.CompilationInfos.ForEach(ci => trapWriter.Writer.compilation_info(compilationEntity, ci.key, ci.value)); ReportProgressTaskDone(currentTaskId, assemblyPath, trapWriter.TrapFile, stopwatch.Elapsed, AnalysisAction.Extracted); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/BinaryLogAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/BinaryLogAnalyser.cs index 6026778f2f7..7e457e24837 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/BinaryLogAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/BinaryLogAnalyser.cs @@ -8,7 +8,7 @@ namespace Semmle.Extraction.CSharp public class BinaryLogAnalyser : Analyser { public BinaryLogAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, bool addAssemblyTrapPrefix) - : base(pm, logger, pathTransformer, pathCache, addAssemblyTrapPrefix) + : base(pm, logger, pathTransformer, pathCache, new TrivialOverlayInfo(), addAssemblyTrapPrefix) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CompilerVersion.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CompilerVersion.cs index e52c79a17e1..5429f2bba07 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CompilerVersion.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/CompilerVersion.cs @@ -74,7 +74,9 @@ namespace Semmle.Extraction.CSharp specifiedFramework = compilerDir; } - var versionInfo = FileVersionInfo.GetVersionInfo(SpecifiedCompiler); + // If csc is specified as compiler name, then attempt to read the version information from csc.dll + var compilerBinaryName = Path.GetFileName(SpecifiedCompiler) == "csc" ? $"{SpecifiedCompiler}.dll" : SpecifiedCompiler; + var versionInfo = FileVersionInfo.GetVersionInfo(File.Exists(compilerBinaryName) ? compilerBinaryName : SpecifiedCompiler); if (!knownCompilerNames.TryGetValue(versionInfo.OriginalFilename ?? string.Empty, out var vendor)) { SkipExtractionBecause("the compiler name is not recognised"); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs index f231c8238a9..c3752165204 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs @@ -29,6 +29,12 @@ namespace Semmle.Extraction.CSharp /// public bool ShouldAddAssemblyTrapPrefix { get; } + /// + /// Holds if trap only should be created for types and member signatures (and not for expressions and statements). + /// This is the case for all unchanged files, when running in overlay mode. + /// + public bool OnlyScaffold { get; } + public IList TrapStackSuffix { get; } = new List(); private int GetNewId() => TrapWriter.IdCounter++; @@ -523,13 +529,16 @@ namespace Semmle.Extraction.CSharp internal CommentProcessor CommentGenerator { get; } = new CommentProcessor(); - public Context(ExtractionContext extractionContext, Compilation c, TrapWriter trapWriter, IExtractionScope scope, bool shouldAddAssemblyTrapPrefix = false) + public Context(ExtractionContext extractionContext, Compilation c, TrapWriter trapWriter, IExtractionScope scope, IOverlayInfo overlayInfo, bool shouldAddAssemblyTrapPrefix = false) { ExtractionContext = extractionContext; TrapWriter = trapWriter; ShouldAddAssemblyTrapPrefix = shouldAddAssemblyTrapPrefix; Compilation = c; this.scope = scope; + OnlyScaffold = overlayInfo.IsOverlayMode && ( + IsAssemblyScope + || (scope is SourceScope ss && overlayInfo.OnlyMakeScaffold(ss.SourceTree.FilePath))); } public bool FromSource => scope is SourceScope; @@ -550,6 +559,26 @@ namespace Semmle.Extraction.CSharp !SymbolEqualityComparer.Default.Equals(symbol, symbol.OriginalDefinition) || scope.InScope(symbol); + public bool ExtractLocation(ISymbol symbol) => + SymbolEqualityComparer.Default.Equals(symbol, symbol.OriginalDefinition) && + scope.InScope(symbol) && + !OnlyScaffold; + + /// + /// Gets the locations of the symbol that are either + /// (1) In assemblies. + /// (2) In the current context. + /// + /// The symbol + /// List of locations + public IEnumerable GetLocations(ISymbol symbol) => + symbol.Locations + .Where(l => !l.IsInSource || IsLocationInContext(l)) + .Select(CreateLocation); + + public bool IsLocationInContext(Location location) => + location.SourceTree == SourceTree; + /// /// Runs the given action , guarding for trap duplication /// based on key . @@ -582,14 +611,14 @@ namespace Semmle.Extraction.CSharp public Entities.Location CreateLocation() { return SourceTree is null - ? Entities.GeneratedLocation.Create(this) + ? Entities.EmptyLocation.Create(this) : CreateLocation(Microsoft.CodeAnalysis.Location.Create(SourceTree, Microsoft.CodeAnalysis.Text.TextSpan.FromBounds(0, 0))); } public Entities.Location CreateLocation(Microsoft.CodeAnalysis.Location? location) { return (location is null || location.Kind == LocationKind.None) - ? Entities.GeneratedLocation.Create(this) + ? Entities.EmptyLocation.Create(this) : location.IsInSource ? Entities.NonGeneratedSourceLocation.Create(this, location) : Entities.Assembly.Create(this, location); @@ -602,6 +631,10 @@ namespace Semmle.Extraction.CSharp /// Location of the entity. public void BindComments(Entity entity, Microsoft.CodeAnalysis.Location? l) { + if (OnlyScaffold) + { + return; + } var duplicationGuardKey = GetCurrentTagStackKey(); CommentGenerator.AddElement(entity.Label, duplicationGuardKey, l); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs index 3c01893dd89..69aa7c47909 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs @@ -182,7 +182,7 @@ namespace Semmle.Extraction.CSharp var compilerCall = compilationData.CompilerCall; var diagnosticName = compilerCall.GetDiagnosticName(); logger.LogInfo($" Processing compilation {diagnosticName} at {compilerCall.ProjectDirectory}"); - var compilerArgs = compilerCall.GetArguments(); + var compilerArgs = reader.ReadArguments(compilerCall); var compilationIdentifierPath = string.Empty; try diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/OverlayInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/OverlayInfo.cs new file mode 100644 index 00000000000..9ff5d88b439 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/OverlayInfo.cs @@ -0,0 +1,124 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using Semmle.Util; +using Semmle.Util.Logging; + +namespace Semmle.Extraction.CSharp +{ + public interface IOverlayInfo + { + /// + /// True, if the extractor is running in overlay mode. + /// + bool IsOverlayMode { get; } + + /// + /// Returns true, if the given file is not in the set of changed files. + /// + /// A source file path + bool OnlyMakeScaffold(string filePath); + } + + + /// + /// An instance of this class is used when overlay is not enabled. + /// + public class TrivialOverlayInfo : IOverlayInfo + { + public TrivialOverlayInfo() { } + + public bool IsOverlayMode { get; } = false; + + public bool OnlyMakeScaffold(string filePath) => false; + } + + /// + /// An instance of this class is used for detecting + /// (1) Whether overlay is enabled. + /// (2) Fetch the changed files that should be fully extracted as a part + /// of the overlay extraction. + /// + public class OverlayInfo : IOverlayInfo + { + private readonly ILogger logger; + private readonly HashSet changedFiles; + private readonly string srcDir; + + public OverlayInfo(ILogger logger, string srcDir, string json) + { + this.logger = logger; + this.srcDir = srcDir; + changedFiles = ParseJson(json); + } + + public bool IsOverlayMode { get; } = true; + + public bool OnlyMakeScaffold(string filePath) => !changedFiles.Contains(filePath); + + /// + /// Private type only used to parse overlay changes JSON files. + /// + /// The content of such a file has the format + /// { + /// "changes": [ + /// "app/controllers/about_controller.xyz", + /// "app/models/about.xyz" + /// ] + /// } + /// + private record ChangedFiles + { + public string[]? Changes { get; set; } + } + + private HashSet ParseJson(string json) + { + try + { + var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; + var obj = JsonSerializer.Deserialize(json, options); + return obj?.Changes is string[] changes + ? changes.Select(change => Path.Join(srcDir, change)).ToHashSet() + : []; + } + catch (JsonException) + { + logger.LogError("Overlay: Unable to parse the JSON content from the overlay changes file."); + return []; + } + } + } + + public static class OverlayInfoFactory + { + /// + /// The returned object is used to decide, whether + /// (1) The extractor is running in overlay mode. + /// (2) Which files to only extract scaffolds for (unchanged files) + /// + /// A logger + /// The (overlay) source directory + /// An overlay information object. + public static IOverlayInfo Make(ILogger logger, string srcDir) + { + if (EnvironmentVariables.GetOverlayChangesFilePath() is string path) + { + logger.LogInfo($"Overlay: Reading overlay changes from file '{path}'."); + try + { + var json = File.ReadAllText(path); + return new OverlayInfo(logger, srcDir, json); + } + catch + { + logger.LogError("Overlay: Unexpected error while reading the overlay changes file."); + } + } + + logger.LogInfo("Overlay: Overlay mode not enabled."); + return new TrivialOverlayInfo(); + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs index 3ce315b372f..ff3c2889bc9 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs @@ -8,8 +8,8 @@ namespace Semmle.Extraction.CSharp { public class StandaloneAnalyser : Analyser { - public StandaloneAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, bool addAssemblyTrapPrefix) - : base(pm, logger, pathTransformer, pathCache, addAssemblyTrapPrefix) + public StandaloneAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, IOverlayInfo overlayInfo, bool addAssemblyTrapPrefix) + : base(pm, logger, pathTransformer, pathCache, overlayInfo, addAssemblyTrapPrefix) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs index 1139d7cdd9a..8a9856f1d31 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs @@ -14,7 +14,7 @@ namespace Semmle.Extraction.CSharp private bool init; public TracingAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, bool addAssemblyTrapPrefix) - : base(pm, logger, pathTransformer, pathCache, addAssemblyTrapPrefix) + : base(pm, logger, pathTransformer, pathCache, new TrivialOverlayInfo(), addAssemblyTrapPrefix) { } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Populators/CommentPopulator.cs b/csharp/extractor/Semmle.Extraction.CSharp/Populators/CommentPopulator.cs index 24e23ff4abf..5f7b16bba43 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Populators/CommentPopulator.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Populators/CommentPopulator.cs @@ -12,6 +12,10 @@ namespace Semmle.Extraction.CSharp.Populators { public static void ExtractCommentBlocks(Context cx, CommentProcessor gen) { + if (cx.OnlyScaffold) + { + return; + } cx.Try(null, null, () => { gen.GenerateBindings((entity, duplicationGuardKey, block, binding) => @@ -34,6 +38,10 @@ namespace Semmle.Extraction.CSharp.Populators public static void ExtractComment(Context cx, SyntaxTrivia trivia) { + if (cx.OnlyScaffold) + { + return; + } switch (trivia.Kind()) { case SyntaxKind.SingleLineDocumentationCommentTrivia: diff --git a/csharp/extractor/Semmle.Extraction.Tests/OverlayInfo.cs b/csharp/extractor/Semmle.Extraction.Tests/OverlayInfo.cs new file mode 100644 index 00000000000..6fde82541c1 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.Tests/OverlayInfo.cs @@ -0,0 +1,31 @@ +using Xunit; +using Semmle.Extraction.CSharp; +using System.IO; + +namespace Semmle.Extraction.Tests +{ + public class OverlayTests + { + [Fact] + public void TestOverlay() + { + var logger = new LoggerStub(); + var json = + """ + { + "changes": [ + "app/controllers/about_controller.xyz", + "app/models/about.xyz" + ] + } + """; + + var overlay = new OverlayInfo(logger, "overlay/source/path", json); + + Assert.True(overlay.IsOverlayMode); + Assert.False(overlay.OnlyMakeScaffold("overlay/source/path" + Path.DirectorySeparatorChar + "app/controllers/about_controller.xyz")); + Assert.False(overlay.OnlyMakeScaffold("overlay/source/path" + Path.DirectorySeparatorChar + "app/models/about.xyz")); + Assert.True(overlay.OnlyMakeScaffold("overlay/source/path" + Path.DirectorySeparatorChar + "app/models/unchanged.xyz")); + } + } +} diff --git a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs index 1b0e40790ff..edce64a53fe 100644 --- a/csharp/extractor/Semmle.Util/EnvironmentVariables.cs +++ b/csharp/extractor/Semmle.Util/EnvironmentVariables.cs @@ -53,5 +53,28 @@ namespace Semmle.Util { return Environment.GetEnvironmentVariable(name)?.Split(" ", StringSplitOptions.RemoveEmptyEntries) ?? []; } + + /// + /// Used to + /// (1) Detect whether the extractor should run in overlay mode. + /// (2) Returns the path to the file containing a list of changed files + /// in JSON format. + /// + /// The environment variable is only set in case the extraction is supposed to be + /// performed in overlay mode. Furthermore, this only applies to buildless extraction. + /// + public static string? GetOverlayChangesFilePath() + { + return Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OVERLAY_CHANGES"); + } + + /// + /// If the environment variable is set, the extractor is being called to extract a base database. + /// Its value will be a path, and the extractor must create either a file or directory at that location. + /// + public static string? GetBaseMetaDataOutPath() + { + return Environment.GetEnvironmentVariable("CODEQL_EXTRACTOR_CSHARP_OVERLAY_BASE_METADATA_OUT"); + } } } diff --git a/csharp/paket.dependencies b/csharp/paket.dependencies index 9413de7b1fe..cd2ac36422b 100644 --- a/csharp/paket.dependencies +++ b/csharp/paket.dependencies @@ -4,16 +4,16 @@ source https://api.nuget.org/v3/index.json # behave like nuget in choosing transitive dependency versions strategy: max -nuget Basic.CompilerLog.Util 0.9.8 +nuget Basic.CompilerLog.Util 0.9.21 nuget Mono.Posix.NETStandard nuget Newtonsoft.Json nuget xunit nuget xunit.runner.visualstudio nuget xunit.runner.utility nuget Microsoft.NET.Test.Sdk -nuget Microsoft.CodeAnalysis.CSharp 4.12.0 -nuget Microsoft.CodeAnalysis 4.12.0 -nuget Microsoft.Build 17.12.6 +nuget Microsoft.CodeAnalysis.CSharp 4.14.0 +nuget Microsoft.CodeAnalysis 4.14.0 +nuget Microsoft.Build 17.14.28 nuget Microsoft.Win32.Primitives nuget System.Net.Primitives nuget System.Security.Principal diff --git a/csharp/paket.lock b/csharp/paket.lock index 8120aadb5bd..d503e19d87d 100644 --- a/csharp/paket.lock +++ b/csharp/paket.lock @@ -3,143 +3,148 @@ STRATEGY: MAX RESTRICTION: == net9.0 NUGET remote: https://api.nuget.org/v3/index.json - Basic.CompilerLog.Util (0.9.8) - MessagePack (>= 2.5.187) - Microsoft.CodeAnalysis (>= 4.12) - Microsoft.CodeAnalysis.CSharp (>= 4.12) - Microsoft.CodeAnalysis.VisualBasic (>= 4.12) - Microsoft.Extensions.ObjectPool (>= 9.0.2) - MSBuild.StructuredLogger (>= 2.2.243) - System.Buffers (>= 4.6) + Basic.CompilerLog.Util (0.9.21) + MessagePack (>= 3.1.4) + Microsoft.Bcl.Memory (>= 9.0.10) + Microsoft.CodeAnalysis (>= 4.8) + Microsoft.CodeAnalysis.CSharp (>= 4.8) + Microsoft.CodeAnalysis.VisualBasic (>= 4.8) + Microsoft.Extensions.ObjectPool (>= 9.0.10) + MSBuild.StructuredLogger (>= 2.3.71) + NaturalSort.Extension (>= 4.4) Humanizer.Core (2.14.1) - MessagePack (3.0.300) - MessagePack.Annotations (>= 3.0.300) - MessagePackAnalyzer (>= 3.0.300) + MessagePack (3.1.4) + MessagePack.Annotations (>= 3.1.4) + MessagePackAnalyzer (>= 3.1.4) Microsoft.NET.StringTools (>= 17.11.4) - MessagePack.Annotations (3.0.300) - MessagePackAnalyzer (3.0.300) - Microsoft.Bcl.AsyncInterfaces (9.0) - Microsoft.Build (17.12.6) - Microsoft.Build.Framework (>= 17.12.6) - Microsoft.NET.StringTools (>= 17.12.6) - System.Collections.Immutable (>= 8.0) - System.Configuration.ConfigurationManager (>= 8.0) - System.Reflection.Metadata (>= 8.0) - System.Reflection.MetadataLoadContext (>= 8.0) - Microsoft.Build.Framework (17.12.6) - Microsoft.Build.Utilities.Core (17.12.6) - Microsoft.Build.Framework (>= 17.12.6) - Microsoft.NET.StringTools (>= 17.12.6) - System.Collections.Immutable (>= 8.0) - System.Configuration.ConfigurationManager (>= 8.0) - Microsoft.CodeAnalysis (4.12) + MessagePack.Annotations (3.1.4) + MessagePackAnalyzer (3.1.4) + Microsoft.Bcl.AsyncInterfaces (9.0.10) + Microsoft.Bcl.Memory (9.0.10) + Microsoft.Build (17.14.28) + Microsoft.Build.Framework (>= 17.14.28) + Microsoft.NET.StringTools (>= 17.14.28) + System.Configuration.ConfigurationManager (>= 9.0) + System.Diagnostics.EventLog (>= 9.0) + System.Reflection.MetadataLoadContext (>= 9.0) + System.Security.Cryptography.ProtectedData (>= 9.0) + Microsoft.Build.Framework (17.14.28) + Microsoft.Build.Utilities.Core (17.14.28) + Microsoft.Build.Framework (>= 17.14.28) + Microsoft.NET.StringTools (>= 17.14.28) + System.Collections.Immutable (>= 9.0) + System.Configuration.ConfigurationManager (>= 9.0) + System.Diagnostics.EventLog (>= 9.0) + System.Security.Cryptography.ProtectedData (>= 9.0) + Microsoft.CodeAnalysis (4.14) Humanizer.Core (>= 2.14.1) - Microsoft.Bcl.AsyncInterfaces (>= 8.0) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.CSharp.Workspaces (4.12) - Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.12) + Microsoft.Bcl.AsyncInterfaces (>= 9.0) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.CSharp.Workspaces (4.14) + Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.14) System.Buffers (>= 4.5.1) - System.Collections.Immutable (>= 8.0) - System.Composition (>= 8.0) - System.IO.Pipelines (>= 8.0) + System.Collections.Immutable (>= 9.0) + System.Composition (>= 9.0) + System.IO.Pipelines (>= 9.0) System.Memory (>= 4.5.5) System.Numerics.Vectors (>= 4.5) - System.Reflection.Metadata (>= 8.0) + System.Reflection.Metadata (>= 9.0) System.Runtime.CompilerServices.Unsafe (>= 6.0) System.Text.Encoding.CodePages (>= 7.0) System.Threading.Channels (>= 7.0) System.Threading.Tasks.Extensions (>= 4.5.4) Microsoft.CodeAnalysis.Analyzers (3.11) - Microsoft.CodeAnalysis.Common (4.12) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - System.Collections.Immutable (>= 8.0) - System.Reflection.Metadata (>= 8.0) - Microsoft.CodeAnalysis.CSharp (4.12) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.Common (4.12) - System.Collections.Immutable (>= 8.0) - System.Reflection.Metadata (>= 8.0) - Microsoft.CodeAnalysis.CSharp.Workspaces (4.12) + Microsoft.CodeAnalysis.Common (4.14) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + System.Collections.Immutable (>= 9.0) + System.Reflection.Metadata (>= 9.0) + Microsoft.CodeAnalysis.CSharp (4.14) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.Common (4.14) + System.Collections.Immutable (>= 9.0) + System.Reflection.Metadata (>= 9.0) + Microsoft.CodeAnalysis.CSharp.Workspaces (4.14) Humanizer.Core (>= 2.14.1) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.Common (4.12) - Microsoft.CodeAnalysis.CSharp (4.12) - Microsoft.CodeAnalysis.Workspaces.Common (4.12) - System.Collections.Immutable (>= 8.0) - System.Composition (>= 8.0) - System.IO.Pipelines (>= 8.0) - System.Reflection.Metadata (>= 8.0) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.Common (4.14) + Microsoft.CodeAnalysis.CSharp (4.14) + Microsoft.CodeAnalysis.Workspaces.Common (4.14) + System.Collections.Immutable (>= 9.0) + System.Composition (>= 9.0) + System.IO.Pipelines (>= 9.0) + System.Reflection.Metadata (>= 9.0) System.Threading.Channels (>= 7.0) - Microsoft.CodeAnalysis.VisualBasic (4.12) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.Common (4.12) - System.Collections.Immutable (>= 8.0) - System.Reflection.Metadata (>= 8.0) - Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.12) + Microsoft.CodeAnalysis.VisualBasic (4.14) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.Common (4.14) + System.Collections.Immutable (>= 9.0) + System.Reflection.Metadata (>= 9.0) + Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.14) Humanizer.Core (>= 2.14.1) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.Common (4.12) - Microsoft.CodeAnalysis.VisualBasic (4.12) - Microsoft.CodeAnalysis.Workspaces.Common (4.12) - System.Collections.Immutable (>= 8.0) - System.Composition (>= 8.0) - System.IO.Pipelines (>= 8.0) - System.Reflection.Metadata (>= 8.0) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.Common (4.14) + Microsoft.CodeAnalysis.VisualBasic (4.14) + Microsoft.CodeAnalysis.Workspaces.Common (4.14) + System.Collections.Immutable (>= 9.0) + System.Composition (>= 9.0) + System.IO.Pipelines (>= 9.0) + System.Reflection.Metadata (>= 9.0) System.Threading.Channels (>= 7.0) - Microsoft.CodeAnalysis.Workspaces.Common (4.12) + Microsoft.CodeAnalysis.Workspaces.Common (4.14) Humanizer.Core (>= 2.14.1) - Microsoft.CodeAnalysis.Analyzers (>= 3.3.4) - Microsoft.CodeAnalysis.Common (4.12) - System.Collections.Immutable (>= 8.0) - System.Composition (>= 8.0) - System.IO.Pipelines (>= 8.0) - System.Reflection.Metadata (>= 8.0) + Microsoft.CodeAnalysis.Analyzers (>= 3.11) + Microsoft.CodeAnalysis.Common (4.14) + System.Collections.Immutable (>= 9.0) + System.Composition (>= 9.0) + System.IO.Pipelines (>= 9.0) + System.Reflection.Metadata (>= 9.0) System.Threading.Channels (>= 7.0) - Microsoft.CodeCoverage (17.12) - Microsoft.Extensions.ObjectPool (9.0.3) - Microsoft.NET.StringTools (17.12.6) - Microsoft.NET.Test.Sdk (17.12) - Microsoft.CodeCoverage (>= 17.12) - Microsoft.TestPlatform.TestHost (>= 17.12) + Microsoft.CodeCoverage (18.0) + Microsoft.Extensions.ObjectPool (9.0.10) + Microsoft.NET.StringTools (17.14.28) + Microsoft.NET.Test.Sdk (18.0) + Microsoft.CodeCoverage (>= 18.0) + Microsoft.TestPlatform.TestHost (>= 18.0) Microsoft.NETCore.Platforms (7.0.4) Microsoft.NETCore.Targets (5.0) - Microsoft.TestPlatform.ObjectModel (17.12) - System.Reflection.Metadata (>= 1.6) - Microsoft.TestPlatform.TestHost (17.12) - Microsoft.TestPlatform.ObjectModel (>= 17.12) - Newtonsoft.Json (>= 13.0.1) + Microsoft.TestPlatform.ObjectModel (18.0) + System.Reflection.Metadata (>= 8.0) + Microsoft.TestPlatform.TestHost (18.0) + Microsoft.TestPlatform.ObjectModel (>= 18.0) + Newtonsoft.Json (>= 13.0.3) Microsoft.Win32.Primitives (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) Mono.Posix.NETStandard (1.0) - MSBuild.StructuredLogger (2.2.386) + MSBuild.StructuredLogger (2.3.71) Microsoft.Build.Framework (>= 17.5) Microsoft.Build.Utilities.Core (>= 17.5) System.Collections.Immutable (>= 8.0) - Newtonsoft.Json (13.0.3) - System.Buffers (4.6) - System.Collections.Immutable (9.0) - System.Composition (9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Convention (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.TypedParts (>= 9.0) - System.Composition.AttributedModel (9.0) - System.Composition.Convention (9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Hosting (9.0) - System.Composition.Runtime (>= 9.0) - System.Composition.Runtime (9.0) - System.Composition.TypedParts (9.0) - System.Composition.AttributedModel (>= 9.0) - System.Composition.Hosting (>= 9.0) - System.Composition.Runtime (>= 9.0) - System.Configuration.ConfigurationManager (9.0) - System.Diagnostics.EventLog (>= 9.0) - System.Security.Cryptography.ProtectedData (>= 9.0) - System.Diagnostics.EventLog (9.0) + NaturalSort.Extension (4.4) + Newtonsoft.Json (13.0.4) + System.Buffers (4.6.1) + System.Collections.Immutable (9.0.10) + System.Composition (9.0.10) + System.Composition.AttributedModel (>= 9.0.10) + System.Composition.Convention (>= 9.0.10) + System.Composition.Hosting (>= 9.0.10) + System.Composition.Runtime (>= 9.0.10) + System.Composition.TypedParts (>= 9.0.10) + System.Composition.AttributedModel (9.0.10) + System.Composition.Convention (9.0.10) + System.Composition.AttributedModel (>= 9.0.10) + System.Composition.Hosting (9.0.10) + System.Composition.Runtime (>= 9.0.10) + System.Composition.Runtime (9.0.10) + System.Composition.TypedParts (9.0.10) + System.Composition.AttributedModel (>= 9.0.10) + System.Composition.Hosting (>= 9.0.10) + System.Composition.Runtime (>= 9.0.10) + System.Configuration.ConfigurationManager (9.0.10) + System.Diagnostics.EventLog (>= 9.0.10) + System.Security.Cryptography.ProtectedData (>= 9.0.10) + System.Diagnostics.EventLog (9.0.10) System.IO (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -157,55 +162,55 @@ NUGET System.Threading.Tasks (>= 4.3) System.IO.FileSystem.Primitives (4.3) System.Runtime (>= 4.3) - System.IO.Pipelines (9.0) - System.Memory (4.6) + System.IO.Pipelines (9.0.10) + System.Memory (4.6.3) System.Net.Primitives (4.3.1) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) System.Runtime (>= 4.3.1) System.Runtime.Handles (>= 4.3) - System.Numerics.Vectors (4.6) - System.Reflection.Metadata (9.0) - System.Reflection.MetadataLoadContext (9.0) + System.Numerics.Vectors (4.6.1) + System.Reflection.Metadata (9.0.10) + System.Reflection.MetadataLoadContext (9.0.10) System.Runtime (4.3.1) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) - System.Runtime.CompilerServices.Unsafe (6.1) + System.Runtime.CompilerServices.Unsafe (6.1.2) System.Runtime.Handles (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) - System.Security.Cryptography.ProtectedData (9.0) + System.Security.Cryptography.ProtectedData (9.0.10) System.Security.Principal (4.3) System.Runtime (>= 4.3) System.Text.Encoding (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) - System.Text.Encoding.CodePages (9.0) - System.Threading.Channels (9.0) + System.Text.Encoding.CodePages (9.0.10) + System.Threading.Channels (9.0.10) System.Threading.Tasks (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) - System.Threading.Tasks.Extensions (4.6) + System.Threading.Tasks.Extensions (4.6.3) System.Threading.ThreadPool (4.3) System.Runtime (>= 4.3) System.Runtime.Handles (>= 4.3) - xunit (2.9.2) - xunit.analyzers (>= 1.16) - xunit.assert (>= 2.9.2) - xunit.core (2.9.2) + xunit (2.9.3) + xunit.analyzers (>= 1.18) + xunit.assert (>= 2.9.3) + xunit.core (2.9.3) xunit.abstractions (2.0.3) - xunit.analyzers (1.17) - xunit.assert (2.9.2) - xunit.core (2.9.2) - xunit.extensibility.core (2.9.2) - xunit.extensibility.execution (2.9.2) - xunit.extensibility.core (2.9.2) + xunit.analyzers (1.24) + xunit.assert (2.9.3) + xunit.core (2.9.3) + xunit.extensibility.core (2.9.3) + xunit.extensibility.execution (2.9.3) + xunit.extensibility.core (2.9.3) xunit.abstractions (>= 2.0.3) - xunit.extensibility.execution (2.9.2) - xunit.extensibility.core (2.9.2) - xunit.runner.utility (2.9.2) + xunit.extensibility.execution (2.9.3) + xunit.extensibility.core (2.9.3) + xunit.runner.utility (2.9.3) xunit.abstractions (>= 2.0.3) - xunit.runner.visualstudio (2.8.2) + xunit.runner.visualstudio (3.1.5) diff --git a/csharp/paket.main.bzl b/csharp/paket.main.bzl index 90d568ba3a8..1ef6f63df8f 100644 --- a/csharp/paket.main.bzl +++ b/csharp/paket.main.bzl @@ -7,73 +7,75 @@ def main(): nuget_repo( name = "paket.main", packages = [ - {"name": "Basic.CompilerLog.Util", "id": "Basic.CompilerLog.Util", "version": "0.9.8", "sha512": "sha512-bBlxHTdPRrmaw4AqoNwtx3jyAP63RVp2kwCn+UegxrimDYVCmhdgCkFjzlAc2Bo1LbO7HrsFhfh6lFijugOX3A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net462": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net47": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net471": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net472": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net48": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net5.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net6.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net7.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net8.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "net9.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netcoreapp2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netcoreapp2.2": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netcoreapp3.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netcoreapp3.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"], "netstandard2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "System.Buffers"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Basic.CompilerLog.Util", "id": "Basic.CompilerLog.Util", "version": "0.9.21", "sha512": "sha512-l+Qbzh3nVaLLwZYgv/v5zIEdprseLgxcprHBvbNBzOyer7m6XD/N5GJC+FPChnSP48kK1/p7Nj7mvQH8d5NOtA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net462": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net47": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net471": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net472": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net48": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net5.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net6.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net7.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "net8.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension"], "net9.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp2.2": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp3.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netcoreapp3.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"], "netstandard2.1": ["MSBuild.StructuredLogger", "MessagePack", "Microsoft.Bcl.Memory", "Microsoft.CodeAnalysis", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.Extensions.ObjectPool", "NaturalSort.Extension", "System.Buffers"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Humanizer.Core", "id": "Humanizer.Core", "version": "2.14.1", "sha512": "sha512-yzqGU/HKNLZ9Uvr6kvSc3wYV/S5O/IvklIUW5WF7MuivGLY8wS5IZnLPkt7D1KW8Et2Enl0I3Lzg2vGWM24Xsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePack", "id": "MessagePack", "version": "3.0.300", "sha512": "sha512-5Mdl6CrQcxVVLawvqebPLALFdIMgWOnEGxxFvXWjJ/8KGyyhbfKMusj34Wv1AwE+uE9VAb+McVxtR9HDZIUwuA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net6.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net7.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net8.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "net9.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netcoreapp3.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePack.Annotations", "id": "MessagePack.Annotations", "version": "3.0.300", "sha512": "sha512-Jh9+7EsDtDSEciX8RfXHWxtRlC94wvCmmv+sFzGdzPF4fAp7OAGFktzViPBHMkCxrSh3hmM7jGUB7yMyUmzRCA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MessagePackAnalyzer", "id": "MessagePackAnalyzer", "version": "3.0.300", "sha512": "sha512-Ad0UHGpotoXZYkBjJgO5Z1aTJz5YIsFGVrxc75OiHO/fNKSRKFiM1X2E1WTB5h7pk3uDzqXfh0M5fEEQVZ8FiQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "9.0.0", "sha512": "sha512-bYp2ksSR5uB6xqOa4NyD2gBOeFrc2n8FAWoh781MNMDcPjk1ysD7DNpv7r7sQOXfdFJT6F/syX7fN4lmUsn+RQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build", "id": "Microsoft.Build", "version": "17.12.6", "sha512": "sha512-YEiL5xKowbwnr52YroALNHg8YurjLyFTlhv3USrswhubuxN2ldY1TmQpBKQ4K28UgWJV9BxTVXY9/CecMNDeOA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build.Framework", "id": "Microsoft.Build.Framework", "version": "17.12.6", "sha512": "sha512-UjfxnrQN9BPVtO0Kvv2FB5dpN2CX5snc7coq5vVQdbCV6kdSpI/r+GZTLvU/5BTT8y8bvIUqoocxRR674N6bWg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Build.Utilities.Core", "id": "Microsoft.Build.Utilities.Core", "version": "17.12.6", "sha512": "sha512-YPtNsiLEPn3g3EcO+Kyr7fIdufg6wdzibzufclQYZjIDS80krFsYi2rTpeTmHtlCK0PhyLvxJAQZ3NecgJHTkg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis", "id": "Microsoft.CodeAnalysis", "version": "4.12.0", "sha512": "sha512-saGSG86irNb5MX0/7j0Lx2T0jSGQuqa6QlohBHBcTzObPyMunQZIuIWVXlEiKwcrcEQm4rtUg/5FW43s0dqH7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net9.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "MessagePack", "id": "MessagePack", "version": "3.1.4", "sha512": "sha512-O0JoklM97ru+Rqr1hGnlCbSAxi8MOk48pwoaT458RzboCHuAkQWTh+Of9MUoN3LE0Cb2tapku0FRPt2hnk+o0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net6.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net7.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "net8.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "net9.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netcoreapp3.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Threading.Tasks.Extensions", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["MessagePackAnalyzer", "MessagePack.Annotations", "Microsoft.NET.StringTools", "System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "MessagePack.Annotations", "id": "MessagePack.Annotations", "version": "3.1.4", "sha512": "sha512-kIgD3A0OHs8+VUabMhIJT9ZF4oGHqjCocaRDmERI/Ds2hzJ5q3kcvzn5zI7V3CJ2NlQ4HDI80uh6zCqglwgQCQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "MessagePackAnalyzer", "id": "MessagePackAnalyzer", "version": "3.1.4", "sha512": "sha512-DFlhiA5fia4iK6i0S+L7sYMYmo5XRgWydKxiaxwz7tfcbvIhU7nmG4JzN1D9Y2XCEmLNExvNwTzXVEgURu4GnA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "9.0.10", "sha512": "sha512-Di823U3L+0A2YQGU1HqJC7Gh8o/nuSXle5u6QDgho9s920QbVk6BS5fKJ0s+pzW+WbqM9+aPUQ2DJsfP6tLdKg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Bcl.Memory", "id": "Microsoft.Bcl.Memory", "version": "9.0.10", "sha512": "sha512-BZV+TVnrDf9O+Ak5gN47uOkECCtpiVq6MpEYX5lQcG1WFD6/Bnx5eyfueX9giDQPEk6azzhSPTGmJcWNXRBc+Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Build", "id": "Microsoft.Build", "version": "17.14.28", "sha512": "sha512-/J3DY36eYjSi/NYf/m4fS4HlxN8Zy+bCsopJUN0j4NNnrws4NR9ueWd0HKyhWEYYUa29Q1kjG1uKSGN1jBWg4g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Reflection.MetadataLoadContext", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Build.Framework", "id": "Microsoft.Build.Framework", "version": "17.14.28", "sha512": "sha512-Gj4C8LNilfH6u6xu7QI/y0tkJCp3yQQpde/3qeK8E2FOfrZ4ENOoG/r2eKZws15bN6HPj09PhaJoqBhdbJdLpA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Runtime.CompilerServices.Unsafe", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Build.Utilities.Core", "id": "Microsoft.Build.Utilities.Core", "version": "17.14.28", "sha512": "sha512-A5uyO5HysGJRFR3IjjVKJ0Y69USn3E5Vlt/h51yID5Ynts4zHdh5ZELeU1gCoeF8i3tE21gO2u+QQLqQlb/iUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net462": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net47": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net471": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Text.Encoding.CodePages", "System.Memory", "System.Runtime.CompilerServices.Unsafe", "System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis", "id": "Microsoft.CodeAnalysis", "version": "4.14.0", "sha512": "sha512-eNBbL927Lc1Nh24ElWJmlGA928O9tu4mgWGOqmMFe6sskqQWCdnronCrrzwUdhBsBIjfx898MOCMOXuZQMtqOg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net9.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Microsoft.CodeAnalysis.Analyzers", "id": "Microsoft.CodeAnalysis.Analyzers", "version": "3.11.0", "sha512": "sha512-tP9SLzLK72XCExlh8KXfrKbU6ycmZL3ExGl/a3Ml7LNy2Uaam7gFjjUmdzyTYkMXTyckCHHpzx7bD6BMumh8Bg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.Common", "id": "Microsoft.CodeAnalysis.Common", "version": "4.12.0", "sha512": "sha512-83sYPF0SekVhecApCFXsLCsQL9qFzAl5ieCEqVb8Uo08nV34YD3cfq7FLv6EkhnAwPbP7ky19sAEEqYLDUrxWA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net462": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net47": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net471": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net472": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net48": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net5.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net6.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net7.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net8.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.CSharp", "id": "Microsoft.CodeAnalysis.CSharp", "version": "4.12.0", "sha512": "sha512-Dbb/taxFill9/+2HRJufXW3udAtJaQw3+LzbWTDyYx7Z02HVdU5ydMXXTqg5lFgSmLDNBe+B8jRuI2eYw8OBOA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "id": "Microsoft.CodeAnalysis.CSharp.Workspaces", "version": "4.12.0", "sha512": "sha512-YwFqDAYHJrf02FyGU8nQnaWNryZXuDV0r8pVgWjRtxAFDWfaU5CZxvU/4NsS6GSnEsWp6W/e49QMHsDXTJW/KA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.VisualBasic", "id": "Microsoft.CodeAnalysis.VisualBasic", "version": "4.12.0", "sha512": "sha512-le1vRWFDjf9mYrVwhxw+rNZpRg/AvBi9aK+4zfn47qN2S7XPXtDwdz/dvxVg8bKJMfkwK1WPi2Bvlc7naPdaYg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "id": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "version": "4.12.0", "sha512": "sha512-j/XDFfNu38FSTJOIhkB8pvLWNVNqNhaZTRtLuH/WsHUsnYfIztaDW9seR7OsUBF5LuZIKQ9uaCrj7p+0/BgPkw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeAnalysis.Workspaces.Common", "id": "Microsoft.CodeAnalysis.Workspaces.Common", "version": "4.12.0", "sha512": "sha512-bzZOMF3kAtQhc5kcUILy0GyhgePksk/j9DJtlvFex1UYNgXJUoEkA6IUGootH1Z6GH4Z5BuLNXiFzsz9oJwbcQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.CodeCoverage", "id": "Microsoft.CodeCoverage", "version": "17.12.0", "sha512": "sha512-POBqg788rrLApvncy8rvtyJ3ynsBdU0/SGUXD+vPqyRDM/aUJbPZWx01qalGJRK1GcArSku8QDd9AVMa0TkCkA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.Extensions.ObjectPool", "id": "Microsoft.Extensions.ObjectPool", "version": "9.0.3", "sha512": "sha512-0s2vnkWqUSPhhe+Llybuli0LMon5Mf7Mx9NSO9ErGFGU+dSZqwz1Ixa7mXJo2W+Y74BXYE+yfU0HIsPUMOkwZQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NET.StringTools", "id": "Microsoft.NET.StringTools", "version": "17.12.6", "sha512": "sha512-uCT/G0W1wUteqfrriWHfLfFmArka8ISo6nUkC5gQzYZYm2PSTuqfS14DEsY0gqDuQpcLLLaYTDcEM0SA2Za5vA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.NET.Test.Sdk", "id": "Microsoft.NET.Test.Sdk", "version": "17.12.0", "sha512": "sha512-hGf8I8+yo15etavoMd+7OXcOG6/G7HYPDEJg5aQnhMzsxaUpq+udNZzSxmEN9rGTWMZOAVFcyNXNL7YBsN6chw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.CodeCoverage"], "net47": ["Microsoft.CodeCoverage"], "net471": ["Microsoft.CodeCoverage"], "net472": ["Microsoft.CodeCoverage"], "net48": ["Microsoft.CodeCoverage"], "net5.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net6.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net7.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net8.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net9.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.Common", "id": "Microsoft.CodeAnalysis.Common", "version": "4.14.0", "sha512": "sha512-k9AIzOrtcZVqr9+lmcEW0vY80emyXx5JB/757K0HUF96GeUeiTD+djOlFF2y7k4XPZo20Lru4tDgQos+VKBr0w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net462": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net47": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net471": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net472": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net48": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net5.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net6.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net7.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "net8.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"], "netstandard2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Memory", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions", "System.Buffers", "System.Numerics.Vectors"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.CSharp", "id": "Microsoft.CodeAnalysis.CSharp", "version": "4.14.0", "sha512": "sha512-kqS2NihVvNQHxzLePtyYiiJmFzoYO9Wm46O9DhfUgIIf5NwTbvSy66kV9EM+qAHmGpi7zQy4w8JU6DFnPlAyTA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "id": "Microsoft.CodeAnalysis.CSharp.Workspaces", "version": "4.14.0", "sha512": "sha512-q9VD/wqMEGW0S5WIKuTZ4Wr9EpsZJQrQxqCodxjlsfW0bWl7mOQ4zA7k0Nf80ZrEe7Edaz6+3SBvrALiUcaHzA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.VisualBasic", "id": "Microsoft.CodeAnalysis.VisualBasic", "version": "4.14.0", "sha512": "sha512-vXhNyQk07THoSHzsu/fM48tFFHYAZQumfT7uDJuL/5ZO4CRgJK9Zr6UOJOwX1Df8N//lRMeymYyT+qiAmnWiYA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "id": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "version": "4.14.0", "sha512": "sha512-LZMVjjbRTcKOtgVDz/sZn+AXBNGL4iKYnWwu5eOvvRcdXaLNlOA7bYtTZOnSMlqig7b/3gMzkoaLqcJ+7hgddg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Reflection.Metadata", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Composition", "System.IO.Pipelines", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Channels", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeAnalysis.Workspaces.Common", "id": "Microsoft.CodeAnalysis.Workspaces.Common", "version": "4.14.0", "sha512": "sha512-m/c+FWBNr/JgCYRJ/jh14U9oAtPxHTgDiujb+19QG1AA3KMNZed+UQ51PRSaOt9CbIoMubZp2AkUMSeioz4EHQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels", "Microsoft.CodeAnalysis.Analyzers", "System.Buffers", "System.Collections.Immutable", "System.Memory", "System.Numerics.Vectors", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encoding.CodePages", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CodeCoverage", "id": "Microsoft.CodeCoverage", "version": "18.0.0", "sha512": "sha512-HT0zpIWW9Q0Csllqo7lefZ27HE6dl5gfh7NA4FPZjEURenH2GsvpRSZ63b1d3klDphxiX8bpxKwVSzyURhhgkQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Extensions.ObjectPool", "id": "Microsoft.Extensions.ObjectPool", "version": "9.0.10", "sha512": "sha512-mx7sdMdkCBJuJQkSEaV9wQaB39+ciVUX0VCB7YrqAGvxyBkLRR0mgl9v7j4c6lVMeRZH79FgKOy1WaQbSyhVKA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NET.StringTools", "id": "Microsoft.NET.StringTools", "version": "17.14.28", "sha512": "sha512-oJDGPNoVuWOmKTPpFK0lJnVwbLMRsm2oxgxBFOMKBYzSZtmiS0kcoednhArAeAicV2aSUFiuor1pw7JK/p2LwQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NET.Test.Sdk", "id": "Microsoft.NET.Test.Sdk", "version": "18.0.0", "sha512": "sha512-+0iHCuP77nxZLLfEhCNDMOcy8+qC7IFtsLrSwSzp0qc7pUs2J28Stu2c+m9AEKkKdvhsMKB/AhlFOSyeOpdKVg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.CodeCoverage"], "net47": ["Microsoft.CodeCoverage"], "net471": ["Microsoft.CodeCoverage"], "net472": ["Microsoft.CodeCoverage"], "net48": ["Microsoft.CodeCoverage"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net9.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Microsoft.NETCore.Platforms", "id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Microsoft.NETCore.Targets", "id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.TestPlatform.ObjectModel", "id": "Microsoft.TestPlatform.ObjectModel", "version": "17.12.0", "sha512": "sha512-klsXMgAPNWYo3ceakLkod4wYrk4lAV2Ehi676zUKgiVpQ5Yj6q3vsMhk/3pm97Ltk/hdcSW0rJKJvcQvTzPgYA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Reflection.Metadata"], "net462": ["System.Reflection.Metadata"], "net47": ["System.Reflection.Metadata"], "net471": ["System.Reflection.Metadata"], "net472": ["System.Reflection.Metadata"], "net48": ["System.Reflection.Metadata"], "net5.0": ["System.Reflection.Metadata"], "net6.0": ["System.Reflection.Metadata"], "net7.0": ["System.Reflection.Metadata"], "net8.0": ["System.Reflection.Metadata"], "net9.0": ["System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Reflection.Metadata"], "netcoreapp2.1": ["System.Reflection.Metadata"], "netcoreapp2.2": ["System.Reflection.Metadata"], "netcoreapp3.0": ["System.Reflection.Metadata"], "netcoreapp3.1": ["System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Reflection.Metadata"], "netstandard2.1": ["System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Microsoft.TestPlatform.TestHost", "id": "Microsoft.TestPlatform.TestHost", "version": "17.12.0", "sha512": "sha512-gYM2BOGQvFEP2fZt61f3f5Gu+imL1G1bvGUrbJjpYcl66R6uzs5yESg0XMn8IgUgldz8RldOOaYmjk2KcSeG1Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net6.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net7.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net8.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net9.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.TestPlatform.ObjectModel", "id": "Microsoft.TestPlatform.ObjectModel", "version": "18.0.0", "sha512": "sha512-/ShCZQuIxaxzGjRQqCYTLD/KnG1yQKsNZXDUtjO2d55IOB8FEyhXleLw2hw8QlK/1gkblyJsp4BfQ8BQFaEAlg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Reflection.Metadata"], "net462": ["System.Reflection.Metadata"], "net47": ["System.Reflection.Metadata"], "net471": ["System.Reflection.Metadata"], "net472": ["System.Reflection.Metadata"], "net48": ["System.Reflection.Metadata"], "net5.0": ["System.Reflection.Metadata"], "net6.0": ["System.Reflection.Metadata"], "net7.0": ["System.Reflection.Metadata"], "net8.0": ["System.Reflection.Metadata"], "net9.0": ["System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Reflection.Metadata"], "netcoreapp2.1": ["System.Reflection.Metadata"], "netcoreapp2.2": ["System.Reflection.Metadata"], "netcoreapp3.0": ["System.Reflection.Metadata"], "netcoreapp3.1": ["System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Reflection.Metadata"], "netstandard2.1": ["System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.TestPlatform.TestHost", "id": "Microsoft.TestPlatform.TestHost", "version": "18.0.0", "sha512": "sha512-9IZUooXUUnh+z04QtWCu5iku4D4FAfJajP1su+I6741AxXa0bnXPo2125vqjvK0Khfsk16zskgDpG6vf2Mjubg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net9.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Microsoft.Win32.Primitives", "id": "Microsoft.Win32.Primitives", "version": "4.3.0", "sha512": "sha512-Nm8Hp51y9tYcK3xD6qk43Wjftrg1mdH24CCJsTb6gr7HS21U1uA+CKPGEtUcVZbjU1y8Kynzm5eoJ7Pnx5gm8A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "Mono.Posix.NETStandard", "id": "Mono.Posix.NETStandard", "version": "1.0.0", "sha512": "sha512-RtGiutQZJAmajvQ0QvBvh73VJye85iW9f9tjZlzF88idLxNMo4lAktP/4Y9ilCpais0LDO0tpoICt9Hdv6wooA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "MSBuild.StructuredLogger", "id": "MSBuild.StructuredLogger", "version": "2.2.386", "sha512": "sha512-m8ErawcbeDJ+nWtN62vh2OPHARvLpSqhOBCedtYniPGB059wSs2vuGPxfBcVGqVcjpZgntEY4vDOzGyAVB7atA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.3", "sha512": "sha512-mbJSvHfRxfX3tR/U6n1WU+mWHXswYc+SB/hkOpx8yZZe68hNZGfymJu0cjsaJEkVzCMqePiU6LdIyogqfIn7kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Buffers", "id": "System.Buffers", "version": "4.6.0", "sha512": "sha512-iRbJyTSX9bJVpURLGLiW8Fgk5Vfm5iGCztw4IG4IJYcxJy+BXTCEgEWFeJtO6c+kPnUmQu87KK5m188+qbErcQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Collections.Immutable", "id": "System.Collections.Immutable", "version": "9.0.0", "sha512": "sha512-z/Oo7nxWmZ0Y578vj8EUVrFJZ3DX6OMuUGlgeYgeeUZOFGT89XfaM8fDFMvJy6+mOIqW6ux5NdNzEnlTnQGJ7A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition", "id": "System.Composition", "version": "9.0.0", "sha512": "sha512-aWcyK90nIChHyxq7rpQ83Bbvt/t9l1X6yQtkvODaZ+rJlYHUMVpSji0YXIZTX5VlcWRCVRFdeEY767BCOzueaw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net462": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net47": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net471": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net472": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net48": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.AttributedModel", "id": "System.Composition.AttributedModel", "version": "9.0.0", "sha512": "sha512-oYuQzlIvO31GxSlTo6NCU+RnK9dVb1m154BNE7VGm9PUyJM+RrOQss8cNbMj+iIWVcp6VRnyJlBJ3MfzYo14AA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Convention", "id": "System.Composition.Convention", "version": "9.0.0", "sha512": "sha512-3efhxn/7hQI9kNy6M6UUwWrMJCzdBZZ4hkYS3MUxqXyGdQ2sLCWToX1nLnnrRYafcdRSMOY2naMPNlRAEKDAGA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel"], "net462": ["System.Composition.AttributedModel"], "net47": ["System.Composition.AttributedModel"], "net471": ["System.Composition.AttributedModel"], "net472": ["System.Composition.AttributedModel"], "net48": ["System.Composition.AttributedModel"], "net5.0": ["System.Composition.AttributedModel"], "net6.0": ["System.Composition.AttributedModel"], "net7.0": ["System.Composition.AttributedModel"], "net8.0": ["System.Composition.AttributedModel"], "net9.0": ["System.Composition.AttributedModel"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel"], "netcoreapp2.1": ["System.Composition.AttributedModel"], "netcoreapp2.2": ["System.Composition.AttributedModel"], "netcoreapp3.0": ["System.Composition.AttributedModel"], "netcoreapp3.1": ["System.Composition.AttributedModel"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel"], "netstandard2.1": ["System.Composition.AttributedModel"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Hosting", "id": "System.Composition.Hosting", "version": "9.0.0", "sha512": "sha512-zLPGbMYw6y2GoNBjcoPnvXt7wSJM/qIG1fU2Do8kDObDTYWHG6fFOhulSViX0Ip2j+qGeuCESqEswCRG+xDvwA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.Runtime"], "net462": ["System.Composition.Runtime"], "net47": ["System.Composition.Runtime"], "net471": ["System.Composition.Runtime"], "net472": ["System.Composition.Runtime"], "net48": ["System.Composition.Runtime"], "net5.0": ["System.Composition.Runtime"], "net6.0": ["System.Composition.Runtime"], "net7.0": ["System.Composition.Runtime"], "net8.0": ["System.Composition.Runtime"], "net9.0": ["System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.Runtime"], "netstandard2.1": ["System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.Runtime", "id": "System.Composition.Runtime", "version": "9.0.0", "sha512": "sha512-P777aBPIwmLvL0Q8mPA7RiiomfjqLTbpX/xzKpk7YTJLcvPDMTvRIfNFognEpfJYRLadBymaBIU81vW3MzZYnA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Composition.TypedParts", "id": "System.Composition.TypedParts", "version": "9.0.0", "sha512": "sha512-7b7mkn4H0149jNKD1tZRUG2gmkszNzO6YAGV+xEsxdfIU+5SLhxWRYJpqm1zKzKNdzpKUW93oyEFGcTuoNvqGg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net462": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net47": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net471": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net472": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net48": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Configuration.ConfigurationManager", "id": "System.Configuration.ConfigurationManager", "version": "9.0.0", "sha512": "sha512-RMASWXcds+sKAl/W6itFM8hvq9aha8CRqSv2nrjb8TUTSMLjjn80h1Lrob7km+v/1UfpUU/Nr67egAjZjsCgIw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Cryptography.ProtectedData"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Security.Cryptography.ProtectedData"], "net6.0": ["System.Security.Cryptography.ProtectedData"], "net7.0": ["System.Security.Cryptography.ProtectedData"], "net8.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net9.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "9.0.0", "sha512": "sha512-ouyDUtZFOgkAPYmYUzioIjMxmgdI/E3j1sIuAbkXv4cTFOisf5FvQrbwi0KC84GUJMjkImXbaZqlTH9M5dJz2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "MSBuild.StructuredLogger", "id": "MSBuild.StructuredLogger", "version": "2.3.71", "sha512": "sha512-u2Tw1WLYy+2VdccrQWyN3AY8zcFj4evfwqWMd7aBiicX3eGfkWkME7lsh9K2XS/+S8KVkjGNPI/g78E2A7Zx0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "net9.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.Build.Framework", "Microsoft.Build.Utilities.Core", "System.Collections.Immutable", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "NaturalSort.Extension", "id": "NaturalSort.Extension", "version": "4.4.0", "sha512": "sha512-lcwYGJO2xZylcLW6B64tp6wE9UAt6fSn6el8MSAly5+6QG1vc/9uXQz+dsi69q1DxFv2TOaWrrheHNzg4yvy3Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.4", "sha512": "sha512-bR+v+E/yJ6g7GV2uXw2OrUSjYYfjLkOLC8JD4kCS23msLapnKtdJPBJA75fwHH++ErIffeIqzYITLxAur4KAXA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Buffers", "id": "System.Buffers", "version": "4.6.1", "sha512": "sha512-qve/dFwECwehSWlZmpkrrlIeATCvo/Hw2koyMrUVcDBy5gXAQrnwX8pHEoqgj8DgkrWuWW1DrQbFqoMbo+Fvrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Collections.Immutable", "id": "System.Collections.Immutable", "version": "9.0.10", "sha512": "sha512-00LI4a7blU063Z0lCdRVLlh0Mzl1yYLZaxlOZe0MiNH+TELklX0Mne/XKU7UuCZQQh6FHrcEUPDjxIsy2jZUxg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition", "id": "System.Composition", "version": "9.0.10", "sha512": "sha512-PyUH0f6tdjlQBntP/73cqaR53fjAZkaqGRatIi1BgZIfQH/Z0k1rPHaklBZqFV5+wKUkL74+49TrFPnB/zw+2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net462": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net47": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net471": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net472": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net48": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition.AttributedModel", "id": "System.Composition.AttributedModel", "version": "9.0.10", "sha512": "sha512-9Gx8SRD1DJcQLca7ZaeMjU+qUd4EdxDj6urKR4TizWx+NM7L+beoAn07XCKkdJsweqF6gUK7el93DhUbpssSqA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition.Convention", "id": "System.Composition.Convention", "version": "9.0.10", "sha512": "sha512-hzvwytBYpKoDX+OJpHXKoupR+BYy+QCUY5vSWOTvJLagAm3zYJKxAUR3l8OyPy46tnQ+3lK/6f5DeLHiTfbIIw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel"], "net462": ["System.Composition.AttributedModel"], "net47": ["System.Composition.AttributedModel"], "net471": ["System.Composition.AttributedModel"], "net472": ["System.Composition.AttributedModel"], "net48": ["System.Composition.AttributedModel"], "net5.0": ["System.Composition.AttributedModel"], "net6.0": ["System.Composition.AttributedModel"], "net7.0": ["System.Composition.AttributedModel"], "net8.0": ["System.Composition.AttributedModel"], "net9.0": ["System.Composition.AttributedModel"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel"], "netcoreapp2.1": ["System.Composition.AttributedModel"], "netcoreapp2.2": ["System.Composition.AttributedModel"], "netcoreapp3.0": ["System.Composition.AttributedModel"], "netcoreapp3.1": ["System.Composition.AttributedModel"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel"], "netstandard2.1": ["System.Composition.AttributedModel"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition.Hosting", "id": "System.Composition.Hosting", "version": "9.0.10", "sha512": "sha512-fPTM06IdvHrFIRJyYEpVKl5W7UTT4U3E+iiAVg3DFfuQ4Abe4XVhkoHn3DB4pUTOU2RpVc2+PxQ6y9hULPta1A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.Runtime"], "net462": ["System.Composition.Runtime"], "net47": ["System.Composition.Runtime"], "net471": ["System.Composition.Runtime"], "net472": ["System.Composition.Runtime"], "net48": ["System.Composition.Runtime"], "net5.0": ["System.Composition.Runtime"], "net6.0": ["System.Composition.Runtime"], "net7.0": ["System.Composition.Runtime"], "net8.0": ["System.Composition.Runtime"], "net9.0": ["System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.Runtime"], "netstandard2.1": ["System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition.Runtime", "id": "System.Composition.Runtime", "version": "9.0.10", "sha512": "sha512-8iDtNLXkjiFwir6Ocrm4XCC19Jzj06OHTvDeL6BZ4guWhCCGRCl6nWJVPonq6G2kZmNiDfraOwC8RgV5qPAAjg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Composition.TypedParts", "id": "System.Composition.TypedParts", "version": "9.0.10", "sha512": "sha512-7OUDlDYszrhjJ8/r5na3N07XzBWl8e6/87dyGoDraDHlkl+APL4dbZ8TfniaXLJxZabDHVaaMLpViiIf+Fb9Ng==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net462": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net47": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net471": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net472": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net48": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net9.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Configuration.ConfigurationManager", "id": "System.Configuration.ConfigurationManager", "version": "9.0.10", "sha512": "sha512-/LM2cc6vZulHDcDsd+9vntVD9j953k8WCCzB4Fea6YxOoIexpGP8iJhC7v13hKN5V66MDprjCJRjHHhDaDuOXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Cryptography.ProtectedData"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Security.Cryptography.ProtectedData"], "net6.0": ["System.Security.Cryptography.ProtectedData"], "net7.0": ["System.Security.Cryptography.ProtectedData"], "net8.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "net9.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.1": ["System.Security.Cryptography.ProtectedData"], "netcoreapp2.2": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.0": ["System.Security.Cryptography.ProtectedData"], "netcoreapp3.1": ["System.Security.Cryptography.ProtectedData"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Cryptography.ProtectedData"], "netstandard2.1": ["System.Security.Cryptography.ProtectedData"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "9.0.10", "sha512": "sha512-3rC2TD7/ikgwu5Z7BzViMVDDp7RGyaej8pvVDzhy6rI7QZ9+x6DPiOPD5y4FjePxTLh/rFjMNcP7nG9IHWsB2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.IO", "id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.IO.FileSystem", "id": "System.IO.FileSystem", "version": "4.3.0", "sha512": "sha512-T7WB1vhblSmgkaDpdGM3Uqo55Qsr5sip5eyowrwiXOoHBkzOx3ePd9+Zh97r9NzOwFCxqX7awO6RBxQuao7n7g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": ["System.IO.FileSystem.Primitives"], "net461": ["System.IO.FileSystem.Primitives"], "net462": ["System.IO.FileSystem.Primitives"], "net47": ["System.IO.FileSystem.Primitives"], "net471": ["System.IO.FileSystem.Primitives"], "net472": ["System.IO.FileSystem.Primitives"], "net48": ["System.IO.FileSystem.Primitives"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.IO.FileSystem.Primitives", "id": "System.IO.FileSystem.Primitives", "version": "4.3.0", "sha512": "sha512-WIWVPQlYLP/Zc9I6IakpBk1y8ryVGK83MtZx//zGKKi2hvHQWKAB7moRQCOz5Is/wNDksiYpocf3FeA3le6e5Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "net9.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.IO.Pipelines", "id": "System.IO.Pipelines", "version": "9.0.0", "sha512": "sha512-XIeVKR80wuDl05DI4Hufye7TT4D1Ca1Bm4zJPc7mgnodrCy0OfcQ1C00A7se56dMvg48cI64TMD+YKcZl+qOaA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net462": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net47": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net471": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net472": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net6.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net7.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Memory", "id": "System.Memory", "version": "4.6.0", "sha512": "sha512-TY7NpV4Vv0vwanZ6J8vrLGfybbPKhAvL3oTx7EndsZ/J/71sm01JPCHImtvYtwh1vmFat/GPS/id9htqIPK+6g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.IO.Pipelines", "id": "System.IO.Pipelines", "version": "9.0.10", "sha512": "sha512-kQg8x+mbt8Xi1mwm32DVEz6DtfqKn9XUGziGQvdNJ2QEGWvufcZfRWtxAf9nB+/B1FT1x7W4Wh2Fr9lcKlVWPA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net462": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net47": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net471": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net472": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net48": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net6.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net7.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Memory", "id": "System.Memory", "version": "4.6.3", "sha512": "sha512-NXcNYlWoXe5cz9sb8Huo6x2dCZVYkhwKtgE00n/MoI8V4ZI/7/t+EI5bOhQFlZfFjjqM8+U6prjU/aARt7H/tA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Net.Primitives", "id": "System.Net.Primitives", "version": "4.3.1", "sha512": "sha512-BgdlyYCI7rrdh36p3lMTqbkvaafPETpB1bk9iQlFdQxYE692kiXvmseXs8ghL+gEgQF2xgDc8GH4QLkSgUUs+Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Numerics.Vectors", "id": "System.Numerics.Vectors", "version": "4.6.0", "sha512": "sha512-dxZWbnnb21+5QuKAiUEntJirh5KiU1nqlLWtBu4v9/Fx1RnsgNn8T4XbmQhvCq/T94201P6EsGG2z2Y5ded1yA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Reflection.Metadata", "id": "System.Reflection.Metadata", "version": "9.0.0", "sha512": "sha512-jz+Y2m/CpdPvdjCNRigiWJYKFusdkfJlxDx4V5cWX2TubAMaz5CZpODBD/P2+20SpWvmZG6J3UYjl+R2Yg7yFw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Memory"], "net8.0": ["System.Collections.Immutable"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Reflection.MetadataLoadContext", "id": "System.Reflection.MetadataLoadContext", "version": "9.0.0", "sha512": "sha512-or1DAn2dl2SjxPA4tuDG9RxTxeERdHIU7gUJjNf8WhT6D08ZsHbmSZpP2rKpgGOXHMhmXf3CTDNmfa4cSD2DtA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net8.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Numerics.Vectors", "id": "System.Numerics.Vectors", "version": "4.6.1", "sha512": "sha512-/rkvpUeUPlCY/2qYVQKiUsj5IKaXZcy2+SQAGAfemAdyEF5AgIgYOFNSTMWDXo09JWFX9HB+wV1yCyi2Mwi3TA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.Metadata", "id": "System.Reflection.Metadata", "version": "9.0.10", "sha512": "sha512-3ZztNrfQJww1qZ9UgdB5aTAYlAIWd5dMyyBagAC8jth6iG5vxawtaGbZJMh4xkL9A5v6Ng48YL+hAjt08GBWKQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Memory"], "net8.0": ["System.Collections.Immutable"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.MetadataLoadContext", "id": "System.Reflection.MetadataLoadContext", "version": "9.0.10", "sha512": "sha512-qf9IjoUO2XfK4BTPhCIFDYAsiWtFCTpyiklmxoNK2Ys1wZdoVe5C3j5BH2ajSDWy2mAQcN1n+Eh/3uhd3oUcEA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net462": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net47": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net471": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net472": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net48": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net5.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net6.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net7.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "net8.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"], "netstandard2.1": ["System.Collections.Immutable", "System.Reflection.Metadata", "System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Runtime", "id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.1.0", "sha512": "sha512-iY0upfdQeiaCfoxT+m4XJyb0IJNk4B9TLQFanOCOrU9X5x1x2TjKx0OFbLmg1VG2dOyL5nHMn198SBQ91Yy1kQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.1.2", "sha512": "sha512-t2aXWJZBkAkRrTOnw31OBELKEVSDD5YvC3O5dXaHFsR66/nRTKm1y3Iq6NwFI5u5IlKrWYfdan66V+GKKkY8hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Runtime.Handles", "id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Security.Cryptography.ProtectedData", "id": "System.Security.Cryptography.ProtectedData", "version": "9.0.0", "sha512": "sha512-Mbc5s1XBLje0N1idqILQUqWnG8RVj9p7uK110yxZXTzZq3CN7jaCFEySK52kA+dPYtByzcRtA/FUnK4o/sinSw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Memory"], "net6.0": ["System.Memory"], "net7.0": ["System.Memory"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory"], "netcoreapp2.1": ["System.Memory"], "netcoreapp2.2": ["System.Memory"], "netcoreapp3.0": ["System.Memory"], "netcoreapp3.1": ["System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory"], "netstandard2.1": ["System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Security.Cryptography.ProtectedData", "id": "System.Security.Cryptography.ProtectedData", "version": "9.0.10", "sha512": "sha512-yR8dvnme5ndA3L6Q6F/2N+4QBCi8sdfGWg9lmRVNBZO+evqIt323UdXMu8b8MnMYoyxXaml+vTEl74t5Nu7ABQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Memory"], "net6.0": ["System.Memory"], "net7.0": ["System.Memory"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory"], "netcoreapp2.1": ["System.Memory"], "netcoreapp2.2": ["System.Memory"], "netcoreapp3.0": ["System.Memory"], "netcoreapp3.1": ["System.Memory"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory"], "netstandard2.1": ["System.Memory"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Security.Principal", "id": "System.Security.Principal", "version": "4.3.0", "sha512": "sha512-24oe0NGJY32e+DFHVQzl2okM9uwYmn0Aa6nehqtVZ55/Al4Yva7S3BN934Kn5qATH7TVTUJkgxhisdfF7mKDfg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "net9.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": ["System.Runtime"], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Text.Encoding", "id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Text.Encoding.CodePages", "id": "System.Text.Encoding.CodePages", "version": "9.0.0", "sha512": "sha512-rMAcE2cpS8RvPR5iK6WkYdZKJLsUw5BRqG3d/LR0dl8x17ezOj43AWRhp4LRIFgydWjOOn/Z4w//l8wcowngvQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.Channels", "id": "System.Threading.Channels", "version": "9.0.0", "sha512": "sha512-6q+SC/qL5eeX9t3zUjmtsccStVusUvYXdJFYGf3ihM/8TionV+iZxi3mxDPPFXOiepRe7WgrIOuoaCi4+bwZ0g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Text.Encoding.CodePages", "id": "System.Text.Encoding.CodePages", "version": "9.0.10", "sha512": "sha512-LPoLnlvwb3D12yjwva2nvfzDqm4XNUBrAf/zQ5ad2IOqhTWqRm4GIXxlH4lSr3W/ET31aLtM4C4vHbr8sGEzWA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Threading.Channels", "id": "System.Threading.Channels", "version": "9.0.10", "sha512": "sha512-wMh3VX2qbwFg8rZllC1QsiXl4NjLkamNVT+O6bJG5V3sN6cwRZRza2v7f2ohFNGdGlViwUAO/PKSZgJfuJNXTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Threading.Tasks", "id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net9.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "System.Threading.Tasks.Extensions", "id": "System.Threading.Tasks.Extensions", "version": "4.6.0", "sha512": "sha512-ph8eP2gKhA6mNhj/teYwn9xCrHMc7+nBMlSMKX7BUXcZn33RVLe45TWABkcgyS6TJWYx1v1WwtylHmF3Fvg0qQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Threading.Tasks.Extensions", "id": "System.Threading.Tasks.Extensions", "version": "4.6.3", "sha512": "sha512-zWRHXIBnbfzQE1SamNoW9X5NjEcW/JNAtvVxGKd3bcg71wQVmoI3pDq+WUa2A+temXSNCm7707hmAFwwcYlK0A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "System.Threading.ThreadPool", "id": "System.Threading.ThreadPool", "version": "4.3.0", "sha512": "sha512-RQpA+UpI6Tlpeedk5JStYk2DM/M3i5HqabI/yDbfj1xDu9bIz9kdoquVpHbh/wQjOJaOCbcgRH8iQcAUv8dRWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime", "System.Runtime.Handles"], "net6.0": ["System.Runtime", "System.Runtime.Handles"], "net7.0": ["System.Runtime", "System.Runtime.Handles"], "net8.0": ["System.Runtime", "System.Runtime.Handles"], "net9.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit", "id": "xunit", "version": "2.9.2", "sha512": "sha512-bs4ccplaqCT7+jdAJhtt75uKq9qA3Jeld1ugiOgGEGSnzq8gkoa0VUqNEKkMPkBwV5COlAllNJGtGBfgxoZDrA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net20": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net30": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net35": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net40": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net403": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net45": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net451": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net452": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net46": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net461": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net462": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net47": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net471": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net472": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net48": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net5.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net6.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net7.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net8.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net9.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.3": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.4": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.5": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.6": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit", "id": "xunit", "version": "2.9.3", "sha512": "sha512-3/ayVPC7NQWQENR5REbOgXYsbhoJsmpnxQa5pO4lxbjGbckOs62nsm4kLErzc8ng7V5Xz08uwVjMqaZGJiXCrg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net20": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net30": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net35": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net40": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net403": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net45": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net451": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net452": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net46": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net461": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net462": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net47": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net471": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net472": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net48": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net5.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net6.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net7.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net8.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net9.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.3": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.4": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.5": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.6": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"]}, "targeting_pack_overrides": [], "framework_list": []}, {"name": "xunit.abstractions", "id": "xunit.abstractions", "version": "2.0.3", "sha512": "sha512-PKJri5f0qEQPFvgY6CZR9XG8JROlWSdC/ZYLkkDQuID++Egn+yWjB+Yf57AZ8U6GRlP7z33uDQ4/r5BZPer2JA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.analyzers", "id": "xunit.analyzers", "version": "1.17.0", "sha512": "sha512-36BC2a5gEL5TDXjkzhD8dK4toNcPGdwFb4tbIODwTp4eXhRS6BURiTclfZD2vFNTq4obCzPOdwnayhppP4qtUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.assert", "id": "xunit.assert", "version": "2.9.2", "sha512": "sha512-huNfINLH5HnyiPImimKv7liIJJ2MgRdJYT7ky3464zR62SH7o9JjsgMiSZRXha46kgTCNjKSNN1VvctC+USp7w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.core", "id": "xunit.core", "version": "2.9.2", "sha512": "sha512-kW48d7YL7ryT4zuWTjJN491cJwY8aYiIAxDaXJRebgMIw40PmlREiiaIz33QUFmglcfLlaoRyZcI4sl70kARiw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net20": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net30": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net35": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net40": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net403": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net45": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net451": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net452": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net46": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net461": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net462": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net47": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net471": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net472": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net48": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net5.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net6.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net7.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net8.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net9.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.3": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.4": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.5": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.6": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.extensibility.core", "id": "xunit.extensibility.core", "version": "2.9.2", "sha512": "sha512-sosk+dg5Cn4N9MKOjQ1wFTvfgduqiX1DLRZHEYXIaLOuTJbCJeXfn7XhAVDGY+zeB8aX3jCKL8BcDp4EJCdZXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.extensibility.execution", "id": "xunit.extensibility.execution", "version": "2.9.2", "sha512": "sha512-oOnG3GsmntYZqZleKMHFlAxxCxn+ZQrcY7GEKDFP0Zpjx/sTE61cEblJk4Dkl4He0t02DN4gmJ4hsQDoLTdo7g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.extensibility.core"], "net451": ["xunit.extensibility.core"], "net452": ["xunit.extensibility.core"], "net46": ["xunit.extensibility.core"], "net461": ["xunit.extensibility.core"], "net462": ["xunit.extensibility.core"], "net47": ["xunit.extensibility.core"], "net471": ["xunit.extensibility.core"], "net472": ["xunit.extensibility.core"], "net48": ["xunit.extensibility.core"], "net5.0": ["xunit.extensibility.core"], "net6.0": ["xunit.extensibility.core"], "net7.0": ["xunit.extensibility.core"], "net8.0": ["xunit.extensibility.core"], "net9.0": ["xunit.extensibility.core"], "netcoreapp1.0": ["xunit.extensibility.core"], "netcoreapp1.1": ["xunit.extensibility.core"], "netcoreapp2.0": ["xunit.extensibility.core"], "netcoreapp2.1": ["xunit.extensibility.core"], "netcoreapp2.2": ["xunit.extensibility.core"], "netcoreapp3.0": ["xunit.extensibility.core"], "netcoreapp3.1": ["xunit.extensibility.core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.extensibility.core"], "netstandard1.2": ["xunit.extensibility.core"], "netstandard1.3": ["xunit.extensibility.core"], "netstandard1.4": ["xunit.extensibility.core"], "netstandard1.5": ["xunit.extensibility.core"], "netstandard1.6": ["xunit.extensibility.core"], "netstandard2.0": ["xunit.extensibility.core"], "netstandard2.1": ["xunit.extensibility.core"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.runner.utility", "id": "xunit.runner.utility", "version": "2.9.2", "sha512": "sha512-uXH4JqD2cHxrS6L/NXbaKPa+i0/RarJp68Fu+9NMVKJuDjVXDQFtnzgaP9gB+77GbjsJ14SWdJEDkh+D+UX7jw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["xunit.abstractions"], "net40": ["xunit.abstractions"], "net403": ["xunit.abstractions"], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"name": "xunit.runner.visualstudio", "id": "xunit.runner.visualstudio", "version": "2.8.2", "sha512": "sha512-z+EzhXxLlgn/n7FQ5J0DJxbGns/1vx1kPJh4Uq+OPChRpdSy3x/MCqQ/jtkboc7BRMthz14k7pL0D3iq/e4d0A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.TestPlatform.ObjectModel"], "net47": ["Microsoft.TestPlatform.ObjectModel"], "net471": ["Microsoft.TestPlatform.ObjectModel"], "net472": ["Microsoft.TestPlatform.ObjectModel"], "net48": ["Microsoft.TestPlatform.ObjectModel"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.analyzers", "id": "xunit.analyzers", "version": "1.24.0", "sha512": "sha512-LiogS9RX6I4MHFN8V3dNgEQ4QJrtvtKq49h9k5NAOvmwcrbR1IeNMZvyuez3YITKAeF+ka9yVG3+OH6vApPB/A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.assert", "id": "xunit.assert", "version": "2.9.3", "sha512": "sha512-wfqwCKAhSWGy9P/dPqDGSIBnPW3sUJ49MEfcTqNF+5BgJwjwtHb9SE7ajYZuR8ymTd8dwxoEGnlJHiejbgDv9w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.core", "id": "xunit.core", "version": "2.9.3", "sha512": "sha512-cv2sO37qJkIbBL3fXDIn3EPQ2zK8LQ6FkMJNnn1xc9n8mo3ik0URA4MfUNCmwDDCx83ZiJeRrJ0y1ykasojNJg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net20": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net30": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net35": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net40": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net403": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net45": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net451": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net452": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net46": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net461": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net462": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net47": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net471": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net472": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net48": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net5.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net6.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net7.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net8.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net9.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.3": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.4": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.5": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.6": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.extensibility.core", "id": "xunit.extensibility.core", "version": "2.9.3", "sha512": "sha512-S0a+jmIF/DraKuJ+FfWbqXMwvpcKxjP3GdrQzz5pr3GYtgII2XfDdAhkU/5VIWqWon2R6Q31X/9sTGaU+koDaQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.extensibility.execution", "id": "xunit.extensibility.execution", "version": "2.9.3", "sha512": "sha512-IidoBSrGw/KhWzZsKXIcStohj/oRFZizbWeUv+0hOFLeMJMegSW5QoGNzmjQuF8BuRtCyPQQukWSYdNnnfPAkA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.extensibility.core"], "net451": ["xunit.extensibility.core"], "net452": ["xunit.extensibility.core"], "net46": ["xunit.extensibility.core"], "net461": ["xunit.extensibility.core"], "net462": ["xunit.extensibility.core"], "net47": ["xunit.extensibility.core"], "net471": ["xunit.extensibility.core"], "net472": ["xunit.extensibility.core"], "net48": ["xunit.extensibility.core"], "net5.0": ["xunit.extensibility.core"], "net6.0": ["xunit.extensibility.core"], "net7.0": ["xunit.extensibility.core"], "net8.0": ["xunit.extensibility.core"], "net9.0": ["xunit.extensibility.core"], "netcoreapp1.0": ["xunit.extensibility.core"], "netcoreapp1.1": ["xunit.extensibility.core"], "netcoreapp2.0": ["xunit.extensibility.core"], "netcoreapp2.1": ["xunit.extensibility.core"], "netcoreapp2.2": ["xunit.extensibility.core"], "netcoreapp3.0": ["xunit.extensibility.core"], "netcoreapp3.1": ["xunit.extensibility.core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.extensibility.core"], "netstandard1.2": ["xunit.extensibility.core"], "netstandard1.3": ["xunit.extensibility.core"], "netstandard1.4": ["xunit.extensibility.core"], "netstandard1.5": ["xunit.extensibility.core"], "netstandard1.6": ["xunit.extensibility.core"], "netstandard2.0": ["xunit.extensibility.core"], "netstandard2.1": ["xunit.extensibility.core"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.runner.utility", "id": "xunit.runner.utility", "version": "2.9.3", "sha512": "sha512-L2zlPa7Ci/Awf5LdeTOvKOanev1bB6xV2Gxbrc+EDDN1hO/j0AIbu5PM8lXgkX69/8xaaex7zrxHZd8gcz2ilQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["xunit.abstractions"], "net40": ["xunit.abstractions"], "net403": ["xunit.abstractions"], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "net9.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "xunit.runner.visualstudio", "id": "xunit.runner.visualstudio", "version": "3.1.5", "sha512": "sha512-b/tvN9kXtUd3wSSYbC80Ic6y/dYlYbNSvatYiv71iozPhXqM4EaOuHujkIJh85b+wY6dgf25k9ENSy8jN6mlvQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.TestPlatform.ObjectModel"], "net48": ["Microsoft.TestPlatform.ObjectModel"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "net9.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, ], ) diff --git a/csharp/paket.main_extension.bzl b/csharp/paket.main_extension.bzl index 6d356fb47cd..91f53cc20e3 100644 --- a/csharp/paket.main_extension.bzl +++ b/csharp/paket.main_extension.bzl @@ -2,8 +2,9 @@ load(":paket.main.bzl", _main = "main") -def _main_impl(_ctx): +def _main_impl(module_ctx): _main() + return module_ctx.extension_metadata(reproducible = True) main_extension = module_extension( implementation = _main_impl, diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 1b3c69fd4d0..a25c349e35e 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,27 @@ +## 1.7.51 + +No user-facing changes. + +## 1.7.50 + +No user-facing changes. + +## 1.7.49 + +No user-facing changes. + +## 1.7.48 + +No user-facing changes. + +## 1.7.47 + +No user-facing changes. + +## 1.7.46 + +No user-facing changes. + ## 1.7.45 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md new file mode 100644 index 00000000000..b6482a9a030 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md @@ -0,0 +1,3 @@ +## 1.7.46 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md new file mode 100644 index 00000000000..afc26600b73 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.47.md @@ -0,0 +1,3 @@ +## 1.7.47 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.48.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.48.md new file mode 100644 index 00000000000..5f90b4d6419 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.48.md @@ -0,0 +1,3 @@ +## 1.7.48 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md new file mode 100644 index 00000000000..431bff76c0b --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.49.md @@ -0,0 +1,3 @@ +## 1.7.49 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.50.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.50.md new file mode 100644 index 00000000000..187bfe4d01f --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.50.md @@ -0,0 +1,3 @@ +## 1.7.50 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.51.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.51.md new file mode 100644 index 00000000000..ec2d4e2bdcc --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.51.md @@ -0,0 +1,3 @@ +## 1.7.51 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 5a84df10183..26376c0cebb 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.45 +lastReleaseVersion: 1.7.51 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index c6e17a64adc..7877ad717e2 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.46-dev +version: 1.7.52-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 1b3c69fd4d0..a25c349e35e 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,27 @@ +## 1.7.51 + +No user-facing changes. + +## 1.7.50 + +No user-facing changes. + +## 1.7.49 + +No user-facing changes. + +## 1.7.48 + +No user-facing changes. + +## 1.7.47 + +No user-facing changes. + +## 1.7.46 + +No user-facing changes. + ## 1.7.45 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md new file mode 100644 index 00000000000..b6482a9a030 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md @@ -0,0 +1,3 @@ +## 1.7.46 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md new file mode 100644 index 00000000000..afc26600b73 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.47.md @@ -0,0 +1,3 @@ +## 1.7.47 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.48.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.48.md new file mode 100644 index 00000000000..5f90b4d6419 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.48.md @@ -0,0 +1,3 @@ +## 1.7.48 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md new file mode 100644 index 00000000000..431bff76c0b --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.49.md @@ -0,0 +1,3 @@ +## 1.7.49 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.50.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.50.md new file mode 100644 index 00000000000..187bfe4d01f --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.50.md @@ -0,0 +1,3 @@ +## 1.7.50 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.51.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.51.md new file mode 100644 index 00000000000..ec2d4e2bdcc --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.51.md @@ -0,0 +1,3 @@ +## 1.7.51 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 5a84df10183..26376c0cebb 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.45 +lastReleaseVersion: 1.7.51 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 529cd400b6c..6427ecbb935 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.46-dev +version: 1.7.52-dev groups: - csharp - solorigate diff --git a/csharp/ql/consistency-queries/CfgConsistency.ql b/csharp/ql/consistency-queries/CfgConsistency.ql index 3caf64f9aec..d7f0c091538 100644 --- a/csharp/ql/consistency-queries/CfgConsistency.ql +++ b/csharp/ql/consistency-queries/CfgConsistency.ql @@ -29,7 +29,7 @@ predicate bbSuccInconsistency(ControlFlowElement pred, ControlFlowElement succ) succBB.getFirstNode() = succ.getAControlFlowNode() ) and not exists(PreBasicBlock predBB, PreBasicBlock succBB | - predBB.getLastElement() = pred and + predBB.getLastNode() = pred and succBB = predBB.getASuccessor() and succBB.getFirstElement() = succ ) @@ -41,12 +41,12 @@ predicate bbIntraSuccInconsistency(ControlFlowElement pred, ControlFlowElement s succ.getAControlFlowNode() = bb.getNode(i + 1) ) and not exists(PreBasicBlock bb | - bb.getLastElement() = pred and + bb.getLastNode() = pred and bb.getASuccessor().getFirstElement() = succ ) and not exists(PreBasicBlock bb, int i | - bb.getElement(i) = pred and - bb.getElement(i + 1) = succ + bb.getNode(i) = pred and + bb.getNode(i + 1) = succ ) } diff --git a/csharp/ql/integration-tests/all-platforms/autobuild/global.json b/csharp/ql/integration-tests/all-platforms/autobuild/global.json index 7a0e39d71fa..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/autobuild/global.json +++ b/csharp/ql/integration-tests/all-platforms/autobuild/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } -} \ No newline at end of file +} diff --git a/csharp/ql/integration-tests/all-platforms/binlog/global.json b/csharp/ql/integration-tests/all-platforms/binlog/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog/global.json +++ b/csharp/ql/integration-tests/all-platforms/binlog/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json b/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json +++ b/csharp/ql/integration-tests/all-platforms/binlog_multiple/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json index 7a0e39d71fa..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } -} \ No newline at end of file +} diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected index 795e9ad7de0..2129be6da47 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected @@ -3,8 +3,8 @@ | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges -| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | +| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | models | 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; MarkupString; (System.String); ; Argument[0]; html-injection; manual | | 2 | Source: Microsoft.AspNetCore.Components; SupplyParameterFromQueryAttribute; false; ; ; Attribute.Getter; ReturnValue; remote; manual | @@ -14,5 +14,5 @@ nodes | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | +| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:553:16:561:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | subpaths diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json index 548d37935ed..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.300" + "version": "9.0.304" } -} \ No newline at end of file +} diff --git a/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json b/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json +++ b/csharp/ql/integration-tests/all-platforms/conditional_compilation/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml/global.json b/csharp/ql/integration-tests/all-platforms/cshtml/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_disabled/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json +++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json b/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_dotnet_incompatible/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json b/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_missing_project_files/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_missing_xamarin_sdk/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json +++ b/csharp/ql/integration-tests/all-platforms/diag_recursive_generics/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_build/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_no_args_inject/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_pack/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_publish/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json b/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json +++ b/csharp/ql/integration-tests/all-platforms/dotnet_run/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/source_generator/global.json b/csharp/ql/integration-tests/all-platforms/source_generator/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/source_generator/global.json +++ b/csharp/ql/integration-tests/all-platforms/source_generator/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected index b26e2207946..e9b4f2e2428 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone/DatabaseQualityDiagnostics.expected @@ -1,6 +1,6 @@ diagnosticAttributes -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | #select -| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | +| Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning C# code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 25 % (threshold 85 %). Percentage of expressions with known type: 58 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone/global.json b/csharp/ql/integration-tests/all-platforms/standalone/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json index 65324522984..4c6e2601f69 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json b/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/test.py b/csharp/ql/integration-tests/all-platforms/standalone_resx/test.py index ef1399f4cb2..d799c830dd9 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_resx/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/test.py @@ -2,5 +2,9 @@ import os def test(codeql, csharp): + # Making sure the reachability test of `nuget.org` succeeds: + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1000" + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_LIMIT"] = "5" + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_EXTRACT_RESOURCES"] = "true" codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected index cee8db1f756..d973f6d8be4 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/Assemblies.expected @@ -1,49 +1,49 @@ -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py b/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py index 237174a46c6..c4f98dd3629 100644 --- a/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py +++ b/csharp/ql/integration-tests/all-platforms/standalone_winforms/test.py @@ -1,2 +1,9 @@ +import os + + def test(codeql, csharp): + # Making sure the reachability test of `nuget.org` succeeds: + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1000" + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_LIMIT"] = "5" + codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected index 17e51d0b76f..cb1f6163d71 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected +++ b/csharp/ql/integration-tests/linux/compiler_args/CompilerArgs.expected @@ -9,170 +9,170 @@ | 8 | /define:TRACE;DEBUG;NET;NET9_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NET9_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER | | 9 | /highentropyva+ | | 10 | /nullable:enable | -| 11 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll | -| 12 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Core.dll | -| 13 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll | -| 14 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.Win32.Primitives.dll | -| 15 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.dll | -| 16 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/mscorlib.dll | -| 17 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/netstandard.dll | -| 18 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.AppContext.dll | -| 19 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Buffers.dll | -| 20 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Collections.Concurrent.dll | -| 21 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Collections.dll | -| 22 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Collections.Immutable.dll | -| 23 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Collections.NonGeneric.dll | -| 24 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Collections.Specialized.dll | -| 25 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.Annotations.dll | -| 26 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.DataAnnotations.dll | -| 27 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.dll | -| 28 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.EventBasedAsync.dll | -| 29 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.Primitives.dll | -| 30 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ComponentModel.TypeConverter.dll | -| 31 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Configuration.dll | -| 32 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Console.dll | -| 33 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Core.dll | -| 34 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Data.Common.dll | -| 35 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Data.DataSetExtensions.dll | -| 36 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Data.dll | -| 37 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.Contracts.dll | -| 38 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.Debug.dll | -| 39 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.DiagnosticSource.dll | -| 40 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.FileVersionInfo.dll | -| 41 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.Process.dll | -| 42 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.StackTrace.dll | -| 43 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll | -| 44 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.Tools.dll | -| 45 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.TraceSource.dll | -| 46 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Diagnostics.Tracing.dll | -| 47 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.dll | -| 48 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Drawing.dll | -| 49 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Drawing.Primitives.dll | -| 50 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Dynamic.Runtime.dll | -| 51 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Formats.Asn1.dll | -| 52 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Formats.Tar.dll | -| 53 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Globalization.Calendars.dll | -| 54 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Globalization.dll | -| 55 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Globalization.Extensions.dll | -| 56 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Compression.Brotli.dll | -| 57 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Compression.dll | -| 58 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Compression.FileSystem.dll | -| 59 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Compression.ZipFile.dll | -| 60 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.dll | -| 61 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.FileSystem.AccessControl.dll | -| 62 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.FileSystem.dll | -| 63 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.FileSystem.DriveInfo.dll | -| 64 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.FileSystem.Primitives.dll | -| 65 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.FileSystem.Watcher.dll | -| 66 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.IsolatedStorage.dll | -| 67 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.MemoryMappedFiles.dll | -| 68 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Pipelines.dll | -| 69 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Pipes.AccessControl.dll | -| 70 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.Pipes.dll | -| 71 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.IO.UnmanagedMemoryStream.dll | -| 72 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Linq.dll | -| 73 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Linq.Expressions.dll | -| 74 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Linq.Parallel.dll | -| 75 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Linq.Queryable.dll | -| 76 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Memory.dll | -| 77 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.dll | -| 78 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Http.dll | -| 79 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Http.Json.dll | -| 80 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.HttpListener.dll | -| 81 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Mail.dll | -| 82 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.NameResolution.dll | -| 83 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.NetworkInformation.dll | -| 84 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Ping.dll | -| 85 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Primitives.dll | -| 86 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Quic.dll | -| 87 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Requests.dll | -| 88 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Security.dll | -| 89 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.ServicePoint.dll | -| 90 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.Sockets.dll | -| 91 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.WebClient.dll | -| 92 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.WebHeaderCollection.dll | -| 93 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.WebProxy.dll | -| 94 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.WebSockets.Client.dll | -| 95 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Net.WebSockets.dll | -| 96 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Numerics.dll | -| 97 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Numerics.Vectors.dll | -| 98 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ObjectModel.dll | -| 99 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.DispatchProxy.dll | -| 100 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.dll | -| 101 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Emit.dll | -| 102 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Emit.ILGeneration.dll | -| 103 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Emit.Lightweight.dll | -| 104 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Extensions.dll | -| 105 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Metadata.dll | -| 106 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.Primitives.dll | -| 107 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Reflection.TypeExtensions.dll | -| 108 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Resources.Reader.dll | -| 109 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Resources.ResourceManager.dll | -| 110 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Resources.Writer.dll | -| 111 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll | -| 112 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll | -| 113 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.dll | -| 114 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Extensions.dll | -| 115 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Handles.dll | -| 116 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.dll | -| 117 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll | -| 118 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll | -| 119 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Intrinsics.dll | -| 120 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Loader.dll | -| 121 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Numerics.dll | -| 122 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Serialization.dll | -| 123 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Formatters.dll | -| 124 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Json.dll | -| 125 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Primitives.dll | -| 126 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Xml.dll | -| 127 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.AccessControl.dll | -| 128 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Claims.dll | -| 129 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.Algorithms.dll | -| 130 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.Cng.dll | -| 131 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.Csp.dll | -| 132 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.dll | -| 133 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.Encoding.dll | -| 134 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.OpenSsl.dll | -| 135 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.Primitives.dll | -| 136 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Cryptography.X509Certificates.dll | -| 137 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.dll | -| 138 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Principal.dll | -| 139 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.Principal.Windows.dll | -| 140 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Security.SecureString.dll | -| 141 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ServiceModel.Web.dll | -| 142 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ServiceProcess.dll | -| 143 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.Encoding.CodePages.dll | -| 144 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.Encoding.dll | -| 145 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.Encoding.Extensions.dll | -| 146 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.Encodings.Web.dll | -| 147 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.Json.dll | -| 148 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Text.RegularExpressions.dll | -| 149 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Channels.dll | -| 150 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.dll | -| 151 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Overlapped.dll | -| 152 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Tasks.Dataflow.dll | -| 153 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Tasks.dll | -| 154 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Tasks.Extensions.dll | -| 155 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Tasks.Parallel.dll | -| 156 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Thread.dll | -| 157 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.ThreadPool.dll | -| 158 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Threading.Timer.dll | -| 159 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Transactions.dll | -| 160 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Transactions.Local.dll | -| 161 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.ValueTuple.dll | -| 162 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Web.dll | -| 163 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Web.HttpUtility.dll | -| 164 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Windows.dll | -| 165 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.dll | -| 166 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.Linq.dll | -| 167 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.ReaderWriter.dll | -| 168 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.Serialization.dll | -| 169 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.XDocument.dll | -| 170 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.XmlDocument.dll | -| 171 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.XmlSerializer.dll | -| 172 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.XPath.dll | -| 173 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/System.Xml.XPath.XDocument.dll | -| 174 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/WindowsBase.dll | +| 11 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll | +| 12 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll | +| 13 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll | +| 14 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll | +| 15 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll | +| 16 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/mscorlib.dll | +| 17 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/netstandard.dll | +| 18 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.AppContext.dll | +| 19 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Buffers.dll | +| 20 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll | +| 21 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.dll | +| 22 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll | +| 23 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll | +| 24 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll | +| 25 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll | +| 26 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll | +| 27 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.dll | +| 28 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll | +| 29 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll | +| 30 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll | +| 31 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Configuration.dll | +| 32 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Console.dll | +| 33 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Core.dll | +| 34 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.Common.dll | +| 35 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll | +| 36 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Data.dll | +| 37 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll | +| 38 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll | +| 39 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll | +| 40 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll | +| 41 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll | +| 42 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll | +| 43 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll | +| 44 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll | +| 45 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll | +| 46 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll | +| 47 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.dll | +| 48 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Drawing.dll | +| 49 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll | +| 50 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll | +| 51 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll | +| 52 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Formats.Tar.dll | +| 53 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll | +| 54 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.dll | +| 55 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll | +| 56 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll | +| 57 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.dll | +| 58 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll | +| 59 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll | +| 60 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.dll | +| 61 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll | +| 62 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll | +| 63 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll | +| 64 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll | +| 65 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll | +| 66 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll | +| 67 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll | +| 68 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll | +| 69 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll | +| 70 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.Pipes.dll | +| 71 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll | +| 72 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.dll | +| 73 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll | +| 74 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll | +| 75 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll | +| 76 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Memory.dll | +| 77 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.dll | +| 78 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Http.dll | +| 79 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll | +| 80 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll | +| 81 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Mail.dll | +| 82 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll | +| 83 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll | +| 84 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Ping.dll | +| 85 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Primitives.dll | +| 86 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Quic.dll | +| 87 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Requests.dll | +| 88 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Security.dll | +| 89 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll | +| 90 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.Sockets.dll | +| 91 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebClient.dll | +| 92 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll | +| 93 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll | +| 94 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll | +| 95 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll | +| 96 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Numerics.dll | +| 97 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll | +| 98 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ObjectModel.dll | +| 99 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll | +| 100 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.dll | +| 101 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll | +| 102 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll | +| 103 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll | +| 104 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll | +| 105 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll | +| 106 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll | +| 107 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll | +| 108 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.Reader.dll | +| 109 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll | +| 110 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Resources.Writer.dll | +| 111 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll | +| 112 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll | +| 113 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.dll | +| 114 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll | +| 115 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll | +| 116 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll | +| 117 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll | +| 118 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| 119 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll | +| 120 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll | +| 121 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll | +| 122 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll | +| 123 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll | +| 124 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll | +| 125 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll | +| 126 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll | +| 127 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll | +| 128 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Claims.dll | +| 129 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll | +| 130 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll | +| 131 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll | +| 132 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll | +| 133 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll | +| 134 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll | +| 135 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll | +| 136 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll | +| 137 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.dll | +| 138 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Principal.dll | +| 139 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll | +| 140 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Security.SecureString.dll | +| 141 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll | +| 142 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ServiceProcess.dll | +| 143 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll | +| 144 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.dll | +| 145 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll | +| 146 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll | +| 147 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.Json.dll | +| 148 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll | +| 149 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Channels.dll | +| 150 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.dll | +| 151 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll | +| 152 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll | +| 153 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll | +| 154 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll | +| 155 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll | +| 156 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Thread.dll | +| 157 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll | +| 158 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Threading.Timer.dll | +| 159 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Transactions.dll | +| 160 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Transactions.Local.dll | +| 161 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.ValueTuple.dll | +| 162 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Web.dll | +| 163 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll | +| 164 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Windows.dll | +| 165 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.dll | +| 166 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.Linq.dll | +| 167 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll | +| 168 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll | +| 169 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll | +| 170 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll | +| 171 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll | +| 172 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XPath.dll | +| 173 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll | +| 174 | /reference:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/ref/net9.0/WindowsBase.dll | | 175 | /debug+ | | 176 | /debug:portable | | 177 | /filealign:512 | @@ -185,19 +185,18 @@ | 184 | /utf8output | | 185 | /deterministic+ | | 186 | /langversion:13.0 | -| 187 | /analyzerconfig:/usr/share/dotnet/sdk/9.0.100/Sdks/Microsoft.NET.Sdk/codestyle/cs/build/config/analysislevelstyle_default.globalconfig | -| 188 | /analyzerconfig:obj/Debug/net9.0/test.GeneratedMSBuildEditorConfig.editorconfig | -| 189 | /analyzerconfig:/usr/share/dotnet/sdk/9.0.100/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_9_default.globalconfig | -| 190 | /analyzer:/usr/share/dotnet/sdk/9.0.100/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll | -| 191 | /analyzer:/usr/share/dotnet/sdk/9.0.100/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll | -| 192 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll | -| 193 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll | -| 194 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll | -| 195 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll | -| 196 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll | -| 197 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll | -| 198 | Program.cs | -| 199 | obj/Debug/net9.0/test.GlobalUsings.g.cs | -| 200 | obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | -| 201 | obj/Debug/net9.0/test.AssemblyInfo.cs | -| 202 | /warnaserror+:NU1605,SYSLIB0011 | \ No newline at end of file +| 187 | /analyzerconfig:obj/Debug/net9.0/test.GeneratedMSBuildEditorConfig.editorconfig | +| 188 | /analyzerconfig:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_9_default.globalconfig | +| 189 | /analyzer:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll | +| 190 | /analyzer:/usr/share/dotnet/sdk/9.0.304/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll | +| 191 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.ComInterfaceGenerator.dll | +| 192 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.JavaScript.JSImportGenerator.dll | +| 193 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.LibraryImportGenerator.dll | +| 194 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/Microsoft.Interop.SourceGeneration.dll | +| 195 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/System.Text.Json.SourceGeneration.dll | +| 196 | /analyzer:/usr/share/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.8/analyzers/dotnet/cs/System.Text.RegularExpressions.Generator.dll | +| 197 | Program.cs | +| 198 | obj/Debug/net9.0/test.GlobalUsings.g.cs | +| 199 | obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs | +| 200 | obj/Debug/net9.0/test.AssemblyInfo.cs | +| 201 | /warnaserror+:NU1605,SYSLIB0011 | diff --git a/csharp/ql/integration-tests/linux/compiler_args/global.json b/csharp/ql/integration-tests/linux/compiler_args/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/linux/compiler_args/global.json +++ b/csharp/ql/integration-tests/linux/compiler_args/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/linux/dotnet_10_rc2/Program.cs b/csharp/ql/integration-tests/linux/dotnet_10_rc2/Program.cs new file mode 100644 index 00000000000..bd44629f7e2 --- /dev/null +++ b/csharp/ql/integration-tests/linux/dotnet_10_rc2/Program.cs @@ -0,0 +1 @@ +Console.WriteLine($"{string.Join(",", args)}"); diff --git a/csharp/ql/integration-tests/linux/dotnet_10_rc2/dotnet_build.csproj b/csharp/ql/integration-tests/linux/dotnet_10_rc2/dotnet_build.csproj new file mode 100644 index 00000000000..dfb40caafcf --- /dev/null +++ b/csharp/ql/integration-tests/linux/dotnet_10_rc2/dotnet_build.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/csharp/ql/integration-tests/linux/dotnet_10_rc2/global.json b/csharp/ql/integration-tests/linux/dotnet_10_rc2/global.json new file mode 100644 index 00000000000..e870e2cf7bd --- /dev/null +++ b/csharp/ql/integration-tests/linux/dotnet_10_rc2/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "10.0.100-rc.2.25502.107" + } +} diff --git a/csharp/ql/integration-tests/linux/dotnet_10_rc2/test.py b/csharp/ql/integration-tests/linux/dotnet_10_rc2/test.py new file mode 100644 index 00000000000..148626b1cb8 --- /dev/null +++ b/csharp/ql/integration-tests/linux/dotnet_10_rc2/test.py @@ -0,0 +1,6 @@ +import os +import runs_on + +@runs_on.linux +def test(codeql, csharp): + codeql.database.create() diff --git a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json +++ b/csharp/ql/integration-tests/linux/standalone_dependencies_non_utf8_filename/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/dotnet_test/global.json b/csharp/ql/integration-tests/posix/dotnet_test/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test/global.json +++ b/csharp/ql/integration-tests/posix/dotnet_test/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json b/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json +++ b/csharp/ql/integration-tests/posix/dotnet_test_mstest/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/inherit-env-vars/global.json b/csharp/ql/integration-tests/posix/inherit-env-vars/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/inherit-env-vars/global.json +++ b/csharp/ql/integration-tests/posix/inherit-env-vars/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected index 53810418624..fdc5e6eae9d 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality-extended.qls.expected @@ -1,20 +1,39 @@ ql/csharp/ql/src/API Abuse/CallToGCCollect.ql ql/csharp/ql/src/API Abuse/CallToObsoleteMethod.ql +ql/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql ql/csharp/ql/src/API Abuse/ClassImplementsICloneable.ql +ql/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql ql/csharp/ql/src/API Abuse/FormatInvalid.ql +ql/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql +ql/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +ql/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql ql/csharp/ql/src/API Abuse/NoDisposeCallOnLocalIDisposable.ql +ql/csharp/ql/src/API Abuse/NonOverridingMethod.ql ql/csharp/ql/src/API Abuse/NullArgumentToEquals.ql ql/csharp/ql/src/ASP/BlockCodeResponseWrite.ql +ql/csharp/ql/src/ASP/SplitControlStructure.ql ql/csharp/ql/src/Bad Practices/CallsUnmanagedCode.ql ql/csharp/ql/src/Bad Practices/CatchOfNullReferenceException.ql +ql/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql +ql/csharp/ql/src/Bad Practices/Comments/TodoComments.ql ql/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql ql/csharp/ql/src/Bad Practices/Declarations/LocalScopeVariableShadowsMember.ql +ql/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql ql/csharp/ql/src/Bad Practices/EmptyCatchBlock.ql +ql/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql +ql/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql ql/csharp/ql/src/Bad Practices/Implementation Hiding/ExposeRepresentation.ql +ql/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql +ql/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/FieldMasksSuperField.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/SameNameAsSuper.ql ql/csharp/ql/src/Bad Practices/PathCombine.ql ql/csharp/ql/src/Bad Practices/UnmanagedCodeCheck.ql +ql/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql +ql/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql ql/csharp/ql/src/CSI/CompareIdenticalValues.ql ql/csharp/ql/src/CSI/NullAlways.ql ql/csharp/ql/src/CSI/NullMaybe.ql @@ -22,8 +41,10 @@ ql/csharp/ql/src/Concurrency/FutileSyncOnField.ql ql/csharp/ql/src/Concurrency/LockOrder.ql ql/csharp/ql/src/Concurrency/LockThis.ql ql/csharp/ql/src/Concurrency/LockedWait.ql +ql/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql +ql/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql +ql/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql -ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql @@ -35,27 +56,42 @@ ql/csharp/ql/src/Language Abuse/NestedIf.ql ql/csharp/ql/src/Language Abuse/RethrowException.ql ql/csharp/ql/src/Language Abuse/SimplifyBoolExpr.ql ql/csharp/ql/src/Language Abuse/UnusedPropertyValue.ql +ql/csharp/ql/src/Language Abuse/UselessCastToSelf.ql +ql/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql +ql/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +ql/csharp/ql/src/Language Abuse/UselessTypeTest.ql +ql/csharp/ql/src/Language Abuse/UselessUpcast.ql ql/csharp/ql/src/Likely Bugs/Collections/ContainerLengthCmpOffByOne.ql ql/csharp/ql/src/Likely Bugs/Collections/ContainerSizeCmpZero.ql ql/csharp/ql/src/Likely Bugs/Collections/ReadOnlyContainer.ql ql/csharp/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql ql/csharp/ql/src/Likely Bugs/ConstantComparison.ql ql/csharp/ql/src/Likely Bugs/DangerousNonShortCircuitLogic.ql +ql/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql ql/csharp/ql/src/Likely Bugs/EqualityCheckOnFloats.ql ql/csharp/ql/src/Likely Bugs/EqualsArray.ql +ql/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql +ql/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql ql/csharp/ql/src/Likely Bugs/HashedButNoHash.ql ql/csharp/ql/src/Likely Bugs/ImpossibleArrayCast.ql ql/csharp/ql/src/Likely Bugs/IncomparableEquals.ql +ql/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql +ql/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql +ql/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql ql/csharp/ql/src/Likely Bugs/NestedLoopsSameVariable.ql +ql/csharp/ql/src/Likely Bugs/ObjectComparison.ql ql/csharp/ql/src/Likely Bugs/PossibleLossOfPrecision.ql ql/csharp/ql/src/Likely Bugs/RecursiveEquals.ql +ql/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql ql/csharp/ql/src/Likely Bugs/ReferenceEqualsOnValueTypes.ql ql/csharp/ql/src/Likely Bugs/SelfAssignment.ql ql/csharp/ql/src/Likely Bugs/Statements/EmptyBlock.ql ql/csharp/ql/src/Likely Bugs/Statements/EmptyLockStatement.ql +ql/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql ql/csharp/ql/src/Likely Bugs/StaticFieldWrittenByInstance.ql ql/csharp/ql/src/Likely Bugs/StringBuilderCharInit.ql ql/csharp/ql/src/Likely Bugs/UncheckedCastInEquals.ql +ql/csharp/ql/src/Linq/BadMultipleIteration.ql ql/csharp/ql/src/Linq/MissedAllOpportunity.ql ql/csharp/ql/src/Linq/MissedCastOpportunity.ql ql/csharp/ql/src/Linq/MissedOfTypeOpportunity.ql @@ -68,5 +104,6 @@ ql/csharp/ql/src/Performance/UseTryGetValue.ql ql/csharp/ql/src/Useless code/DefaultToString.ql ql/csharp/ql/src/Useless code/FutileConditional.ql ql/csharp/ql/src/Useless code/IntGetHashCode.ql +ql/csharp/ql/src/Useless code/PointlessForwardingMethod.ql ql/csharp/ql/src/Useless code/RedundantToStringCall.ql ql/csharp/ql/src/Useless code/UnusedLabel.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected index 53810418624..6694cc8461b 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-quality.qls.expected @@ -23,7 +23,6 @@ ql/csharp/ql/src/Concurrency/LockOrder.ql ql/csharp/ql/src/Concurrency/LockThis.ql ql/csharp/ql/src/Concurrency/LockedWait.ql ql/csharp/ql/src/Dead Code/DeadStoreOfLocal.ql -ql/csharp/ql/src/Documentation/XmldocMissingSummary.ql ql/csharp/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/csharp/ql/src/Language Abuse/CatchOfGenericException.ql ql/csharp/ql/src/Language Abuse/DubiousDowncastOfThis.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-code-scanning.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-code-scanning.qls.expected index c0ff79af1c1..4ffd875fda3 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-code-scanning.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-code-scanning.qls.expected @@ -16,6 +16,7 @@ ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql +ql/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql ql/csharp/ql/src/Security Features/CWE-119/LocalUnvalidatedArithmetic.ql @@ -33,6 +34,7 @@ ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.q ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql +ql/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql ql/csharp/ql/src/Security Features/CWE-730/ReDoS.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-security-and-quality.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-security-and-quality.qls.expected index d4d145986c1..b520a571fc8 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-security-and-quality.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-security-and-quality.qls.expected @@ -120,6 +120,7 @@ ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql +ql/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql ql/csharp/ql/src/Security Features/CWE-112/MissingXMLValidation.ql ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql @@ -140,6 +141,7 @@ ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.q ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql +ql/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql ql/csharp/ql/src/Security Features/CWE-639/InsecureDirectObjectReference.ql ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/csharp-security-extended.qls.expected b/csharp/ql/integration-tests/posix/query-suite/csharp-security-extended.qls.expected index 48f7ad304a0..13b578d7b52 100644 --- a/csharp/ql/integration-tests/posix/query-suite/csharp-security-extended.qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/csharp-security-extended.qls.expected @@ -23,6 +23,7 @@ ql/csharp/ql/src/Security Features/CWE-090/LDAPInjection.ql ql/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql ql/csharp/ql/src/Security Features/CWE-094/CodeInjection.ql ql/csharp/ql/src/Security Features/CWE-099/ResourceInjection.ql +ql/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql ql/csharp/ql/src/Security Features/CWE-112/MissingXMLValidation.ql ql/csharp/ql/src/Security Features/CWE-114/AssemblyPathInjection.ql ql/csharp/ql/src/Security Features/CWE-117/LogForging.ql @@ -43,6 +44,7 @@ ql/csharp/ql/src/Security Features/CWE-502/UnsafeDeserializationUntrustedInput.q ql/csharp/ql/src/Security Features/CWE-548/ASPNetDirectoryListing.ql ql/csharp/ql/src/Security Features/CWE-601/UrlRedirect.ql ql/csharp/ql/src/Security Features/CWE-611/UntrustedDataInsecureXml.ql +ql/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql ql/csharp/ql/src/Security Features/CWE-614/RequireSSL.ql ql/csharp/ql/src/Security Features/CWE-639/InsecureDirectObjectReference.ql ql/csharp/ql/src/Security Features/CWE-643/XPathInjection.ql diff --git a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected index dff6574dddd..4776a36a6a9 100644 --- a/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected +++ b/csharp/ql/integration-tests/posix/query-suite/not_included_in_qls.expected @@ -1,31 +1,20 @@ ql/csharp/ql/src/API Abuse/MissingDisposeCall.ql ql/csharp/ql/src/API Abuse/MissingDisposeMethod.ql -ql/csharp/ql/src/API Abuse/NonOverridingMethod.ql ql/csharp/ql/src/API Abuse/UncheckedReturnValue.ql ql/csharp/ql/src/ASP/ComplexInlineCode.ql ql/csharp/ql/src/ASP/NonInternationalizedText.ql -ql/csharp/ql/src/ASP/SplitControlStructure.ql ql/csharp/ql/src/AlertSuppression.ql ql/csharp/ql/src/Architecture/Dependencies/MutualDependency.ql ql/csharp/ql/src/Architecture/Refactoring Opportunities/FeatureEnvy.ql -ql/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql -ql/csharp/ql/src/Bad Practices/Comments/TodoComments.ql ql/csharp/ql/src/Bad Practices/Declarations/EmptyInterface.ql -ql/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql -ql/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql ql/csharp/ql/src/Bad Practices/LeftoverDebugCode.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsNumbers.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicConstantsString.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicNumbersUseConstant.ql ql/csharp/ql/src/Bad Practices/Magic Constants/MagicStringsUseConstant.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/ConstantNaming.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql -ql/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql ql/csharp/ql/src/Bad Practices/Naming Conventions/VariableNameTooShort.ql ql/csharp/ql/src/Bad Practices/UseOfHtmlInputHidden.ql -ql/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql ql/csharp/ql/src/Configuration/PasswordInConfigurationFile.ql ql/csharp/ql/src/Dead Code/DeadRefTypes.ql ql/csharp/ql/src/Dead Code/NonAssignedFields.ql @@ -39,7 +28,6 @@ ql/csharp/ql/src/Documentation/XmldocMissingParam.ql ql/csharp/ql/src/Documentation/XmldocMissingReturn.ql ql/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql ql/csharp/ql/src/Language Abuse/ForeachCapture.ql -ql/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql ql/csharp/ql/src/Likely Bugs/BadCheckOdd.ql ql/csharp/ql/src/Likely Bugs/RandomUsedOnce.ql ql/csharp/ql/src/Metrics/Callables/CCyclomaticComplexity.ql @@ -93,13 +81,10 @@ ql/csharp/ql/src/Security Features/CWE-611/UseXmlSecureResolver.ql ql/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql ql/csharp/ql/src/Security Features/CWE-798/HardcodedCredentials.ql ql/csharp/ql/src/Security Features/CWE-838/InappropriateEncoding.ql -ql/csharp/ql/src/Useless code/PointlessForwardingMethod.ql ql/csharp/ql/src/definitions.ql ql/csharp/ql/src/experimental/CWE-099/TaintedWebClient.ql ql/csharp/ql/src/experimental/CWE-918/RequestForgery.ql -ql/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql ql/csharp/ql/src/experimental/Security Features/CWE-327/Azure/UnsafeUsageOfClientSideEncryptionVersion.ql -ql/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.ql ql/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql ql/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/delegated-security-validations-always-return-true.ql ql/csharp/ql/src/experimental/Security Features/JsonWebTokenHandler/security-validation-disabled.ql diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected index 3e9c8fa753b..05b3826c73c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/Assemblies.expected @@ -1,167 +1,167 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies/global.json index 65324522984..4c6e2601f69 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected index a706f914cd9..bbfd3417df3 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_executing_runtime/Assemblies.expected @@ -3,6 +3,7 @@ | [...]/csharp/tools/[...]/MessagePack.Annotations.dll | | [...]/csharp/tools/[...]/MessagePack.dll | | [...]/csharp/tools/[...]/Microsoft.Bcl.AsyncInterfaces.dll | +| [...]/csharp/tools/[...]/Microsoft.Bcl.Memory.dll | | [...]/csharp/tools/[...]/Microsoft.Build.Framework.dll | | [...]/csharp/tools/[...]/Microsoft.Build.Utilities.Core.dll | | [...]/csharp/tools/[...]/Microsoft.Build.dll | @@ -20,6 +21,7 @@ | [...]/csharp/tools/[...]/Microsoft.Win32.Primitives.dll | | [...]/csharp/tools/[...]/Microsoft.Win32.Registry.dll | | [...]/csharp/tools/[...]/Mono.Posix.NETStandard.dll | +| [...]/csharp/tools/[...]/NaturalSort.Extension.dll | | [...]/csharp/tools/[...]/Newtonsoft.Json.dll | | [...]/csharp/tools/[...]/StructuredLogger.dll | | [...]/csharp/tools/[...]/System.AppContext.dll | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected index 3e9c8fa753b..05b3826c73c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/Assemblies.expected @@ -1,167 +1,167 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json index 65324522984..4c6e2601f69 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_project/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected index eb5ca93485b..1e4df659ded 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/Assemblies.expected @@ -1,164 +1,164 @@ -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json index 65324522984..4c6e2601f69 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_multi_target/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected index 4b2df5c2e32..539f3992b9e 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/Assemblies.expected @@ -1 +1 @@ -| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | +| test-db/working/missingpackages/newtonsoft.json/13.0.4/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj index b73f743f95c..e16e4f4b6a6 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/proj/proj.csproj @@ -11,6 +11,6 @@ - + diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py index 5aaafca6a46..42405ca54d4 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error/test.py @@ -1,6 +1,11 @@ +import os import runs_on @runs_on.posix def test(codeql, csharp): + # Making sure the reachability test of `nuget.org` succeeds: + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1000" + os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_LIMIT"] = "5" + codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected index 4b2df5c2e32..539f3992b9e 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/Assemblies.expected @@ -1 +1 @@ -| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | +| test-db/working/missingpackages/newtonsoft.json/13.0.4/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj index b73f743f95c..e16e4f4b6a6 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_error_timeout/proj/proj.csproj @@ -11,6 +11,6 @@ - + diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected index 4b2df5c2e32..539f3992b9e 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/Assemblies.expected @@ -1 +1 @@ -| test-db/working/missingpackages/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | +| test-db/working/missingpackages/newtonsoft.json/13.0.4/lib/net6.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj index b73f743f95c..e16e4f4b6a6 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_config_fallback/proj/proj.csproj @@ -11,6 +11,6 @@ - + diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/proj/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_versions/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/posix/warn_as_error/global.json b/csharp/ql/integration-tests/posix/warn_as_error/global.json index 76474f06d04..d488208a2a7 100644 --- a/csharp/ql/integration-tests/posix/warn_as_error/global.json +++ b/csharp/ql/integration-tests/posix/warn_as_error/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/integration-tests/windows/dotnet_10_rc2/Program.cs b/csharp/ql/integration-tests/windows/dotnet_10_rc2/Program.cs new file mode 100644 index 00000000000..bd44629f7e2 --- /dev/null +++ b/csharp/ql/integration-tests/windows/dotnet_10_rc2/Program.cs @@ -0,0 +1 @@ +Console.WriteLine($"{string.Join(",", args)}"); diff --git a/csharp/ql/integration-tests/windows/dotnet_10_rc2/dotnet_build.csproj b/csharp/ql/integration-tests/windows/dotnet_10_rc2/dotnet_build.csproj new file mode 100644 index 00000000000..dfb40caafcf --- /dev/null +++ b/csharp/ql/integration-tests/windows/dotnet_10_rc2/dotnet_build.csproj @@ -0,0 +1,10 @@ + + + + Exe + net10.0 + enable + enable + + + diff --git a/csharp/ql/integration-tests/windows/dotnet_10_rc2/global.json b/csharp/ql/integration-tests/windows/dotnet_10_rc2/global.json new file mode 100644 index 00000000000..e870e2cf7bd --- /dev/null +++ b/csharp/ql/integration-tests/windows/dotnet_10_rc2/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "10.0.100-rc.2.25502.107" + } +} diff --git a/csharp/ql/integration-tests/windows/dotnet_10_rc2/test.py b/csharp/ql/integration-tests/windows/dotnet_10_rc2/test.py new file mode 100644 index 00000000000..00905b67cd4 --- /dev/null +++ b/csharp/ql/integration-tests/windows/dotnet_10_rc2/test.py @@ -0,0 +1,6 @@ +import os +import runs_on + +@runs_on.windows +def test(codeql, csharp): + codeql.database.create() diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected index a001f7f23d7..0b4ea613c8e 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/Assemblies.expected @@ -1,213 +1,213 @@ | test-db/working/packages/avalara.avatax/23.11.0/lib/netstandard2.0/Avalara.AvaTax.RestClient.dll:0:0:0:0 | Avalara.AvaTax.RestClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=be94eb8ba37fd33c | | test-db/working/packages/microsoft.bcl.asyncinterfaces/8.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll:0:0:0:0 | Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.netcore.app.ref/9.0.0/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | -| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.0/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.CSharp.dll:0:0:0:0 | Microsoft.CSharp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Core.dll:0:0:0:0 | Microsoft.VisualBasic.Core, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Primitives.dll:0:0:0:0 | Microsoft.Win32.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.dll:0:0:0:0 | Microsoft.Win32.Registry, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.AppContext.dll:0:0:0:0 | System.AppContext, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Buffers.dll:0:0:0:0 | System.Buffers, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Concurrent.dll:0:0:0:0 | System.Collections.Concurrent, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Immutable.dll:0:0:0:0 | System.Collections.Immutable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.NonGeneric.dll:0:0:0:0 | System.Collections.NonGeneric, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.Specialized.dll:0:0:0:0 | System.Collections.Specialized, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Collections.dll:0:0:0:0 | System.Collections, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Annotations.dll:0:0:0:0 | System.ComponentModel.Annotations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.DataAnnotations.dll:0:0:0:0 | System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.EventBasedAsync.dll:0:0:0:0 | System.ComponentModel.EventBasedAsync, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.Primitives.dll:0:0:0:0 | System.ComponentModel.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.TypeConverter.dll:0:0:0:0 | System.ComponentModel.TypeConverter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ComponentModel.dll:0:0:0:0 | System.ComponentModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Configuration.dll:0:0:0:0 | System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Console.dll:0:0:0:0 | System.Console, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Core.dll:0:0:0:0 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.Common.dll:0:0:0:0 | System.Data.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.DataSetExtensions.dll:0:0:0:0 | System.Data.DataSetExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Data.dll:0:0:0:0 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Contracts.dll:0:0:0:0 | System.Diagnostics.Contracts, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Debug.dll:0:0:0:0 | System.Diagnostics.Debug, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.DiagnosticSource.dll:0:0:0:0 | System.Diagnostics.DiagnosticSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.FileVersionInfo.dll:0:0:0:0 | System.Diagnostics.FileVersionInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Process.dll:0:0:0:0 | System.Diagnostics.Process, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.StackTrace.dll:0:0:0:0 | System.Diagnostics.StackTrace, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TextWriterTraceListener.dll:0:0:0:0 | System.Diagnostics.TextWriterTraceListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tools.dll:0:0:0:0 | System.Diagnostics.Tools, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.TraceSource.dll:0:0:0:0 | System.Diagnostics.TraceSource, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Diagnostics.Tracing.dll:0:0:0:0 | System.Diagnostics.Tracing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Drawing.Primitives.dll:0:0:0:0 | System.Drawing.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Dynamic.Runtime.dll:0:0:0:0 | System.Dynamic.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Asn1.dll:0:0:0:0 | System.Formats.Asn1, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Formats.Tar.dll:0:0:0:0 | System.Formats.Tar, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Calendars.dll:0:0:0:0 | System.Globalization.Calendars, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.Extensions.dll:0:0:0:0 | System.Globalization.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Globalization.dll:0:0:0:0 | System.Globalization, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.Brotli.dll:0:0:0:0 | System.IO.Compression.Brotli, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.FileSystem.dll:0:0:0:0 | System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.ZipFile.dll:0:0:0:0 | System.IO.Compression.ZipFile, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Compression.dll:0:0:0:0 | System.IO.Compression, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.AccessControl.dll:0:0:0:0 | System.IO.FileSystem.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.DriveInfo.dll:0:0:0:0 | System.IO.FileSystem.DriveInfo, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Primitives.dll:0:0:0:0 | System.IO.FileSystem.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.Watcher.dll:0:0:0:0 | System.IO.FileSystem.Watcher, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.FileSystem.dll:0:0:0:0 | System.IO.FileSystem, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.IsolatedStorage.dll:0:0:0:0 | System.IO.IsolatedStorage, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.MemoryMappedFiles.dll:0:0:0:0 | System.IO.MemoryMappedFiles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipelines.dll:0:0:0:0 | System.IO.Pipelines, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.AccessControl.dll:0:0:0:0 | System.IO.Pipes.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.Pipes.dll:0:0:0:0 | System.IO.Pipes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.UnmanagedMemoryStream.dll:0:0:0:0 | System.IO.UnmanagedMemoryStream, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.IO.dll:0:0:0:0 | System.IO, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Expressions.dll:0:0:0:0 | System.Linq.Expressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Parallel.dll:0:0:0:0 | System.Linq.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.Queryable.dll:0:0:0:0 | System.Linq.Queryable, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Linq.dll:0:0:0:0 | System.Linq, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Memory.dll:0:0:0:0 | System.Memory, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.Json.dll:0:0:0:0 | System.Net.Http.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Http.dll:0:0:0:0 | System.Net.Http, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.HttpListener.dll:0:0:0:0 | System.Net.HttpListener, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Mail.dll:0:0:0:0 | System.Net.Mail, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NameResolution.dll:0:0:0:0 | System.Net.NameResolution, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.NetworkInformation.dll:0:0:0:0 | System.Net.NetworkInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Ping.dll:0:0:0:0 | System.Net.Ping, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Primitives.dll:0:0:0:0 | System.Net.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Quic.dll:0:0:0:0 | System.Net.Quic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Requests.dll:0:0:0:0 | System.Net.Requests, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Security.dll:0:0:0:0 | System.Net.Security, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.ServicePoint.dll:0:0:0:0 | System.Net.ServicePoint, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.Sockets.dll:0:0:0:0 | System.Net.Sockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebClient.dll:0:0:0:0 | System.Net.WebClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebHeaderCollection.dll:0:0:0:0 | System.Net.WebHeaderCollection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebProxy.dll:0:0:0:0 | System.Net.WebProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.Client.dll:0:0:0:0 | System.Net.WebSockets.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.WebSockets.dll:0:0:0:0 | System.Net.WebSockets, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Net.dll:0:0:0:0 | System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.Vectors.dll:0:0:0:0 | System.Numerics.Vectors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Numerics.dll:0:0:0:0 | System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ObjectModel.dll:0:0:0:0 | System.ObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.DispatchProxy.dll:0:0:0:0 | System.Reflection.DispatchProxy, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.ILGeneration.dll:0:0:0:0 | System.Reflection.Emit.ILGeneration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.Lightweight.dll:0:0:0:0 | System.Reflection.Emit.Lightweight, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Emit.dll:0:0:0:0 | System.Reflection.Emit, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Extensions.dll:0:0:0:0 | System.Reflection.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Metadata.dll:0:0:0:0 | System.Reflection.Metadata, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.Primitives.dll:0:0:0:0 | System.Reflection.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.TypeExtensions.dll:0:0:0:0 | System.Reflection.TypeExtensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Reflection.dll:0:0:0:0 | System.Reflection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Reader.dll:0:0:0:0 | System.Resources.Reader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.ResourceManager.dll:0:0:0:0 | System.Resources.ResourceManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Resources.Writer.dll:0:0:0:0 | System.Resources.Writer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.Unsafe.dll:0:0:0:0 | System.Runtime.CompilerServices.Unsafe, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.CompilerServices.VisualC.dll:0:0:0:0 | System.Runtime.CompilerServices.VisualC, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Extensions.dll:0:0:0:0 | System.Runtime.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Handles.dll:0:0:0:0 | System.Runtime.Handles, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.JavaScript.dll:0:0:0:0 | System.Runtime.InteropServices.JavaScript, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.RuntimeInformation.dll:0:0:0:0 | System.Runtime.InteropServices.RuntimeInformation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.InteropServices.dll:0:0:0:0 | System.Runtime.InteropServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Intrinsics.dll:0:0:0:0 | System.Runtime.Intrinsics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Loader.dll:0:0:0:0 | System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Numerics.dll:0:0:0:0 | System.Runtime.Numerics, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Formatters.dll:0:0:0:0 | System.Runtime.Serialization.Formatters, Version=8.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Json.dll:0:0:0:0 | System.Runtime.Serialization.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Primitives.dll:0:0:0:0 | System.Runtime.Serialization.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.Xml.dll:0:0:0:0 | System.Runtime.Serialization.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.Serialization.dll:0:0:0:0 | System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Runtime.dll:0:0:0:0 | System.Runtime, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.AccessControl.dll:0:0:0:0 | System.Security.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Claims.dll:0:0:0:0 | System.Security.Claims, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Algorithms.dll:0:0:0:0 | System.Security.Cryptography.Algorithms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Cng.dll:0:0:0:0 | System.Security.Cryptography.Cng, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Csp.dll:0:0:0:0 | System.Security.Cryptography.Csp, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Encoding.dll:0:0:0:0 | System.Security.Cryptography.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.OpenSsl.dll:0:0:0:0 | System.Security.Cryptography.OpenSsl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Primitives.dll:0:0:0:0 | System.Security.Cryptography.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.X509Certificates.dll:0:0:0:0 | System.Security.Cryptography.X509Certificates, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.dll:0:0:0:0 | System.Security.Cryptography, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.Windows.dll:0:0:0:0 | System.Security.Principal.Windows, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.Principal.dll:0:0:0:0 | System.Security.Principal, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.SecureString.dll:0:0:0:0 | System.Security.SecureString, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Security.dll:0:0:0:0 | System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceModel.Web.dll:0:0:0:0 | System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ServiceProcess.dll:0:0:0:0 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.CodePages.dll:0:0:0:0 | System.Text.Encoding.CodePages, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.Extensions.dll:0:0:0:0 | System.Text.Encoding.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encoding.dll:0:0:0:0 | System.Text.Encoding, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Encodings.Web.dll:0:0:0:0 | System.Text.Encodings.Web, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.Json.dll:0:0:0:0 | System.Text.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Text.RegularExpressions.dll:0:0:0:0 | System.Text.RegularExpressions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Channels.dll:0:0:0:0 | System.Threading.Channels, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Overlapped.dll:0:0:0:0 | System.Threading.Overlapped, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Dataflow.dll:0:0:0:0 | System.Threading.Tasks.Dataflow, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Extensions.dll:0:0:0:0 | System.Threading.Tasks.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.Parallel.dll:0:0:0:0 | System.Threading.Tasks.Parallel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Tasks.dll:0:0:0:0 | System.Threading.Tasks, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Thread.dll:0:0:0:0 | System.Threading.Thread, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.ThreadPool.dll:0:0:0:0 | System.Threading.ThreadPool, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.Timer.dll:0:0:0:0 | System.Threading.Timer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Threading.dll:0:0:0:0 | System.Threading, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.Local.dll:0:0:0:0 | System.Transactions.Local, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Transactions.dll:0:0:0:0 | System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.ValueTuple.dll:0:0:0:0 | System.ValueTuple, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.HttpUtility.dll:0:0:0:0 | System.Web.HttpUtility, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Web.dll:0:0:0:0 | System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Windows.dll:0:0:0:0 | System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Linq.dll:0:0:0:0 | System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.ReaderWriter.dll:0:0:0:0 | System.Xml.ReaderWriter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.Serialization.dll:0:0:0:0 | System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XDocument.dll:0:0:0:0 | System.Xml.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.XDocument.dll:0:0:0:0 | System.Xml.XPath.XDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XPath.dll:0:0:0:0 | System.Xml.XPath, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlDocument.dll:0:0:0:0 | System.Xml.XmlDocument, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.XmlSerializer.dll:0:0:0:0 | System.Xml.XmlSerializer, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.Xml.dll:0:0:0:0 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/System.dll:0:0:0:0 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/mscorlib.dll:0:0:0:0 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.netcore.app.ref/9.0.8/ref/net9.0/netstandard.dll:0:0:0:0 | netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Accessibility.dll:0:0:0:0 | Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.Forms.dll:0:0:0:0 | Microsoft.VisualBasic.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.VisualBasic.dll:0:0:0:0 | Microsoft.VisualBasic, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.Registry.AccessControl.dll:0:0:0:0 | Microsoft.Win32.Registry.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/Microsoft.Win32.SystemEvents.dll:0:0:0:0 | Microsoft.Win32.SystemEvents, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationCore.dll:0:0:0:0 | PresentationCore, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero2.dll:0:0:0:0 | PresentationFramework.Aero2, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Aero.dll:0:0:0:0 | PresentationFramework.Aero, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.AeroLite.dll:0:0:0:0 | PresentationFramework.AeroLite, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Classic.dll:0:0:0:0 | PresentationFramework.Classic, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Luna.dll:0:0:0:0 | PresentationFramework.Luna, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.Royale.dll:0:0:0:0 | PresentationFramework.Royale, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationFramework.dll:0:0:0:0 | PresentationFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/PresentationUI.dll:0:0:0:0 | PresentationUI, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/ReachFramework.dll:0:0:0:0 | ReachFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.CodeDom.dll:0:0:0:0 | System.CodeDom, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Configuration.ConfigurationManager.dll:0:0:0:0 | System.Configuration.ConfigurationManager, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Design.dll:0:0:0:0 | System.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.EventLog.dll:0:0:0:0 | System.Diagnostics.EventLog, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Diagnostics.PerformanceCounter.dll:0:0:0:0 | System.Diagnostics.PerformanceCounter, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.DirectoryServices.dll:0:0:0:0 | System.DirectoryServices, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Common.dll:0:0:0:0 | System.Drawing.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.Design.dll:0:0:0:0 | System.Drawing.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Drawing.dll:0:0:0:0 | System.Drawing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Formats.Nrbf.dll:0:0:0:0 | System.Formats.Nrbf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.IO.Packaging.dll:0:0:0:0 | System.IO.Packaging, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Printing.dll:0:0:0:0 | System.Printing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Private.Windows.Core.dll:0:0:0:0 | System.Private.Windows.Core, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Resources.Extensions.dll:0:0:0:0 | System.Resources.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Pkcs.dll:0:0:0:0 | System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.ProtectedData.dll:0:0:0:0 | System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Cryptography.Xml.dll:0:0:0:0 | System.Security.Cryptography.Xml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Security.Permissions.dll:0:0:0:0 | System.Security.Permissions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Threading.AccessControl.dll:0:0:0:0 | System.Threading.AccessControl, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Controls.Ribbon.dll:0:0:0:0 | System.Windows.Controls.Ribbon, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Extensions.dll:0:0:0:0 | System.Windows.Extensions, Version=9.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.Editors.dll:0:0:0:0 | System.Windows.Forms.Design.Editors, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Design.dll:0:0:0:0 | System.Windows.Forms.Design, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.Primitives.dll:0:0:0:0 | System.Windows.Forms.Primitives, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Forms.dll:0:0:0:0 | System.Windows.Forms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Input.Manipulations.dll:0:0:0:0 | System.Windows.Input.Manipulations, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Windows.Presentation.dll:0:0:0:0 | System.Windows.Presentation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/System.Xaml.dll:0:0:0:0 | System.Xaml, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClient.dll:0:0:0:0 | UIAutomationClient, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationClientSideProviders.dll:0:0:0:0 | UIAutomationClientSideProviders, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationProvider.dll:0:0:0:0 | UIAutomationProvider, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/UIAutomationTypes.dll:0:0:0:0 | UIAutomationTypes, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsBase.dll:0:0:0:0 | WindowsBase, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | +| test-db/working/packages/microsoft.windowsdesktop.app.ref/9.0.8/ref/net9.0/WindowsFormsIntegration.dll:0:0:0:0 | WindowsFormsIntegration, Version=9.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 | | test-db/working/packages/newtonsoft.json/12.0.1/lib/netstandard2.0/Newtonsoft.Json.dll:0:0:0:0 | Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed | diff --git a/csharp/ql/integration-tests/windows/standalone_dependencies/global.json b/csharp/ql/integration-tests/windows/standalone_dependencies/global.json index 65324522984..4c6e2601f69 100644 --- a/csharp/ql/integration-tests/windows/standalone_dependencies/global.json +++ b/csharp/ql/integration-tests/windows/standalone_dependencies/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100" + "version": "9.0.304" } } diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 1bce7a7f803..20b1c03d722 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,48 @@ +## 5.3.0 + +### Deprecated APIs + +* The class `AbstractValue` in the `Guards` library has been deprecated and replaced with the class `GuardValue`. + +### Major Analysis Improvements + +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions. For example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. + +### Minor Analysis Improvements + +* Added tracer support for macOS and Linux when the .NET CLI (`dotnet`) directly invokes the C# compiler (`csc`). This enhancement provides basic tracing and extraction capabilities for .NET 10 RC2 on these platforms. +* The extraction of location information for source code entities has been updated to use star IDs (`*` IDs). This change should be transparent to end-users but may improve extraction performance in some cases by reducing TRAP file size and eliminating overhead from location de-duplication. + +## 5.2.6 + +### Minor Analysis Improvements + +* The extraction of location information for parameters, fields, constructors, destructors and user operators has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. +* The extraction of location information for type parameters and tuples types has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of location information for named types (classes, structs, etc.) has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of the location for bound generic entities (methods, accessors, indexers, properties, and events) has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. + +## 5.2.5 + +No user-facing changes. + +## 5.2.4 + +No user-facing changes. + +## 5.2.3 + +### Minor Analysis Improvements + +* A bug has been fixed in the data flow analysis, which means that flow through calls using the `base` qualifier may now be tracked more accurately. +* Added summary models for `System.Xml.XmlReader`, `System.Xml.XmlTextReader` and `System.Xml.XmlDictionaryReader`. +* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. +* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. + +## 5.2.2 + +No user-facing changes. + ## 5.2.1 No user-facing changes. @@ -98,7 +143,7 @@ No user-facing changes. * Added `remote` flow source models for properties of Blazor components annotated with any of the following attributes from `Microsoft.AspNetCore.Components`: - `[SupplyParameterFromForm]` - `[SupplyParameterFromQuery]` -* Added the constructor and explicit cast operator of `Microsoft.AspNetCore.Components.MarkupString` as an `html-injection` sink. This will help catch cross-site scripting resulting from using `MarkupString`. +* Added the constructor and explicit cast operator of `Microsoft.AspNetCore.Components.MarkupString` as an `html-injection` sink. This will help catch cross-site scripting resulting from using `MarkupString`. * Added flow summaries for the `Microsoft.AspNetCore.Mvc.Controller::View` method. * The data flow library has been updated to track types in a slightly different way: The type of the tainted data (which may be stored into fields, etc.) is tracked more precisely, while the types of intermediate containers for nested contents is tracked less precisely. This may have a slight effect on false positives for complex flow paths. * The C# extractor now supports *basic* extraction of .NET 9 projects. There might be limited support for extraction of code using the new C# 13 language features. @@ -118,7 +163,7 @@ No user-facing changes. - `System.Web.HttpUtility::ParseQueryString` - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseQuery` - `Microsoft.AspNetCore.WebUtilities.QueryHelpers::ParseNullableQuery` -* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. +* Added `js-interop` sinks for the `InvokeAsync` and `InvokeVoidAsync` methods of `Microsoft.JSInterop.IJSRuntime`, which can run arbitrary JavaScript. ## 3.1.1 @@ -156,8 +201,8 @@ No user-facing changes. ### Breaking Changes -* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. -* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. +* Deleted many deprecated taint-tracking configurations based on `TaintTracking::Configuration`. +* Deleted many deprecated dataflow configurations based on `DataFlow::Configuration`. * Deleted the deprecated `explorationLimit` predicate from `DataFlow::Configuration`, use `FlowExploration` instead. ### Minor Analysis Improvements @@ -406,7 +451,7 @@ No user-facing changes. ### New Features -* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. +* The `DataFlow::StateConfigSig` signature module has gained default implementations for `isBarrier/2` and `isAdditionalFlowStep/4`. Hence it is no longer needed to provide `none()` implementations of these predicates if they are not needed. ### Minor Analysis Improvements @@ -541,7 +586,7 @@ No user-facing changes. * Attributes on methods in CIL are now extracted (Bugfix). * Support for `static virtual` and `static abstract` interface members. -* Support for *operators* in interface definitions. +* Support for *operators* in interface definitions. * C# 11: Added support for the unsigned right shift `>>>` and unsigned right shift assignment `>>>=` operators. * Query id's have been aligned such that they are prefixed with `cs` instead of `csharp`. @@ -581,13 +626,13 @@ No user-facing changes. ### Minor Analysis Improvements * `DateTime` expressions are now considered simple type sanitizers. This affects a wide range of security queries. -* ASP.NET Core controller definition has been made more precise. The amount of introduced taint sources or eliminated false positives should be low though, since the most common pattern is to derive all user defined ASP.NET Core controllers from the standard Controller class, which is not affected. +* ASP.NET Core controller definition has been made more precise. The amount of introduced taint sources or eliminated false positives should be low though, since the most common pattern is to derive all user defined ASP.NET Core controllers from the standard Controller class, which is not affected. ## 0.4.0 ### Deprecated APIs -* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Some classes/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### Bug Fixes @@ -600,7 +645,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. +* Many classes/predicates/modules with upper-case acronyms in their name have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### Minor Analysis Improvements @@ -647,7 +692,7 @@ No user-facing changes. ### Deprecated APIs -* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. +* Many classes/predicates/modules that had upper-case acronyms have been renamed to follow our style-guide. The old name still exists as a deprecated alias. ### New Features diff --git a/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md b/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md new file mode 100644 index 00000000000..a3c69932917 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-10-04-deprecate-controlsblock.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* `ControlFlowElement.controlsBlock` has been deprecated in favor of the Guards library. diff --git a/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md b/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md new file mode 100644 index 00000000000..0f5005a22a2 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-10-30-overlay-compilation-and-extraction.md @@ -0,0 +1,5 @@ +--- +category: feature +--- + +* Initial support for incremental C# databases via `codeql database create --overlay-base`/`--overlay-changes`. diff --git a/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md b/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md new file mode 100644 index 00000000000..92231d3be2f --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-11-03-roslyn-and-binlog.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Updated *roslyn* and *binlog* dependencies in the extractor, which may improve database and analysis quality. diff --git a/csharp/ql/lib/change-notes/released/5.2.2.md b/csharp/ql/lib/change-notes/released/5.2.2.md new file mode 100644 index 00000000000..22402d6e8fa --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.2.md @@ -0,0 +1,3 @@ +## 5.2.2 + +No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/5.2.3.md b/csharp/ql/lib/change-notes/released/5.2.3.md new file mode 100644 index 00000000000..b9891310419 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.3.md @@ -0,0 +1,8 @@ +## 5.2.3 + +### Minor Analysis Improvements + +* A bug has been fixed in the data flow analysis, which means that flow through calls using the `base` qualifier may now be tracked more accurately. +* Added summary models for `System.Xml.XmlReader`, `System.Xml.XmlTextReader` and `System.Xml.XmlDictionaryReader`. +* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. +* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. diff --git a/csharp/ql/lib/change-notes/released/5.2.4.md b/csharp/ql/lib/change-notes/released/5.2.4.md new file mode 100644 index 00000000000..18f54ba122d --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.4.md @@ -0,0 +1,3 @@ +## 5.2.4 + +No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/5.2.5.md b/csharp/ql/lib/change-notes/released/5.2.5.md new file mode 100644 index 00000000000..bd0e1157099 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.5.md @@ -0,0 +1,3 @@ +## 5.2.5 + +No user-facing changes. diff --git a/csharp/ql/lib/change-notes/released/5.2.6.md b/csharp/ql/lib/change-notes/released/5.2.6.md new file mode 100644 index 00000000000..54ef01bfbf8 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.2.6.md @@ -0,0 +1,8 @@ +## 5.2.6 + +### Minor Analysis Improvements + +* The extraction of location information for parameters, fields, constructors, destructors and user operators has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. +* The extraction of location information for type parameters and tuples types has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of location information for named types (classes, structs, etc.) has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of the location for bound generic entities (methods, accessors, indexers, properties, and events) has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. diff --git a/csharp/ql/lib/change-notes/released/5.3.0.md b/csharp/ql/lib/change-notes/released/5.3.0.md new file mode 100644 index 00000000000..144f8bf2633 --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.3.0.md @@ -0,0 +1,14 @@ +## 5.3.0 + +### Deprecated APIs + +* The class `AbstractValue` in the `Guards` library has been deprecated and replaced with the class `GuardValue`. + +### Major Analysis Improvements + +* The representation of the C# control-flow graph has been significantly changed. This has minor effects on a wide range of queries including both minor improvements and minor regressions, for example, improved precision has been observed for `cs/inefficient-containskey` and `cs/stringbuilder-creation-in-loop`. Two queries stand out as being significantly affected with great improvements: `cs/dereferenced-value-may-be-null` has been completely rewritten which removes a very significant number of false positives. Furthermore, `cs/constant-condition` has been updated to report many new results - these new results are primarily expected to be true positives, but a few new false positives are expected as well. As part of these changes, `cs/dereferenced-value-may-be-null` has been changed from a `path-problem` query to a `problem` query, so paths are no longer reported for this query. + +### Minor Analysis Improvements + +* Added tracer support for macOS and Linux when the .NET CLI (`dotnet`) directly invokes the C# compiler (`csc`). This enhancement provides basic tracing and extraction capabilities for .NET 10 RC2 on these platforms. +* The extraction of location information for source code entities has been updated to use star IDs (`*` IDs). This change should be transparent to end-users but may improve extraction performance in some cases by reducing TRAP file size and eliminating overhead from location de-duplication. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 1684d0e72a2..b0a1c83e5bc 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.2.1 +lastReleaseVersion: 5.3.0 diff --git a/csharp/ql/lib/csharp.qll b/csharp/ql/lib/csharp.qll index dc187fc8d92..cab24d12dcd 100644 --- a/csharp/ql/lib/csharp.qll +++ b/csharp/ql/lib/csharp.qll @@ -36,6 +36,7 @@ import semmle.code.csharp.controlflow.ControlFlowGraph import semmle.code.csharp.dataflow.DataFlow import semmle.code.csharp.dataflow.TaintTracking import semmle.code.csharp.dataflow.SSA +private import semmle.code.csharp.internal.Overlay /** Whether the source was extracted without a build command. */ predicate extractionIsStandalone() { exists(SourceFile f | f.extractedStandalone()) } diff --git a/csharp/ql/lib/ext/System.ComponentModel.model.yml b/csharp/ql/lib/ext/System.ComponentModel.model.yml index d98c97727fb..a3b561583e3 100644 --- a/csharp/ql/lib/ext/System.ComponentModel.model.yml +++ b/csharp/ql/lib/ext/System.ComponentModel.model.yml @@ -36,3 +36,8 @@ extensions: - ["System.ComponentModel", "PropertyDescriptorCollection", False, "set_Item", "(System.Int32,System.Object)", "", "Argument[0]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "manual"] - ["System.ComponentModel", "PropertyDescriptorCollection", False, "set_Item", "(System.Int32,System.Object)", "", "Argument[1]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "manual"] - ["System.ComponentModel", "PropertyDescriptorCollection", False, "set_Item", "(System.Object,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"] + - addsTo: + pack: codeql/csharp-all + extensible: neutralModel + data: + - ["System.ComponentModel", "PropertyDescriptor", "GetValue", "(System.Object)", "summary", "manual"] \ No newline at end of file diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml index 0b8b52d9e8a..549c324d66e 100644 --- a/csharp/ql/lib/ext/System.IO.model.yml +++ b/csharp/ql/lib/ext/System.IO.model.yml @@ -77,7 +77,7 @@ extensions: - ["System.IO", "Path", False, "GetPathRoot", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - ["System.IO", "Path", False, "GetPathRoot", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System.IO", "Path", False, "GetRelativePath", "(System.String,System.String)", "", "Argument[1]", "ReturnValue", "taint", "manual"] - - ["System.IO", "Stream", True, "BeginRead", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "BeginRead", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "BeginWrite", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", False, "CopyTo", "(System.IO.Stream)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "CopyTo", "(System.IO.Stream,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] @@ -85,17 +85,17 @@ extensions: - ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "CopyToAsync", "(System.IO.Stream,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", True, "Write", "(System.ReadOnlySpan)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] - ["System.IO", "Stream", False, "WriteAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"] @@ -128,16 +128,16 @@ extensions: - ["System.IO", "StringWriter", True, "WriteLineAsync", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "StringWriter", True, "WriteLineAsync", "(System.Text.StringBuilder,System.Threading.CancellationToken)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.IO", "TextReader", True, "Read", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] - - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] # Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness - - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"] + - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadLine", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadLineAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.IO", "TextReader", True, "ReadToEnd", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] diff --git a/csharp/ql/lib/ext/System.Xml.model.yml b/csharp/ql/lib/ext/System.Xml.model.yml index efea34b40db..a6ed8dd465d 100644 --- a/csharp/ql/lib/ext/System.Xml.model.yml +++ b/csharp/ql/lib/ext/System.Xml.model.yml @@ -23,6 +23,17 @@ extensions: - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[1]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[3]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDictionaryReader", False, "CreateBinaryReader", "(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.Byte[],System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", False, "CreateTextReader", "(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBase64", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBinHex", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsBinHex", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsChars", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadElementContentAsBase64", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadElementContentAsBinHex", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System.Xml", "XmlDocument", False, "Load", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] @@ -68,3 +79,68 @@ extensions: - ["System.Xml", "XmlReader", False, "Create", "(System.String,System.Xml.XmlReaderSettings)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlReader", False, "Create", "(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System.Xml", "XmlReader", False, "Create", "(System.Xml.XmlReader,System.Xml.XmlReaderSettings)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetAttribute", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "GetValueAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "LookupNamespace", "(System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAs", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsAsync", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBase64Async", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsBinHexAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsObjectAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadContentAsStringAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAs", "(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsAsync", "(System.Type,System.Xml.IXmlNamespaceResolver)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBase64Async", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsBinHexAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsObject", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementContentAsString", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadElementString", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadInnerXml", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadInnerXmlAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadOuterXml", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadOuterXmlAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadSubtree", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "ReadValueChunk", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "ReadValueChunkAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlReader", True, "get_BaseURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Item", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_LocalName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_NameTable", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_NamespaceURI", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_Prefix", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlReader", True, "get_SchemaInfo", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-manual"] + - ["System.Xml", "XmlReader", True, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "df-manual"] + - ["System.Xml", "XmlTextReader", True, "GetNamespacesInScope", "(System.Xml.XmlNamespaceScope)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "GetRemainder", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadBase64", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadBinHex", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", True, "ReadChars", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.IO.TextReader,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.Stream,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.TextReader)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.IO.TextReader,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System.Xml", "XmlTextReader", False, "XmlTextReader", "(System.Xml.XmlNameTable)", "", "Argument[0]", "Argument[this]", "taint", "manual"] diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 3853f03dc2f..870413e7569 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -39,15 +39,15 @@ extensions: - ["System", "Convert", False, "ChangeType", "(System.Object,System.Type,System.IFormatProvider)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ChangeType", "(System.Object,System.TypeCode)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ChangeType", "(System.Object,System.TypeCode,System.IFormatProvider)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "FromBase64CharArray", "(System.Char[],System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"] - - ["System", "Convert", False, "FromBase64String", "(System.String)", "", "Argument[0]", "ReturnValue.Element", "taint", "manual"] - - ["System", "Convert", False, "FromHexString", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"] - - ["System", "Convert", False, "FromHexString", "(System.String)", "", "Argument[0]", "ReturnValue.Element", "taint", "manual"] + - ["System", "Convert", False, "FromBase64CharArray", "(System.Char[],System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System", "Convert", False, "FromBase64String", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["System", "Convert", False, "FromHexString", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] + - ["System", "Convert", False, "FromHexString", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "GetTypeCode", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "IsDBNull", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "Argument[3].Element", "taint", "manual"] + - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "Argument[3]", "taint", "manual"] - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[3].Element", "taint", "manual"] + - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[3]", "taint", "manual"] - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ToBase64String", "(System.Byte[])", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ToBase64String", "(System.Byte[],System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] @@ -353,13 +353,13 @@ extensions: - ["System", "Convert", False, "ToUInt64", "(System.UInt16)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ToUInt64", "(System.UInt32)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - ["System", "Convert", False, "ToUInt64", "(System.UInt64)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1].Element", "taint", "manual"] + - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1]", "taint", "manual"] - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"] - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[1].Element", "taint", "manual"] + - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "manual"] - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[2]", "taint", "manual"] - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "manual"] - - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[1].Element", "taint", "manual"] + - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[1]", "taint", "manual"] - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"] - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] - ["System", "Int32", False, "Parse", "(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"] diff --git a/csharp/ql/lib/printAst.ql b/csharp/ql/lib/printAst.ql index 380f4b4024b..85820796a88 100644 --- a/csharp/ql/lib/printAst.ql +++ b/csharp/ql/lib/printAst.ql @@ -18,8 +18,8 @@ external string selectedSourceFile(); class PrintAstConfigurationOverride extends PrintAstConfiguration { /** - * Holds if the location matches the selected file in the VS Code extension and - * the element is `fromSource`. + * Holds if the location `l` matches the selected file in the VS Code extension and + * the element is `e` is `fromSource`. */ override predicate shouldPrint(Element e, Location l) { super.shouldPrint(e, l) and diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index b99e5b5be64..3ecdad08291 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.2.2-dev +version: 5.3.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp @@ -18,3 +18,4 @@ dataExtensions: - ext/*.model.yml - ext/generated/*.model.yml warnOnImplicitThis: true +compileForOverlayEval: true diff --git a/csharp/ql/lib/semmle/code/csharp/Assignable.qll b/csharp/ql/lib/semmle/code/csharp/Assignable.qll index d4f8d9974f0..3c7170a6f84 100644 --- a/csharp/ql/lib/semmle/code/csharp/Assignable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Assignable.qll @@ -583,7 +583,7 @@ module AssignableDefinitions { } /** - * Holds if the `ref` assignment to `aa` via call `c` is uncertain. + * Holds if the `ref` assignment to `arg` via call `c` is uncertain. */ // Not in the cached module `Cached`, as that would introduce a dependency // on the CFG construction, and effectively collapse too many stages into one diff --git a/csharp/ql/lib/semmle/code/csharp/Caching.qll b/csharp/ql/lib/semmle/code/csharp/Caching.qll index 6a58edef63f..bbe310fe69e 100644 --- a/csharp/ql/lib/semmle/code/csharp/Caching.qll +++ b/csharp/ql/lib/semmle/code/csharp/Caching.qll @@ -10,8 +10,6 @@ module Stages { cached module ControlFlowStage { private import semmle.code.csharp.controlflow.internal.Splitting - private import semmle.code.csharp.controlflow.internal.SuccessorType - private import semmle.code.csharp.controlflow.Guards as Guards cached predicate forceCachingInSameStage() { any() } @@ -20,12 +18,8 @@ module Stages { private predicate forceCachingInSameStageRev() { exists(Split s) or - exists(SuccessorType st) - or exists(ControlFlow::Node n) or - Guards::Internal::isCustomNullCheck(_, _, _, _) - or forceCachingInSameStageRev() } } @@ -39,8 +33,6 @@ module Stages { cached private predicate forceCachingInSameStageRev() { - any(ControlFlowElement cfe).controlsBlock(_, _, _) - or exists(GuardedExpr ge) or forceCachingInSameStageRev() diff --git a/csharp/ql/lib/semmle/code/csharp/Callable.qll b/csharp/ql/lib/semmle/code/csharp/Callable.qll index 6384f458276..44e7c3cf4ca 100644 --- a/csharp/ql/lib/semmle/code/csharp/Callable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Callable.qll @@ -265,7 +265,7 @@ class Method extends Callable, Virtualizable, Attributable, @method { result = Virtualizable.super.getAnUltimateImplementor() } - override Location getALocation() { method_location(this, result) } + override Location getALocation() { method_location(this.getUnboundDeclaration(), result) } /** Holds if this method is an extension method. */ predicate isExtensionMethod() { this.getParameter(0).hasExtensionMethodModifier() } @@ -357,7 +357,7 @@ class Constructor extends Callable, Member, Attributable, @constructor { override Constructor getUnboundDeclaration() { constructors(this, _, _, result) } - override Location getALocation() { constructor_location(this, result) } + override Location getALocation() { constructor_location(this.getUnboundDeclaration(), result) } override predicate fromSource() { Member.super.fromSource() and not this.isCompilerGenerated() } @@ -450,7 +450,7 @@ class Destructor extends Callable, Member, Attributable, @destructor { override Destructor getUnboundDeclaration() { destructors(this, _, _, result) } - override Location getALocation() { destructor_location(this, result) } + override Location getALocation() { destructor_location(this.getUnboundDeclaration(), result) } override string toString() { result = Callable.super.toString() } @@ -484,7 +484,7 @@ class Operator extends Callable, Member, Attributable, Overridable, @operator { override Operator getUnboundDeclaration() { operators(this, _, _, _, _, result) } - override Location getALocation() { operator_location(this, result) } + override Location getALocation() { operator_location(this.getUnboundDeclaration(), result) } override string toString() { result = Callable.super.toString() } @@ -708,7 +708,7 @@ class TrueOperator extends UnaryOperator { * * Either an addition operator (`AddOperator`), a checked addition operator * (`CheckedAddOperator`) a subtraction operator (`SubOperator`), a checked - * substraction operator (`CheckedSubOperator`), a multiplication operator + * subtraction operator (`CheckedSubOperator`), a multiplication operator * (`MulOperator`), a checked multiplication operator (`CheckedMulOperator`), * a division operator (`DivOperator`), a checked division operator * (`CheckedDivOperator`), a remainder operator (`RemOperator`), an and diff --git a/csharp/ql/lib/semmle/code/csharp/Conversion.qll b/csharp/ql/lib/semmle/code/csharp/Conversion.qll index 7a1314abe16..99c58ee51c6 100644 --- a/csharp/ql/lib/semmle/code/csharp/Conversion.qll +++ b/csharp/ql/lib/semmle/code/csharp/Conversion.qll @@ -719,6 +719,15 @@ private Type convTypeParameterBase(TypeParameter tp) { result = getATypeParameterFromConstraints+(tp) } +pragma[noinline] +private Class typeConstraintToBaseType(TypeParameterConstraints tpc) { + tpc.hasValueTypeConstraint() and result instanceof SystemValueTypeClass + or + result = tpc.getATypeConstraint() + or + tpc.hasRefTypeConstraint() and result instanceof ObjectType +} + /** * 10.1.5: Candidates for the effective base class of type parameter `tp`. * @@ -731,13 +740,9 @@ private Class effectiveBaseClassCandidate(TypeParameter tp) { not hasPrimaryConstraints(tp) and result instanceof ObjectType or exists(TypeParameterConstraints tpc | tpc = tp.getConstraints() | - tpc.hasValueTypeConstraint() and result instanceof SystemValueTypeClass - or - result = tpc.getATypeConstraint() + result = typeConstraintToBaseType(tpc) or result = effectiveBaseClassCandidate(tpc.getATypeConstraint()) - or - tpc.hasRefTypeConstraint() and result instanceof ObjectType ) } diff --git a/csharp/ql/lib/semmle/code/csharp/Event.qll b/csharp/ql/lib/semmle/code/csharp/Event.qll index a7079952478..39e2fdb7894 100644 --- a/csharp/ql/lib/semmle/code/csharp/Event.qll +++ b/csharp/ql/lib/semmle/code/csharp/Event.qll @@ -68,7 +68,7 @@ class Event extends DeclarationWithAccessors, @event { result = DeclarationWithAccessors.super.getAnUltimateImplementor() } - override Location getALocation() { event_location(this, result) } + override Location getALocation() { event_location(this.getUnboundDeclaration(), result) } override string getAPrimaryQlClass() { result = "Event" } } @@ -99,7 +99,7 @@ class EventAccessor extends Accessor, @event_accessor { override Event getDeclaration() { event_accessors(this, _, _, result, _) } - override Location getALocation() { event_accessor_location(this, result) } + override Location getALocation() { event_accessor_location(this.getUnboundDeclaration(), result) } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/Member.qll b/csharp/ql/lib/semmle/code/csharp/Member.qll index 3427d4ea089..a196d3b3fc7 100644 --- a/csharp/ql/lib/semmle/code/csharp/Member.qll +++ b/csharp/ql/lib/semmle/code/csharp/Member.qll @@ -491,7 +491,7 @@ class Parameterizable extends Declaration, @parameterizable { final Parameter getARawParameter() { result = this.getRawParameter(_) } /** - * Gets the type of the parameter, possibly prefixed + * Gets the type of the `i`th parameter, possibly prefixed * with `out`, `ref`, or `params`, where appropriate. */ private string parameterTypeToString(int i) { diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index fd4bf1cb86b..1ac96c85e78 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -523,11 +523,9 @@ final class AttributeNode extends ElementNode { * A node representing a `TypeParameter`. */ final class TypeParameterNode extends ElementNode { - TypeParameter typeParameter; - TypeParameterNode() { - typeParameter = element and - not isNotNeeded(typeParameter.getDeclaringGeneric()) + element = + any(TypeParameter typeParameter | not isNotNeeded(typeParameter.getDeclaringGeneric())) } override ElementNode getChild(int childIndex) { none() } diff --git a/csharp/ql/lib/semmle/code/csharp/Property.qll b/csharp/ql/lib/semmle/code/csharp/Property.qll index 60ea83c3011..e651639b631 100644 --- a/csharp/ql/lib/semmle/code/csharp/Property.qll +++ b/csharp/ql/lib/semmle/code/csharp/Property.qll @@ -196,7 +196,7 @@ class Property extends DeclarationWithGetSetAccessors, @property { override PropertyAccess getAnAccess() { result.getTarget() = this } - override Location getALocation() { property_location(this, result) } + override Location getALocation() { property_location(this.getUnboundDeclaration(), result) } override Expr getAnAssignedValue() { result = DeclarationWithGetSetAccessors.super.getAnAssignedValue() @@ -328,7 +328,7 @@ class Indexer extends DeclarationWithGetSetAccessors, Parameterizable, @indexer result = DeclarationWithGetSetAccessors.super.getAnUltimateImplementor() } - override Location getALocation() { indexer_location(this, result) } + override Location getALocation() { indexer_location(this.getUnboundDeclaration(), result) } override string toStringWithTypes() { result = this.getName() + "[" + this.parameterTypesToString() + "]" @@ -408,7 +408,7 @@ class Accessor extends Callable, Modifiable, Attributable, Overridable, @callabl override Accessor getUnboundDeclaration() { accessors(this, _, _, _, result) } - override Location getALocation() { accessor_location(this, result) } + override Location getALocation() { accessor_location(this.getUnboundDeclaration(), result) } override string toString() { result = this.getName() } } diff --git a/csharp/ql/lib/semmle/code/csharp/Type.qll b/csharp/ql/lib/semmle/code/csharp/Type.qll index e417f393b94..1efb1aa93bf 100644 --- a/csharp/ql/lib/semmle/code/csharp/Type.qll +++ b/csharp/ql/lib/semmle/code/csharp/Type.qll @@ -394,6 +394,8 @@ class NestedType extends ValueOrRefType { NestedType() { nested_types(this, _, _) } override ValueOrRefType getDeclaringType() { nested_types(this, result, _) } + + override Location getALocation() { type_location(this.getUnboundDeclaration(), result) } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 02018c260a6..746ea6acd2f 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -213,7 +213,7 @@ class Parameter extends LocalScopeVariable, Attributable, TopLevelExprParent, @p params(this, _, getTypeRef(result), _, _, _, _) } - override Location getALocation() { param_location(this, result) } + override Location getALocation() { param_location(this.getUnboundDeclaration(), result) } override string toString() { result = this.getName() } @@ -449,7 +449,7 @@ class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent fields(this, _, _, _, getTypeRef(result), _) } - override Location getALocation() { field_location(this, result) } + override Location getALocation() { field_location(this.getUnboundDeclaration(), result) } override string toString() { result = Variable.super.toString() } diff --git a/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll b/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll index 508ba0e5e87..ab2d9e0eef7 100644 --- a/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll +++ b/csharp/ql/lib/semmle/code/csharp/commons/Constants.qll @@ -6,9 +6,7 @@ private import semmle.code.csharp.commons.StructuralComparison as StructuralComp pragma[noinline] private predicate isConstantCondition0(ControlFlow::Node cfn, boolean b) { - exists( - cfn.getASuccessorByType(any(ControlFlow::SuccessorTypes::BooleanSuccessor t | t.getValue() = b)) - ) and + exists(cfn.getASuccessorByType(any(ControlFlow::BooleanSuccessor t | t.getValue() = b))) and strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll index 9e548838ade..bf6a9772857 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll @@ -3,9 +3,10 @@ */ import csharp -private import ControlFlow::SuccessorTypes +private import ControlFlow private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl +private import codeql.controlflow.BasicBlock as BB /** * A basic block, that is, a maximal straight-line sequence of control flow nodes @@ -13,7 +14,12 @@ private import CfgImpl::BasicBlocks as BasicBlocksImpl */ final class BasicBlock extends BasicBlocksImpl::BasicBlock { /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { result = this.getASuccessor(t) } + BasicBlock getASuccessor(ControlFlow::SuccessorType t) { result = super.getASuccessor(t) } + + /** DEPRECATED: Use `getASuccessor` instead. */ + deprecated BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { + result = this.getASuccessor(t) + } /** Gets an immediate predecessor of this basic block of a given type, if any. */ BasicBlock getAPredecessorByType(ControlFlow::SuccessorType t) { @@ -58,6 +64,8 @@ final class BasicBlock extends BasicBlocksImpl::BasicBlock { result.getFirstNode() = this.getLastNode().getAFalseSuccessor() } + BasicBlock getASuccessor() { result = super.getASuccessor() } + /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ ControlFlow::Node getNode(int pos) { result = super.getNode(pos) } @@ -330,3 +338,19 @@ final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBl super.edgeDominates(controlled, s) } } + +private class BasicBlockAlias = BasicBlock; + +private class EntryBasicBlockAlias = EntryBasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = ControlFlow::Node; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock = EntryBasicBlockAlias; + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + BasicBlocksImpl::dominatingEdge(bb1, bb2) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll index 5649f43b881..0d0ed681969 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowElement.qll @@ -5,7 +5,6 @@ private import semmle.code.csharp.ExprOrStmtParent private import semmle.code.csharp.commons.Compilation private import ControlFlow private import ControlFlow::BasicBlocks -private import SuccessorTypes private import semmle.code.csharp.Caching private import internal.ControlFlowGraphImpl as Impl @@ -41,6 +40,12 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element { */ Nodes::ElementNode getAControlFlowNode() { result.getAstNode() = this } + /** Gets the control flow node for this element. */ + ControlFlow::Node getControlFlowNode() { result.getAstNode() = this } + + /** Gets the basic block in which this element occurs. */ + BasicBlock getBasicBlock() { result = this.getAControlFlowNode().getBasicBlock() } + /** * Gets a first control flow node executed within this element. */ @@ -82,148 +87,20 @@ class ControlFlowElement extends ExprOrStmtParent, @control_flow_element { result.getAControlFlowNode() } - pragma[noinline] - private predicate immediatelyControlsBlockSplit0( - ConditionBlock cb, BasicBlock succ, ConditionalSuccessor s - ) { - // Only calculate dominance by explicit recursion for split nodes; - // all other nodes can use regular CFG dominance - this instanceof Impl::SplitAstNode and - cb.getLastNode() = this.getAControlFlowNode() and - succ = cb.getASuccessorByType(s) - } - - pragma[noinline] - private predicate immediatelyControlsBlockSplit1( - ConditionBlock cb, BasicBlock succ, ConditionalSuccessor s, BasicBlock pred, SuccessorType t - ) { - this.immediatelyControlsBlockSplit0(cb, succ, s) and - pred = succ.getAPredecessorByType(t) and - pred != cb - } - - pragma[noinline] - private predicate immediatelyControlsBlockSplit2( - ConditionBlock cb, BasicBlock succ, ConditionalSuccessor s, BasicBlock pred, SuccessorType t - ) { - this.immediatelyControlsBlockSplit1(cb, succ, s, pred, t) and - ( - succ.dominates(pred) - or - // `pred` might be another split of this element - pred.getLastNode().getAstNode() = this and - t = s - ) - } - /** - * Holds if basic block `succ` is immediately controlled by this control flow - * element with conditional value `s`. That is, `succ` can only be reached from - * the callable entry point by going via the `s` edge out of *some* basic block - * `pred` ending with this element, and `pred` is an immediate predecessor - * of `succ`. + * DEPRECATED: Use `Guard` class instead. * - * Moreover, this control flow element corresponds to multiple control flow nodes, - * which is why - * - * ```ql - * exists(ConditionBlock cb | - * cb.getLastNode() = this.getAControlFlowNode() | - * cb.immediatelyControls(succ, s) - * ) - * ``` - * - * does not work. - * - * `cb` records all of the possible condition blocks for this control flow element - * that a path from the callable entry point to `succ` may go through. - */ - pragma[nomagic] - private predicate immediatelyControlsBlockSplit( - BasicBlock succ, ConditionalSuccessor s, ConditionBlock cb - ) { - this.immediatelyControlsBlockSplit0(cb, succ, s) and - forall(BasicBlock pred, SuccessorType t | - this.immediatelyControlsBlockSplit1(cb, succ, s, pred, t) - | - this.immediatelyControlsBlockSplit2(cb, succ, s, pred, t) - ) - } - - pragma[noinline] - private predicate controlsJoinBlockPredecessor( - JoinBlock controlled, ConditionalSuccessor s, int i, ConditionBlock cb - ) { - this.controlsBlockSplit(controlled.getJoinBlockPredecessor(i), s, cb) - } - - private predicate controlsJoinBlockSplit(JoinBlock controlled, ConditionalSuccessor s, int i) { - i = -1 and - this.controlsJoinBlockPredecessor(controlled, s, _, _) - or - this.controlsJoinBlockSplit(controlled, s, i - 1) and - ( - this.controlsJoinBlockPredecessor(controlled, s, i, _) - or - controlled.dominates(controlled.getJoinBlockPredecessor(i)) - ) - } - - cached - private predicate controlsBlockSplit( - BasicBlock controlled, ConditionalSuccessor s, ConditionBlock cb - ) { - Stages::GuardsStage::forceCachingInSameStage() and - this.immediatelyControlsBlockSplit(controlled, s, cb) - or - // Equivalent with - // - // ```ql - // exists(JoinBlockPredecessor pred | pred = controlled.getAPredecessor() | - // this.controlsBlockSplit(pred, s) - // ) and - // forall(JoinBlockPredecessor pred | pred = controlled.getAPredecessor() | - // this.controlsBlockSplit(pred, s) - // or - // controlled.dominates(pred) - // ) - // ``` - // - // but uses no universal recursion for better performance. - exists(int last | - last = max(int i | exists(controlled.(JoinBlock).getJoinBlockPredecessor(i))) - | - this.controlsJoinBlockSplit(controlled, s, last) - ) and - this.controlsJoinBlockPredecessor(controlled, s, _, cb) - or - not controlled instanceof JoinBlock and - this.controlsBlockSplit(controlled.getAPredecessor(), s, cb) - } - - /** * Holds if basic block `controlled` is controlled by this control flow element * with conditional value `s`. That is, `controlled` can only be reached from * the callable entry point by going via the `s` edge out of *some* basic block * ending with this element. * - * This predicate is different from - * - * ```ql - * exists(ConditionBlock cb | - * cb.getLastNode() = this.getAControlFlowNode() | - * cb.controls(controlled, s) - * ) - * ``` - * - * as control flow splitting is taken into account. - * * `cb` records all of the possible condition blocks for this control flow element * that a path from the callable entry point to `controlled` may go through. */ - predicate controlsBlock(BasicBlock controlled, ConditionalSuccessor s, ConditionBlock cb) { - this.controlsBlockSplit(controlled, s, cb) - or + deprecated predicate controlsBlock( + BasicBlock controlled, ConditionalSuccessor s, ConditionBlock cb + ) { cb.getLastNode() = this.getAControlFlowNode() and cb.edgeDominates(controlled, s) } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll index 2334d240935..438174fe297 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll @@ -6,7 +6,6 @@ import csharp module ControlFlow { private import semmle.code.csharp.controlflow.BasicBlocks as BBs import semmle.code.csharp.controlflow.internal.SuccessorType - private import SuccessorTypes private import internal.ControlFlowGraphImpl as Impl private import internal.Splitting as Splitting @@ -252,6 +251,9 @@ module ControlFlow { } } + /** A control flow node indicating normal termination of a callable. */ + class NormalExitNode extends AnnotatedExitNode instanceof Impl::NormalExitNode { } + /** A node for a callable exit point. */ class ExitNode extends Node instanceof Impl::ExitNode { /** Gets the callable that this exit applies to. */ @@ -292,14 +294,6 @@ module ControlFlow { } class Split = Splitting::Split; - - class FinallySplit = Splitting::FinallySplitting::FinallySplit; - - class ExceptionHandlerSplit = Splitting::ExceptionHandlerSplitting::ExceptionHandlerSplit; - - class BooleanSplit = Splitting::BooleanSplitting::BooleanSplit; - - class LoopSplit = Splitting::LoopSplitting::LoopSplit; } class BasicBlock = BBs::BasicBlock; diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowReachability.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowReachability.qll new file mode 100644 index 00000000000..aafe14402c7 --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowReachability.qll @@ -0,0 +1,57 @@ +/** + * Provides an implementation of local (intraprocedural) control flow reachability. + */ + +import csharp +private import codeql.controlflow.ControlFlowReachability +private import semmle.code.csharp.controlflow.BasicBlocks +private import semmle.code.csharp.controlflow.Guards as Guards +private import semmle.code.csharp.ExprOrStmtParent + +private module ControlFlowInput implements + InputSig +{ + private import csharp as CS + + AstNode getEnclosingAstNode(ControlFlow::Node node) { + node.getAstNode() = result + or + not exists(node.getAstNode()) and result = node.getEnclosingCallable() + } + + class AstNode = ExprOrStmtParent; + + AstNode getParent(AstNode node) { result = node.getParent() } + + class FinallyBlock extends AstNode { + FinallyBlock() { any(TryStmt try).getFinally() = this } + } + + class Expr = CS::Expr; + + class SourceVariable = Ssa::SourceVariable; + + class SsaDefinition = Ssa::Definition; + + class SsaExplicitWrite extends SsaDefinition instanceof Ssa::ExplicitDefinition { + Expr getValue() { result = super.getADefinition().getSource() } + } + + class SsaPhiDefinition = Ssa::PhiNode; + + class SsaUncertainWrite = Ssa::UncertainDefinition; + + class GuardValue = Guards::GuardValue; + + predicate ssaControlsBranchEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, GuardValue v) { + Guards::Guards::ssaControlsBranchEdge(def, bb1, bb2, v) + } + + predicate ssaControls(SsaDefinition def, BasicBlock bb, GuardValue v) { + Guards::Guards::ssaControls(def, bb, v) + } + + import Guards::Guards::InternalUtil +} + +module ControlFlowReachability = Make; diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 313fabc0235..f61d7f9c3a7 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -3,7 +3,7 @@ */ import csharp -private import ControlFlow::SuccessorTypes +private import ControlFlow private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.commons.ComparisonTest private import semmle.code.csharp.commons.StructuralComparison as SC @@ -13,11 +13,306 @@ private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.Linq private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.collections.Generic +private import codeql.controlflow.Guards as SharedGuards + +private module GuardsInput implements + SharedGuards::InputSig +{ + private import csharp as CS + + class NormalExitNode = ControlFlow::Nodes::NormalExitNode; + + class AstNode = ControlFlowElement; + + class Expr = CS::Expr; + + private newtype TConstantValue = + TStringValue(string value) { any(StringLiteral s).getValue() = value } + + class ConstantValue extends TConstantValue { + string toString() { this = TStringValue(result) } + } + + abstract class ConstantExpr extends Expr { + predicate isNull() { none() } + + boolean asBooleanValue() { none() } + + int asIntegerValue() { none() } + + ConstantValue asConstantValue() { none() } + } + + private class NullConstant extends ConstantExpr { + NullConstant() { nullValueImplied(this) } + + override predicate isNull() { any() } + } + + private predicate boolConst(Expr e, boolean b) { + e.getType() instanceof BoolType and + e.getValue() = b.toString() + } + + private class BooleanConstant extends ConstantExpr { + BooleanConstant() { boolConst(this, _) } + + override boolean asBooleanValue() { boolConst(this, result) } + } + + private predicate intConst(Expr e, int i) { + e.getValue().toInt() = i and + ( + e.getType() instanceof Enum + or + e.getType() instanceof IntegralType + ) + } + + private class IntegerConstant extends ConstantExpr { + IntegerConstant() { intConst(this, _) } + + override int asIntegerValue() { intConst(this, result) } + } + + private class EnumConst extends ConstantExpr { + EnumConst() { this.getType() instanceof Enum and this.hasValue() } + + override int asIntegerValue() { result = this.getValue().toInt() } + } + + private class StringConstant extends ConstantExpr instanceof StringLiteral { + override ConstantValue asConstantValue() { result = TStringValue(this.getValue()) } + } + + class NonNullExpr extends Expr { + NonNullExpr() { nonNullValueImplied(this) } + } + + class Case extends AstNode instanceof CS::Case { + Expr getSwitchExpr() { super.getExpr() = result } + + predicate isDefaultCase() { this instanceof DefaultCase } + + ConstantExpr asConstantCase() { super.getPattern() = result } + + private predicate hasEdge(BasicBlock bb1, BasicBlock bb2, MatchingCompletion c) { + exists(PatternExpr pe | + super.getPattern() = pe and + c.isValidFor(pe) and + bb1.getLastNode() = pe.getAControlFlowNode() and + bb1.getASuccessor(c.getAMatchingSuccessorType()) = bb2 + ) + } + + predicate matchEdge(BasicBlock bb1, BasicBlock bb2) { + exists(MatchingCompletion c | this.hasEdge(bb1, bb2, c) and c.isMatch()) + } + + predicate nonMatchEdge(BasicBlock bb1, BasicBlock bb2) { + exists(MatchingCompletion c | this.hasEdge(bb1, bb2, c) and c.isNonMatch()) + } + } + + abstract private class BinExpr extends BinaryOperation { } + + class AndExpr extends BinExpr { + AndExpr() { + this instanceof LogicalAndExpr or + this instanceof BitwiseAndExpr + } + } + + class OrExpr extends BinExpr { + OrExpr() { + this instanceof LogicalOrExpr or + this instanceof BitwiseOrExpr + } + } + + class NotExpr = LogicalNotExpr; + + class IdExpr extends Expr { + IdExpr() { this instanceof AssignExpr or this instanceof CastExpr } + + Expr getEqualChildExpr() { + result = this.(AssignExpr).getRValue() + or + result = this.(CastExpr).getExpr() + } + } + + predicate equalityTest(Expr eqtest, Expr left, Expr right, boolean polarity) { + exists(ComparisonTest ct | + ct.getExpr() = eqtest and + ct.getFirstArgument() = left and + ct.getSecondArgument() = right + | + ct.getComparisonKind().isEquality() and polarity = true + or + ct.getComparisonKind().isInequality() and polarity = false + ) + or + exists(IsExpr ie, PatternExpr pat | + ie = eqtest and + ie.getExpr() = left and + ie.getPattern() = pat + | + right = pat.(ConstantPatternExpr) and + polarity = true + or + right = pat.(NotPatternExpr).getPattern().(ConstantPatternExpr) and + polarity = false + ) + } + + class ConditionalExpr = CS::ConditionalExpr; + + class Parameter = CS::Parameter; + + private int parameterPosition() { result in [-1, any(Parameter p).getPosition()] } + + class ParameterPosition extends int { + ParameterPosition() { this = parameterPosition() } + } + + class ArgumentPosition extends int { + ArgumentPosition() { this = parameterPosition() } + } + + pragma[inline] + predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } + + final private class FinalCallable = Callable; + + class NonOverridableMethod extends FinalCallable { + NonOverridableMethod() { not this.(Overridable).isOverridableOrImplementable() } + + Parameter getParameter(ParameterPosition ppos) { + super.getParameter(ppos) = result and + not result.isParams() + } + + Expr getAReturnExpr() { this.canReturn(result) } + } + + class NonOverridableMethodCall extends Expr instanceof Call { + NonOverridableMethod getMethod() { super.getTarget().getUnboundDeclaration() = result } + + Expr getArgument(ArgumentPosition apos) { + result = super.getArgumentForParameter(any(Parameter p | p.getPosition() = apos)) + } + } +} + +private module GuardsImpl = SharedGuards::Make; + +class GuardValue = GuardsImpl::GuardValue; + +private module LogicInput implements GuardsImpl::LogicInputSig { + class SsaDefinition extends Ssa::Definition { + Expr getARead() { super.getARead() = result } + } + + class SsaExplicitWrite extends SsaDefinition instanceof Ssa::ExplicitDefinition { + Expr getValue() { result = super.getADefinition().getSource() } + } + + class SsaPhiDefinition extends SsaDefinition instanceof Ssa::PhiNode { + predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { + super.hasInputFromBlock(inp, bb) + } + } + + class SsaParameterInit extends SsaDefinition instanceof Ssa::ImplicitParameterDefinition { + Parameter getParameter() { result = super.getParameter() } + } + + predicate additionalNullCheck(GuardsImpl::PreGuard guard, GuardValue val, Expr e, boolean isNull) { + // Comparison with a non-`null` value, for example `x?.Length > 0` + exists(ComparisonTest ct, ComparisonKind ck, Expr arg | ct.getExpr() = guard | + e instanceof DereferenceableExpr and + ct.getAnArgument() = e and + ct.getAnArgument() = arg and + nonNullValueImplied(arg) and + ck = ct.getComparisonKind() and + e != arg and + isNull = false and + not ck.isEquality() and + not ck.isInequality() and + val.asBooleanValue() = true + ) + or + // Call to `string.IsNullOrEmpty()` or `string.IsNullOrWhiteSpace()` + exists(MethodCall mc, string name | guard = mc | + mc.getTarget() = any(SystemStringClass c).getAMethod(name) and + name.regexpMatch("IsNullOr(Empty|WhiteSpace)") and + mc.getArgument(0) = e and + val.asBooleanValue() = false and + isNull = false + ) + or + guard = + any(PatternMatch pm | + e instanceof DereferenceableExpr and + e = pm.getExpr() and + ( + val.asBooleanValue().booleanNot() = patternMatchesNull(pm.getPattern()) and + isNull = false + or + exists(TypePatternExpr tpe | + // E.g. `x is string` where `x` has type `string` + typePattern(guard, tpe, tpe.getCheckedType()) and + val.asBooleanValue() = false and + isNull = true + ) + ) + ) + or + e.(DereferenceableExpr).hasNullableType() and + guard = + any(PropertyAccess pa | + pa.getQualifier() = e and + pa.getTarget().hasName("HasValue") and + val.asBooleanValue().booleanNot() = isNull + ) + } + + predicate additionalImpliesStep( + GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 + ) { + g1 instanceof DereferenceableExpr and + g1 = getNullEquivParent(g2) and + v1.isNullness(_) and + v2 = v1 + or + g1 instanceof DereferenceableExpr and + g2 = getANullImplyingChild(g1) and + v1.isNonNullValue() and + v2 = v1 + or + g2 = g1.(NullCoalescingExpr).getAnOperand() and + v1.isNullValue() and + v2 = v1 + or + exists(Assertion assert, AssertMethod target, int i | + assert.getAssertMethod() = target and + g1 = assert and + v1.getDualValue().isThrowsException() and + g2 = assert.getExpr(i) + | + target.(BooleanAssertMethod).getAnAssertionIndex(v2.asBooleanValue()) = i + or + target.(NullnessAssertMethod).getAnAssertionIndex(any(boolean isNull | v2.isNullness(isNull))) = + i + ) + } +} + +module Guards = GuardsImpl::Logic; /** An expression whose value may control the execution of another element. */ -class Guard extends Expr { - Guard() { isGuard(this, _) } - +class Guard extends Guards::Guard { /** * Holds if `cfn` is guarded by this expression having value `v`, where `sub` is * a sub expression of this expression that is structurally equal to the expression @@ -26,7 +321,7 @@ class Guard extends Expr { * In case `cfn` or `sub` access an SSA variable in their left-most qualifier, then * so must the other (accessing the same SSA variable). */ - predicate controlsNode(ControlFlow::Nodes::ElementNode cfn, AccessOrCallExpr sub, AbstractValue v) { + predicate controlsNode(ControlFlow::Nodes::ElementNode cfn, AccessOrCallExpr sub, GuardValue v) { isGuardedByNode(cfn, this, sub, v) } @@ -36,242 +331,78 @@ class Guard extends Expr { * Note: This predicate is inlined. */ pragma[inline] - predicate controlsNode(ControlFlow::Nodes::ElementNode cfn, AbstractValue v) { + predicate controlsNode(ControlFlow::Nodes::ElementNode cfn, GuardValue v) { guardControls(this, cfn.getBasicBlock(), v) } /** * Holds if basic block `bb` is guarded by this expression having value `v`. */ - predicate controlsBasicBlock(BasicBlock bb, AbstractValue v) { guardControls(this, bb, v) } - - /** - * Holds if this guard is an equality test between `e1` and `e2`. If the test is - * negated, that is `!=`, then `polarity` is false, otherwise `polarity` is - * true. - */ - predicate isEquality(Expr e1, Expr e2, boolean polarity) { - exists(BooleanValue v | - this = getAnEqualityCheck(e1, v, e2) and - polarity = v.getValue() - ) - } + predicate controlsBasicBlock(BasicBlock bb, GuardValue v) { guardControls(this, bb, v) } /** * Gets a valid value for this guard. For example, if this guard is a test, then * it can have Boolean values `true` and `false`. */ - AbstractValue getAValue() { isGuard(this, result) } + deprecated GuardValue getAValue() { isGuard(this, result) } } -/** An abstract value. */ -abstract class AbstractValue extends TAbstractValue { - /** Holds if the `s` branch out of `cfe` is taken iff `e` has this value. */ - abstract predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e); +/** DEPRECATED: Use `GuardValue` instead. */ +deprecated class AbstractValue = GuardValue; - /** Gets an abstract value that represents the dual of this value, if any. */ - abstract AbstractValue getDualValue(); +/** + * DEPRECATED: Use `GuardValue` member predicates instead. + * + * Provides different types of `AbstractValues`s. + */ +deprecated module AbstractValues { + class BooleanValue extends AbstractValue { + BooleanValue() { exists(this.asBooleanValue()) } - /** - * Gets an expression that has this abstract value. Two expressions that have the - * same concrete value also have the same abstract value, but not necessarily the - * other way around. - * - * Moreover, `e = this.getAnExpr() implies not e = this.getDualValue().getAnExpr()`. - */ - abstract Expr getAnExpr(); - - /** - * Holds if this is a singleton abstract value. That is, two expressions that have - * this abstract value also have the same concrete value. - */ - abstract predicate isSingleton(); - - /** - * Holds if this value describes a referential property. For example, emptiness - * of a collection is a referential property. - * - * Such values only propagate through adjacent reads, for example, in - * - * ```csharp - * int M() - * { - * var x = new string[]{ "a", "b", "c" }.ToList(); - * x.Clear(); - * return x.Count; - * } - * ``` - * - * the non-emptiness of `new string[]{ "a", "b", "c" }.ToList()` only propagates - * to the read of `x` in `x.Clear()` and not in `x.Count`. - * - * Aliasing is not taken into account in the analyses. - */ - predicate isReferentialProperty() { none() } - - /** Gets a textual representation of this abstract value. */ - abstract string toString(); -} - -/** Provides different types of `AbstractValues`s. */ -module AbstractValues { - /** A Boolean value. */ - class BooleanValue extends AbstractValue, TBooleanValue { - /** Gets the underlying Boolean value. */ - boolean getValue() { this = TBooleanValue(result) } - - override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) { - s.(BooleanSuccessor).getValue() = this.getValue() and - exists(BooleanCompletion c | s = c.getAMatchingSuccessorType() | - c.isValidFor(cfe) and - e = cfe - ) - } - - override BooleanValue getDualValue() { result.getValue() = this.getValue().booleanNot() } - - override Expr getAnExpr() { - result.getType() instanceof BoolType and - result.getValue() = this.getValue().toString() - } - - override predicate isSingleton() { any() } - - override string toString() { result = this.getValue().toString() } + boolean getValue() { this.asBooleanValue() = result } } - /** An integer value. */ - class IntegerValue extends AbstractValue, TIntegerValue { - /** Gets the underlying integer value. */ - int getValue() { this = TIntegerValue(result) } + class IntegerValue extends AbstractValue { + IntegerValue() { exists(this.asIntValue()) } - override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) { none() } - - override IntegerValue getDualValue() { none() } - - override Expr getAnExpr() { - result.getValue().toInt() = this.getValue() and - ( - result.getType() instanceof Enum - or - result.getType() instanceof IntegralType - ) - } - - override predicate isSingleton() { any() } - - override string toString() { result = this.getValue().toString() } + int getValue() { this.asIntValue() = result } } - /** A value that is either `null` or non-`null`. */ - class NullValue extends AbstractValue, TNullValue { - /** Holds if this value represents `null`. */ - predicate isNull() { this = TNullValue(true) } + class NullValue extends AbstractValue { + NullValue() { this.isNullness(_) } - /** Holds if this value represents non-`null`. */ - predicate isNonNull() { this = TNullValue(false) } + predicate isNull() { this.isNullValue() } - override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) { - this = TNullValue(s.(NullnessSuccessor).getValue()) and - exists(NullnessCompletion c | s = c.getAMatchingSuccessorType() | - c.isValidFor(cfe) and - e = cfe - ) - } + predicate isNonNull() { this.isNonNullValue() } - override NullValue getDualValue() { - if this.isNull() then result.isNonNull() else result.isNull() - } - - override DereferenceableExpr getAnExpr() { + DereferenceableExpr getAnExpr() { if this.isNull() then nullValueImplied(result) else nonNullValueImplied(result) } - - override predicate isSingleton() { this.isNull() } - - override string toString() { if this.isNull() then result = "null" else result = "non-null" } - } - - /** A value that represents match or non-match against a specific pattern. */ - class MatchValue extends AbstractValue, TMatchValue { - /** Gets the case. */ - Case getCase() { this = TMatchValue(result, _) } - - /** Holds if this value represents a match. */ - predicate isMatch() { this = TMatchValue(_, true) } - - override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) { - this = TMatchValue(_, s.(MatchingSuccessor).getValue()) and - exists(MatchingCompletion c, Switch switch, Case case | s = c.getAMatchingSuccessorType() | - c.isValidFor(cfe) and - switchMatching(switch, case, cfe) and - e = switch.getExpr() and - case = this.getCase() - ) - } - - override MatchValue getDualValue() { - result = - any(MatchValue mv | - mv.getCase() = this.getCase() and - if this.isMatch() then not mv.isMatch() else mv.isMatch() - ) - } - - override Expr getAnExpr() { none() } - - override predicate isSingleton() { none() } - - override string toString() { - exists(string s | s = this.getCase().getPattern().toString() | - if this.isMatch() then result = "match " + s else result = "non-match " + s - ) - } - } - - /** A value that represents an empty or non-empty collection. */ - class EmptyCollectionValue extends AbstractValue, TEmptyCollectionValue { - /** Holds if this value represents an empty collection. */ - predicate isEmpty() { this = TEmptyCollectionValue(true) } - - /** Holds if this value represents a non-empty collection. */ - predicate isNonEmpty() { this = TEmptyCollectionValue(false) } - - override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) { - this = TEmptyCollectionValue(s.(EmptinessSuccessor).getValue()) and - exists(EmptinessCompletion c, ForeachStmt fs | s = c.getAMatchingSuccessorType() | - c.isValidFor(cfe) and - foreachEmptiness(fs, cfe) and - e = fs.getIterableExpr() - ) and - // Only when taking the non-empty successor do we know that the original iterator - // expression was non-empty. When taking the empty successor, we may have already - // iterated through the `foreach` loop zero or more times, hence the iterator - // expression can be both empty and non-empty - this.isNonEmpty() - } - - override EmptyCollectionValue getDualValue() { - if this.isEmpty() then result.isNonEmpty() else result.isEmpty() - } - - override Expr getAnExpr() { - this.isEmpty() and - emptyValue(result) - or - this.isNonEmpty() and - nonEmptyValue(result) - } - - override predicate isSingleton() { none() } - - override predicate isReferentialProperty() { any() } - - override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } } } -private import AbstractValues +/** Gets the value resulting from matching `null` against `pat`. */ +private boolean patternMatchesNull(PatternExpr pat) { + pat instanceof NullLiteral and result = true + or + not pat instanceof NullLiteral and + not pat instanceof NotPatternExpr and + not pat instanceof OrPatternExpr and + not pat instanceof AndPatternExpr and + result = false + or + result = patternMatchesNull(pat.(NotPatternExpr).getPattern()).booleanNot() + or + exists(OrPatternExpr ope | pat = ope | + result = + patternMatchesNull(ope.getLeftOperand()).booleanOr(patternMatchesNull(ope.getRightOperand())) + ) + or + exists(AndPatternExpr ape | pat = ape | + result = + patternMatchesNull(ape.getLeftOperand()).booleanAnd(patternMatchesNull(ape.getRightOperand())) + ) +} pragma[nomagic] private predicate typePattern(PatternMatch pm, TypePatternExpr tpe, Type t) { @@ -307,175 +438,19 @@ class DereferenceableExpr extends Expr { /** Holds if this expression has a nullable type `T?`. */ predicate hasNullableType() { isNullableType = true } - /** - * Gets an expression that directly tests whether this expression is `null`. - * - * If the returned expression evaluates to `v`, then this expression is - * guaranteed to be `null` if `isNull` is true, and non-`null` if `isNull` is - * false. - * - * For example, if the expression `x != null` evaluates to `true` then the - * expression `x` is guaranteed to be non-`null`. - */ - private Expr getABooleanNullCheck(BooleanValue v, boolean isNull) { - exists(boolean branch | branch = v.getValue() | - // Comparison with `null`, for example `x != null` - exists(ComparisonTest ct, ComparisonKind ck, Expr e | - ct.getExpr() = result and - ct.getAnArgument() = this and - ct.getAnArgument() = e and - e = any(NullValue nv | nv.isNull()).getAnExpr() and - this != e and - ck = ct.getComparisonKind() - | - ck.isEquality() and isNull = branch - or - ck.isInequality() and isNull = branch.booleanNot() - ) + /** Holds if `guard` suggests that this expression may be `null`. */ + predicate guardSuggestsMaybeNull(Guards::Guard guard) { + not nonNullValueImplied(this) and + ( + exists(NullnessCompletion c | c.isValidFor(this) and c.isNull() and guard = this) or - // Comparison with a non-`null` value, for example `x?.Length > 0` - exists(ComparisonTest ct, ComparisonKind ck, Expr e | ct.getExpr() = result | - ct.getAnArgument() = this and - ct.getAnArgument() = e and - e = any(NullValue nv | nv.isNonNull()).getAnExpr() and - ck = ct.getComparisonKind() and - this != e and - isNull = false and - if ck.isInequality() then branch = false else branch = true - ) + LogicInput::additionalNullCheck(guard, _, this, true) or - // Call to `string.IsNullOrEmpty()` or `string.IsNullOrWhiteSpace()` - exists(MethodCall mc, string name | result = mc | - mc.getTarget() = any(SystemStringClass c).getAMethod(name) and - name.regexpMatch("IsNullOr(Empty|WhiteSpace)") and - mc.getArgument(0) = this and - branch = false and - isNull = false - ) + guard.isEquality(this, any(Expr n | nullValueImplied(n)), _) or - result = - any(PatternMatch pm | - this = pm.getExpr() and - ( - // E.g. `x is null` - pm.getPattern() instanceof NullLiteral and - isNull = branch - or - // E.g. `x is string` or `x is ""` - not pm.getPattern() instanceof NullLiteral and - branch = true and - isNull = false - or - exists(TypePatternExpr tpe | - // E.g. `x is string` where `x` has type `string` - typePattern(result, tpe, tpe.getCheckedType()) and - branch = false and - isNull = true - ) - ) - ) - or - this.hasNullableType() and - result = - any(PropertyAccess pa | - pa.getQualifier() = this and - pa.getTarget().hasName("HasValue") and - if branch = true then isNull = false else isNull = true - ) - or - isCustomNullCheck(result, this, v, isNull) + Guards::nullGuard(guard, any(GuardValue v | exists(v.asBooleanValue())), this, true) ) } - - /** - * Gets an expression that tests via matching whether this expression is `null`. - * - * If the returned expression matches (`v.isMatch()`) or non-matches - * (`not v.isMatch()`), then this expression is guaranteed to be `null` - * if `isNull` is true, and non-`null` if `isNull` is false. - * - * For example, if the case statement `case string s` matches in - * - * ```csharp - * switch (o) - * { - * case string s: - * return s; - * default: - * return ""; - * } - * ``` - * - * then `o` is guaranteed to be non-`null`. - */ - private Expr getAMatchingNullCheck(MatchValue v, boolean isNull) { - exists(Switch s, Case case | - case = v.getCase() and - this = s.getExpr() and - result = this and - case = s.getACase() - | - // E.g. `case string` - case.getPattern() instanceof TypePatternExpr and - v.isMatch() and - isNull = false - or - case.getPattern() = - any(ConstantPatternExpr cpe | - if cpe instanceof NullLiteral - then - // `case null` - if v.isMatch() then isNull = true else isNull = false - else ( - // E.g. `case ""` - v.isMatch() and - isNull = false - ) - ) - ) - } - - /** - * Gets an expression that tests via nullness whether this expression is `null`. - * - * If the returned expression evaluates to `null` (`v.isNull()`) or evaluates to - * non-`null` (`not v.isNull()`), then this expression is guaranteed to be `null` - * if `isNull` is true, and non-`null` if `isNull` is false. - * - * For example, if `x` evaluates to `null` in `x ?? y` then `y` is evaluated, and - * `x` is guaranteed to be `null`. - */ - private Expr getANullnessNullCheck(NullValue v, boolean isNull) { - exists(NullnessCompletion c | c.isValidFor(this) | - result = this and - if c.isNull() - then ( - v.isNull() and - isNull = true - ) else ( - v.isNonNull() and - isNull = false - ) - ) - } - - /** - * Gets an expression that tests whether this expression is `null`. - * - * If the returned expression has abstract value `v`, then this expression is - * guaranteed to be `null` if `isNull` is true, and non-`null` if `isNull` is - * false. - * - * For example, if the expression `x != null` evaluates to `true` then the - * expression `x` is guaranteed to be non-`null`. - */ - Expr getANullCheck(AbstractValue v, boolean isNull) { - result = this.getABooleanNullCheck(v, isNull) - or - result = this.getAMatchingNullCheck(v, isNull) - or - result = this.getANullnessNullCheck(v, isNull) - } } /** @@ -524,8 +499,8 @@ class EnumerableCollectionExpr extends Expr { ) } - private Expr getABooleanEmptinessCheck(BooleanValue v, boolean isEmpty) { - exists(boolean branch | branch = v.getValue() | + private Expr getABooleanEmptinessCheck(GuardValue v, boolean isEmpty) { + exists(boolean branch | branch = v.asBooleanValue() | result = any(ComparisonTest ct | exists(boolean lowerBound | @@ -589,7 +564,7 @@ class EnumerableCollectionExpr extends Expr { * For example, if the expression `x.Length != 0` evaluates to `true` then the * expression `x` is guaranteed to be non-empty. */ - Expr getAnEmptinessCheck(AbstractValue v, boolean isEmpty) { + Expr getAnEmptinessCheck(GuardValue v, boolean isEmpty) { result = this.getABooleanEmptinessCheck(v, isEmpty) } } @@ -644,6 +619,14 @@ private AssignableAccess getATrackedAccess(Ssa::Definition def, ControlFlow::Nod cfn = def.getControlFlowNode() } +private predicate ssaMustHaveValue(Expr e, GuardValue v) { + exists(Ssa::Definition def, BasicBlock bb | + e = def.getARead() and + e.getBasicBlock() = bb and + Guards::ssaControls(def, bb, v) + ) +} + /** * A guarded expression. * @@ -682,11 +665,7 @@ private AssignableAccess getATrackedAccess(Ssa::Definition def, ControlFlow::Nod * definition). */ class GuardedExpr extends AccessOrCallExpr { - private Guard g; - private AccessOrCallExpr sub0; - private AbstractValue v0; - - GuardedExpr() { isGuardedByExpr(this, g, sub0, v0) } + GuardedExpr() { isGuardedByExpr(this, _, _, _) or ssaMustHaveValue(this, _) } /** * Gets an expression that guards this expression. That is, this expression is @@ -699,18 +678,16 @@ class GuardedExpr extends AccessOrCallExpr { * left-most qualifier, then so must the other (accessing the same SSA * variable). */ - Guard getAGuard(Expr sub, AbstractValue v) { - result = g and - sub = sub0 and - v = v0 - } + Guard getAGuard(Expr sub, GuardValue v) { isGuardedByExpr(this, result, sub, v) } /** * Holds if this expression must have abstract value `v`. That is, this * expression is guarded by a structurally equal expression having abstract * value `v`. */ - predicate mustHaveValue(AbstractValue v) { g = this.getAGuard(g, v) } + predicate mustHaveValue(GuardValue v) { + exists(Guard g | g = this.getAGuard(g, v)) or ssaMustHaveValue(this, v) + } /** * Holds if this expression is guarded by expression `cond`, which must @@ -722,7 +699,7 @@ class GuardedExpr extends AccessOrCallExpr { * variable). */ predicate isGuardedBy(Expr cond, Expr sub, boolean b) { - cond = this.getAGuard(sub, any(BooleanValue v | v.getValue() = b)) + cond = this.getAGuard(sub, any(GuardValue v | v.asBooleanValue() = b)) } } @@ -747,7 +724,7 @@ class GuardedExpr extends AccessOrCallExpr { class GuardedControlFlowNode extends ControlFlow::Nodes::ElementNode { private Guard g; private AccessOrCallExpr sub0; - private AbstractValue v0; + private GuardValue v0; GuardedControlFlowNode() { g.controlsNode(this, sub0, v0) } @@ -762,7 +739,7 @@ class GuardedControlFlowNode extends ControlFlow::Nodes::ElementNode { * left-most qualifier, then so must the other (accessing the same SSA * variable). */ - Guard getAGuard(Expr sub, AbstractValue v) { + Guard getAGuard(Expr sub, GuardValue v) { result = g and sub = sub0 and v = v0 @@ -773,7 +750,7 @@ class GuardedControlFlowNode extends ControlFlow::Nodes::ElementNode { * control flow node is guarded by a structurally equal expression having * abstract value `v`. */ - predicate mustHaveValue(AbstractValue v) { g = this.getAGuard(g, v) } + predicate mustHaveValue(GuardValue v) { g = this.getAGuard(g, v) } } /** @@ -797,7 +774,7 @@ class GuardedControlFlowNode extends ControlFlow::Nodes::ElementNode { class GuardedDataFlowNode extends DataFlow::ExprNode { private Guard g; private AccessOrCallExpr sub0; - private AbstractValue v0; + private GuardValue v0; GuardedDataFlowNode() { exists(ControlFlow::Nodes::ElementNode cfn | exists(this.getExprAtNode(cfn)) | @@ -816,7 +793,7 @@ class GuardedDataFlowNode extends DataFlow::ExprNode { * left-most qualifier, then so must the other (accessing the same SSA * variable). */ - Guard getAGuard(Expr sub, AbstractValue v) { + Guard getAGuard(Expr sub, GuardValue v) { result = g and sub = sub0 and v = v0 @@ -827,31 +804,21 @@ class GuardedDataFlowNode extends DataFlow::ExprNode { * data flow node is guarded by a structurally equal expression having * abstract value `v`. */ - predicate mustHaveValue(AbstractValue v) { g = this.getAGuard(g, v) } + predicate mustHaveValue(GuardValue v) { g = this.getAGuard(g, v) } } /** An expression guarded by a `null` check. */ class NullGuardedExpr extends GuardedExpr { - NullGuardedExpr() { this.mustHaveValue(any(NullValue v | v.isNonNull())) } + NullGuardedExpr() { this.mustHaveValue(any(GuardValue v | v.isNonNullValue())) } } /** A data flow node guarded by a `null` check. */ class NullGuardedDataFlowNode extends GuardedDataFlowNode { - NullGuardedDataFlowNode() { this.mustHaveValue(any(NullValue v | v.isNonNull())) } + NullGuardedDataFlowNode() { this.mustHaveValue(any(GuardValue v | v.isNonNullValue())) } } /** INTERNAL: Do not use. */ module Internal { - newtype TAbstractValue = - TBooleanValue(boolean b) { b = true or b = false } or - TIntegerValue(int i) { i = any(Expr e).getValue().toInt() } or - TNullValue(boolean b) { b = true or b = false } or - TMatchValue(Case c, boolean b) { - exists(c.getPattern()) and - (b = true or b = false) - } or - TEmptyCollectionValue(boolean b) { b = true or b = false } - /** Holds if expression `e` is a `null` value. */ predicate nullValue(Expr e) { e instanceof NullLiteral @@ -950,7 +917,7 @@ module Internal { bao.getAnOperand() = o and // The other operand must be provably non-null in order // for `only if` to hold - o = any(NullValue nv | nv.isNonNull()).getAnExpr() and + nonNullValueImplied(o) and e != o ) } @@ -969,22 +936,6 @@ module Internal { e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand()) } - private Expr stripConditionalExpr(Expr e) { - e = - any(ConditionalExpr ce | - result = stripConditionalExpr(ce.getThen()) - or - result = stripConditionalExpr(ce.getElse()) - ) - or - not e instanceof ConditionalExpr and - result = e - } - - private predicate canReturn(Callable c, Expr ret) { - exists(Expr e | c.canReturn(e) | ret = stripConditionalExpr(e)) - } - // The predicates in this module should be evaluated in the same stage as the CFG // construction stage. This is to avoid recomputation of pre-basic-blocks and // pre-SSA predicates @@ -992,416 +943,6 @@ module Internal { private import semmle.code.csharp.controlflow.internal.PreBasicBlocks as PreBasicBlocks private import semmle.code.csharp.controlflow.internal.PreSsa - /** - * Holds if pre-basic-block `bb` only is reached when guard `g` has abstract value `v`, - * not taking implications into account. - */ - pragma[nomagic] - private predicate preControlsDirect(Guard g, PreBasicBlocks::PreBasicBlock bb, AbstractValue v) { - exists(PreBasicBlocks::ConditionBlock cb, ConditionalSuccessor s | cb.controls(bb, s) | - v.branch(cb.getLastElement(), s, g) - ) - } - - pragma[nomagic] - private predicate preControlsDefDirect(Guard g, PreSsa::Definition def, AbstractValue v) { - preControlsDirect(g, def.getBasicBlock(), v) - } - - /** Holds if pre-basic-block `bb` only is reached when guard `g` has abstract value `v`. */ - predicate preControls(Guard g, PreBasicBlocks::PreBasicBlock bb, AbstractValue v) { - preControlsDirect(g, bb, v) - or - exists(AbstractValue v0, Guard g0 | - preControls(g0, bb, v0) and - preImpliesStep(g0, v0, g, v) - ) - } - - private class PreSsaImplicitParameterDefinition extends PreSsa::Definition { - private Parameter p; - - PreSsaImplicitParameterDefinition() { - p = this.getDefinition().(AssignableDefinitions::ImplicitParameterDefinition).getParameter() - } - - Parameter getParameter() { result = p } - - /** - * Holds if the callable that this parameter belongs to can return `ret`, but - * only if this parameter is `null` or non-`null`, as specified by `isNull`. - */ - predicate nullGuardedReturn(Expr ret, boolean isNull) { - canReturn(p.getCallable(), ret) and - exists(PreBasicBlocks::PreBasicBlock bb, NullValue nv | - preControls(this.getARead(), bb, nv) - | - ret = bb.getAnElement() and - if nv.isNull() then isNull = true else isNull = false - ) - } - } - - private predicate canReturnBool(Callable c, Expr ret) { - canReturn(c, ret) and - c.getReturnType() instanceof BoolType - } - - private predicate boolReturnImplies(Expr ret, BooleanValue retVal, Guard g, AbstractValue v) { - canReturnBool(_, ret) and - isGuard(ret, retVal) and - g = ret and - v = retVal - or - exists(Guard g0, AbstractValue v0 | - boolReturnImplies(ret, retVal, g0, v0) and - preImpliesStep(g0, v0, g, v) - ) - } - - /** - * Holds if `ret` is an expression returned by the callable to which parameter - * `p` belongs, and `ret` having Boolean value `retVal` allows the conclusion - * that the parameter `p` either is `null` or non-`null`, as specified by `isNull`. - */ - private predicate validReturnInCustomNullCheck( - Expr ret, Parameter p, BooleanValue retVal, boolean isNull - ) { - exists(Callable c | - canReturnBool(c, ret) and - p.getCallable() = c - ) and - exists(PreSsaImplicitParameterDefinition def | p = def.getParameter() | - def.nullGuardedReturn(ret, isNull) - or - exists(NullValue nv | boolReturnImplies(ret, retVal, def.getARead(), nv) | - if nv.isNull() then isNull = true else isNull = false - ) - ) - } - - /** - * Gets a non-overridable callable with a Boolean return value that performs a - * `null`-check on parameter `p`. A return value having Boolean value `retVal` - * allows us to conclude that the argument either is `null` or non-`null`, as - * specified by `isNull`. - */ - private Callable customNullCheck(Parameter p, BooleanValue retVal, boolean isNull) { - result.getReturnType() instanceof BoolType and - not result.(Overridable).isOverridableOrImplementable() and - p.getCallable() = result and - not p.isParams() and - p.getType() = any(Type t | t instanceof RefType or t instanceof NullableType) and - forex(Expr ret | - canReturn(result, ret) and - not ret.(BoolLiteral).getBoolValue() = retVal.getValue().booleanNot() - | - validReturnInCustomNullCheck(ret, p, retVal, isNull) - ) - } - - pragma[nomagic] - private predicate conditionalAssign0( - Guard guard, AbstractValue vGuard, PreSsa::PhiNode phi, Expr e, PreSsa::Definition upd, - PreBasicBlocks::PreBasicBlock bbGuard, PreBasicBlocks::PreBasicBlock bbPhi - ) { - e = upd.getDefinition().getSource() and - upd = phi.getAnInput() and - preControlsDefDirect(guard, upd, vGuard) and - bbGuard.getAnElement() = guard and - bbPhi = phi.getBasicBlock() - } - - pragma[noinline] - private predicate conditionalAssign1( - Guard guard, AbstractValue vGuard, PreSsa::PhiNode phi, Expr e, PreSsa::Definition upd, - PreBasicBlocks::PreBasicBlock bbGuard - ) { - exists(PreBasicBlocks::PreBasicBlock bbPhi | - conditionalAssign0(guard, vGuard, phi, e, upd, bbGuard, bbPhi) and - bbGuard.strictlyDominates(bbPhi) and - not preControlsDefDirect(guard, phi, vGuard) - ) - } - - pragma[noinline] - private predicate conditionalAssign2( - Guard guard, AbstractValue vGuard, PreSsa::PhiNode phi, Expr e, PreSsa::Definition upd, - PreBasicBlocks::PreBasicBlock bbGuard, PreSsa::Definition other - ) { - conditionalAssign1(guard, vGuard, phi, e, upd, bbGuard) and - other != upd and - other = phi.getAnInput() - } - - pragma[noinline] - private predicate conditionalAssign3( - Guard guard, AbstractValue vGuard, PreSsa::Definition def, Expr e, PreSsa::Definition upd, - PreBasicBlocks::PreBasicBlock bbGuard, PreSsa::Definition other - ) { - conditionalAssign2(guard, vGuard, def, e, upd, bbGuard, other) and - preControlsDefDirect(guard, other, vGuard.getDualValue()) - } - - /** Gets the successor block that is reached when guard `g` has abstract value `v`. */ - private PreBasicBlocks::PreBasicBlock getConditionalSuccessor(Guard g, AbstractValue v) { - exists(PreBasicBlocks::ConditionBlock pred, ConditionalSuccessor s | - v.branch(pred.getLastElement(), s, g) - | - result = pred.getASuccessorByType(s) - ) - } - - pragma[noinline] - private predicate conditionalAssign4( - Guard guard, AbstractValue vGuard, PreSsa::Definition def, Expr e, PreSsa::Definition upd, - PreBasicBlocks::PreBasicBlock bbGuard, PreSsa::Definition other - ) { - conditionalAssign2(guard, vGuard, def, e, upd, bbGuard, other) and - other.getBasicBlock().dominates(bbGuard) and - not other.isLiveAtEndOfBlock(getConditionalSuccessor(guard, vGuard)) - } - - /** - * Holds if the evaluation of `guard` to `vGuard` implies that `def` is assigned - * expression `e`. - */ - private predicate conditionalAssign( - Guard guard, AbstractValue vGuard, PreSsa::Definition def, Expr e - ) { - // For example: - // v = guard ? e : x; - exists(ConditionalExpr c | c = def.getDefinition().getSource() | - guard = c.getCondition() and - vGuard = - any(BooleanValue bv | - bv.getValue() = true and - e = c.getThen() - or - bv.getValue() = false and - e = c.getElse() - ) - ) - or - exists(PreSsa::Definition upd, PreBasicBlocks::PreBasicBlock bbGuard | - conditionalAssign1(guard, vGuard, def, e, upd, bbGuard) - | - forall(PreSsa::Definition other | - conditionalAssign2(guard, vGuard, def, e, upd, bbGuard, other) - | - // For example: - // if (guard) - // upd = a; - // else - // other = b; - // def = phi(upd, other) - conditionalAssign3(guard, vGuard, def, e, upd, bbGuard, other) - or - // For example: - // other = a; - // if (guard) - // upd = b; - // def = phi(other, upd) - conditionalAssign4(guard, vGuard, def, e, upd, bbGuard, other) - ) - ) - } - - /** - * Holds if the evaluation of `guard` to `vGuard` implies that `def` is assigned - * an expression with abstract value `vDef`. - */ - private predicate conditionalAssignVal( - Expr guard, AbstractValue vGuard, PreSsa::Definition def, AbstractValue vDef - ) { - conditionalAssign(guard, vGuard, def, vDef.getAnExpr()) - } - - pragma[noinline] - private predicate relevantEq(PreSsa::Definition def, AbstractValue v, AssignableRead ar) { - conditionalAssignVal(_, _, def, v) and - ar = def.getARead() - } - - /** - * Gets an expression that directly tests whether expression `e1` is equal - * to expression `e2`. - * - * If the returned expression evaluates to `v`, then expression `e1` is - * guaranteed to be equal to `e2`, otherwise it is guaranteed to not be - * equal to `e2`. - * - * For example, if the expression `x != ""` evaluates to `false` then the - * expression `x` is guaranteed to be equal to `""`. - */ - private Expr getABooleanEqualityCheck(Expr e1, BooleanValue v, Expr e2) { - exists(boolean branch | branch = v.getValue() | - exists(ComparisonTest ct, ComparisonKind ck | - ct.getExpr() = result and - ct.getAnArgument() = e1 and - ct.getAnArgument() = e2 and - e2 != e1 and - ck = ct.getComparisonKind() - | - ck.isEquality() and branch = true - or - ck.isInequality() and branch = false - ) - or - result = - any(IsExpr ie | - ie.getExpr() = e1 and - e2 = ie.getPattern().(ConstantPatternExpr) and - branch = true - ) - ) - } - - /** - * Gets an expression that tests via matching whether expression `e1` is equal - * to expression `e2`. - * - * If the returned expression matches (`v.isMatch()`), then expression `e1` is - * guaranteed to be equal to `e2`. If the returned expression non-matches - * (`not v.isMatch()`), then this expression is guaranteed to not be equal to `e2`. - * - * For example, if the case statement `case ""` matches in - * - * ```csharp - * switch (o) - * { - * case "": - * return s; - * default: - * return ""; - * } - * ``` - * - * then `o` is guaranteed to be equal to `""`. - */ - private Expr getAMatchingEqualityCheck(Expr e1, MatchValue v, Expr e2) { - exists(Switch s, Case case | case = v.getCase() | - e1 = s.getExpr() and - result = e1 and - case = s.getACase() and - e2 = case.getPattern().(ConstantPatternExpr) and - v.isMatch() - ) - } - - pragma[nomagic] - private Expr getAnEqualityCheckVal(Expr e, AbstractValue v, AbstractValue vExpr) { - result = getAnEqualityCheck(e, v, vExpr.getAnExpr()) - } - - /** - * Holds if the evaluation of `guard` to `vGuard` implies that `def` does not - * have the value `vDef`. - */ - private predicate guardImpliesNotEqual( - Expr guard, AbstractValue vGuard, PreSsa::Definition def, AbstractValue vDef - ) { - exists(AssignableRead ar | relevantEq(def, vDef, ar) | - // For example: - // if (de == null); vGuard = TBooleanValue(false); vDef = TNullValue(true) - // but not - // if (de == "abc"); vGuard = TBooleanValue(false); vDef = TNullValue(false) - guard = getAnEqualityCheckVal(ar, vGuard.getDualValue(), vDef) and - vDef.isSingleton() - or - // For example: - // if (de != null); vGuard = TBooleanValue(true); vDef = TNullValue(true) - // or - // if (de == null); vGuard = TBooleanValue(true); vDef = TNullValue(false) - exists(NullValue nv | - guard = - ar.(DereferenceableExpr).getANullCheck(vGuard, any(boolean b | nv = TNullValue(b))) - | - vDef = nv.getDualValue() - ) - or - // For example: - // if (de == false); vGuard = TBooleanValue(true); vDef = TBooleanValue(true) - guard = getAnEqualityCheckVal(ar, vGuard, vDef.getDualValue()) - ) - } - - /** - * Holds if `def` can have a value that is not representable as an - * abstract value. - */ - private predicate hasPossibleUnknownValue(PreSsa::Definition def) { - exists(PreSsa::Definition input | input = def.getAnUltimateDefinition() | - not exists(input.getDefinition().getSource()) - or - exists(Expr e | e = stripConditionalExpr(input.getDefinition().getSource()) | - not e = any(AbstractValue v).getAnExpr() - ) - ) - } - - /** - * Gets an ultimate definition of `def` that is not itself a phi node. The - * boolean `fromBackEdge` indicates whether the flow from `result` to `def` - * goes through a back edge. - */ - private PreSsa::Definition getADefinition(PreSsa::Definition def, boolean fromBackEdge) { - result = def and - not def instanceof PreSsa::PhiNode and - fromBackEdge = false - or - exists(PreSsa::Definition input, PreBasicBlocks::PreBasicBlock pred, boolean fbe | - input = def.(PreSsa::PhiNode).getAnInput() - | - pred = def.getBasicBlock().getAPredecessor() and - input.isLiveAtEndOfBlock(pred) and - result = getADefinition(input, fbe) and - (if def.getBasicBlock().dominates(pred) then fromBackEdge = true else fromBackEdge = fbe) - ) - } - - /** - * Holds if `e` has abstract value `v` and may be assigned to `def`. The Boolean - * `fromBackEdge` indicates whether the flow from `e` to `def` goes through a - * back edge. - */ - private predicate possibleValue( - PreSsa::Definition def, boolean fromBackEdge, Expr e, AbstractValue v - ) { - not hasPossibleUnknownValue(def) and - exists(PreSsa::Definition input | input = getADefinition(def, fromBackEdge) | - e = stripConditionalExpr(input.getDefinition().getSource()) and - v.getAnExpr() = e - ) - } - - private predicate nonUniqueValue(PreSsa::Definition def, Expr e, AbstractValue v) { - possibleValue(def, false, e, v) and - possibleValue(def, _, any(Expr other | other != e), v) - } - - /** - * Holds if `e` has abstract value `v` and may be assigned to `def` without going - * through back edges, and all other possible ultimate definitions of `def` do not - * have abstract value `v`. The trivial case where `def` is an explicit update with - * source `e` is excluded. - */ - private predicate uniqueValue(PreSsa::Definition def, Expr e, AbstractValue v) { - possibleValue(def, false, e, v) and - not nonUniqueValue(def, e, v) and - exists(Expr other | possibleValue(def, _, other, _) and other != e) - } - - /** - * Holds if `guard` having abstract value `vGuard` implies that `def` has - * abstract value `vDef`. - */ - private predicate guardImpliesEqual( - Guard guard, AbstractValue vGuard, PreSsa::Definition def, AbstractValue vDef - ) { - guard = getAnEqualityCheck(def.getARead(), vGuard, vDef.getAnExpr()) - } - private predicate nullDef(PreSsa::Definition def) { nullValueImplied(def.getDefinition().getSource()) } @@ -1418,63 +959,25 @@ module Internal { nonEmptyValue(def.getDefinition().getSource()) } + deprecated predicate isGuard(Expr e, GuardValue val) { + ( + e.getType() instanceof BoolType and + not e instanceof BoolLiteral and + not e instanceof SwitchCaseExpr and + not e instanceof PatternExpr and + exists(val.asBooleanValue()) + or + e instanceof DereferenceableExpr and + val.isNullness(_) + ) and + not e = any(ExprStmt es).getExpr() and + not e = any(LocalVariableDeclStmt s).getAVariableDeclExpr() + } + cached private module CachedWithCfg { private import semmle.code.csharp.Caching - cached - predicate isGuard(Expr e, AbstractValue val) { - ( - e.getType() instanceof BoolType and - not e instanceof BoolLiteral and - not e instanceof SwitchCaseExpr and - not e instanceof PatternExpr and - val = TBooleanValue(_) - or - e instanceof DereferenceableExpr and - val = TNullValue(_) - or - val.branch(_, _, e) - or - e instanceof EnumerableCollectionExpr and - val = TEmptyCollectionValue(_) - ) and - not e = any(ExprStmt es).getExpr() and - not e = any(LocalVariableDeclStmt s).getAVariableDeclExpr() - } - - /** - * Gets an expression that tests whether expression `e1` is equal to - * expression `e2`. - * - * If the returned expression has abstract value `v`, then expression `e1` is - * guaranteed to be equal to `e2`, and if the returned expression has abstract - * value `v.getDualValue()`, then this expression is guaranteed to be - * non-equal to `e`. - * - * For example, if the expression `x != ""` evaluates to `false` then the - * expression `x` is guaranteed to be equal to `""`. - */ - cached - Expr getAnEqualityCheck(Expr e1, AbstractValue v, Expr e2) { - result = getABooleanEqualityCheck(e1, v, e2) - or - result = getABooleanEqualityCheck(e2, v, e1) - or - result = getAMatchingEqualityCheck(e1, v, e2) - or - result = getAMatchingEqualityCheck(e2, v, e1) - } - - cached - predicate isCustomNullCheck(Call call, Expr arg, BooleanValue v, boolean isNull) { - exists(Callable callable, Parameter p | - arg = call.getArgumentForParameter(any(Parameter p0 | p0.getUnboundDeclaration() = p)) and - call.getTarget().getUnboundDeclaration() = callable and - callable = customNullCheck(p, v, isNull) - ) - } - private predicate firstReadSameVarUniquePredecessor( PreSsa::Definition def, AssignableRead read ) { @@ -1486,156 +989,6 @@ module Internal { ) } - /** - * Holds if the assumption that `g1` has abstract value `v1` implies that - * `g2` has abstract value `v2`, using one step of reasoning. That is, the - * evaluation of `g2` to `v2` dominates the evaluation of `g1` to `v1`. - * - * This predicate does not rely on the control flow graph. - */ - cached - predicate preImpliesStep(Guard g1, AbstractValue v1, Guard g2, AbstractValue v2) { - g1 = - any(BinaryOperation bo | - ( - bo instanceof BitwiseAndExpr or - bo instanceof LogicalAndExpr - ) and - g2 = bo.getAnOperand() and - v1 = TBooleanValue(true) and - v2 = v1 - ) - or - g1 = - any(BinaryOperation bo | - ( - bo instanceof BitwiseOrExpr or - bo instanceof LogicalOrExpr - ) and - g2 = bo.getAnOperand() and - v1 = TBooleanValue(false) and - v2 = v1 - ) - or - g2 = g1.(LogicalNotExpr).getOperand() and - v2 = TBooleanValue(v1.(BooleanValue).getValue().booleanNot()) - or - exists(ComparisonTest ct, boolean polarity, BoolLiteral boolLit, boolean b | - ct.getAnArgument() = boolLit and - b = boolLit.getBoolValue() and - g2 = ct.getAnArgument() and - g1 = ct.getExpr() and - v2 = TBooleanValue(v1.(BooleanValue).getValue().booleanXor(polarity).booleanXor(b)) - | - ct.getComparisonKind().isEquality() and - polarity = true - or - ct.getComparisonKind().isInequality() and - polarity = false - ) - or - exists(ConditionalExpr cond, boolean branch, Expr e, AbstractValue v | - e = v.getAnExpr() and - ( - cond.getThen() = e and branch = true - or - cond.getElse() = e and branch = false - ) - | - g1 = cond and - v1 = v.getDualValue() and - ( - // g1 === g2 ? e : ...; - g2 = cond.getCondition() and - v2 = TBooleanValue(branch.booleanNot()) - or - // g1 === ... ? g2 : e - g2 = cond.getThen() and - branch = false and - v2 = v1 - or - // g1 === g2 ? ... : e - g2 = cond.getElse() and - branch = true and - v2 = v1 - ) - ) - or - isGuard(g1, v1) and - v1 = - any(MatchValue mv | - mv.isMatch() and - g2 = g1 and - v2.getAnExpr() = mv.getCase().getPattern().(ConstantPatternExpr) and - v1 != v2 - ) - or - exists(boolean isNull | g1 = g2.(DereferenceableExpr).getANullCheck(v1, isNull) | - v2 = any(NullValue nv | if nv.isNull() then isNull = true else isNull = false) and - (g1 != g2 or v1 != v2) - ) - or - exists(boolean isEmpty | - g1 = g2.(EnumerableCollectionExpr).getAnEmptinessCheck(v1, isEmpty) - | - v2 = - any(EmptyCollectionValue ecv | if ecv.isEmpty() then isEmpty = true else isEmpty = false) and - g1 != g2 - ) - or - g1 instanceof DereferenceableExpr and - g1 = getNullEquivParent(g2) and - v1 instanceof NullValue and - v2 = v1 - or - g1 instanceof DereferenceableExpr and - g2 = getANullImplyingChild(g1) and - v1.(NullValue).isNonNull() and - v2 = v1 - or - g2 = g1.(AssignExpr).getRValue() and - isGuard(g1, v1) and - v2 = v1 - or - g2 = g1.(Assignment).getLValue() and - isGuard(g1, v1) and - v2 = v1 - or - g2 = g1.(CastExpr).getExpr() and - isGuard(g1, v1) and - v2 = v1.(NullValue) - or - exists(PreSsa::Definition def | - def.getDefinition().getSource() = g2 and - g1 = def.getARead() and - isGuard(g1, v1) and - v2 = v1 and - if v1.isReferentialProperty() then firstReadSameVarUniquePredecessor(def, g1) else any() - ) - or - exists(PreSsa::Definition def, AbstractValue v | - // If for example `def = g2 ? v : ...`, then a guard `g1` proving `def != v` - // ensures that `g2` evaluates to `false`. - conditionalAssignVal(g2, v2.getDualValue(), def, v) and - guardImpliesNotEqual(g1, v1, def, v) - ) - or - exists(PreSsa::Definition def, Expr e, AbstractValue v | - // If for example `def = g2 ? v : ...` and all other assignments to `def` are - // different from `v`, then a guard proving `def == v` ensures that `g2` - // evaluates to `true`. - uniqueValue(def, e, v) and - guardImpliesEqual(g1, v1, def, v) and - preControlsDirect(g2, any(PreBasicBlocks::PreBasicBlock bb | e = bb.getAnElement()), v2) and - not preControlsDirect(g2, any(PreBasicBlocks::PreBasicBlock bb | g1 = bb.getAnElement()), - v2) - ) - or - g2 = g1.(NullCoalescingExpr).getAnOperand() and - v1.(NullValue).isNull() and - v2 = v1 - } - cached predicate nullValueImplied(Expr e) { nullValue(e) @@ -1840,15 +1193,8 @@ module Internal { * Holds if basic block `bb` only is reached when guard `g` has abstract value `v`. */ cached - predicate guardControls(Guard g, BasicBlock bb, AbstractValue v) { - exists(ControlFlowElement cfe, ConditionalSuccessor cs | - v.branch(cfe, cs, g) and cfe.controlsBlock(bb, cs, _) - ) - or - exists(AbstractValue v0, Guard g0 | - guardControls(g0, bb, v0) and - impliesStep(g0, v0, g, v) - ) + predicate guardControls(Guard g, BasicBlock bb, GuardValue v) { + g.(Guards::Guard).valueControls(bb, v) } pragma[nomagic] @@ -1860,7 +1206,7 @@ module Internal { pragma[nomagic] private predicate nodeIsGuardedBySameSubExpr0( ControlFlow::Node guardedCfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g, - AccessOrCallExpr sub, AbstractValue v + AccessOrCallExpr sub, GuardValue v ) { Stages::GuardsStage::forceCachingInSameStage() and guardedCfn = guarded.getAControlFlowNode() and @@ -1873,7 +1219,7 @@ module Internal { pragma[nomagic] private predicate nodeIsGuardedBySameSubExpr( ControlFlow::Node guardedCfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g, - AccessOrCallExpr sub, AbstractValue v + AccessOrCallExpr sub, GuardValue v ) { nodeIsGuardedBySameSubExpr0(guardedCfn, guardedBB, guarded, g, sub, v) and guardControlsSub(g, guardedBB, sub) @@ -1882,7 +1228,7 @@ module Internal { pragma[nomagic] private predicate nodeIsGuardedBySameSubExprSsaDef0( ControlFlow::Node cfn, BasicBlock guardedBB, AccessOrCallExpr guarded, Guard g, - ControlFlow::Node subCfn, BasicBlock subCfnBB, AccessOrCallExpr sub, AbstractValue v, + ControlFlow::Node subCfn, BasicBlock subCfnBB, AccessOrCallExpr sub, GuardValue v, Ssa::Definition def ) { nodeIsGuardedBySameSubExpr(cfn, guardedBB, guarded, g, sub, v) and @@ -1893,7 +1239,7 @@ module Internal { pragma[nomagic] private predicate nodeIsGuardedBySameSubExprSsaDef( ControlFlow::Node guardedCfn, AccessOrCallExpr guarded, Guard g, ControlFlow::Node subCfn, - AccessOrCallExpr sub, AbstractValue v, Ssa::Definition def + AccessOrCallExpr sub, GuardValue v, Ssa::Definition def ) { exists(BasicBlock guardedBB, BasicBlock subCfnBB | nodeIsGuardedBySameSubExprSsaDef0(guardedCfn, guardedBB, guarded, g, subCfn, subCfnBB, sub, @@ -1902,24 +1248,9 @@ module Internal { ) } - private predicate adjacentReadPairSameVarUniquePredecessor( - Ssa::Definition def, ControlFlow::Node cfn1, ControlFlow::Node cfn2 - ) { - SsaImpl::adjacentReadPairSameVar(def, cfn1, cfn2) and - ( - cfn1 = cfn2 and - cfn1 = unique(ControlFlow::Node other | SsaImpl::adjacentReadPairSameVar(def, other, cfn2)) - or - cfn1 = - unique(ControlFlow::Node other | - SsaImpl::adjacentReadPairSameVar(def, other, cfn2) and other != cfn2 - ) - ) - } - pragma[noinline] private predicate isGuardedByExpr0( - AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v + AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, GuardValue v ) { forex(ControlFlow::Node cfn | cfn = guarded.getAControlFlowNode() | nodeIsGuardedBySameSubExpr(cfn, _, guarded, g, sub, v) @@ -1927,25 +1258,18 @@ module Internal { } cached - predicate isGuardedByExpr( - AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, AbstractValue v - ) { + predicate isGuardedByExpr(AccessOrCallExpr guarded, Guard g, AccessOrCallExpr sub, GuardValue v) { isGuardedByExpr0(guarded, g, sub, v) and forall(ControlFlow::Node subCfn, Ssa::Definition def | nodeIsGuardedBySameSubExprSsaDef(_, guarded, g, subCfn, sub, v, def) | - exists(ControlFlow::Node guardedCfn | - def = guarded.getAnSsaQualifier(guardedCfn) and - if v.isReferentialProperty() - then adjacentReadPairSameVarUniquePredecessor(def, subCfn, guardedCfn) - else any() - ) + def = guarded.getAnSsaQualifier(_) ) } cached predicate isGuardedByNode( - ControlFlow::Nodes::ElementNode guarded, Guard g, AccessOrCallExpr sub, AbstractValue v + ControlFlow::Nodes::ElementNode guarded, Guard g, AccessOrCallExpr sub, GuardValue v ) { nodeIsGuardedBySameSubExpr(guarded, _, _, g, sub, v) and forall(ControlFlow::Node subCfn, Ssa::Definition def | @@ -1955,39 +1279,7 @@ module Internal { guarded .getAstNode() .(AccessOrCallExpr) - .getAnSsaQualifier(guarded.getBasicBlock().getANode()) and - if v.isReferentialProperty() - then adjacentReadPairSameVarUniquePredecessor(def, subCfn, guarded) - else any() - ) - } - - private predicate firstReadUniquePredecessor(Ssa::ExplicitDefinition def, ControlFlow::Node cfn) { - exists(def.getAFirstReadAtNode(cfn)) and - not exists(ControlFlow::Node other | - SsaImpl::adjacentReadPairSameVar(def, other, cfn) and - other != cfn - ) - } - - /** - * Holds if the assumption that `g1` has abstract value `v1` implies that - * `g2` has abstract value `v2`, using one step of reasoning. That is, the - * evaluation of `g2` to `v2` dominates the evaluation of `g1` to `v1`. - * - * This predicate relies on the control flow graph. - */ - cached - predicate impliesStep(Guard g1, AbstractValue v1, Guard g2, AbstractValue v2) { - preImpliesStep(g1, v1, g2, v2) - or - forex(ControlFlow::Node cfn1 | cfn1 = g1.getAControlFlowNode() | - exists(Ssa::ExplicitDefinition def | def.getADefinition().getSource() = g2 | - g1 = def.getAReadAtNode(cfn1) and - isGuard(g1, v1) and - v2 = v1 and - if v1.isReferentialProperty() then firstReadUniquePredecessor(def, cfn1) else any() - ) + .getAnSsaQualifier(guarded.getBasicBlock().getANode()) ) } } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll index 6fed45cdf84..ab8bb233e2c 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Completion.qll @@ -26,7 +26,6 @@ private import semmle.code.csharp.frameworks.System private import ControlFlowGraphImpl private import NonReturning private import SuccessorType -private import SuccessorTypes private newtype TCompletion = TSimpleCompletion() or @@ -310,10 +309,8 @@ private class Overflowable extends UnaryOperation { /** A control flow element that is inside a `try` block. */ private class TriedControlFlowElement extends ControlFlowElement { - TryStmt try; - TriedControlFlowElement() { - this = try.getATriedElement() and + this = any(TryStmt try).getATriedElement() and not this instanceof NonReturningCall } @@ -393,11 +390,6 @@ private predicate invalidCastCandidate(CastExpr ce) { ce.getExpr().getType() = getACastExprBaseType(ce) } -private predicate assertion(Assertion a, int i, AssertMethod am, Expr e) { - e = a.getExpr(i) and - am = a.getAssertMethod() -} - /** Gets a valid completion when argument `i` fails in assertion `a`. */ Completion assertionCompletion(Assertion a, int i) { exists(AssertMethod am | am = a.getAssertMethod() | @@ -432,11 +424,6 @@ private predicate inBooleanContext(Expr e) { or e = any(SpecificCatchClause scc).getFilterClause() or - exists(BooleanAssertMethod m, int i | - assertion(_, i, m, e) and - i = m.getAnAssertionIndex(_) - ) - or e = any(LogicalNotExpr lne | inBooleanContext(lne)).getAnOperand() or exists(LogicalAndExpr lae | @@ -484,11 +471,6 @@ private predicate inNullnessContext(Expr e) { or exists(QualifiableExpr qe | qe.isConditional() | e = qe.getChildExpr(-1)) or - exists(NullnessAssertMethod m, int i | - assertion(_, i, m, e) and - i = m.getAnAssertionIndex(_) - ) - or exists(ConditionalExpr ce | inNullnessContext(ce) | (e = ce.getThen() or e = ce.getElse())) or exists(NullCoalescingExpr nce | inNullnessContext(nce) | e = nce.getRightOperand()) @@ -575,7 +557,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { } /** A simple (normal) completion. */ class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion { - override NormalSuccessor getAMatchingSuccessorType() { any() } + override DirectSuccessor getAMatchingSuccessorType() { any() } override string toString() { result = "normal" } } @@ -859,7 +841,7 @@ class GotoCompletion extends Completion { /** Gets the label of the `goto` completion. */ string getLabel() { result = label } - override GotoSuccessor getAMatchingSuccessorType() { result.getLabel() = label } + override GotoSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case @@ -882,7 +864,7 @@ class ThrowCompletion extends Completion { /** Gets the type of the exception being thrown. */ ExceptionClass getExceptionClass() { result = ec } - override ExceptionSuccessor getAMatchingSuccessorType() { result.getExceptionClass() = ec } + override ExceptionSuccessor getAMatchingSuccessorType() { any() } override string toString() { // `NestedCompletion` defines `toString()` for the other case diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll index 74cb070635b..5f62d6d21df 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -79,23 +79,10 @@ private module CfgInput implements CfgShared::InputSig { Impl::scopeLast(scope, last, c) } - class SuccessorType = ST::SuccessorType; + private class SuccessorType = ST::SuccessorType; SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } - predicate successorTypeIsSimple(SuccessorType t) { - t instanceof ST::SuccessorTypes::NormalSuccessor - } - - predicate successorTypeIsCondition(SuccessorType t) { - t instanceof ST::SuccessorTypes::ConditionalSuccessor - } - - predicate isAbnormalExitType(SuccessorType t) { - t instanceof ST::SuccessorTypes::ExceptionSuccessor or - t instanceof ST::SuccessorTypes::ExitSuccessor - } - int idOfAstNode(AstNode node) { result = node.getId() } int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll index 08debc21c0d..38eca378edf 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreBasicBlocks.qll @@ -13,6 +13,7 @@ import csharp private import Completion private import ControlFlowGraphImpl private import semmle.code.csharp.controlflow.ControlFlowGraph::ControlFlow as Cfg +private import codeql.controlflow.BasicBlock as BB private predicate startsBB(ControlFlowElement cfe) { not succ(_, cfe, _) and @@ -55,24 +56,34 @@ private predicate bbIDominates(PreBasicBlock dom, PreBasicBlock bb) = class PreBasicBlock extends ControlFlowElement { PreBasicBlock() { startsBB(this) } - PreBasicBlock getASuccessorByType(Cfg::SuccessorType t) { - succ(this.getLastElement(), result, any(Completion c | t = c.getAMatchingSuccessorType())) + PreBasicBlock getASuccessor(Cfg::SuccessorType t) { + succ(this.getLastNode(), result, any(Completion c | t = c.getAMatchingSuccessorType())) } - PreBasicBlock getASuccessor() { result = this.getASuccessorByType(_) } + deprecated PreBasicBlock getASuccessorByType(Cfg::SuccessorType t) { + result = this.getASuccessor(t) + } + + PreBasicBlock getASuccessor() { result = this.getASuccessor(_) } PreBasicBlock getAPredecessor() { result.getASuccessor() = this } - ControlFlowElement getElement(int pos) { bbIndex(this, result, pos) } + ControlFlowElement getNode(int pos) { bbIndex(this, result, pos) } - ControlFlowElement getAnElement() { result = this.getElement(_) } + deprecated ControlFlowElement getElement(int pos) { result = this.getNode(pos) } + + ControlFlowElement getAnElement() { result = this.getNode(_) } ControlFlowElement getFirstElement() { result = this } - ControlFlowElement getLastElement() { result = this.getElement(this.length() - 1) } + ControlFlowElement getLastNode() { result = this.getNode(this.length() - 1) } + + deprecated ControlFlowElement getLastElement() { result = this.getLastNode() } int length() { result = strictcount(this.getAnElement()) } + PreBasicBlock getImmediateDominator() { bbIDominates(result, this) } + predicate immediatelyDominates(PreBasicBlock bb) { bbIDominates(this, bb) } pragma[inline] @@ -84,45 +95,81 @@ class PreBasicBlock extends ControlFlowElement { or this.strictlyDominates(bb) } + + predicate inDominanceFrontier(PreBasicBlock df) { + this = df.getAPredecessor() and not bbIDominates(this, df) + or + exists(PreBasicBlock prev | prev.inDominanceFrontier(df) | + bbIDominates(this, prev) and + not bbIDominates(this, df) + ) + } + + /** Unsupported. Do not use. */ + predicate strictlyPostDominates(PreBasicBlock bb) { none() } + + /** Unsupported. Do not use. */ + predicate postDominates(PreBasicBlock bb) { + this.strictlyPostDominates(bb) or + this = bb + } } private Completion getConditionalCompletion(ConditionalCompletion cc) { result.getInnerCompletion() = cc } +pragma[nomagic] +private predicate conditionBlockImmediatelyControls( + ConditionBlock cond, PreBasicBlock succ, ConditionalCompletion cc +) { + exists(ControlFlowElement last, Completion c | + last = cond.getLastNode() and + c = getConditionalCompletion(cc) and + succ(last, succ, c) and + // In the pre-CFG, we need to account for case where one predecessor node has + // two edges to the same successor node. Assertion expressions are examples of + // such nodes. + not exists(Completion other | + succ(last, succ, other) and + other != c + ) and + forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != cond | + succ.dominates(pred) + ) + ) +} + class ConditionBlock extends PreBasicBlock { ConditionBlock() { exists(Completion c | c = getConditionalCompletion(_) | - succ(this.getLastElement(), _, c) + succ(this.getLastNode(), _, c) or - scopeLast(_, this.getLastElement(), c) + scopeLast(_, this.getLastNode(), c) ) } pragma[nomagic] - private predicate immediatelyControls(PreBasicBlock succ, ConditionalCompletion cc) { - exists(ControlFlowElement last, Completion c | - last = this.getLastElement() and - c = getConditionalCompletion(cc) and - succ(last, succ, c) and - // In the pre-CFG, we need to account for case where one predecessor node has - // two edges to the same successor node. Assertion expressions are examples of - // such nodes. - not exists(Completion other | - succ(last, succ, other) and - other != c - ) and - forall(PreBasicBlock pred | pred = succ.getAPredecessor() and pred != this | - succ.dominates(pred) - ) - ) - } - - pragma[nomagic] - predicate controls(PreBasicBlock controlled, Cfg::SuccessorTypes::ConditionalSuccessor s) { - exists(PreBasicBlock succ, ConditionalCompletion c | this.immediatelyControls(succ, c) | + predicate controls(PreBasicBlock controlled, Cfg::ConditionalSuccessor s) { + exists(PreBasicBlock succ, ConditionalCompletion c | + conditionBlockImmediatelyControls(this, succ, c) + | succ.dominates(controlled) and s = c.getAMatchingSuccessorType() ) } } + +module PreCfg implements BB::CfgSig { + class ControlFlowNode = ControlFlowElement; + + class BasicBlock = PreBasicBlock; + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { entryBB(this) } + } + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + conditionBlockImmediatelyControls(bb1, bb2, _) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll index 6507bbbe04b..4921e692623 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll @@ -12,9 +12,9 @@ module PreSsa { private import codeql.ssa.Ssa as SsaImplCommon private predicate definitionAt( - AssignableDefinition def, SsaInput::BasicBlock bb, int i, SsaInput::SourceVariable v + AssignableDefinition def, PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v ) { - bb.getElement(i) = def.getExpr() and + bb.getNode(i) = def.getExpr() and v = def.getTarget() and // In cases like `(x, x) = (0, 1)`, we discard the first (dead) definition of `x` not exists(TupleAssignmentDefinition first, TupleAssignmentDefinition second | first = def | @@ -30,7 +30,9 @@ module PreSsa { ) } - predicate implicitEntryDef(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v) { + predicate implicitEntryDef( + Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v + ) { c = v.getACallable() and scopeFirst(c, bb) and ( @@ -79,19 +81,11 @@ module PreSsa { } } - module SsaInput implements SsaImplCommon::InputSig { - class BasicBlock extends PreBasicBlocks::PreBasicBlock { - ControlFlowNode getNode(int i) { result = this.getElement(i) } - } + module SsaInput implements SsaImplCommon::InputSig { + private import semmle.code.csharp.Caching - class ControlFlowNode = ControlFlowElement; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - - private class ExitBasicBlock extends BasicBlock { - ExitBasicBlock() { scopeLast(_, this.getLastElement(), _) } + private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock { + ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) } } pragma[noinline] @@ -129,7 +123,10 @@ module PreSsa { Callable getACallable() { result = c } } - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite( + PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain + ) { + Stages::ControlFlowStage::forceCachingInSameStage() and exists(AssignableDefinition def | definitionAt(def, bb, i, v) and if def.getTargetAccess().isRefArgument() then certain = false else certain = true @@ -140,9 +137,11 @@ module PreSsa { certain = true } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead( + PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain + ) { exists(AssignableRead read | - read = bb.getElement(i) and + read = bb.getNode(i) and read.getTarget() = v and certain = true ) @@ -157,27 +156,27 @@ module PreSsa { } } - private module SsaImpl = SsaImplCommon::Make; + private module SsaImpl = SsaImplCommon::Make; class Definition extends SsaImpl::Definition { final AssignableRead getARead() { - exists(SsaInput::BasicBlock bb, int i | + exists(PreBasicBlocks::PreBasicBlock bb, int i | SsaImpl::ssaDefReachesRead(_, this, bb, i) and - result = bb.getElement(i) + result = bb.getNode(i) ) } final AssignableDefinition getDefinition() { - exists(SsaInput::BasicBlock bb, int i, SsaInput::SourceVariable v | + exists(PreBasicBlocks::PreBasicBlock bb, int i, SsaInput::SourceVariable v | this.definesAt(v, bb, i) and definitionAt(result, bb, i, v) ) } final AssignableRead getAFirstRead() { - exists(SsaInput::BasicBlock bb, int i | + exists(PreBasicBlocks::PreBasicBlock bb, int i | SsaImpl::firstUse(this, bb, i, true) and - result = bb.getElement(i) + result = bb.getNode(i) ) } @@ -191,14 +190,14 @@ module PreSsa { not result instanceof PhiNode } - final predicate isLiveAtEndOfBlock(SsaInput::BasicBlock bb) { + final predicate isLiveAtEndOfBlock(PreBasicBlocks::PreBasicBlock bb) { SsaImpl::ssaDefReachesEndOfBlock(bb, this, _) } override Location getLocation() { result = this.getDefinition().getLocation() or - exists(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v | + exists(Callable c, PreBasicBlocks::PreBasicBlock bb, SsaInput::SourceVariable v | this.definesAt(v, bb, -1) and implicitEntryDef(c, bb, v) and result = c.getLocation() @@ -213,10 +212,10 @@ module PreSsa { } predicate adjacentReadPairSameVar(AssignableRead read1, AssignableRead read2) { - exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | - read1 = bb1.getElement(i1) and + exists(PreBasicBlocks::PreBasicBlock bb1, int i1, PreBasicBlocks::PreBasicBlock bb2, int i2 | + read1 = bb1.getNode(i1) and SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and - read2 = bb2.getElement(i2) + read2 = bb2.getNode(i2) ) } } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll index b6efdfcf1ea..63d2c181da4 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/Splitting.qll @@ -24,30 +24,12 @@ private module Cached { cached newtype TSplitKind = TInitializerSplitKind() or - TConditionalCompletionSplitKind() or - TAssertionSplitKind() or - TFinallySplitKind(int nestLevel) { nestLevel = any(Statements::TryStmtTree t).nestLevel() } or - TExceptionHandlerSplitKind() or - TBooleanSplitKind(BooleanSplitting::BooleanSplitSubKind kind) { kind.startsSplit(_) } or - TLoopSplitKind(LoopSplitting::AnalyzableLoopStmt loop) + TConditionalCompletionSplitKind() cached newtype TSplit = TInitializerSplit(Constructor c) { InitializerSplitting::constructorInitializes(c, _) } or - TConditionalCompletionSplit(ConditionalCompletion c) or - TAssertionSplit(AssertionSplitting::Assertion a, int i, boolean success) { - exists(a.getExpr(i)) and - success in [false, true] - } or - TFinallySplit(FinallySplitting::FinallySplitType type, int nestLevel) { - nestLevel = any(Statements::TryStmtTree t).nestLevel() - } or - TExceptionHandlerSplit(ExceptionClass ec) or - TBooleanSplit(BooleanSplitting::BooleanSplitSubKind kind, boolean branch) { - kind.startsSplit(_) and - branch in [false, true] - } or - TLoopSplit(LoopSplitting::AnalyzableLoopStmt loop) + TConditionalCompletionSplit(ConditionalCompletion c) } import Cached @@ -333,990 +315,3 @@ module ConditionalCompletionSplitting { int getNextListOrder() { result = InitializerSplitting::getNextListOrder() + 1 } } - -module AssertionSplitting { - import semmle.code.csharp.commons.Assertions - private import semmle.code.csharp.ExprOrStmtParent - - private AstNode getAnAssertionDescendant(Assertion a) { - result = a - or - result = getAnAssertionDescendant(a).getAChild() - } - - /** - * A split for assertions. For example, in - * - * ```csharp - * void M(int i) - * { - * Debug.Assert(i >= 0); - * System.Console.WriteLine("i is positive") - * } - * ``` - * - * we record whether `i >= 0` evaluates to `true` or `false`, and restrict the - * edges out of the assertion accordingly. - */ - class AssertionSplit extends Split, TAssertionSplit { - Assertion a; - boolean success; - int i; - - AssertionSplit() { this = TAssertionSplit(a, i, success) } - - /** Gets the assertion. */ - Assertion getAssertion() { result = a } - - /** Holds if this split represents a successful assertion. */ - predicate isSuccess() { success = true } - - override string toString() { - success = true and result = "assertion success" - or - success = false and result = "assertion failure" - } - } - - private class AssertionSplitKind extends SplitKind, TAssertionSplitKind { - override int getListOrder() { result = ConditionalCompletionSplitting::getNextListOrder() } - - override predicate isEnabled(AstNode cfe) { this.appliesTo(cfe) } - - override string toString() { result = "Assertion" } - } - - int getNextListOrder() { result = ConditionalCompletionSplitting::getNextListOrder() + 1 } - - private class AssertionSplitImpl extends SplitImpl instanceof AssertionSplit { - Assertion a; - boolean success; - int i; - - AssertionSplitImpl() { this = TAssertionSplit(a, i, success) } - - override AssertionSplitKind getKind() { any() } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - exists(AssertMethod m | - last(a.getExpr(i), pred, c) and - succ(pred, succ, c) and - m = a.getAssertMethod() and - // The assertion only succeeds when all asserted arguments succeeded, so - // we only enter a "success" state after the last argument has succeeded. - // - // The split is only entered if we are not already in a "failing" state - // for one of the previous arguments, which ensures that the "success" - // state is only entered when all arguments succeed. This also means - // that if multiple arguments fail, then the first failing argument - // will determine the exception being thrown by the assertion. - if success = true then i = max(int j | exists(a.getExpr(j))) else any() - | - exists(boolean b | i = m.(BooleanAssertMethod).getAnAssertionIndex(b) | - c instanceof TrueCompletion and success = b - or - c instanceof FalseCompletion and success = b.booleanNot() - ) - or - exists(boolean b | i = m.(NullnessAssertMethod).getAnAssertionIndex(b) | - c.(NullnessCompletion).isNull() and success = b - or - c.(NullnessCompletion).isNonNull() and success = b.booleanNot() - ) - ) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - this.appliesTo(pred) and - pred = a and - succ(pred, succ, c) and - ( - success = true and - c instanceof NormalCompletion - or - success = false and - c = assertionCompletion(a, i) - ) - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - this.appliesTo(last) and - last = a and - scopeLast(scope, last, c) and - ( - success = true and - c instanceof NormalCompletion - or - success = false and - c = assertionCompletion(a, i) - ) - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - this.appliesSucc(pred, succ, c) and - succ = getAnAssertionDescendant(a) - } - } -} - -module FinallySplitting { - /** - * The type of a split `finally` node. - * - * The type represents one of the possible ways of entering a `finally` - * block. For example, if a `try` statement ends with a `return` statement, - * then the `finally` block must end with a `return` as well (provided that - * the `finally` block exits normally). - */ - class FinallySplitType extends Cfg::SuccessorType { - FinallySplitType() { not this instanceof Cfg::SuccessorTypes::ConditionalSuccessor } - - /** Holds if this split type matches entry into a `finally` block with completion `c`. */ - predicate isSplitForEntryCompletion(Completion c) { - if c instanceof NormalCompletion - then - // If the entry into the `finally` block completes with any normal completion, - // it simply means normal execution after the `finally` block - this instanceof Cfg::SuccessorTypes::NormalSuccessor - else this = c.getAMatchingSuccessorType() - } - } - - /** A control flow element that belongs to a `finally` block. */ - private class FinallyAstNode extends AstNode { - private Statements::TryStmtTree try; - - FinallyAstNode() { this = try.getAFinallyDescendant() } - - /** Gets the immediate `try` block that this node belongs to. */ - Statements::TryStmtTree getTryStmt() { result = try } - - /** Holds if this node is the entry node in the `finally` block it belongs to. */ - predicate isEntryNode() { first(try.(TryStmt).getFinally(), this) } - } - - /** - * A split for elements belonging to a `finally` block, which determines how to - * continue execution after leaving the `finally` block. For example, in - * - * ```csharp - * try - * { - * if (!M()) - * throw new Exception(); - * } - * finally - * { - * Log.Write("M failed"); - * } - * ``` - * - * all control flow nodes in the `finally` block have two splits: one representing - * normal execution of the `try` block (when `M()` returns `true`), and one - * representing exceptional execution of the `try` block (when `M()` returns `false`). - */ - class FinallySplit extends Split, TFinallySplit { - private FinallySplitType type; - private int nestLevel; - - FinallySplit() { this = TFinallySplit(type, nestLevel) } - - /** - * Gets the type of this `finally` split, that is, how to continue execution after the - * `finally` block. - */ - FinallySplitType getType() { result = type } - - /** Gets the `finally` nesting level. */ - int getNestLevel() { result = nestLevel } - - override string toString() { - if type instanceof Cfg::SuccessorTypes::NormalSuccessor - then result = "" - else - if nestLevel > 0 - then result = "finally(" + nestLevel + "): " + type.toString() - else result = "finally: " + type.toString() - } - } - - private int getListOrder(FinallySplitKind kind) { - result = AssertionSplitting::getNextListOrder() + kind.getNestLevel() - } - - int getNextListOrder() { - result = max([getListOrder(_) + 1, AssertionSplitting::getNextListOrder()]) - } - - private class FinallySplitKind extends SplitKind, TFinallySplitKind { - private int nestLevel; - - FinallySplitKind() { this = TFinallySplitKind(nestLevel) } - - /** Gets the `finally` nesting level. */ - int getNestLevel() { result = nestLevel } - - override int getListOrder() { result = getListOrder(this) } - - override string toString() { result = "Finally (" + nestLevel + ")" } - } - - pragma[nomagic] - private predicate hasEntry0(AstNode pred, FinallyAstNode succ, int nestLevel, Completion c) { - succ.isEntryNode() and - nestLevel = succ.getTryStmt().nestLevel() and - succ(pred, succ, c) - } - - private class FinallySplitImpl extends SplitImpl instanceof FinallySplit { - override FinallySplitKind getKind() { result.getNestLevel() = super.getNestLevel() } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - hasEntry0(pred, succ, super.getNestLevel(), c) and - super.getType().isSplitForEntryCompletion(c) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - /** - * Holds if this split applies to control flow element `pred`, where `pred` - * is a valid predecessor. - */ - private predicate appliesToPredecessor(AstNode pred) { - this.appliesTo(pred) and - (succ(pred, _, _) or scopeLast(_, pred, _)) - } - - pragma[noinline] - private predicate exit0(AstNode pred, Statements::TryStmtTree try, int nestLevel, Completion c) { - this.appliesToPredecessor(pred) and - nestLevel = try.nestLevel() and - last(try, pred, c) - } - - /** - * Holds if `pred` may exit this split with completion `c`. The Boolean - * `inherited` indicates whether `c` is an inherited completion from a `try`/ - * `catch` block. - */ - private predicate exit(AstNode pred, Completion c, boolean inherited) { - exists(TryStmt try, FinallySplitType type | - this.exit0(pred, try, super.getNestLevel(), c) and - type = super.getType() - | - if last(try.getFinally(), pred, c) - then - // Finally block can itself exit with completion `c`: either `c` must - // match this split, `c` must be an abnormal completion, or this split - // does not require another completion to be recovered - inherited = false and - ( - type = c.getAMatchingSuccessorType() - or - not c instanceof NormalCompletion - or - type instanceof Cfg::SuccessorTypes::NormalSuccessor - ) - else ( - // Finally block can exit with completion `c` inherited from try/catch - // block: must match this split - inherited = true and - type = c.getAMatchingSuccessorType() and - not type instanceof Cfg::SuccessorTypes::NormalSuccessor - ) - ) - or - // If this split is normal, and an outer split can exit based on an inherited - // completion, we need to exit this split as well. For example, in - // - // ```csharp - // bool done; - // try - // { - // if (b1) throw new ExceptionA(); - // } - // finally - // { - // try - // { - // if (b2) throw new ExceptionB(); - // } - // finally - // { - // done = true; - // } - // } - // ``` - // - // if the outer split for `done = true` is `ExceptionA` and the inner split - // is "normal" (corresponding to `b1 = true` and `b2 = false`), then the inner - // split must be able to exit with an `ExceptionA` completion. - this.appliesToPredecessor(pred) and - exists(FinallySplit outer | - outer.getNestLevel() = super.getNestLevel() - 1 and - outer.(FinallySplitImpl).exit(pred, c, inherited) and - super.getType() instanceof Cfg::SuccessorTypes::NormalSuccessor and - inherited = true - ) - } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - succ(pred, succ, c) and - ( - this.exit(pred, c, _) - or - this.exit(pred, c.(NestedBreakCompletion).getAnInnerCompatibleCompletion(), _) - ) - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - scopeLast(scope, last, c) and - ( - this.exit(last, c, _) - or - this.exit(last, c.(NestedBreakCompletion).getAnInnerCompatibleCompletion(), _) - ) - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - this.appliesSucc(pred, succ, c) and - succ = - any(FinallyAstNode fcfe | - if fcfe.isEntryNode() - then - // entering a nested `finally` block - fcfe.getTryStmt().nestLevel() > super.getNestLevel() - else - // staying in the same (possibly nested) `finally` block as `pred` - fcfe.getTryStmt().nestLevel() >= super.getNestLevel() - ) - } - } -} - -module ExceptionHandlerSplitting { - private newtype TMatch = - TAlways() or - TMaybe() or - TNever() - - /** - * A split for elements belonging to a `catch` clause, which determines the type of - * exception to handle. For example, in - * - * ```csharp - * try - * { - * if (M() > 0) - * throw new ArgumentException(); - * else if (M() < 0) - * throw new ArithmeticException("negative"); - * else - * return; - * } - * catch (ArgumentException e) - * { - * Log.Write("M() positive"); - * } - * catch (ArithmeticException e) when (e.Message != null) - * { - * Log.Write($"M() {e.Message}"); - * } - * ``` - * - * all control flow nodes in - * ```csharp - * catch (ArgumentException e) - * ``` - * and - * ```csharp - * catch (ArithmeticException e) when (e.Message != null) - * ``` - * have two splits: one representing the `try` block throwing an `ArgumentException`, - * and one representing the `try` block throwing an `ArithmeticException`. - */ - class ExceptionHandlerSplit extends Split, TExceptionHandlerSplit { - private ExceptionClass ec; - - ExceptionHandlerSplit() { this = TExceptionHandlerSplit(ec) } - - /** Gets the exception type that this split represents. */ - ExceptionClass getExceptionClass() { result = ec } - - override string toString() { result = "exception: " + ec.toString() } - } - - private class ExceptionHandlerSplitKind extends SplitKind, TExceptionHandlerSplitKind { - override int getListOrder() { result = FinallySplitting::getNextListOrder() } - - override string toString() { result = "ExceptionHandler" } - } - - int getNextListOrder() { result = FinallySplitting::getNextListOrder() + 1 } - - private class ExceptionHandlerSplitImpl extends SplitImpl instanceof ExceptionHandlerSplit { - override ExceptionHandlerSplitKind getKind() { any() } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - // Entry into first catch clause - exists(Statements::TryStmtTree ts | - super.getExceptionClass() = ts.getAThrownException(pred, c) - | - succ(pred, succ, c) and - succ = ts.(TryStmt).getCatchClause(0).(SpecificCatchClause) - ) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - /** - * Holds if this split applies to catch clause `scc`. The parameter `match` - * indicates whether the catch clause `scc` may match the exception type of - * this split. - */ - private predicate appliesToCatchClause(SpecificCatchClause scc, TMatch match) { - exists(Statements::TryStmtTree ts, ExceptionClass ec | - ec = super.getExceptionClass() and - ec = ts.getAThrownException(_, _) and - scc = ts.(TryStmt).getACatchClause() - | - if scc.getCaughtExceptionType() = ec.getABaseType*() - then match = TAlways() - else - if scc.getCaughtExceptionType() = ec.getASubType+() - then match = TMaybe() - else match = TNever() - ) - } - - /** - * Holds if this split applies to control flow element `pred`, where `pred` - * is a valid predecessor with completion `c`. - */ - private predicate appliesToPredecessor(AstNode pred, Completion c) { - this.appliesTo(pred) and - (succ(pred, _, c) or scopeLast(_, pred, c)) and - ( - pred instanceof SpecificCatchClause - implies - pred = - any(SpecificCatchClause scc | - if c instanceof MatchingCompletion - then - exists(TMatch match | this.appliesToCatchClause(scc, match) | - c = - any(MatchingCompletion mc | - if mc.isMatch() then match != TNever() else match != TAlways() - ) - ) - else ( - (scc.isLast() and c instanceof ThrowCompletion) - implies - exists(TMatch match | this.appliesToCatchClause(scc, match) | match != TAlways()) - ) - ) - ) - } - - /** - * Holds if this split applies to `pred`, and `pred` may exit this split - * with throw completion `c`, because it belongs to the last `catch` clause - * in a `try` statement. - */ - private predicate hasLastExit(AstNode pred, ThrowCompletion c) { - this.appliesToPredecessor(pred, c) and - exists(TryStmt ts, SpecificCatchClause scc, int last | - last(ts.getCatchClause(last), pred, c) - | - ts.getCatchClause(last) = scc and - scc.isLast() and - c.getExceptionClass() = super.getExceptionClass() - ) - } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - this.appliesToPredecessor(pred, c) and - succ(pred, succ, c) and - ( - // Exit out to `catch` clause block - first(any(SpecificCatchClause scc).getBlock(), succ) - or - // Exit out to a general `catch` clause - succ instanceof GeneralCatchClause - or - // Exit out from last `catch` clause (no catch clauses match) - this.hasLastExit(pred, c) - ) - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - // Exit out from last `catch` clause (no catch clauses match) - this.hasLastExit(last, c) and - scopeLast(scope, last, c) - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - this.appliesToPredecessor(pred, c) and - this.appliesSucc(pred, succ, c) and - not first(any(SpecificCatchClause scc).getBlock(), succ) and - not succ instanceof GeneralCatchClause and - not exists(TryStmt ts, SpecificCatchClause scc, int last | - last(ts.getCatchClause(last), pred, c) - | - ts.getCatchClause(last) = scc and - scc.isLast() - ) - } - } -} - -module BooleanSplitting { - private import semmle.code.csharp.controlflow.internal.PreBasicBlocks - - /** A sub-classification of Boolean splits. */ - abstract class BooleanSplitSubKind extends TBooleanSplitSubKind { - /** - * Holds if the branch taken by condition `cb1` should be recorded in - * this split, and the recorded value determines the branch taken by a - * later condition `cb2`, possibly inverted. - * - * For example, in - * - * ```csharp - * var b = GetB(); - * if (b) - * Console.WriteLine("b is true"); - * if (!b) - * Console.WriteLine("b is false"); - * ``` - * - * the branch taken in the condition on line 2 can be recorded, and the - * recorded value will determine the branch taken in the condition on line 4. - */ - abstract predicate correlatesConditions(ConditionBlock cb1, ConditionBlock cb2, boolean inverted); - - /** Holds if control flow element `cfe` starts a split of this kind. */ - predicate startsSplit(AstNode cfe) { - this.correlatesConditions(any(ConditionBlock cb | cb.getLastElement() = cfe), _, _) - } - - /** - * Holds if basic block `bb` can reach a condition correlated with a - * split of this kind. - */ - abstract predicate canReachCorrelatedCondition(PreBasicBlock bb); - - /** Gets the callable that this Boolean split kind belongs to. */ - abstract Callable getEnclosingCallable(); - - /** Gets a textual representation of this Boolean split kind. */ - abstract string toString(); - - /** Gets the location of this Boolean split kind. */ - abstract Location getLocation(); - } - - /** - * A Boolean split that records the value of a Boolean SSA variable. - * - * For example, in - * - * ```csharp - * var b = GetB(); - * if (b) - * Console.WriteLine("b is true"); - * if (!b) - * Console.WriteLine("b is false"); - * ``` - * - * there is a Boolean split on the SSA variable for `b` at line 1. - */ - class SsaBooleanSplitSubKind extends BooleanSplitSubKind, TSsaBooleanSplitSubKind { - private PreSsa::Definition def; - - SsaBooleanSplitSubKind() { this = TSsaBooleanSplitSubKind(def) } - - /** - * Holds if condition `cb` is a read of the SSA variable in this split. - */ - private predicate defCondition(ConditionBlock cb) { cb.getLastElement() = def.getARead() } - - /** - * Holds if condition `cb` is a read of the SSA variable in this split, - * and `cb` can be reached from `read` without passing through another - * condition that reads the same SSA variable. - */ - private predicate defConditionReachableFromRead(ConditionBlock cb, AssignableRead read) { - this.defCondition(cb) and - read = cb.getLastElement() - or - exists(AssignableRead mid | this.defConditionReachableFromRead(cb, mid) | - PreSsa::adjacentReadPairSameVar(read, mid) and - not this.defCondition(read) - ) - } - - /** - * Holds if condition `cb` is a read of the SSA variable in this split, - * and `cb` can be reached from the SSA definition without passing through - * another condition that reads the same SSA variable. - */ - private predicate firstDefCondition(ConditionBlock cb) { - this.defConditionReachableFromRead(cb, def.getAFirstRead()) - } - - override predicate correlatesConditions(ConditionBlock cb1, ConditionBlock cb2, boolean inverted) { - this.firstDefCondition(cb1) and - exists(AssignableRead read1, AssignableRead read2 | - read1 = cb1.getLastElement() and - PreSsa::adjacentReadPairSameVar+(read1, read2) and - read2 = cb2.getLastElement() and - inverted = false - ) - } - - override predicate canReachCorrelatedCondition(PreBasicBlock bb) { - this.correlatesConditions(_, bb, _) and - not def.getBasicBlock() = bb - or - exists(PreBasicBlock mid | this.canReachCorrelatedCondition(mid) | - bb = mid.getAPredecessor() and - not def.getBasicBlock() = bb - ) - } - - override Callable getEnclosingCallable() { result = def.getBasicBlock().getEnclosingCallable() } - - override string toString() { result = def.getSourceVariable().toString() } - - override Location getLocation() { result = def.getLocation() } - } - - /** - * A split for elements that can reach a condition where this split determines - * the Boolean value that the condition evaluates to. For example, in - * - * ```csharp - * if (b) - * Console.WriteLine("b is true"); - * if (!b) - * Console.WriteLine("b is false"); - * ``` - * - * all control flow nodes on line 2 and line 3 have two splits: one representing - * that the condition on line 1 took the `true` branch, and one representing that - * the condition on line 1 took the `false` branch. - */ - class BooleanSplit extends Split, TBooleanSplit { - private BooleanSplitSubKind kind; - private boolean branch; - - BooleanSplit() { this = TBooleanSplit(kind, branch) } - - /** Gets the kind of this Boolean split. */ - BooleanSplitSubKind getSubKind() { result = kind } - - /** Gets the branch taken in this split. */ - boolean getBranch() { result = branch } - - override string toString() { - exists(int line | - line = kind.getLocation().getStartLine() and - result = kind.toString() + " (line " + line + "): " + branch.toString() - ) - } - } - - private int getListOrder(BooleanSplitSubKind kind) { - exists(Callable c, int r | c = kind.getEnclosingCallable() | - result = r + ExceptionHandlerSplitting::getNextListOrder() - 1 and - kind = - rank[r](BooleanSplitSubKind kind0, Location l | - kind0.getEnclosingCallable() = c and - kind0.startsSplit(_) and - l = kind0.getLocation() - | - kind0 order by l.getStartLine(), l.getStartColumn(), kind0.toString() - ) - ) - } - - int getNextListOrder() { - result = max([getListOrder(_) + 1, ExceptionHandlerSplitting::getNextListOrder()]) - } - - private class BooleanSplitKind extends SplitKind, TBooleanSplitKind { - private BooleanSplitSubKind kind; - - BooleanSplitKind() { this = TBooleanSplitKind(kind) } - - /** Gets the sub kind of this Boolean split kind. */ - BooleanSplitSubKind getSubKind() { result = kind } - - override int getListOrder() { result = getListOrder(kind) } - - override string toString() { result = kind.toString() } - } - - pragma[nomagic] - private predicate hasEntry0( - AstNode pred, AstNode succ, BooleanSplitSubKind kind, boolean b, Completion c - ) { - kind.startsSplit(pred) and - succ(pred, succ, c) and - b = c.getInnerCompletion().(BooleanCompletion).getValue() - } - - private class BooleanSplitImpl extends SplitImpl instanceof BooleanSplit { - override BooleanSplitKind getKind() { result.getSubKind() = super.getSubKind() } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - hasEntry0(pred, succ, super.getSubKind(), super.getBranch(), c) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - private ConditionBlock getACorrelatedCondition(boolean inverted) { - super.getSubKind().correlatesConditions(_, result, inverted) - } - - /** - * Holds if this split applies to basic block `bb`, where the the last - * element of `bb` can have completion `c`. - */ - private predicate appliesToBlock(PreBasicBlock bb, Completion c) { - this.appliesTo(bb) and - exists(AstNode last | last = bb.getLastElement() | - (succ(last, _, c) or scopeLast(_, last, c)) and - // Respect the value recorded in this split for all correlated conditions - forall(boolean inverted | bb = this.getACorrelatedCondition(inverted) | - c.getInnerCompletion() instanceof BooleanCompletion - implies - c.getInnerCompletion().(BooleanCompletion).getValue() = - super.getBranch().booleanXor(inverted) - ) - ) - } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - exists(PreBasicBlock bb | this.appliesToBlock(bb, c) | - pred = bb.getLastElement() and - succ(pred, succ, c) and - // Exit this split if we can no longer reach a correlated condition - not super.getSubKind().canReachCorrelatedCondition(succ) - ) - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - exists(PreBasicBlock bb | this.appliesToBlock(bb, c) | - last = bb.getLastElement() and - scopeLast(scope, last, c) - ) - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - exists(PreBasicBlock bb, Completion c0 | this.appliesToBlock(bb, c0) | - pred = bb.getAnElement() and - this.appliesSucc(pred, succ, c) and - ( - pred = bb.getLastElement() - implies - ( - // We must still be able to reach a correlated condition to stay in this split - super.getSubKind().canReachCorrelatedCondition(succ) and - c = c0 - ) - ) - ) - } - } -} - -module LoopSplitting { - private import semmle.code.csharp.controlflow.Guards as Guards - private import PreBasicBlocks - - /** Holds if `ce` is guarded by a (non-)empty check, as specified by `v`. */ - private predicate emptinessGuarded( - Guards::Guard g, Guards::EnumerableCollectionExpr ce, - Guards::AbstractValues::EmptyCollectionValue v - ) { - exists(PreBasicBlock bb | Guards::Internal::preControls(g, bb, v) | - PreSsa::adjacentReadPairSameVar(g, ce) and - bb.getAnElement() = ce - ) - } - - /** - * A loop where the body is guaranteed to be executed at least once, and hence - * can be unrolled in the control flow graph, or where the body is guaranteed - * to never be executed, and hence can be removed from the control flow graph. - */ - abstract class AnalyzableLoopStmt extends LoopStmt { - /** Holds if the step `pred --c--> succ` should start the split. */ - abstract predicate start(AstNode pred, AstNode succ, Completion c); - - /** Holds if the step `pred --c--> succ` should stop the split. */ - abstract predicate stop(AstNode pred, AstNode succ, Completion c); - - /** - * Holds if any step `pred --c--> _` should be pruned from the control flow graph. - */ - abstract predicate pruneLoopCondition(AstNode pred, ConditionalCompletion c); - - /** - * Holds if the body is guaranteed to be executed at least once. If not, the - * body is guaranteed to never be executed. - */ - abstract predicate isUnroll(); - } - - private class AnalyzableForeachStmt extends AnalyzableLoopStmt, ForeachStmt { - Guards::AbstractValues::EmptyCollectionValue v; - - AnalyzableForeachStmt() { - /* - * We use `unique` to avoid degenerate cases like - * ```csharp - * if (xs.Length == 0) - * return; - * if (xs.Length > 0) - * return; - * foreach (var x in xs) - * .... - * ``` - * where the iterator expression `xs` is guarded by both an emptiness check - * and a non-emptiness check. - */ - - v = - unique(Guards::AbstractValues::EmptyCollectionValue v0 | - emptinessGuarded(_, this.getIterableExpr(), v0) - or - this.getIterableExpr() = v0.getAnExpr() - | - v0 - ) - } - - override predicate start(AstNode pred, AstNode succ, Completion c) { - last(this.getIterableExpr(), pred, c) and - succ = this - } - - override predicate stop(AstNode pred, AstNode succ, Completion c) { - pred = this and - succ(pred, succ, c) - } - - override predicate pruneLoopCondition(AstNode pred, ConditionalCompletion c) { - pred = this and - c = any(EmptinessCompletion ec | if v.isEmpty() then not ec.isEmpty() else ec.isEmpty()) - } - - override predicate isUnroll() { v.isNonEmpty() } - } - - /** - * A split for loops where the body is guaranteed to be executed at least once, or - * guaranteed to never be executed. For example, in - * - * ```csharp - * void M(string[] args) - * { - * if (args.Length == 0) - * return; - * foreach (var arg in args) - * System.Console.WriteLine(args); - * } - * ``` - * - * the `foreach` loop is guaranteed to be executed at least once, as a result of the - * `args.Length == 0` check. - */ - class LoopSplit extends Split, TLoopSplit { - AnalyzableLoopStmt loop; - - LoopSplit() { this = TLoopSplit(loop) } - - override string toString() { - if loop.isUnroll() - then result = "unroll (line " + loop.getLocation().getStartLine() + ")" - else result = "skip (line " + loop.getLocation().getStartLine() + ")" - } - } - - pragma[noinline] - private Callable enclosingCallable(AnalyzableLoopStmt loop) { - result = loop.getEnclosingCallable() - } - - private int getListOrder(AnalyzableLoopStmt loop) { - exists(Callable c, int r | c = enclosingCallable(loop) | - result = r + BooleanSplitting::getNextListOrder() - 1 and - loop = - rank[r](AnalyzableLoopStmt loop0, Location l | - enclosingCallable(loop0) = c and - l = loop0.getLocation() - | - loop0 order by l.getStartLine(), l.getStartColumn() - ) - ) - } - - int getNextListOrder() { - result = max([getListOrder(_) + 1, BooleanSplitting::getNextListOrder()]) - } - - private class LoopSplitKind extends SplitKind, TLoopSplitKind { - private AnalyzableLoopStmt loop; - - LoopSplitKind() { this = TLoopSplitKind(loop) } - - override int getListOrder() { result = getListOrder(loop) } - - override string toString() { result = "Unroll" } - } - - private class LoopUnrollingSplitImpl extends SplitImpl instanceof LoopSplit { - AnalyzableLoopStmt loop; - - LoopUnrollingSplitImpl() { this = TLoopSplit(loop) } - - override LoopSplitKind getKind() { result = TLoopSplitKind(loop) } - - override predicate hasEntry(AstNode pred, AstNode succ, Completion c) { - loop.start(pred, succ, c) - } - - override predicate hasEntryScope(CfgScope scope, AstNode first) { none() } - - /** - * Holds if this split applies to control flow element `pred`, where `pred` - * is a valid predecessor. - */ - private predicate appliesToPredecessor(AstNode pred, Completion c) { - this.appliesTo(pred) and - (succ(pred, _, c) or scopeLast(_, pred, c)) and - not loop.pruneLoopCondition(pred, c) - } - - override predicate hasExit(AstNode pred, AstNode succ, Completion c) { - this.appliesToPredecessor(pred, c) and - loop.stop(pred, succ, c) - } - - override predicate hasExitScope(CfgScope scope, AstNode last, Completion c) { - this.appliesToPredecessor(last, c) and - scopeLast(scope, last, c) - } - - override predicate hasSuccessor(AstNode pred, AstNode succ, Completion c) { - this.appliesToPredecessor(pred, c) and - this.appliesSucc(pred, succ, c) and - not loop.stop(pred, succ, c) - } - } -} diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll index d6ea2161bbb..c0dae26b30e 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/SuccessorType.qll @@ -4,329 +4,4 @@ * Provides different types of control flow successor types. */ -import csharp -private import Completion -private import semmle.code.csharp.Caching - -cached -private newtype TSuccessorType = - TSuccessorSuccessor() { Stages::ControlFlowStage::forceCachingInSameStage() } or - TBooleanSuccessor(boolean b) { b = true or b = false } or - TNullnessSuccessor(boolean isNull) { isNull = true or isNull = false } or - TMatchingSuccessor(boolean isMatch) { isMatch = true or isMatch = false } or - TEmptinessSuccessor(boolean isEmpty) { isEmpty = true or isEmpty = false } or - TReturnSuccessor() or - TBreakSuccessor() or - TContinueSuccessor() or - TGotoSuccessor(string label) { label = any(GotoStmt gs).getLabel() } or - TExceptionSuccessor(ExceptionClass ec) { exists(ThrowCompletion c | c.getExceptionClass() = ec) } or - TExitSuccessor() - -/** The type of a control flow successor. */ -class SuccessorType extends TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { none() } -} - -/** Provides different types of control flow successor types. */ -module SuccessorTypes { - /** A normal control flow successor. */ - class NormalSuccessor extends SuccessorType, TSuccessorSuccessor { - override string toString() { result = "successor" } - } - - /** - * A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`), - * a nullness successor (`NullnessSuccessor`), a matching successor (`MatchingSuccessor`), - * or an emptiness successor (`EmptinessSuccessor`). - */ - abstract class ConditionalSuccessor extends SuccessorType { - /** Gets the Boolean value of this successor. */ - abstract boolean getValue(); - } - - /** - * A Boolean control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * if (x < 0) - * return 0; - * else - * return 1; - * ``` - * - * has a control flow graph containing Boolean successors: - * - * ``` - * if - * | - * x < 0 - * / \ - * / \ - * / \ - * true false - * | \ - * return 0 return 1 - * ``` - */ - class BooleanSuccessor extends ConditionalSuccessor, TBooleanSuccessor { - override boolean getValue() { this = TBooleanSuccessor(result) } - - override string toString() { result = this.getValue().toString() } - } - - /** - * A nullness control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * int? M(string s) => s?.Length; - * ``` - * - * has a control flow graph containing nullness successors: - * - * ``` - * enter M - * | - * s - * / \ - * / \ - * / \ - * null non-null - * \ | - * \ Length - * \ / - * \ / - * exit M - * ``` - */ - class NullnessSuccessor extends ConditionalSuccessor, TNullnessSuccessor { - /** Holds if this is a `null` successor. */ - predicate isNull() { this = TNullnessSuccessor(true) } - - override boolean getValue() { this = TNullnessSuccessor(result) } - - override string toString() { if this.isNull() then result = "null" else result = "non-null" } - } - - /** - * A matching control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * switch (x) { - * case 0 : - * return 0; - * default : - * return 1; - * } - * ``` - * - * has a control flow graph containing matching successors: - * - * ``` - * switch - * | - * x - * | - * case 0 - * / \ - * / \ - * / \ - * match no-match - * | \ - * return 0 default - * | - * return 1 - * ``` - */ - class MatchingSuccessor extends ConditionalSuccessor, TMatchingSuccessor { - /** Holds if this is a match successor. */ - predicate isMatch() { this = TMatchingSuccessor(true) } - - override boolean getValue() { this = TMatchingSuccessor(result) } - - override string toString() { if this.isMatch() then result = "match" else result = "no-match" } - } - - /** - * An emptiness control flow successor. - * - * For example, this program fragment: - * - * ```csharp - * foreach (var arg in args) - * { - * yield return arg; - * } - * yield return ""; - * ``` - * - * has a control flow graph containing emptiness successors: - * - * ``` - * args - * | - * foreach------<------- - * / \ \ - * / \ | - * / \ | - * / \ | - * empty non-empty | - * | \ | - * yield return "" \ | - * var arg | - * | | - * yield return arg | - * \_________/ - * ``` - */ - class EmptinessSuccessor extends ConditionalSuccessor, TEmptinessSuccessor { - /** Holds if this is an empty successor. */ - predicate isEmpty() { this = TEmptinessSuccessor(true) } - - override boolean getValue() { this = TEmptinessSuccessor(result) } - - override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } - } - - /** - * A `return` control flow successor. - * - * Example: - * - * ```csharp - * void M() - * { - * return; - * } - * ``` - * - * The callable exit node of `M` is a `return` successor of the `return;` - * statement. - */ - class ReturnSuccessor extends SuccessorType, TReturnSuccessor { - override string toString() { result = "return" } - } - - /** - * A `break` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) - * { - * if (x++ > 10) - * break; - * } - * return x; - * } - * ``` - * - * The node `return x;` is a `break` successor of the node `break;`. - */ - class BreakSuccessor extends SuccessorType, TBreakSuccessor { - override string toString() { result = "break" } - } - - /** - * A `continue` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) { - * if (x++ < 10) - * continue; - * } - * return x; - * } - * ``` - * - * The node `while (true) { ... }` is a `continue` successor of the node - * `continue;`. - */ - class ContinueSuccessor extends SuccessorType, TContinueSuccessor { - override string toString() { result = "continue" } - } - - /** - * A `goto` control flow successor. - * - * Example: - * - * ```csharp - * int M(int x) - * { - * while (true) - * { - * if (x++ > 10) - * goto Return; - * } - * Return: return x; - * } - * ``` - * - * The node `Return: return x` is a `goto label` successor of the node - * `goto Return;`. - */ - class GotoSuccessor extends SuccessorType, TGotoSuccessor { - /** Gets the `goto` label. */ - string getLabel() { this = TGotoSuccessor(result) } - - override string toString() { result = "goto(" + this.getLabel() + ")" } - } - - /** - * An exceptional control flow successor. - * - * Example: - * - * ```csharp - * int M(string s) - * { - * if (s == null) - * throw new ArgumentNullException(nameof(s)); - * return s.Length; - * } - * ``` - * - * The callable exit node of `M` is an exceptional successor (of type - * `ArgumentNullException`) of the node `throw new ArgumentNullException(nameof(s));`. - */ - class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { - /** Gets the type of exception. */ - ExceptionClass getExceptionClass() { this = TExceptionSuccessor(result) } - - override string toString() { result = "exception(" + this.getExceptionClass().getName() + ")" } - } - - /** - * An exit control flow successor. - * - * Example: - * - * ```csharp - * int M(string s) - * { - * if (s == null) - * System.Environment.Exit(0); - * return s.Length; - * } - * ``` - * - * The callable exit node of `M` is an exit successor of the node on line 4. - */ - class ExitSuccessor extends SuccessorType, TExitSuccessor { - override string toString() { result = "exit" } - } -} +import codeql.controlflow.SuccessorType diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index 7e8ed0aadc0..6a211e71f45 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -20,33 +20,34 @@ import csharp private import ControlFlow private import internal.CallableReturns -private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.controlflow.Guards as G -private import semmle.code.csharp.controlflow.Guards::AbstractValues private import semmle.code.csharp.dataflow.internal.SsaImpl as SsaImpl private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.Test +private import semmle.code.csharp.controlflow.ControlFlowReachability + +private Expr maybeNullExpr(Expr reason) { + G::Internal::nullValue(result) and reason = result + or + result instanceof AsExpr and reason = result + or + result.(AssignExpr).getRValue() = maybeNullExpr(reason) + or + result.(CastExpr).getExpr() = maybeNullExpr(reason) + or + result = + any(ConditionalExpr ce | + ce.getThen() = maybeNullExpr(reason) + or + ce.getElse() = maybeNullExpr(reason) + ) + or + result.(NullCoalescingExpr).getRightOperand() = maybeNullExpr(reason) +} /** An expression that may be `null`. */ class MaybeNullExpr extends Expr { - MaybeNullExpr() { - G::Internal::nullValue(this) - or - this instanceof AsExpr - or - this.(AssignExpr).getRValue() instanceof MaybeNullExpr - or - this.(Cast).getExpr() instanceof MaybeNullExpr - or - this = - any(ConditionalExpr ce | - ce.getThen() instanceof MaybeNullExpr - or - ce.getElse() instanceof MaybeNullExpr - ) - or - this.(NullCoalescingExpr).getRightOperand() instanceof MaybeNullExpr - } + MaybeNullExpr() { this = maybeNullExpr(_) } } /** An expression that is always `null`. */ @@ -116,45 +117,10 @@ private predicate nonNullDef(Ssa::ExplicitDefinition def) { } /** - * Holds if the `i`th node of basic block `bb` is a dereference `d` of SSA - * definition `def`. + * Holds if `node` is a dereference `d` of SSA definition `def`. */ -private predicate dereferenceAt(BasicBlock bb, int i, Ssa::Definition def, Dereference d) { - d = def.getAReadAtNode(bb.getNode(i)) -} - -/** - * Holds if `e` having abstract value `vExpr` implies that SSA definition `def` - * has abstract value `vDef`. - */ -private predicate exprImpliesSsaDef( - G::Guard e, G::AbstractValue vExpr, Ssa::Definition def, G::AbstractValue vDef -) { - vExpr = e.getAValue() and - vExpr = vDef and - ( - e = def.getARead() - or - e = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess() - ) - or - exists(Expr e0, G::AbstractValue vExpr0 | - exprImpliesSsaDef(e0, vExpr0, def, vDef) and - G::Internal::impliesStep(e, vExpr, e0, vExpr0) - ) -} - -/** - * Gets an element that tests whether a given SSA definition, `def`, is - * `null` or not. - * - * If the returned element takes the `s` branch, then `def` is guaranteed to be - * `null` if `nv.isNull()` holds, and non-`null` otherwise. - */ -private ControlFlowElement getANullCheck( - Ssa::Definition def, SuccessorTypes::ConditionalSuccessor s, NullValue nv -) { - exists(Expr e, G::AbstractValue v | v.branch(result, s, e) | exprImpliesSsaDef(e, v, def, nv)) +private predicate dereferenceAt(ControlFlow::Node node, Ssa::Definition def, Dereference d) { + d = def.getAReadAtNode(node) } private predicate isMaybeNullArgument(Ssa::ImplicitParameterDefinition def, MaybeNullExpr arg) { @@ -219,15 +185,17 @@ private predicate isNullDefaultArgument(Ssa::ImplicitParameterDefinition def, Al } /** Holds if `def` is an SSA definition that may be `null`. */ -private predicate defMaybeNull(Ssa::Definition def, string msg, Element reason) { +private predicate defMaybeNull( + Ssa::Definition def, ControlFlow::Node node, string msg, Element reason +) { not nonNullDef(def) and ( // A variable compared to `null` might be `null` exists(G::DereferenceableExpr de | de = def.getARead() | - reason = de.getANullCheck(_, true) and + de.guardSuggestsMaybeNull(reason) and msg = "as suggested by $@ null check" and + node = def.getControlFlowNode() and not de = any(Ssa::PhiNode phi).getARead() and - strictcount(Element e | e = any(Ssa::Definition def0 | de = def0.getARead()).getElement()) = 1 and // Don't use a check as reason if there is a `null` assignment // or argument not def.(Ssa::ExplicitDefinition).getADefinition().getSource() instanceof MaybeNullExpr and @@ -236,23 +204,27 @@ private predicate defMaybeNull(Ssa::Definition def, string msg, Element reason) or // A parameter might be `null` if there is a `null` argument somewhere isMaybeNullArgument(def, reason) and + node = def.getControlFlowNode() and ( if reason instanceof AlwaysNullExpr then msg = "because of $@ null argument" else msg = "because of $@ potential null argument" ) or - isNullDefaultArgument(def, reason) and msg = "because the parameter has a null default value" + isNullDefaultArgument(def, reason) and + node = def.getControlFlowNode() and + msg = "because the parameter has a null default value" or // If the source of a variable is `null` then the variable may be `null` exists(AssignableDefinition adef | adef = def.(Ssa::ExplicitDefinition).getADefinition() | - adef.getSource() instanceof MaybeNullExpr and + adef.getSource() = maybeNullExpr(node.getAstNode()) and reason = adef.getExpr() and msg = "because of $@ assignment" ) or // A variable of nullable type may be null - exists(Dereference d | dereferenceAt(_, _, def, d) | + exists(Dereference d | dereferenceAt(_, def, d) | + node = def.getControlFlowNode() and d.hasNullableType() and not def instanceof Ssa::PhiNode and reason = def.getSourceVariable().getAssignable() and @@ -261,219 +233,6 @@ private predicate defMaybeNull(Ssa::Definition def, string msg, Element reason) ) } -pragma[noinline] -private predicate sourceVariableMaybeNull(Ssa::SourceVariable v) { - defMaybeNull(v.getAnSsaDefinition(), _, _) -} - -pragma[noinline] -private predicate defNullImpliesStep0( - Ssa::SourceVariable v, Ssa::Definition def1, BasicBlock bb1, BasicBlock bb2 -) { - sourceVariableMaybeNull(v) and - def1.getSourceVariable() = v and - def1.isLiveAtEndOfBlock(bb1) and - bb2 = bb1.getASuccessor() -} - -/** - * Holds if `def1` being `null` in basic block `bb1` implies that `def2` might - * be `null` in basic block `bb2`. The SSA definitions share the same source - * variable. - */ -private predicate defNullImpliesStep( - Ssa::Definition def1, BasicBlock bb1, Ssa::Definition def2, BasicBlock bb2 -) { - exists(Ssa::SourceVariable v | defNullImpliesStep0(v, def1, bb1, bb2) | - def2.(Ssa::PhiNode).getAnInput() = def1 and - bb2 = def2.getBasicBlock() - or - def2 = def1 and - not exists(Ssa::PhiNode phi | - phi.getSourceVariable() = v and - bb2 = phi.getBasicBlock() - ) - ) and - not exists(SuccessorTypes::ConditionalSuccessor s, NullValue nv | - bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode() - | - bb2 = bb1.getASuccessorByType(s) and - nv.isNonNull() - ) -} - -/** - * The transitive closure of `defNullImpliesStep()` originating from `defMaybeNull()`. - * That is, those basic blocks for which the SSA definition is suspected of being `null`. - */ -private predicate defMaybeNullInBlock(Ssa::Definition def, BasicBlock bb) { - defMaybeNull(def, _, _) and - bb = def.getBasicBlock() - or - exists(BasicBlock mid, Ssa::Definition midDef | defMaybeNullInBlock(midDef, mid) | - defNullImpliesStep(midDef, mid, def, bb) - ) -} - -/** - * Holds if `v` is a source variable that might reach a potential `null` - * dereference. - */ -private predicate nullDerefCandidateVariable(Ssa::SourceVariable v) { - exists(Ssa::Definition def, BasicBlock bb | dereferenceAt(bb, _, def, _) | - defMaybeNullInBlock(def, bb) and - v = def.getSourceVariable() - ) -} - -private predicate succStep(PathNode pred, Ssa::Definition def, BasicBlock bb) { - defNullImpliesStep(pred.getSsaDefinition(), pred.getBasicBlock(), def, bb) -} - -private predicate succNullArgument(SourcePathNode pred, Ssa::Definition def, BasicBlock bb) { - pred = TSourcePathNode(def, _, _, true) and - bb = def.getBasicBlock() -} - -private predicate succSourceSink(SourcePathNode source, Ssa::Definition def, BasicBlock bb) { - source = TSourcePathNode(def, _, _, false) and - bb = def.getBasicBlock() -} - -private newtype TPathNode = - TSourcePathNode(Ssa::Definition def, string msg, Element reason, boolean isNullArgument) { - nullDerefCandidateVariable(def.getSourceVariable()) and - defMaybeNull(def, msg, reason) and - if isMaybeNullArgument(def, reason) then isNullArgument = true else isNullArgument = false - } or - TInternalPathNode(Ssa::Definition def, BasicBlock bb) { - succStep(_, def, bb) - or - succNullArgument(_, def, bb) - } or - TSinkPathNode(Ssa::Definition def, BasicBlock bb, int i, Dereference d) { - dereferenceAt(bb, i, def, d) and - ( - succStep(_, def, bb) - or - succNullArgument(_, def, bb) - or - succSourceSink(_, def, bb) - ) - } - -/** - * An SSA definition, which may be `null`, augmented with at basic block which can - * be reached without passing through a `null` check. - */ -abstract class PathNode extends TPathNode { - /** Gets the SSA definition. */ - abstract Ssa::Definition getSsaDefinition(); - - /** Gets the basic block that can be reached without passing through a `null` check. */ - abstract BasicBlock getBasicBlock(); - - /** Gets another node that can be reached from this node. */ - abstract PathNode getASuccessor(); - - /** Gets a textual representation of this node. */ - abstract string toString(); - - /** Gets the location of this node. */ - abstract Location getLocation(); -} - -private class SourcePathNode extends PathNode, TSourcePathNode { - private Ssa::Definition def; - private string msg; - private Element reason; - private boolean isNullArgument; - - SourcePathNode() { this = TSourcePathNode(def, msg, reason, isNullArgument) } - - override Ssa::Definition getSsaDefinition() { result = def } - - override BasicBlock getBasicBlock() { - isNullArgument = false and - result = def.getBasicBlock() - } - - string getMessage() { result = msg } - - Element getReason() { result = reason } - - override PathNode getASuccessor() { - succStep(this, result.getSsaDefinition(), result.getBasicBlock()) - or - succNullArgument(this, result.getSsaDefinition(), result.getBasicBlock()) - or - result instanceof SinkPathNode and - succSourceSink(this, result.getSsaDefinition(), result.getBasicBlock()) - } - - override string toString() { - if isNullArgument = true then result = reason.toString() else result = def.toString() - } - - override Location getLocation() { - if isNullArgument = true then result = reason.getLocation() else result = def.getLocation() - } -} - -private class InternalPathNode extends PathNode, TInternalPathNode { - private Ssa::Definition def; - private BasicBlock bb; - - InternalPathNode() { this = TInternalPathNode(def, bb) } - - override Ssa::Definition getSsaDefinition() { result = def } - - override BasicBlock getBasicBlock() { result = bb } - - override PathNode getASuccessor() { - succStep(this, result.getSsaDefinition(), result.getBasicBlock()) - } - - override string toString() { result = bb.getFirstNode().toString() } - - override Location getLocation() { result = bb.getFirstNode().getLocation() } -} - -private class SinkPathNode extends PathNode, TSinkPathNode { - private Ssa::Definition def; - private BasicBlock bb; - private int i; - private Dereference d; - - SinkPathNode() { this = TSinkPathNode(def, bb, i, d) } - - override Ssa::Definition getSsaDefinition() { result = def } - - override BasicBlock getBasicBlock() { result = bb } - - override PathNode getASuccessor() { none() } - - Dereference getDereference() { result = d } - - override string toString() { result = d.toString() } - - override Location getLocation() { result = d.getLocation() } -} - -/** - * Provides the query predicates needed to include a graph in a path-problem query - * for `Dereference::is[First]MaybeNull()`. - */ -module PathGraph { - query predicate nodes(PathNode n) { n.getASuccessor*() instanceof SinkPathNode } - - query predicate edges(PathNode pred, PathNode succ) { - nodes(pred) and - nodes(succ) and - succ = pred.getASuccessor() - } -} - private Ssa::Definition getAPseudoInput(Ssa::Definition def) { result = def.(Ssa::PhiNode).getAnInput() } @@ -487,21 +246,44 @@ private Ssa::Definition getAnUltimateDefinition(Ssa::Definition def) { /** * Holds if SSA definition `def` can reach a read at `cfn`, without passing - * through an intermediate dereference that always (`always = true`) or - * maybe (`always = false`) throws a null reference exception. + * through an intermediate dereference that always throws a null reference + * exception. */ -private predicate defReaches(Ssa::Definition def, ControlFlow::Node cfn, boolean always) { - exists(def.getAFirstReadAtNode(cfn)) and - (always = true or always = false) +private predicate defReaches(Ssa::Definition def, ControlFlow::Node cfn) { + exists(def.getAFirstReadAtNode(cfn)) or - exists(ControlFlow::Node mid | defReaches(def, mid, always) | + exists(ControlFlow::Node mid | defReaches(def, mid) | SsaImpl::adjacentReadPairSameVar(_, mid, cfn) and - not mid = - any(Dereference d | - if always = true - then d.isAlwaysNull(def.getSourceVariable()) - else d.isMaybeNull(def, _, _, _, _) - ).getAControlFlowNode() + not mid = any(Dereference d | d.isAlwaysNull(def.getSourceVariable())).getAControlFlowNode() + ) +} + +private module NullnessConfig implements ControlFlowReachability::ConfigSig { + predicate source(ControlFlow::Node node, Ssa::Definition def) { defMaybeNull(def, node, _, _) } + + predicate sink(ControlFlow::Node node, Ssa::Definition def) { + exists(Dereference d | + dereferenceAt(node, def, d) and + not d instanceof NonNullExpr + ) + } + + predicate barrierValue(G::GuardValue gv) { gv.isNullness(false) } + + predicate uncertainFlow() { none() } +} + +private module NullnessFlow = ControlFlowReachability::Flow; + +predicate maybeNullDeref(Dereference d, Ssa::SourceVariable v, string msg, Element reason) { + exists( + Ssa::Definition origin, Ssa::Definition ssa, ControlFlow::Node src, ControlFlow::Node sink + | + defMaybeNull(origin, src, msg, reason) and + NullnessFlow::flow(src, origin, sink, ssa) and + ssa.getSourceVariable() = v and + dereferenceAt(sink, ssa, d) and + not d.isAlwaysNull(v) ) } @@ -584,9 +366,9 @@ class Dereference extends G::DereferenceableExpr { ( forex(Ssa::Definition def0 | this = def0.getARead() | this.isAlwaysNull0(def0)) or - exists(NullValue nv | + exists(G::GuardValue nv | this.(G::GuardedExpr).mustHaveValue(nv) and - nv.isNull() + nv.isNullValue() ) ) and not this instanceof G::NullGuardedExpr @@ -599,33 +381,6 @@ class Dereference extends G::DereferenceableExpr { */ predicate isFirstAlwaysNull(Ssa::SourceVariable v) { this.isAlwaysNull(v) and - defReaches(v.getAnSsaDefinition(), this.getAControlFlowNode(), true) - } - - /** - * Holds if this expression dereferences SSA definition `def`, which may - * be `null`. - */ - predicate isMaybeNull( - Ssa::Definition def, SourcePathNode source, SinkPathNode sink, string msg, Element reason - ) { - source.getASuccessor*() = sink and - msg = source.getMessage() and - reason = source.getReason() and - def = sink.getSsaDefinition() and - this = sink.getDereference() and - not this.isAlwaysNull(def.getSourceVariable()) - } - - /** - * Holds if this expression dereferences SSA definition `def`, which may - * be `null`, and this expression can be reached from `def` without passing - * through another such dereference. - */ - predicate isFirstMaybeNull( - Ssa::Definition def, SourcePathNode source, SinkPathNode sink, string msg, Element reason - ) { - this.isMaybeNull(def, source, sink, msg, reason) and - defReaches(def, this.getAControlFlowNode(), false) + defReaches(v.getAnSsaDefinition(), this.getAControlFlowNode()) } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index f17317af83b..e8180201b9a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -163,13 +163,11 @@ module Ssa { * (`ImplicitDefinition`), or a phi node (`PhiNode`). */ class Definition extends SsaImpl::Definition { - /** - * Gets the control flow node of this SSA definition, if any. Phi nodes are - * examples of SSA definitions without a control flow node, as they are - * modeled at index `-1` in the relevant basic block. - */ + /** Gets the control flow node of this SSA definition. */ final ControlFlow::Node getControlFlowNode() { - exists(ControlFlow::BasicBlock bb, int i | this.definesAt(_, bb, i) | result = bb.getNode(i)) + exists(ControlFlow::BasicBlock bb, int i | this.definesAt(_, bb, i) | + result = bb.getNode(0.maximum(i)) + ) } /** @@ -451,10 +449,9 @@ module Ssa { * An SSA definition that corresponds to an explicit assignable definition. */ class ExplicitDefinition extends Definition, SsaImpl::WriteDefinition { - SourceVariable sv; AssignableDefinition ad; - ExplicitDefinition() { SsaImpl::explicitDefinition(this, sv, ad) } + ExplicitDefinition() { SsaImpl::explicitDefinition(this, _, ad) } /** * Gets an underlying assignable definition. The result is always unique, diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll index ec1b5a0188e..747cf790d91 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/BaseSSA.qll @@ -5,6 +5,7 @@ import csharp */ module BaseSsa { private import AssignableDefinitions + private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import codeql.ssa.Ssa as SsaImplCommon /** @@ -27,7 +28,7 @@ module BaseSsa { private predicate implicitEntryDef( Callable c, ControlFlow::BasicBlocks::EntryBlock bb, SsaInput::SourceVariable v ) { - exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry | + exists(ControlFlow::BasicBlocks::EntryBlock entry | c = entry.getCallable() and // In case `c` has multiple bodies, we want each body to get its own implicit // entry definition. In case `c` doesn't have multiple bodies, the line below @@ -42,22 +43,12 @@ module BaseSsa { ) } - private module SsaInput implements SsaImplCommon::InputSig { + private module SsaInput implements SsaImplCommon::InputSig { private import semmle.code.csharp.controlflow.internal.PreSsa - class BasicBlock = ControlFlow::BasicBlock; - - class ControlFlowNode = ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - class SourceVariable = PreSsa::SimpleLocalScopeVariable; - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(ControlFlow::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignableDefinition def | definitionAt(def, bb, i, v) and if def.isCertain() then certain = true else certain = false @@ -68,7 +59,7 @@ module BaseSsa { certain = true } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(ControlFlow::BasicBlock bb, int i, SourceVariable v, boolean certain) { exists(AssignableRead read | read.getAControlFlowNode() = bb.getNode(i) and read.getTarget() = v and @@ -77,7 +68,7 @@ module BaseSsa { } } - private module SsaImpl = SsaImplCommon::Make; + private module SsaImpl = SsaImplCommon::Make; class Definition extends SsaImpl::Definition { final AssignableRead getARead() { @@ -114,7 +105,7 @@ module BaseSsa { override Location getLocation() { result = this.getDefinition().getLocation() or - exists(Callable c, SsaInput::BasicBlock bb, SsaInput::SourceVariable v | + exists(Callable c, ControlFlow::BasicBlock bb, SsaInput::SourceVariable v | this.definesAt(v, bb, -1) and implicitEntryDef(c, bb, v) and result = c.getLocation() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index ff2bf709251..4f7f0141da2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -264,6 +264,7 @@ predicate hasNodePath(ControlFlowReachabilityConfiguration conf, ExprNode n1, No /** Provides logic related to captured variables. */ module VariableCapture { private import codeql.dataflow.VariableCapture as Shared + private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private predicate closureFlowStep(ControlFlow::Nodes::ExprNode e1, ControlFlow::Nodes::ExprNode e2) { e1 = LocalFlow::getALastEvalNode(e2) @@ -275,24 +276,15 @@ module VariableCapture { ) } - private module CaptureInput implements Shared::InputSig { + private module CaptureInput implements Shared::InputSig { private import csharp as Cs private import semmle.code.csharp.controlflow.ControlFlowGraph as Cfg - private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import TaintTrackingPrivate as TaintTrackingPrivate - class BasicBlock extends BasicBlocks::BasicBlock { - Callable getEnclosingCallable() { result = super.getCallable() } + Callable basicBlockGetEnclosingCallable(BasicBlocks::BasicBlock bb) { + result = bb.getCallable() } - class ControlFlowNode = Cfg::ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result = bb.getImmediateDominator() - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - private predicate thisAccess(ControlFlow::Node cfn, InstanceCallable c) { ThisFlow::thisAccessExpr(cfn.getAstNode()) and cfn.getEnclosingCallable().getEnclosingCallable*() = c @@ -359,7 +351,7 @@ module VariableCapture { } class Expr extends ControlFlow::Node { - predicate hasCfgNode(BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(BasicBlocks::BasicBlock bb, int i) { this = bb.getNode(i) } } class VariableWrite extends Expr { @@ -411,7 +403,7 @@ module VariableCapture { class ClosureExpr = CaptureInput::ClosureExpr; - module Flow = Shared::Flow; + module Flow = Shared::Flow; private Flow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() @@ -2591,12 +2583,10 @@ class NodeRegion instanceof ControlFlow::BasicBlock { * Holds if the nodes in `nr` are unreachable when the call context is `call`. */ predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { - exists( - ExplicitParameterNode paramNode, Guard guard, ControlFlow::SuccessorTypes::BooleanSuccessor bs - | - viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and + exists(ExplicitParameterNode paramNode, Guard guard, GuardValue val | + viableConstantParamArg(paramNode, val.getDualValue(), call) and paramNode.getSsaDefinition().getARead() = guard and - guard.controlsBlock(nr, bs, _) + guard.valueControls(nr, val) ) } @@ -2914,32 +2904,19 @@ class CastNode extends Node { class DataFlowExpr = Expr; -/** Holds if `e` is an expression that always has the same Boolean value `val`. */ -private predicate constantBooleanExpr(Expr e, boolean val) { - e = any(AbstractValues::BooleanValue bv | val = bv.getValue()).getAnExpr() - or - exists(Ssa::ExplicitDefinition def, Expr src | - e = def.getARead() and - src = def.getADefinition().getSource() and - constantBooleanExpr(src, val) - ) -} +/** An argument that always has the same value. */ +private class ConstantArgumentNode extends ExprNode { + ConstantArgumentNode() { Guards::InternalUtil::exprHasValue(this.(ArgumentNode).asExpr(), _) } -/** An argument that always has the same Boolean value. */ -private class ConstantBooleanArgumentNode extends ExprNode { - ConstantBooleanArgumentNode() { constantBooleanExpr(this.(ArgumentNode).asExpr(), _) } - - /** Gets the Boolean value of this expression. */ - boolean getBooleanValue() { constantBooleanExpr(this.getExpr(), result) } + /** Gets the value of this expression. */ + GuardValue getValue() { Guards::InternalUtil::exprHasValue(this.getExpr(), result) } } pragma[noinline] -private predicate viableConstantBooleanParamArg( - ParameterNode paramNode, boolean b, DataFlowCall call -) { - exists(ConstantBooleanArgumentNode arg | +private predicate viableConstantParamArg(ParameterNode paramNode, GuardValue val, DataFlowCall call) { + exists(ConstantArgumentNode arg | viableParamArg(call, paramNode, arg) and - b = arg.getBooleanValue() + val = arg.getValue() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index b21d5e2c3ef..4023d6c4597 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -173,7 +173,7 @@ abstract class NonLocalJumpNode extends Node { * For example, the guard `g` might be a call `isSafe(x)` and the expression `e` * the argument `x`. */ -signature predicate guardChecksSig(Guard g, Expr e, AbstractValue v); +signature predicate guardChecksSig(Guard g, Expr e, GuardValue v); /** * Provides a set of barrier nodes for a guard that validates an expression. @@ -190,7 +190,7 @@ module BarrierGuard { SsaFlow::asNode(result) = SsaImpl::DataFlowIntegration::BarrierGuard::getABarrierNode() or - exists(Guard g, Expr e, AbstractValue v | + exists(Guard g, Expr e, GuardValue v | guardChecks(g, e, v) and g.controlsNode(result.getControlFlowNode(), e, v) ) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 90db68f7c93..3ee16f21489 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -183,7 +183,7 @@ private module TypesInput implements Impl::Private::TypesInputSig { ) } - DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponent sc) { + DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } @@ -195,7 +195,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { sc = viableCallable(result).asSummarizedCallable() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index d1490c84916..70fda2b1296 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -6,17 +6,10 @@ import csharp private import codeql.ssa.Ssa as SsaImplCommon private import AssignableDefinitions private import semmle.code.csharp.controlflow.internal.PreSsa +private import semmle.code.csharp.controlflow.BasicBlocks as BasicBlocks private import semmle.code.csharp.controlflow.Guards as Guards -private module SsaInput implements SsaImplCommon::InputSig { - class BasicBlock = ControlFlow::BasicBlock; - - class ControlFlowNode = ControlFlow::Node; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = Ssa::SourceVariable; /** @@ -25,7 +18,7 @@ private module SsaInput implements SsaImplCommon::InputSig { * * This includes implicit writes via calls. */ - predicate variableWrite(BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { + predicate variableWrite(ControlFlow::BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { variableWriteDirect(bb, i, v, certain) or variableWriteQualifier(bb, i, v, certain) @@ -39,7 +32,7 @@ private module SsaInput implements SsaImplCommon::InputSig { * * This includes implicit reads via calls. */ - predicate variableRead(BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { + predicate variableRead(ControlFlow::BasicBlock bb, int i, Ssa::SourceVariable v, boolean certain) { variableReadActual(bb, i, v) and certain = true or @@ -48,7 +41,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl class Definition = Impl::Definition; @@ -150,7 +143,7 @@ private module SourceVariableImpl { } /** - * Gets an `out`/`ref` definition of the same source variable as the `out`/`ref` + * Gets an `out`/`ref` definition of the same source variable `v` as the `out`/`ref` * definition `def`, belonging to the same call, at a position after `def`. */ OutRefDefinition getASameOutRefDefAfter(Ssa::SourceVariable v, OutRefDefinition def) { @@ -729,7 +722,7 @@ private predicate variableReadPseudo(ControlFlow::BasicBlock bb, int i, Ssa::Sou pragma[noinline] deprecated private predicate adjacentDefRead( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2, + Definition def, ControlFlow::BasicBlock bb1, int i1, ControlFlow::BasicBlock bb2, int i2, SsaInput::SourceVariable v ) { Impl::adjacentDefRead(def, bb1, i1, bb2, i2) and @@ -737,8 +730,8 @@ deprecated private predicate adjacentDefRead( } deprecated private predicate adjacentDefReachesRead( - Definition def, SsaInput::SourceVariable v, SsaInput::BasicBlock bb1, int i1, - SsaInput::BasicBlock bb2, int i2 + Definition def, SsaInput::SourceVariable v, ControlFlow::BasicBlock bb1, int i1, + ControlFlow::BasicBlock bb2, int i2 ) { adjacentDefRead(def, bb1, i1, bb2, i2, v) and ( @@ -747,7 +740,7 @@ deprecated private predicate adjacentDefReachesRead( SsaInput::variableRead(bb1, i1, v, true) ) or - exists(SsaInput::BasicBlock bb3, int i3 | + exists(ControlFlow::BasicBlock bb3, int i3 | adjacentDefReachesRead(def, v, bb1, i1, bb3, i3) and SsaInput::variableRead(bb3, i3, _, false) and Impl::adjacentDefRead(def, bb3, i3, bb2, i2) @@ -755,7 +748,7 @@ deprecated private predicate adjacentDefReachesRead( } deprecated private predicate adjacentDefReachesUncertainRead( - Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 + Definition def, ControlFlow::BasicBlock bb1, int i1, ControlFlow::BasicBlock bb2, int i2 ) { exists(SsaInput::SourceVariable v | adjacentDefReachesRead(def, v, bb1, i1, bb2, i2) and @@ -766,12 +759,12 @@ deprecated private predicate adjacentDefReachesUncertainRead( /** Same as `lastRefRedef`, but skips uncertain reads. */ pragma[nomagic] deprecated private predicate lastRefSkipUncertainReads( - Definition def, SsaInput::BasicBlock bb, int i + Definition def, ControlFlow::BasicBlock bb, int i ) { Impl::lastRef(def, bb, i) and not SsaInput::variableRead(bb, i, def.getSourceVariable(), false) or - exists(SsaInput::BasicBlock bb0, int i0 | + exists(ControlFlow::BasicBlock bb0, int i0 | Impl::lastRef(def, bb0, i0) and adjacentDefReachesUncertainRead(def, bb, i, bb0, i0) ) @@ -825,8 +818,8 @@ private module Cached { } cached - predicate implicitEntryDefinition(ControlFlow::ControlFlow::BasicBlock bb, Ssa::SourceVariable v) { - exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry, Callable c | + predicate implicitEntryDefinition(ControlFlow::BasicBlock bb, Ssa::SourceVariable v) { + exists(ControlFlow::BasicBlocks::EntryBlock entry, Callable c | c = entry.getCallable() and // In case `c` has multiple bodies, we want each body to get its own implicit // entry definition. In case `c` doesn't have multiple bodies, the line below @@ -970,7 +963,7 @@ private module Cached { DataFlowIntegrationImpl::localMustFlowStep(v, nodeFrom, nodeTo) } - signature predicate guardChecksSig(Guards::Guard g, Expr e, Guards::AbstractValue v); + signature predicate guardChecksSig(Guards::Guard g, Expr e, Guards::GuardValue v); cached // nothing is actually cached module BarrierGuard { @@ -978,9 +971,9 @@ private module Cached { DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, DataFlowIntegrationInput::GuardValue branch ) { - exists(Guards::AbstractValues::BooleanValue v | + exists(Guards::GuardValue v | guardChecks(g, e.getAstNode(), v) and - branch = v.getValue() + branch = v.asBooleanValue() ) } @@ -1052,9 +1045,9 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu * from `bb1` to `bb2`. */ predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { - exists(ControlFlow::SuccessorTypes::ConditionalSuccessor s | + exists(ControlFlow::ConditionalSuccessor s | this.getAControlFlowNode() = bb1.getLastNode() and - bb2 = bb1.getASuccessorByType(s) and + bb2 = bb1.getASuccessor(s) and s.getValue() = branch ) } @@ -1071,7 +1064,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ predicate guardDirectlyControlsBlock(Guard guard, ControlFlow::BasicBlock bb, GuardValue branch) { - exists(ConditionBlock conditionBlock, ControlFlow::SuccessorTypes::ConditionalSuccessor s | + exists(ConditionBlock conditionBlock, ControlFlow::ConditionalSuccessor s | guard.getAControlFlowNode() = conditionBlock.getLastNode() and s.getValue() = branch and conditionBlock.edgeDominates(bb, s) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index b7681994e2c..3146720efe8 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -29,7 +29,10 @@ predicate defaultTaintSanitizer(DataFlow::Node node) { * of `c` at sinks and inputs to additional taint steps. */ bindingset[node] -predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { none() } +predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { + exists(node) and + c.isElement() +} private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityConfiguration { LocalTaintExprStepConfiguration() { this = "LocalTaintExprStepConfiguration" } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll index 1be94669951..71d177a48bb 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/RangeUtils.qll @@ -10,8 +10,6 @@ private module Impl { private import semmle.code.csharp.controlflow.Guards as G private import ControlFlowReachability - private class BooleanValue = G::AbstractValues::BooleanValue; - private class ExprNode = ControlFlow::Nodes::ExprNode; private class ExprChildReachability extends ControlFlowReachabilityConfiguration { @@ -93,7 +91,7 @@ private module Impl { /** * Holds if basic block `bb` is guarded by this guard having value `v`. */ - predicate controlsBasicBlock(ControlFlow::BasicBlock bb, G::AbstractValue v) { + predicate controlsBasicBlock(ControlFlow::BasicBlock bb, G::GuardValue v) { super.controlsBasicBlock(bb, v) } @@ -111,19 +109,6 @@ private module Impl { } } - private Guard eqFlowCondAbs( - Definition def, ExprNode e, int delta, boolean isEq, G::AbstractValue v - ) { - exists(boolean eqpolarity | - result.isEquality(ssaRead(def, delta), e, eqpolarity) and - eqpolarity.booleanXor(v.(BooleanValue).getValue()).booleanNot() = isEq - ) - or - exists(G::AbstractValue v0 | - G::Internal::impliesStep(result, v, eqFlowCondAbs(def, e, delta, isEq, v0), v0) - ) - } - /** * Gets a condition that tests whether `def` equals `e + delta`. * @@ -132,9 +117,10 @@ private module Impl { * - `isEq = false` : `def != e + delta` */ Guard eqFlowCond(Definition def, ExprNode e, int delta, boolean isEq, boolean testIsTrue) { - exists(BooleanValue v | - result = eqFlowCondAbs(def, e, delta, isEq, v) and - testIsTrue = v.getValue() + exists(boolean eqpolarity | + result.isEquality(ssaRead(def, delta), e, eqpolarity) and + testIsTrue = [false, true] and + eqpolarity.booleanXor(testIsTrue).booleanNot() = isEq ) } @@ -142,7 +128,7 @@ private module Impl { * Holds if `guard` controls the position `controlled` with the value `testIsTrue`. */ predicate guardControlsSsaRead(Guard guard, SsaReadPosition controlled, boolean testIsTrue) { - exists(BooleanValue b | b.getValue() = testIsTrue | + exists(G::GuardValue b | b.asBooleanValue() = testIsTrue | guard.controlsBasicBlock(controlled.(SsaReadPositionBlock).getBlock(), b) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll index 7de6c30eb13..c61ad0f2a2a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dispatch/Dispatch.qll @@ -270,6 +270,14 @@ private module Internal { hasOverrider(t, c) } + /** + * For `base` expressions, the extractor provides the type of the base + * class instead of the derived class; this predicate provides the latter. + */ + private Type getBaseAdjustedType(BaseAccess base) { + result = base.getEnclosingCallable().getDeclaringType() + } + abstract private class DispatchOverridableCall extends DispatchCallImpl { pragma[noinline] OverridableCallable getAStaticTargetExt() { @@ -360,7 +368,12 @@ private module Internal { private predicate contextArgHasType(DispatchCall ctx, Type t, boolean isExact) { exists(Expr arg, int i | this.relevantContext(ctx, i) and - t = getAPossibleType(arg, isExact) + ( + t = getBaseAdjustedType(arg) and isExact = false + or + not exists(getBaseAdjustedType(arg)) and + t = getAPossibleType(arg, isExact) + ) | ctx.getArgument(i) = arg or @@ -725,9 +738,7 @@ private module Internal { Type getType(boolean isExact) { result = this.getType() and - if - this instanceof ObjectCreation or - this instanceof BaseAccess + if this instanceof ObjectCreation or this instanceof BaseAccess then isExact = true else isExact = false } diff --git a/csharp/ql/lib/semmle/code/csharp/internal/Overlay.qll b/csharp/ql/lib/semmle/code/csharp/internal/Overlay.qll new file mode 100644 index 00000000000..a44d82c92ad --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/internal/Overlay.qll @@ -0,0 +1,166 @@ +/** + * Defines entity discard predicates for C# overlay analysis. + */ + +/** + * Holds always for the overlay variant and never for the base variant. + * This local predicate is used to define local predicates that behave + * differently for the base and overlay variant. + */ +overlay[local] +predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +overlay[local] +private string getLocationFilePath(@location_default loc) { + exists(@file file | locations_default(loc, file, _, _, _, _) | files(file, result)) +} + +overlay[local] +private class DiscardableEntityBase extends @locatable { + /** Gets the path to the file in which this element occurs. */ + abstract string getFilePath(); + + /** Holds if this element exists in the base variant. */ + predicate existsInBase() { not isOverlay() } + + /** Holds if this element exists in the overlay variant. */ + predicate existsInOverlay() { isOverlay() } + + /** Gets a textual representation of this discardable element. */ + string toString() { none() } +} + +/** + * A class of elements that can be discarded from the base. + */ +overlay[local] +private class DiscardableEntity extends DiscardableEntityBase { + /** Gets the path to the file in which this element occurs. */ + override string getFilePath() { + exists(@location_default loc | result = getLocationFilePath(loc) | + expr_location(this, loc) or + stmt_location(this, loc) or + using_directive_location(this, loc) or + namespace_declaration_location(this, loc) or + preprocessor_directive_location(this, loc) or + type_location(this, loc) or + attribute_location(this, loc) or + type_parameter_constraints_location(this, loc) or + property_location(this, loc) or + indexer_location(this, loc) or + accessor_location(this, loc) or + event_location(this, loc) or + event_accessor_location(this, loc) or + operator_location(this, loc) or + method_location(this, loc) or + constructor_location(this, loc) or + destructor_location(this, loc) or + field_location(this, loc) or + localvar_location(this, loc) or + param_location(this, loc) or + type_mention_location(this, loc) or + commentline_location(this, loc) or + commentblock_location(this, loc) or + diagnostics(this, _, _, _, _, loc) or + extractor_messages(this, _, _, _, _, loc, _) + ) + } +} + +/** + * A class of C# database entities that use `*` IDs. + * The rest use named TRAP IDs. + */ +overlay[local] +private class StarEntity = + @expr or @stmt or @diagnostic or @extractor_message or @using_directive or @type_mention or + @local_variable; + +overlay[discard_entity] +private predicate discardStarEntity(@locatable e) { + e instanceof StarEntity and + // Entities with *-ids can exist either in base or overlay, but not both. + e = + any(DiscardableEntity de | + overlayChangedFiles(de.getFilePath()) and + de.existsInBase() + ) +} + +overlay[discard_entity] +private predicate discardNamedEntity(@locatable e) { + not e instanceof StarEntity and + // Entities with named IDs can exist both in base, overlay, or both. + e = + any(DiscardableEntity de | + overlayChangedFiles(de.getFilePath()) and + not de.existsInOverlay() + ) +} + +overlay[local] +private predicate discardableLocation(@location_default loc, string path) { + not isOverlay() and + path = getLocationFilePath(loc) +} + +// Discard locations that are in changed files from the base variant. +overlay[discard_entity] +private predicate discardLocation(@location_default loc) { + exists(string path | discardableLocation(loc, path) | overlayChangedFiles(path)) +} + +/** + * A class of Xml locatables that can be discarded from the base. + */ +overlay[local] +private class DiscardableXmlEntity extends DiscardableEntityBase instanceof @xmllocatable { + /** Gets the path to the file in which this element occurs. */ + override string getFilePath() { + exists(@location_default loc | result = getLocationFilePath(loc) | xmllocations(this, loc)) + } +} + +overlay[local] +private predicate overlayXmlExtracted(string file) { + exists(DiscardableXmlEntity dxe | + dxe.existsInOverlay() and + file = dxe.getFilePath() and + not files(dxe, _) and + not xmlNs(dxe, _, _, _) + ) +} + +overlay[discard_entity] +private predicate discardXmlEntity(@xmllocatable xml) { + overlayChangedFiles(xml.(DiscardableXmlEntity).getFilePath()) + or + // The XML extractor is not incremental and may extract more + // XML files than those included in overlayChangedFiles. + overlayXmlExtracted(xml.(DiscardableXmlEntity).getFilePath()) +} + +overlay[local] +private class DiscardableAspEntity extends DiscardableEntityBase instanceof @asp_element { + /** Gets the path to the file in which this element occurs. */ + override string getFilePath() { + exists(@location_default loc | result = getLocationFilePath(loc) | asp_elements(this, _, loc)) + } +} + +overlay[local] +private predicate overlayAspExtracted(string file) { + exists(DiscardableAspEntity dae | + dae.existsInOverlay() and + file = dae.getFilePath() + ) +} + +overlay[discard_entity] +private predicate discardAspEntity(@asp_element asp) { + overlayChangedFiles(asp.(DiscardableAspEntity).getFilePath()) + or + // The ASP extractor is not incremental and may extract more + // ASP files than those included in overlayChangedFiles. + overlayAspExtracted(asp.(DiscardableAspEntity).getFilePath()) +} diff --git a/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll b/csharp/ql/lib/semmle/code/csharp/security/auth/SecureCookies.qll similarity index 85% rename from csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll rename to csharp/ql/lib/semmle/code/csharp/security/auth/SecureCookies.qll index e91ae9de538..56b6294949b 100644 --- a/csharp/ql/src/experimental/dataflow/flowsources/AuthCookie.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/auth/SecureCookies.qll @@ -1,13 +1,13 @@ /** - * Provides classes and predicates for detecting insecure cookies. + * Definitions for detecting insecure and non-HttpOnly cookies. */ -deprecated module; import csharp -import semmle.code.csharp.frameworks.microsoft.AspNetCore +private import semmle.code.csharp.frameworks.system.Web +private import semmle.code.csharp.frameworks.microsoft.AspNetCore /** - * Holds if the expression is a variable with a sensitive name. + * Holds if the expression is a sensitive string literal or a variable with a sensitive name. */ predicate isCookieWithSensitiveName(Expr cookieExpr) { exists(DataFlow::Node sink | @@ -17,7 +17,7 @@ predicate isCookieWithSensitiveName(Expr cookieExpr) { } /** - * Configuration for tracking if a variable with a sensitive name is used as an argument. + * Configuration for tracking if a sensitive string literal or a variable with a sensitive name is used as an argument. */ private module AuthCookieNameConfig implements DataFlow::ConfigSig { private predicate isAuthVariable(Expr expr) { @@ -33,7 +33,15 @@ private module AuthCookieNameConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isAuthVariable(source.asExpr()) } - predicate isSink(DataFlow::Node sink) { exists(Call c | sink.asExpr() = c.getAnArgument()) } + predicate isSink(DataFlow::Node sink) { + exists(Call c | + sink.asExpr() = c.getAnArgument() and + ( + c.getTarget() = any(MicrosoftAspNetCoreHttpResponseCookies cls).getAppendMethod() or + c.(ObjectCreation).getType() instanceof SystemWebHttpCookie + ) + ) + } } /** @@ -119,13 +127,13 @@ private signature string propertyName(); /** * Configuration for tracking if a callback used in `OnAppendCookie` sets a cookie property to `true`. + * + * ` getPropertyName` specifies the cookie property name to track. */ private module OnAppendCookieTrackingConfig implements DataFlow::ConfigSig { - /** - * Specifies the cookie property name to track. - */ + /** Source is the parameter of a callback passed to `OnAppendCookie` */ predicate isSource(DataFlow::Node source) { exists(PropertyWrite pw, Assignment delegateAssign, Callable c | pw.getProperty().getName() = "OnAppendCookie" and @@ -146,6 +154,7 @@ private module OnAppendCookieTrackingConfig impl ) } + /** Sink is a property write that sets the given property to `true`. */ predicate isSink(DataFlow::Node sink) { exists(PropertyWrite pw, Assignment a | pw.getProperty().getDeclaringType() instanceof MicrosoftAspNetCoreHttpCookieOptions and @@ -178,7 +187,7 @@ private module OnAppendCookieSecureTrackingConfig = OnAppendCookieTrackingConfig; /** - * Tracks if a callback used in `OnAppendCookie` sets `Secure` to `true`. + * Tracks if a callback used in `OnAppendCookie` sets `Secure` to `true`, and thus cookies appended to responses are secure by default. */ module OnAppendCookieSecureTracking = DataFlow::Global; @@ -191,6 +200,6 @@ private module OnAppendCookieHttpOnlyTrackingConfig = OnAppendCookieTrackingConfig; /** - * Tracks if a callback used in `OnAppendCookie` sets `HttpOnly` to `true`. + * Tracks if a callback used in `OnAppendCookie` sets `HttpOnly` to `true`, and thus cookies appended to responses are httponly by default. */ module OnAppendCookieHttpOnlyTracking = DataFlow::Global; diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll index f92bb0d2f44..53b44f873a6 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll @@ -39,6 +39,15 @@ private module ConditionalBypassConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + // from ConditionalBypass.ql + result = sink.(Sink).getSensitiveMethodCall().getLocation() + } } /** @@ -63,19 +72,10 @@ class ReverseDnsSource extends Source { } } -pragma[noinline] -private predicate conditionControlsCall0( - SensitiveExecutionMethodCall call, Expr e, ControlFlow::SuccessorTypes::BooleanSuccessor s -) { - forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() | e.controlsBlock(bb, s, _)) -} - private predicate conditionControlsCall( SensitiveExecutionMethodCall call, SensitiveExecutionMethod def, Expr e, boolean cond ) { - exists(ControlFlow::SuccessorTypes::BooleanSuccessor s | cond = s.getValue() | - conditionControlsCall0(call, e, s) - ) and + e.(Guard).directlyControls(call.getBasicBlock(), cond) and def = call.getTarget().getUnboundDeclaration() } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll index 2f20eb6e342..668e3ddcb20 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll @@ -116,7 +116,7 @@ private class WeakGuard extends Guard { ) or // Checking against `null` has no bearing on path traversal. - this.controlsNode(_, _, any(AbstractValues::NullValue nv)) + this.controlsNode(_, _, any(GuardValue nv | nv.isNullness(_))) or this.(LogicalOperation).getAnOperand() instanceof WeakGuard } @@ -130,8 +130,9 @@ private class WeakGuard extends Guard { class PathCheck extends Sanitizer { PathCheck() { // This expression is structurally replicated in a dominating guard which is not a "weak" check - exists(Guard g, AbstractValues::BooleanValue v | + exists(Guard g, GuardValue v | g = this.(GuardedDataFlowNode).getAGuard(_, v) and + exists(v.asBooleanValue()) and not g instanceof WeakGuard ) } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll index 5d9d18dcbac..5b2bd407a5c 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll @@ -59,6 +59,10 @@ private module TaintToObjectMethodTrackingConfig implements DataFlow::ConfigSig predicate isSink(DataFlow::Node sink) { sink instanceof InstanceMethodSink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { + any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -77,6 +81,10 @@ private module JsonConvertTrackingConfig implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { + any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -133,6 +141,10 @@ private module TypeNameTrackingConfig implements DataFlow::ConfigSig { ) ) } + + predicate observeDiffInformedIncrementalMode() { + none() // Only used as secondary config in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -149,6 +161,10 @@ private module TaintToConstructorOrStaticMethodTrackingConfig implements DataFlo predicate isSink(DataFlow::Node sink) { sink instanceof ConstructorOrStaticMethodSink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { + any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -186,6 +202,10 @@ private module TaintToObjectTypeTrackingConfig implements DataFlow::ConfigSig { oc.getObjectType() instanceof StrongTypeDeserializer ) } + + predicate observeDiffInformedIncrementalMode() { + none() // only used as secondary config in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -210,6 +230,10 @@ private module WeakTypeCreationToUsageTrackingConfig implements DataFlow::Config sink.asExpr() = mc.getQualifier() ) } + + predicate observeDiffInformedIncrementalMode() { + none() // only used as secondary config in UnsafeDeserializationUntrustedInput.ql + } } /** @@ -850,7 +874,7 @@ private predicate isStrongTypeFsPicklerCall(MethodCall mc, Method m) { ( m instanceof FsPicklerSerializerClassDeserializeMethod or m instanceof FsPicklerSerializerClassDeserializeSequenceMethod or - m instanceof FsPicklerSerializerClasDeserializeSiftedMethod or + m instanceof FsPicklerSerializerClassDeserializeSiftedMethod or m instanceof FsPicklerSerializerClassUnPickleMethod or m instanceof FsPicklerSerializerClassUnPickleSiftedMethod or m instanceof CsPicklerSerializerClassDeserializeMethod or diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll index b095305742d..15ba99aedf0 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UrlRedirectQuery.qll @@ -111,7 +111,7 @@ class HttpServerTransferSink extends Sink { } } -private predicate isLocalUrlSanitizerMethodCall(MethodCall guard, Expr e, AbstractValue v) { +private predicate isLocalUrlSanitizerMethodCall(MethodCall guard, Expr e, GuardValue v) { exists(Method m | m = guard.getTarget() | m.hasName("IsLocalUrl") and e = guard.getArgument(0) @@ -119,10 +119,10 @@ private predicate isLocalUrlSanitizerMethodCall(MethodCall guard, Expr e, Abstra m.hasName("IsUrlLocalToHost") and e = guard.getArgument(1) ) and - v.(AbstractValues::BooleanValue).getValue() = true + v.asBooleanValue() = true } -private predicate isLocalUrlSanitizer(Guard g, Expr e, AbstractValue v) { +private predicate isLocalUrlSanitizer(Guard g, Expr e, GuardValue v) { isLocalUrlSanitizerMethodCall(g, e, v) } @@ -137,14 +137,14 @@ class LocalUrlSanitizer extends Sanitizer { /** * An argument to a call to `List.Contains()` that is a sanitizer for URL redirects. */ -private predicate isContainsUrlSanitizer(Guard guard, Expr e, AbstractValue v) { +private predicate isContainsUrlSanitizer(Guard guard, Expr e, GuardValue v) { guard = any(MethodCall method | exists(Method m | m = method.getTarget() | m.hasName("Contains") and e = method.getArgument(0) ) and - v.(AbstractValues::BooleanValue).getValue() = true + v.asBooleanValue() = true ) } @@ -163,12 +163,12 @@ class ContainsUrlSanitizer extends Sanitizer { /** * A check that the URL is relative, and therefore safe for URL redirects. */ -private predicate isRelativeUrlSanitizer(Guard guard, Expr e, AbstractValue v) { +private predicate isRelativeUrlSanitizer(Guard guard, Expr e, GuardValue v) { guard = any(PropertyAccess access | access.getProperty().hasFullyQualifiedName("System", "Uri", "IsAbsoluteUri") and e = access.getQualifier() and - v.(AbstractValues::BooleanValue).getValue() = false + v.asBooleanValue() = false ) } @@ -185,16 +185,14 @@ class RelativeUrlSanitizer extends Sanitizer { * A comparison on the `Host` property of a url, that is a sanitizer for URL redirects. * E.g. `url.Host == "example.org"` */ -private predicate isHostComparisonSanitizer(Guard guard, Expr e, AbstractValue v) { +private predicate isHostComparisonSanitizer(Guard guard, Expr e, GuardValue v) { guard = any(EqualityOperation comparison | exists(PropertyAccess access | access = comparison.getAnOperand() | access.getProperty().hasFullyQualifiedName("System", "Uri", "Host") and e = access.getQualifier() ) and - if comparison instanceof EQExpr - then v.(AbstractValues::BooleanValue).getValue() = true - else v.(AbstractValues::BooleanValue).getValue() = false + if comparison instanceof EQExpr then v.asBooleanValue() = true else v.asBooleanValue() = false ) } diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll index 1639563e964..4a2b2759143 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ZipSlipQuery.qll @@ -130,7 +130,7 @@ class SubstringSanitizer extends Sanitizer { } } -private predicate stringCheckGuard(Guard g, Expr e, AbstractValue v) { +private predicate stringCheckGuard(Guard g, Expr e, GuardValue v) { g.(MethodCall).getTarget().hasFullyQualifiedName("System", "String", "StartsWith") and g.(MethodCall).getQualifier() = e and // A StartsWith check against Path.Combine is not sufficient, because the ".." elements have @@ -139,7 +139,7 @@ private predicate stringCheckGuard(Guard g, Expr e, AbstractValue v) { combineCall.getTarget().hasFullyQualifiedName("System.IO", "Path", "Combine") and DataFlow::localExprFlow(combineCall, e) ) and - v.(AbstractValues::BooleanValue).getValue() = true + v.asBooleanValue() = true } /** diff --git a/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll b/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll index aeb34122284..f7c6ade96ea 100644 --- a/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll +++ b/csharp/ql/lib/semmle/code/csharp/serialization/Deserializers.qll @@ -560,9 +560,15 @@ class FsPicklerSerializerClassDeserializeSequenceMethod extends Method, UnsafeDe } } +/** + * DEPRECATED: Use `FsPicklerSerializerClassDeserializeSiftedMethod` instead. + */ +deprecated class FsPicklerSerializerClasDeserializeSiftedMethod = + FsPicklerSerializerClassDeserializeSiftedMethod; + /** `MBrace.FsPickler.FsPicklerSerializer.DeserializeSifted` method */ -class FsPicklerSerializerClasDeserializeSiftedMethod extends Method, UnsafeDeserializer { - FsPicklerSerializerClasDeserializeSiftedMethod() { +class FsPicklerSerializerClassDeserializeSiftedMethod extends Method, UnsafeDeserializer { + FsPicklerSerializerClassDeserializeSiftedMethod() { this.getDeclaringType().getBaseClass*() instanceof FsPicklerSerializerClass and this.hasUndecoratedName("DeserializeSifted") } diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index 66044cfa5bb..68b5aec54e5 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -194,6 +194,24 @@ externalData( sourceLocationPrefix( string prefix: string ref); +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + /* * C# dbscheme */ @@ -222,6 +240,12 @@ sourceLocationPrefix( @location = @location_default | @assembly; +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + locations_default( unique int id: @location_default, int file: @file ref, diff --git a/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme new file mode 100644 index 00000000000..605f8505340 --- /dev/null +++ b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/old.dbscheme @@ -0,0 +1,1478 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..68b5aec54e5 --- /dev/null +++ b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/semmlecode.csharp.dbscheme @@ -0,0 +1,1484 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties new file mode 100644 index 00000000000..81395885edd --- /dev/null +++ b/csharp/ql/lib/upgrades/605f85053409cd72b4904df3f198ddc8324f3a83/upgrade.properties @@ -0,0 +1,2 @@ +description: Add @locatable type +compatibility: full diff --git a/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme new file mode 100644 index 00000000000..66044cfa5bb --- /dev/null +++ b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme @@ -0,0 +1,1460 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..605f8505340 --- /dev/null +++ b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme @@ -0,0 +1,1478 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties new file mode 100644 index 00000000000..52b67d65af7 --- /dev/null +++ b/csharp/ql/lib/upgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties @@ -0,0 +1,2 @@ +description: Add databaseMetadata and overlayChangedFiles relations +compatibility: full diff --git a/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql b/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql index 0539cd27a66..dc6ce132c9a 100644 --- a/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql +++ b/csharp/ql/src/API Abuse/ClassDoesNotImplementEquals.ql @@ -7,8 +7,9 @@ * @problem.severity error * @precision medium * @id cs/class-missing-equals - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql b/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql index 3349ee93251..989d2ecd499 100644 --- a/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql +++ b/csharp/ql/src/API Abuse/DisposeNotCalledOnException.ql @@ -7,8 +7,10 @@ * @problem.severity warning * @precision medium * @id cs/dispose-not-called-on-throw - * @tags efficiency - * maintainability + * @tags quality + * reliability + * error-handling + * performance * external/cwe/cwe-404 * external/cwe/cwe-459 * external/cwe/cwe-460 diff --git a/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql b/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql index 569716b3bc0..6ad43aad3a1 100644 --- a/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql +++ b/csharp/ql/src/API Abuse/InconsistentEqualsGetHashCode.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id cs/inconsistent-equals-and-gethashcode - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-581 */ diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index 6f6c17566bf..63d947e02c7 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/wrong-compareto-signature - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql index 7103cae4906..5367b0ac604 100644 --- a/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectEqualsSignature.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/wrong-equals-signature - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/API Abuse/NonOverridingMethod.ql b/csharp/ql/src/API Abuse/NonOverridingMethod.ql index 598ce670d9f..bff2c17b306 100644 --- a/csharp/ql/src/API Abuse/NonOverridingMethod.ql +++ b/csharp/ql/src/API Abuse/NonOverridingMethod.ql @@ -5,9 +5,10 @@ * @problem.severity recommendation * @precision medium * @id cs/nonoverriding-method - * @tags reliability + * @tags quality + * reliability + * correctness * readability - * naming */ import csharp diff --git a/csharp/ql/src/ASP/SplitControlStructure.ql b/csharp/ql/src/ASP/SplitControlStructure.ql index de7d44ccc1e..701433c0560 100644 --- a/csharp/ql/src/ASP/SplitControlStructure.ql +++ b/csharp/ql/src/ASP/SplitControlStructure.ql @@ -5,8 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/asp/split-control-structure - * @tags maintainability - * frameworks/asp.net + * @tags quality + * maintainability + * readability */ import semmle.code.asp.AspNet diff --git a/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql b/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql index c079cc16a2a..9da9e789e0c 100644 --- a/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql +++ b/csharp/ql/src/Bad Practices/Comments/CommentedOutCode.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/commented-out-code - * @tags maintainability - * statistical - * non-attributable + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/Comments/TodoComments.ql b/csharp/ql/src/Bad Practices/Comments/TodoComments.ql index 751c064bccf..50104f55eb7 100644 --- a/csharp/ql/src/Bad Practices/Comments/TodoComments.ql +++ b/csharp/ql/src/Bad Practices/Comments/TodoComments.ql @@ -6,7 +6,8 @@ * @problem.severity recommendation * @precision medium * @id cs/todo-comment - * @tags maintainability + * @tags quality + * maintainability * external/cwe/cwe-546 */ diff --git a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql index 5ec702f77e0..386b238e049 100644 --- a/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql +++ b/csharp/ql/src/Bad Practices/Control-Flow/ConstantCondition.ql @@ -16,16 +16,94 @@ import csharp import semmle.code.csharp.commons.Assertions import semmle.code.csharp.commons.Constants +import semmle.code.csharp.controlflow.BasicBlocks +import semmle.code.csharp.controlflow.Guards as Guards +import codeql.controlflow.queries.ConstantCondition as ConstCond + +module ConstCondInput implements ConstCond::InputSig { + class SsaDefinition = Ssa::Definition; + + class GuardValue = Guards::GuardValue; + + class Guard = Guards::Guards::Guard; + + predicate ssaControlsBranchEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, GuardValue v) { + Guards::Guards::ssaControlsBranchEdge(def, bb1, bb2, v) + } + + predicate ssaControls(SsaDefinition def, BasicBlock bb, GuardValue v) { + Guards::Guards::ssaControls(def, bb, v) + } + + import Guards::Guards::InternalUtil +} + +module ConstCondImpl = ConstCond::Make; + +predicate nullCheck(Expr e, boolean direct) { + exists(QualifiableExpr qe | qe.isConditional() and qe.getQualifier() = e and direct = true) + or + exists(NullCoalescingExpr nce | nce.getLeftOperand() = e and direct = true) + or + exists(ConditionalExpr ce | ce.getThen() = e or ce.getElse() = e | + nullCheck(ce, _) and direct = false + ) +} + +predicate constantGuard( + Guards::Guards::Guard g, string msg, Guards::Guards::Guard reason, string reasonMsg +) { + ConstCondImpl::problems(g, msg, reason, reasonMsg) and + // conditional qualified expressions sit at an akward place in the CFG, which + // leads to FPs + not g.(QualifiableExpr).getQualifier() = reason and + // and if they're extension method calls, the syntactic qualifier is actually argument 0 + not g.(ExtensionMethodCall).getArgument(0) = reason and + // if a logical connective is constant, one of its operands is constant, so + // we report that instead + not g instanceof LogicalNotExpr and + not g instanceof LogicalAndExpr and + not g instanceof LogicalOrExpr and + // if a logical connective is a reason for another condition to be constant, + // then one of its operands is a more precise reason + not reason instanceof LogicalNotExpr and + not reason instanceof LogicalAndExpr and + not reason instanceof LogicalOrExpr and + // don't report double-checked locking + not exists(LockStmt ls, BasicBlock bb | + bb = ls.getBasicBlock() and + reason.getBasicBlock().strictlyDominates(bb) and + bb.dominates(g.getBasicBlock()) + ) and + // exclude indirect null checks like `x` in `(b ? x : null)?.Foo()` + not nullCheck(g, false) +} /** A constant condition. */ -abstract class ConstantCondition extends Expr { +abstract class ConstantCondition extends Guards::Guards::Guard { /** Gets the alert message for this constant condition. */ abstract string getMessage(); + predicate hasReason(Guards::Guards::Guard reason, string reasonMsg) { + // dummy value, overridden when message has a placeholder + reason = this and reasonMsg = "dummy" + } + /** Holds if this constant condition is white-listed. */ predicate isWhiteListed() { none() } } +/** A constant guard. */ +class ConstantGuard extends ConstantCondition { + ConstantGuard() { constantGuard(this, _, _, _) } + + override string getMessage() { constantGuard(this, result, _, _) } + + override predicate hasReason(Guards::Guards::Guard reason, string reasonMsg) { + constantGuard(this, _, reason, reasonMsg) + } +} + /** A constant Boolean condition. */ class ConstantBooleanCondition extends ConstantCondition { boolean b; @@ -89,7 +167,7 @@ class ConstantNullnessCondition extends ConstantCondition { ConstantNullnessCondition() { forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | - exists(ControlFlow::SuccessorTypes::NullnessSuccessor t, ControlFlow::Node s | + exists(ControlFlow::NullnessSuccessor t, ControlFlow::Node s | s = cfn.getASuccessorByType(t) | b = t.getValue() and @@ -111,8 +189,9 @@ class ConstantMatchingCondition extends ConstantCondition { boolean b; ConstantMatchingCondition() { + this instanceof Expr and forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | - exists(ControlFlow::SuccessorTypes::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) | + exists(ControlFlow::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) | b = t.getValue() ) and strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 @@ -138,9 +217,10 @@ class ConstantMatchingCondition extends ConstantCondition { } } -from ConstantCondition c, string msg +from ConstantCondition c, string msg, Guards::Guards::Guard reason, string reasonMsg where msg = c.getMessage() and + c.hasReason(reason, reasonMsg) and not c.isWhiteListed() and not isExprInAssertion(c) -select c, msg +select c, msg, reason, reasonMsg diff --git a/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql b/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql index 896b7804662..8ae848feaeb 100644 --- a/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql +++ b/csharp/ql/src/Bad Practices/Declarations/NoConstantsOnly.ql @@ -6,8 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/constants-only-interface - * @tags maintainability - * modularity + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql b/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql index 134d612979b..658484c2ba7 100644 --- a/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql +++ b/csharp/ql/src/Bad Practices/ErroneousClassCompare.ql @@ -5,7 +5,8 @@ * @problem.severity warning * @precision medium * @id cs/class-name-comparison - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-486 */ diff --git a/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql b/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql index 4becd8b58c3..80b108d2736 100644 --- a/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql +++ b/csharp/ql/src/Bad Practices/Implementation Hiding/AbstractToConcreteCollection.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id cs/cast-from-abstract-to-concrete-collection - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * external/cwe/cwe-485 */ diff --git a/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql b/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql index 0d00adb5051..086182b697c 100644 --- a/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql +++ b/csharp/ql/src/Bad Practices/Implementation Hiding/StaticArray.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/static-array - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness * external/cwe/cwe-582 */ diff --git a/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll b/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll index 73b82c14700..8c3e0562d39 100644 --- a/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll +++ b/csharp/ql/src/Bad Practices/Magic Constants/MagicConstants.qll @@ -113,7 +113,7 @@ private predicate valueOccurrenceCount(string value, int n) { n > 20 } -private predicate occurenceCount(Literal lit, string value, int n) { +private predicate occurrenceCount(Literal lit, string value, int n) { valueOccurrenceCount(value, n) and value = lit.getValue() and relevantLiteral(lit, value) @@ -127,7 +127,7 @@ private predicate check(Literal lit, string value, int n, File f) { // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n) and + occurrenceCount(lit, value, n) and n > 20 and f = lit.getFile() } diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql index 5e3f39d7a87..199647b5f1f 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingMethodNames.ql @@ -5,9 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/confusing-method-name - * @tags maintainability + * @tags quality + * maintainability * readability - * naming */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql index ae085389729..1ef0ccad22a 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ConfusingOverridesNames.ql @@ -6,9 +6,10 @@ * @problem.severity recommendation * @precision medium * @id cs/confusing-override-name - * @tags reliability + * @tags quality + * maintainability * readability - * naming + * correctness */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql b/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql index 550385d6828..7e80d4334bd 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/ControlNamePrefixes.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/web/unprefixed-control-name - * @tags maintainability + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql b/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql index 92aa5e9e0c2..e12bd2e6af3 100644 --- a/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql +++ b/csharp/ql/src/Bad Practices/Naming Conventions/DefaultControlNames.ql @@ -6,8 +6,9 @@ * @problem.severity recommendation * @precision medium * @id cs/forms/default-control-name - * @tags readability - * naming + * @tags quality + * maintainability + * readability */ import csharp diff --git a/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql b/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql index a5a9418bb15..b9a45126d3c 100644 --- a/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql +++ b/csharp/ql/src/Bad Practices/UseOfSystemOutputStream.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/console-output - * @tags maintainability + * @tags quality + * reliability + * error-handling */ import csharp diff --git a/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql b/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql index d754f1a03c5..a29b39d33a1 100644 --- a/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql +++ b/csharp/ql/src/Bad Practices/VirtualCallInConstructorOrDestructor.ql @@ -6,9 +6,9 @@ * @precision medium * @id cs/virtual-call-in-constructor * @alternate-ids cs/virtual-call-in-constructor-or-destructor - * @tags reliability - * maintainability - * modularity + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 7209d4cfb81..8993b453543 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,42 @@ +## 1.4.3 + +### Minor Analysis Improvements + +* The `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. + +## 1.4.2 + +No user-facing changes. + +## 1.4.1 + +### Minor Analysis Improvements + +* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. +* The query `cs/xmldoc/missing-summary` has been removed from the `code-quality` suite, to align with other languages. + +## 1.4.0 + +### Deprecated Queries + +* The query `cs/captured-foreach-variable` has been deprecated as the semantics of capturing a 'foreach' variable and using it outside the loop has been stable since C# version 5. + +### Minor Analysis Improvements + +* The query `cs/call-to-object-tostring` has been improved to remove false positives for enum types. + +### Bug Fixes + +* The message for `csharp/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +## 1.3.4 + +No user-facing changes. + +## 1.3.3 + +No user-facing changes. + ## 1.3.2 No user-facing changes. @@ -131,7 +170,7 @@ No user-facing changes. ### Minor Analysis Improvements -* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. +* C#: The method `string.ReplaceLineEndings(string)` is now considered a sanitizer for the `cs/log-forging` query. ## 1.0.10 @@ -245,7 +284,7 @@ No user-facing changes. ### Minor Analysis Improvements -* Fixed a Log forging false positive when using `String.Replace` to sanitize the input. +* Fixed a Log forging false positive when using `String.Replace` to sanitize the input. * Fixed a URL redirection from remote source false positive when guarding a redirect with `HttpRequestBase.IsUrlLocalToHost()` ## 0.8.5 diff --git a/csharp/ql/src/CSI/NullMaybe.ql b/csharp/ql/src/CSI/NullMaybe.ql index 67873ebb291..f78a8d89bcf 100644 --- a/csharp/ql/src/CSI/NullMaybe.ql +++ b/csharp/ql/src/CSI/NullMaybe.ql @@ -2,7 +2,7 @@ * @name Dereferenced variable may be null * @description Dereferencing a variable whose value may be 'null' may cause a * 'NullReferenceException'. - * @kind path-problem + * @kind problem * @problem.severity warning * @precision high * @id cs/dereferenced-value-may-be-null @@ -15,10 +15,7 @@ import csharp import semmle.code.csharp.dataflow.Nullness -import PathGraph -from - Dereference d, PathNode source, PathNode sink, Ssa::SourceVariable v, string msg, Element reason -where d.isFirstMaybeNull(v.getAnSsaDefinition(), source, sink, msg, reason) -select d, source, sink, "Variable $@ may be null at this access " + msg + ".", v, v.toString(), - reason, "this" +from Dereference d, Ssa::SourceVariable v, string msg, Element reason +where maybeNullDeref(d, v, msg, reason) +select d, "Variable $@ may be null at this access " + msg + ".", v, v.toString(), reason, "this" diff --git a/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql b/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql index 9c8bb72708c..569aa1e5366 100644 --- a/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql +++ b/csharp/ql/src/Concurrency/SynchSetUnsynchGet.ql @@ -6,8 +6,10 @@ * @problem.severity error * @precision medium * @id cs/unsynchronized-getter - * @tags correctness + * @tags quality + * reliability * concurrency + * correctness * external/cwe/cwe-662 */ diff --git a/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql b/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql index 97b4fbdba8e..db674d9c5c3 100644 --- a/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql +++ b/csharp/ql/src/Concurrency/UnsafeLazyInitialization.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id cs/unsafe-double-checked-lock - * @tags correctness + * @tags quality + * reliability * concurrency * external/cwe/cwe-609 */ diff --git a/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql b/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql index 1ce94edee3d..150ae78ae09 100644 --- a/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql +++ b/csharp/ql/src/Concurrency/UnsynchronizedStaticAccess.ql @@ -6,7 +6,9 @@ * @problem.severity error * @precision medium * @id cs/unsynchronized-static-access - * @tags concurrency + * @tags quality + * reliability + * concurrency * external/cwe/cwe-362 * external/cwe/cwe-567 */ diff --git a/csharp/ql/src/Documentation/XmldocExtraParam.ql b/csharp/ql/src/Documentation/XmldocExtraParam.ql index a745edfb6d8..a7ff7eaec70 100644 --- a/csharp/ql/src/Documentation/XmldocExtraParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraParam.ql @@ -7,6 +7,7 @@ * @precision medium * @id cs/xmldoc/unknown-parameter * @tags maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql index 76c2039920d..60ea1dd5a96 100644 --- a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql @@ -7,6 +7,7 @@ * @precision medium * @id cs/xmldoc/unknown-type-parameter * @tags maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Documentation/XmldocMissing.ql b/csharp/ql/src/Documentation/XmldocMissing.ql index e0e05c4893b..237e5224120 100644 --- a/csharp/ql/src/Documentation/XmldocMissing.ql +++ b/csharp/ql/src/Documentation/XmldocMissing.ql @@ -7,6 +7,7 @@ * @precision medium * @id cs/xmldoc/missing-xmldoc * @tags maintainability + * readability */ import Documentation diff --git a/csharp/ql/src/Documentation/XmldocMissingSummary.ql b/csharp/ql/src/Documentation/XmldocMissingSummary.ql index 43b76d38017..5d7d9c931ad 100644 --- a/csharp/ql/src/Documentation/XmldocMissingSummary.ql +++ b/csharp/ql/src/Documentation/XmldocMissingSummary.ql @@ -5,8 +5,7 @@ * @problem.severity recommendation * @precision high * @id cs/xmldoc/missing-summary - * @tags quality - * maintainability + * @tags maintainability * readability */ diff --git a/csharp/ql/src/Language Abuse/ForeachCapture.ql b/csharp/ql/src/Language Abuse/ForeachCapture.ql index 0148796a2e7..03f1f99a044 100644 --- a/csharp/ql/src/Language Abuse/ForeachCapture.ql +++ b/csharp/ql/src/Language Abuse/ForeachCapture.ql @@ -1,13 +1,14 @@ /** + * @deprecated This query is no longer relevant as the semantics of capturing a 'foreach' variable + * and using it outside the loop has been stable since C# version 5. * @name Capturing a foreach variable * @description Code that captures a 'foreach' variable and uses it outside the loop behaves differently in C# version 4 and C# version 5 * @kind problem * @problem.severity recommendation * @precision medium * @id cs/captured-foreach-variable - * @tags portability - * maintainability - * language-features + * @tags reliability + * correctness * external/cwe/cwe-758 */ diff --git a/csharp/ql/src/Language Abuse/UselessCastToSelf.ql b/csharp/ql/src/Language Abuse/UselessCastToSelf.ql index a182009dfc2..d1a08e1db1c 100644 --- a/csharp/ql/src/Language Abuse/UselessCastToSelf.ql +++ b/csharp/ql/src/Language Abuse/UselessCastToSelf.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-cast-to-self - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql b/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql index 6a82c40d840..6b6d710bdf0 100644 --- a/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql +++ b/csharp/ql/src/Language Abuse/UselessIsBeforeAs.ql @@ -5,8 +5,9 @@ * @problem.severity recommendation * @precision medium * @id cs/useless-is-before-as - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql index ec73df23741..7790fc5ba4a 100644 --- a/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql +++ b/csharp/ql/src/Language Abuse/UselessNullCoalescingExpression.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id cs/coalesce-of-identical-expressions - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessTypeTest.ql b/csharp/ql/src/Language Abuse/UselessTypeTest.ql index 11e7df05047..f89ffbdd637 100644 --- a/csharp/ql/src/Language Abuse/UselessTypeTest.ql +++ b/csharp/ql/src/Language Abuse/UselessTypeTest.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-type-test - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ diff --git a/csharp/ql/src/Language Abuse/UselessUpcast.ql b/csharp/ql/src/Language Abuse/UselessUpcast.ql index 827d16038b2..81ff2cfe253 100644 --- a/csharp/ql/src/Language Abuse/UselessUpcast.ql +++ b/csharp/ql/src/Language Abuse/UselessUpcast.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/useless-upcast - * @tags maintainability - * language-features + * @tags quality + * maintainability + * useless-code * external/cwe/cwe-561 */ @@ -75,15 +76,16 @@ private class ConstructorCall extends Call { /** An explicit upcast. */ class ExplicitUpcast extends ExplicitCast { - ValueOrRefType src; ValueOrRefType dest; ExplicitUpcast() { - src = this.getSourceType() and - dest = this.getTargetType() and - (src instanceof RefType or src instanceof Struct) and - src.isImplicitlyConvertibleTo(dest) and - src != dest // Handled by `cs/useless-cast-to-self` + exists(ValueOrRefType src | + src = this.getSourceType() and + dest = this.getTargetType() and + (src instanceof RefType or src instanceof Struct) and + src.isImplicitlyConvertibleTo(dest) and + src != dest // Handled by `cs/useless-cast-to-self` + ) } pragma[nomagic] diff --git a/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql b/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql index 2efac6773f7..75f152b38de 100644 --- a/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql +++ b/csharp/ql/src/Likely Bugs/Dynamic/BadDynamicCall.ql @@ -5,9 +5,9 @@ * @problem.severity error * @precision medium * @id cs/invalid-dynamic-call - * @tags reliability + * @tags quality + * reliability * correctness - * logic * external/cwe/cwe-628 */ diff --git a/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql b/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql index 5c11e10c36b..12a0802aa9f 100644 --- a/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql +++ b/csharp/ql/src/Likely Bugs/EqualsUsesAs.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/equals-uses-as - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql b/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql index 775a295a6cb..1c209af4dfb 100644 --- a/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql +++ b/csharp/ql/src/Likely Bugs/EqualsUsesIs.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/equals-uses-is - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql b/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql index 2c4e69cb206..5209cf6438b 100644 --- a/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql +++ b/csharp/ql/src/Likely Bugs/InconsistentCompareTo.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/inconsistent-compareto-and-equals - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import semmle.code.csharp.frameworks.System diff --git a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.qhelp b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.qhelp index 7483af84a1f..ae50a05b18a 100644 --- a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.qhelp +++ b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.qhelp @@ -12,7 +12,7 @@

In this example, we are incrementing/decrementing the current date by one year when creating a new System.DateTime object. This may work most of the time, but on any given February 29th, the resulting value will be invalid.

-

To fix this bug, we add/substract years to the current date by calling AddYears method on it.

+

To fix this bug, we add/subtract years to the current date by calling AddYears method on it.

diff --git a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql index 8da3a910b0d..72cc9b1908a 100644 --- a/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql +++ b/csharp/ql/src/Likely Bugs/LeapYear/UnsafeYearConstruction.ql @@ -5,8 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/unsafe-year-construction - * @tags date-time + * @tags quality * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql b/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql index a188fbe1b8e..c8df36bf7bf 100644 --- a/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql +++ b/csharp/ql/src/Likely Bugs/MishandlingJapaneseEra.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity warning * @precision medium - * @tags reliability - * date-time + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/ObjectComparison.ql b/csharp/ql/src/Likely Bugs/ObjectComparison.ql index eec1961fbf5..5479ff69b34 100644 --- a/csharp/ql/src/Likely Bugs/ObjectComparison.ql +++ b/csharp/ql/src/Likely Bugs/ObjectComparison.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id cs/reference-equality-with-object - * @tags reliability + * @tags quality + * reliability * correctness * external/cwe/cwe-595 */ diff --git a/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql b/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql index fe01683578f..2e4764965c9 100644 --- a/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql +++ b/csharp/ql/src/Likely Bugs/RecursiveOperatorEquals.ql @@ -5,8 +5,9 @@ * @problem.severity error * @precision medium * @id cs/recursive-operator-equals-call - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import csharp diff --git a/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql b/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql index ba64dc1bf94..f639b060ac1 100644 --- a/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql +++ b/csharp/ql/src/Likely Bugs/Statements/UseBraces.ql @@ -6,9 +6,10 @@ * @problem.severity warning * @precision medium * @id cs/misleading-indentation - * @tags changeability + * @tags quality + * maintainability + * readability * correctness - * logic */ import csharp diff --git a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql index 9f70760ba60..8fcef4d4744 100644 --- a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql +++ b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql @@ -24,6 +24,8 @@ module NotThreadSafeCryptoUsageIntoParallelInvokeConfig implements DataFlow::Con } predicate isSink(DataFlow::Node sink) { sink instanceof ParallelSink } + + predicate observeDiffInformedIncrementalMode() { any() } } module NotThreadSafeCryptoUsageIntoParallelInvoke = diff --git a/csharp/ql/src/Linq/BadMultipleIteration.ql b/csharp/ql/src/Linq/BadMultipleIteration.ql index e07de273e63..8146bbf167d 100644 --- a/csharp/ql/src/Linq/BadMultipleIteration.ql +++ b/csharp/ql/src/Linq/BadMultipleIteration.ql @@ -5,9 +5,9 @@ * @problem.severity warning * @precision medium * @id cs/linq/inconsistent-enumeration - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness * external/cwe/cwe-834 */ diff --git a/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp b/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp index 04f01720ce6..4af37eadfd7 100644 --- a/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp +++ b/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp @@ -12,7 +12,7 @@ is likely to be able to run malicious LDAP queries.

If user input must be included in an LDAP query, it should be escaped to avoid a malicious user providing special characters that change the meaning of the query. If possible, use an existing library, such as the AntiXSS -library.

+library. One may also make their own encoder filter `LdapEncode` following RFC 4515 standards.

@@ -35,7 +35,6 @@ the query cannot be changed by a malicious user.

  • OWASP: LDAP Injection Prevention Cheat Sheet.
  • OWASP: Preventing LDAP Injection in Java.
  • -
  • AntiXSS doc: LdapFilterEncode.
  • -
  • AntiXSS doc: LdapDistinguishedNameEncode.
  • +
  • RFC 4515: String Search Filter Definition.
  • diff --git a/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp b/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp new file mode 100644 index 00000000000..01bcc8c81da --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp @@ -0,0 +1,60 @@ + + + + +

    Cookies without the HttpOnly flag set are accessible to client-side scripts such as JavaScript running in the same origin. +In case of a Cross-Site Scripting (XSS) vulnerability, the cookie can be stolen by a malicious script. +If a sensitive cookie does not need to be accessed directly by client-side JS, the HttpOnly flag should be set.

    +
    + + +

    +Set the HttpOnly flag to true for authentication cookies to ensure they are not accessible to client-side scripts. +

    +

    +When using ASP.NET Core, CookiePolicyOptions can be used to set a default policy for cookies. + +When using ASP.NET Web Forms, a default may also be configured in the Web.config file, using the httpOnlyCookies attribute of the +the <httpCookies> element. +

    +
    + + + +

    +In the example below, Microsoft.AspNetCore.Http.CookieOptions.HttpOnly is set to true. +

    + + + +

    +In the following example, CookiePolicyOptions are set programmatically to configure defaults. +

    + + + +

    +In the example below, System.Web.HttpCookie.HttpOnly is set to true. +

    + + + +

    +In the example below, the httpOnlyCookies attribute is set to true in the Web.config file. +

    + + +
    + + + +
  • ASP.Net Core docs: CookieOptions.HttpOnly Property.
  • +
  • MDN: Set-Cookie Header.
  • +
  • Web Forms docs: HttpCookie.HttpOnly Property.
  • +
  • Web Forms docs: httpCookies Element.
  • +
  • PortSwigger: Cookie without HttpOnly flag set
  • + +
    +
    diff --git a/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql b/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql new file mode 100644 index 00000000000..dcc520540bb --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-1004/CookieWithoutHttpOnly.ql @@ -0,0 +1,118 @@ +/** + * @name Cookie 'HttpOnly' attribute is not set to true + * @description Sensitive cookies without the `HttpOnly` property set are accessible by client-side scripts such as JavaScript. + * This makes them more vulnerable to being stolen by an XSS attack. + * @kind problem + * @problem.severity warning + * @security-severity 5.0 + * @precision high + * @id cs/web/cookie-httponly-not-set + * @tags security + * external/cwe/cwe-1004 + */ + +import csharp +import semmle.code.asp.WebConfig +import semmle.code.csharp.frameworks.system.Web +import semmle.code.csharp.frameworks.microsoft.AspNetCore +import semmle.code.csharp.security.auth.SecureCookies + +predicate cookieAppendHttpOnlyByDefault() { + // default is set to `Always` + getAValueForCookiePolicyProp("HttpOnly").getValue() = "1" + or + // there is an `OnAppendCookie` callback that sets `HttpOnly` to true + OnAppendCookieHttpOnlyTracking::flowTo(_) +} + +predicate httpOnlyFalse(ObjectCreation oc) { + exists(Assignment a | + getAValueForProp(oc, a, "HttpOnly") = a.getRValue() and + a.getRValue().getValue() = "false" + ) +} + +predicate httpOnlyFalseOrNotSet(ObjectCreation oc) { + httpOnlyFalse(oc) + or + not isPropertySet(oc, "HttpOnly") +} + +predicate nonHttpOnlyCookieOptionsCreation(ObjectCreation oc, MethodCall append) { + // `HttpOnly` property in `CookieOptions` passed to IResponseCookies.Append(...) wasn't set + oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and + httpOnlyFalseOrNotSet(oc) and + exists(DataFlow::Node creation, DataFlow::Node sink | + CookieOptionsTracking::flow(creation, sink) and + creation.asExpr() = oc and + sink.asExpr() = append.getArgument(2) + ) +} + +predicate nonHttpOnlySystemWebSensitiveCookieCreation(ObjectCreation oc) { + oc.getType() instanceof SystemWebHttpCookie and + isCookieWithSensitiveName(oc.getArgument(0)) and + ( + httpOnlyFalse(oc) + or + // the property wasn't explicitly set, so a default value from config is used + not isPropertySet(oc, "HttpOnly") and + // the default in config is not set to `true` + not exists(XmlElement element | + element instanceof HttpCookiesElement and + element.(HttpCookiesElement).isHttpOnlyCookies() + ) + ) +} + +predicate sensitiveCookieAppend(MethodCall mc) { + exists(MicrosoftAspNetCoreHttpResponseCookies iResponse | + iResponse.getAppendMethod() = mc.getTarget() and + isCookieWithSensitiveName(mc.getArgument(0)) + ) +} + +predicate nonHttpOnlyCookieCall(Call c) { + ( + not cookieAppendHttpOnlyByDefault() and + exists(MethodCall mc | + sensitiveCookieAppend(mc) and + ( + nonHttpOnlyCookieOptionsCreation(c, mc) + or + // IResponseCookies.Append(String, String) was called, `HttpOnly` is set to `false` by default + mc = c and + mc.getNumberOfArguments() < 3 and + mc.getTarget().getParameter(0).getType() instanceof StringType + ) + ) + or + nonHttpOnlySystemWebSensitiveCookieCreation(c) + ) +} + +predicate nonHttpOnlyCookieBuilderAssignment(Assignment a, Expr val) { + val.getValue() = "false" and + exists(PropertyWrite pw | + ( + pw.getProperty().getDeclaringType() instanceof MicrosoftAspNetCoreHttpCookieBuilder or + pw.getProperty().getDeclaringType() instanceof + MicrosoftAspNetCoreAuthenticationCookiesCookieAuthenticationOptions + ) and + pw.getProperty().getName() = "HttpOnly" and + a.getLValue() = pw and + DataFlow::localExprFlow(val, a.getRValue()) + ) +} + +from Expr httpOnlySink +where + ( + nonHttpOnlyCookieCall(httpOnlySink) + or + exists(Assignment a | + httpOnlySink = a.getRValue() and + nonHttpOnlyCookieBuilderAssignment(a, _) + ) + ) +select httpOnlySink, "Cookie attribute 'HttpOnly' is not set to true." diff --git a/csharp/ql/src/Security Features/CWE-1004/Web.config b/csharp/ql/src/Security Features/CWE-1004/Web.config new file mode 100644 index 00000000000..8f4cf5ba777 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-1004/Web.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/csharp/ql/src/experimental/Security Features/CWE-1004/cookiepolicyoptions.cs b/csharp/ql/src/Security Features/CWE-1004/cookiepolicyoptions.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-1004/cookiepolicyoptions.cs rename to csharp/ql/src/Security Features/CWE-1004/cookiepolicyoptions.cs diff --git a/csharp/ql/src/experimental/Security Features/CWE-1004/httponlyflag.cs b/csharp/ql/src/Security Features/CWE-1004/httponlyflag.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-1004/httponlyflag.cs rename to csharp/ql/src/Security Features/CWE-1004/httponlyflag.cs diff --git a/csharp/ql/src/experimental/Security Features/CWE-1004/httponlyflagcore.cs b/csharp/ql/src/Security Features/CWE-1004/httponlyflagcore.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-1004/httponlyflagcore.cs rename to csharp/ql/src/Security Features/CWE-1004/httponlyflagcore.cs diff --git a/csharp/ql/src/Security Features/CWE-327/DontInstallRootCert.ql b/csharp/ql/src/Security Features/CWE-327/DontInstallRootCert.ql index d2d22671677..b48ddbf0f35 100644 --- a/csharp/ql/src/Security Features/CWE-327/DontInstallRootCert.ql +++ b/csharp/ql/src/Security Features/CWE-327/DontInstallRootCert.ql @@ -39,8 +39,6 @@ module AddCertToRootStoreConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module AddCertToRootStore = DataFlow::Global; diff --git a/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql b/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql index 5258d6a4cd2..c350c8f3755 100644 --- a/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql +++ b/csharp/ql/src/Security Features/CWE-384/AbandonSession.ql @@ -21,10 +21,10 @@ predicate loginMethod(Method m, ControlFlow::SuccessorType flowFrom) { or m = any(SystemWebSecurityFormsAuthenticationClass c).getAuthenticateMethod() ) and - flowFrom.(ControlFlow::SuccessorTypes::BooleanSuccessor).getValue() = true + flowFrom.(ControlFlow::BooleanSuccessor).getValue() = true or m = any(SystemWebSecurityFormsAuthenticationClass c).getSignOutMethod() and - flowFrom instanceof ControlFlow::SuccessorTypes::NormalSuccessor + flowFrom instanceof ControlFlow::DirectSuccessor } /** The `System.Web.SessionState.HttpSessionState` class. */ diff --git a/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql b/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql index 9e51b663038..1b647457e7c 100644 --- a/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql +++ b/csharp/ql/src/Security Features/CWE-451/MissingXFrameOptions.ql @@ -16,6 +16,17 @@ import csharp import semmle.code.asp.WebConfig import semmle.code.csharp.frameworks.system.Web +XmlElement getAWebConfigRoot(WebConfigXml webConfig) { + result = webConfig.getARootElement() + or + result = webConfig.getARootElement().getAChild("location") and + ( + not result.hasAttribute("path") // equivalent to path="." + or + result.getAttributeValue("path") = ["", "."] + ) +} + /** * Holds if the `Web.config` file `webConfig` adds an `X-Frame-Options` header. */ @@ -30,8 +41,8 @@ predicate hasWebConfigXFrameOptions(WebConfigXml webConfig) { // // // ``` - webConfig - .getARootElement() + // This can also be in a `location` + getAWebConfigRoot(webConfig) .getAChild("system.webServer") .getAChild("httpProtocol") .getAChild("customHeaders") diff --git a/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.qhelp b/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.qhelp new file mode 100644 index 00000000000..f122c4d881b --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.qhelp @@ -0,0 +1,61 @@ + + + + +

    Cookies without the Secure flag set may be transmitted using HTTP instead of HTTPS. +This leaves them vulnerable to being read by a third party attacker. If a sensitive cookie such as a session +key is intercepted this way, it would allow the attacker to perform actions on a user's behalf.

    +
    + + +

    +When using ASP.NET Core, ensure cookies have the secure flag set by setting Microsoft.AspNetCore.Http.CookieOptions.Secure to true, or +using CookiePolicyOptions to set a default security policy. +

    +

    +When using ASP.NET Web Forms, cookies can be configured as secure by default in the Web.config file, setting the requireSSL attribute to true in the forms or httpCookies element. +Cookies may also be set to be secure programmatically by setting the System.Web.HttpCookie.Secure attribute to true. +

    +
    + + + +

    +In the example below, Microsoft.AspNetCore.Http.CookieOptions.Secure is set to true. +

    + + + +

    +In the following example, CookiePolicyOptions are set programmatically to configure defaults. +

    + + + +

    +In the example below System.Web.HttpCookie.Secure is set to true programmatically. +

    + + + +

    +In the example below, the requireSSL attribute is set to true in the forms element of the Web.config file. +

    + + +
    + + + +
  • ASP.NET Core docs: CookieOptions.Secure Property.
  • +
  • MDN: Set-Cookie Header.
  • +
  • Web Forms docs: FormsAuthentication.RequireSSL Property.
  • +
  • Web Forms docs: forms Element for authentication.
  • +
  • Web Forms docs: httpCookies Element.
  • +
  • Detectify: Cookie lack Secure flag.
  • +
  • PortSwigger: TLS cookie without secure flag set.
  • + +
    +
    diff --git a/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql b/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql new file mode 100644 index 00000000000..2a90698ed27 --- /dev/null +++ b/csharp/ql/src/Security Features/CWE-614/CookieWithoutSecure.ql @@ -0,0 +1,116 @@ +/** + * @name Cookie 'Secure' attribute is not set to true + * @description Cookies without the `Secure` flag may be sent in cleartext. + * This makes them vulnerable to be intercepted by an attacker. + * @kind problem + * @problem.severity error + * @security-severity 5.0 + * @precision high + * @id cs/web/cookie-secure-not-set + * @tags security + * external/cwe/cwe-319 + * external/cwe/cwe-614 + */ + +import csharp +import semmle.code.asp.WebConfig +import semmle.code.csharp.frameworks.system.Web +import semmle.code.csharp.frameworks.microsoft.AspNetCore +import semmle.code.csharp.security.auth.SecureCookies + +predicate cookieAppendSecureByDefault() { + // default is set to `Always` or `SameAsRequest` + ( + getAValueForCookiePolicyProp("Secure").getValue() = "0" or + getAValueForCookiePolicyProp("Secure").getValue() = "1" + ) + or + //callback `OnAppendCookie` that sets `Secure` to true + OnAppendCookieSecureTracking::flowTo(_) +} + +predicate secureFalse(ObjectCreation oc) { + exists(Assignment a | + getAValueForProp(oc, a, "Secure") = a.getRValue() and + a.getRValue().getValue() = "false" + ) +} + +predicate secureFalseOrNotSet(ObjectCreation oc) { + secureFalse(oc) + or + not isPropertySet(oc, "Secure") +} + +predicate insecureCookieOptionsCreation(ObjectCreation oc) { + // `Secure` property in `CookieOptions` passed to IResponseCookies.Append(...) wasn't set + oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and + secureFalseOrNotSet(oc) and + exists(DataFlow::Node creation | + CookieOptionsTracking::flow(creation, _) and + creation.asExpr() = oc + ) +} + +predicate insecureCookieAppend(Expr sink) { + // IResponseCookies.Append(String, String) was called, `Secure` is set to `false` by default + exists(MethodCall mc, MicrosoftAspNetCoreHttpResponseCookies iResponse | + mc = sink and + iResponse.getAppendMethod() = mc.getTarget() and + mc.getNumberOfArguments() < 3 and + mc.getTarget().getParameter(0).getType() instanceof StringType + ) +} + +predicate insecureSystemWebCookieCreation(ObjectCreation oc) { + oc.getType() instanceof SystemWebHttpCookie and + ( + secureFalse(oc) + or + // `Secure` property in `System.Web.HttpCookie` wasn't set, so a default value from config is used + not isPropertySet(oc, "Secure") and + // the default in config is not set to `true` + not exists(XmlElement element | + element instanceof FormsElement and + element.(FormsElement).isRequireSsl() + or + element instanceof HttpCookiesElement and + element.(HttpCookiesElement).isRequireSsl() + ) + ) +} + +predicate insecureCookieCall(Call c) { + not cookieAppendSecureByDefault() and + ( + insecureCookieOptionsCreation(c) + or + insecureCookieAppend(c) + ) + or + insecureSystemWebCookieCreation(c) +} + +predicate insecureSecurePolicyAssignment(Assignment a, Expr val) { + exists(PropertyWrite pw | + ( + pw.getProperty().getDeclaringType() instanceof MicrosoftAspNetCoreHttpCookieBuilder or + pw.getProperty().getDeclaringType() instanceof + MicrosoftAspNetCoreAuthenticationCookiesCookieAuthenticationOptions + ) and + pw.getProperty().getName() = "SecurePolicy" and + a.getLValue() = pw and + DataFlow::localExprFlow(val, a.getRValue()) and + val.getValue() = "2" // None + ) +} + +from Expr secureSink +where + insecureCookieCall(secureSink) + or + exists(Assignment a | + secureSink = a.getRValue() and + insecureSecurePolicyAssignment(a, _) + ) +select secureSink, "Cookie attribute 'Secure' is not set to true." diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/cookiepolicyoptions.cs b/csharp/ql/src/Security Features/CWE-614/cookiepolicyoptions.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-614/cookiepolicyoptions.cs rename to csharp/ql/src/Security Features/CWE-614/cookiepolicyoptions.cs diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/secureflag.cs b/csharp/ql/src/Security Features/CWE-614/secureflag.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-614/secureflag.cs rename to csharp/ql/src/Security Features/CWE-614/secureflag.cs diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/secureflagcore.cs b/csharp/ql/src/Security Features/CWE-614/secureflagcore.cs similarity index 100% rename from csharp/ql/src/experimental/Security Features/CWE-614/secureflagcore.cs rename to csharp/ql/src/Security Features/CWE-614/secureflagcore.cs diff --git a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql index 32508fa9d3f..1e33ed6a1fd 100644 --- a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql +++ b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql @@ -38,6 +38,12 @@ module ConnectionStringConfig implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { node instanceof StringFormatSanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + any(Call call | call.getAnArgument() = sink.asExpr()).getLocation() = result + } } /** diff --git a/csharp/ql/src/Telemetry/DatabaseQuality.qll b/csharp/ql/src/Telemetry/DatabaseQuality.qll index fa6c70dbc51..ca2ab3e7e16 100644 --- a/csharp/ql/src/Telemetry/DatabaseQuality.qll +++ b/csharp/ql/src/Telemetry/DatabaseQuality.qll @@ -12,7 +12,7 @@ module CallTargetStats implements StatsSig { private predicate isNoSetterPropertyCallInConstructor(PropertyCall c) { exists(Property p, Constructor ctor | p = c.getProperty() and - not exists(Setter a | a = p.getAnAccessor()) and + not p.getAnAccessor() instanceof Setter and c.getEnclosingCallable() = ctor and ( c.hasThisQualifier() @@ -25,7 +25,7 @@ module CallTargetStats implements StatsSig { private predicate isNoSetterPropertyInitialization(PropertyCall c) { exists(Property p, AssignExpr assign | p = c.getProperty() and - not exists(Setter a | a = p.getAnAccessor()) and + not p.getAnAccessor() instanceof Setter and assign = c.getParent() and assign.getLValue() = c and assign.getParent() instanceof Property diff --git a/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql b/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql index bde07633d94..207a25081a2 100644 --- a/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql +++ b/csharp/ql/src/Telemetry/DatabaseQualityDiagnostics.ql @@ -8,26 +8,39 @@ import csharp import DatabaseQuality +private predicate diagnostic(string msg, float value, float threshold) { + CallTargetStatsReport::percentageOfOk(msg, value) and + threshold = 85 + or + ExprTypeStatsReport::percentageOfOk(msg, value) and + threshold = 85 +} + private newtype TDbQualityDiagnostic = TTheDbQualityDiagnostic() { - exists(float percentageGood | - CallTargetStatsReport::percentageOfOk(_, percentageGood) - or - ExprTypeStatsReport::percentageOfOk(_, percentageGood) - | - percentageGood < 95 + exists(float percentageGood, float threshold | + diagnostic(_, percentageGood, threshold) and + percentageGood < threshold ) } +private string getDbHealth() { + result = + strictconcat(string msg, float value, float threshold | + diagnostic(msg, value, threshold) + | + msg + ": " + value.floor() + " % (threshold " + threshold.floor() + " %)", ". " + ) +} + class DbQualityDiagnostic extends TDbQualityDiagnostic { string toString() { result = "Scanning C# code completed successfully, but the scan encountered issues. " + - "This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- " - + - "see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. " - + - "Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning C# " + "This may be caused by problems identifying dependencies or use of generated source code. " + + "Some metrics of the database quality are: " + getDbHealth() + ". " + + "Ideally these metrics should be above their thresholds. " + + "Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning C# " + "using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes)." } diff --git a/csharp/ql/src/Useless code/DefaultToStringQuery.qll b/csharp/ql/src/Useless code/DefaultToStringQuery.qll index f11b5a9cd32..411ca47b5e6 100644 --- a/csharp/ql/src/Useless code/DefaultToStringQuery.qll +++ b/csharp/ql/src/Useless code/DefaultToStringQuery.qll @@ -47,6 +47,7 @@ private predicate alwaysInvokesToString(ParameterRead pr) { */ predicate alwaysDefaultToString(ValueOrRefType t) { not t instanceof TupleType and + not t instanceof Enum and exists(ToStringMethod m | t.hasMethod(m) | m.getDeclaringType() instanceof SystemObjectClass or m.getDeclaringType() instanceof SystemValueTypeClass diff --git a/csharp/ql/src/Useless code/PointlessForwardingMethod.ql b/csharp/ql/src/Useless code/PointlessForwardingMethod.ql index 723c5b190a5..24a184b3274 100644 --- a/csharp/ql/src/Useless code/PointlessForwardingMethod.ql +++ b/csharp/ql/src/Useless code/PointlessForwardingMethod.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id cs/useless-forwarding-method - * @tags maintainability + * @tags quality + * maintainability * useless-code */ diff --git a/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md b/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md new file mode 100644 index 00000000000..1a15c0494bd --- /dev/null +++ b/csharp/ql/src/change-notes/2025-10-24-insecure-cookie-query-promote.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +The `cs/web/cookie-secure-not-set` and `cs/web/cookie-httponly-not-set` queries have been promoted from experimental to the main query pack. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/released/1.3.3.md b/csharp/ql/src/change-notes/released/1.3.3.md new file mode 100644 index 00000000000..27a88ea0061 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.3.3.md @@ -0,0 +1,3 @@ +## 1.3.3 + +No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/1.3.4.md b/csharp/ql/src/change-notes/released/1.3.4.md new file mode 100644 index 00000000000..5073aca7222 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.3.4.md @@ -0,0 +1,3 @@ +## 1.3.4 + +No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/1.4.0.md b/csharp/ql/src/change-notes/released/1.4.0.md new file mode 100644 index 00000000000..43d887f928a --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.4.0.md @@ -0,0 +1,13 @@ +## 1.4.0 + +### Deprecated Queries + +* The query `cs/captured-foreach-variable` has been deprecated as the semantics of capturing a 'foreach' variable and using it outside the loop has been stable since C# version 5. + +### Minor Analysis Improvements + +* The query `cs/call-to-object-tostring` has been improved to remove false positives for enum types. + +### Bug Fixes + +* The message for `csharp/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. diff --git a/csharp/ql/src/change-notes/released/1.4.1.md b/csharp/ql/src/change-notes/released/1.4.1.md new file mode 100644 index 00000000000..f161787a108 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.4.1.md @@ -0,0 +1,6 @@ +## 1.4.1 + +### Minor Analysis Improvements + +* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives. +* The query `cs/xmldoc/missing-summary` has been removed from the `code-quality` suite, to align with other languages. diff --git a/csharp/ql/src/change-notes/released/1.4.2.md b/csharp/ql/src/change-notes/released/1.4.2.md new file mode 100644 index 00000000000..37be01f40d9 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.4.2.md @@ -0,0 +1,3 @@ +## 1.4.2 + +No user-facing changes. diff --git a/csharp/ql/src/change-notes/released/1.4.3.md b/csharp/ql/src/change-notes/released/1.4.3.md new file mode 100644 index 00000000000..1a022f2462d --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.4.3.md @@ -0,0 +1,5 @@ +## 1.4.3 + +### Minor Analysis Improvements + +* the `cs/web/missing-x-frame-options` query now correctly handles configuration nested in root `` elements. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 86a9cb32d86..08f88b689fb 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.2 +lastReleaseVersion: 1.4.3 diff --git a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll index 9ab1351f414..84ea534a50f 100644 --- a/csharp/ql/src/experimental/CWE-918/RequestForgery.qll +++ b/csharp/ql/src/experimental/CWE-918/RequestForgery.qll @@ -133,14 +133,14 @@ module RequestForgery { * to be a guard for Server Side Request Forgery(SSRF) Vulnerabilities. * This guard considers all checks as valid. */ - private predicate baseUriGuard(Guard g, Expr e, AbstractValue v) { + private predicate baseUriGuard(Guard g, Expr e, GuardValue v) { g.(MethodCall).getTarget().hasFullyQualifiedName("System", "Uri", "IsBaseOf") and // we consider any checks against the tainted value to sainitize the taint. // This implies any check such as shown below block the taint flow. // Uri url = new Uri("whitelist.com") // if (url.isBaseOf(`taint1)) (e = g.(MethodCall).getArgument(0) or e = g.(MethodCall).getQualifier()) and - v.(AbstractValues::BooleanValue).getValue() = true + v.asBooleanValue() = true } private class BaseUriBarrier extends Barrier { @@ -152,14 +152,14 @@ module RequestForgery { * to be a guard for Server Side Request Forgery(SSRF) Vulnerabilities. * This guard considers all checks as valid. */ - private predicate stringStartsWithGuard(Guard g, Expr e, AbstractValue v) { + private predicate stringStartsWithGuard(Guard g, Expr e, GuardValue v) { g.(MethodCall).getTarget().hasFullyQualifiedName("System", "String", "StartsWith") and // Any check such as the ones shown below // "https://myurl.com/".startsWith(`taint`) // `taint`.startsWith("https://myurl.com/") // are assumed to sainitize the taint (e = g.(MethodCall).getQualifier() or g.(MethodCall).getArgument(0) = e) and - v.(AbstractValues::BooleanValue).getValue() = true + v.asBooleanValue() = true } private class StringStartsWithBarrier extends Barrier { diff --git a/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp b/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp deleted file mode 100644 index c7c10a3af9e..00000000000 --- a/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.qhelp +++ /dev/null @@ -1,51 +0,0 @@ - - - - -

    -Cookies without HttpOnly flag are accessible to JavaScript running in the same origin. In case of -Cross-Site Scripting (XSS) vulnerability the cookie can be stolen by malicious script. -

    -
    - - -

    -Protect sensitive cookies, such as related to authentication, by setting HttpOnly to true to make -them not accessible to JavaScript. In ASP.NET case it is also possible to set the attribute via <httpCookies> element -of web.config with the attribute httpOnlyCookies="true". -

    -
    - - - -

    -In the example below Microsoft.AspNetCore.Http.CookieOptions.HttpOnly is set to true. -

    - - - -

    -In the following example CookiePolicyOptions are set programmatically to configure defaults. -

    - - - -

    -In the example below System.Web.HttpCookie.HttpOnly is set to true. -

    - - - -
    - - - -
  • CookieOptions.HttpOnly Property,
  • -
  • Set-Cookie Header,
  • -
  • HttpCookie.HttpOnly Property,
  • -
  • httpCookies Element,
  • - -
    -
    diff --git a/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql b/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql deleted file mode 100644 index 359ffbcd2f3..00000000000 --- a/csharp/ql/src/experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @name 'HttpOnly' attribute is not set to true - * @description Omitting the 'HttpOnly' attribute for security sensitive data allows - * malicious JavaScript to steal it in case of XSS vulnerability. Always set - * 'HttpOnly' to 'true' to authentication related cookie to make it - * not accessible by JavaScript. - * @kind problem - * @problem.severity warning - * @precision high - * @id cs/web/cookie-httponly-not-set - * @tags security - * experimental - * external/cwe/cwe-1004 - */ - -import csharp -import semmle.code.asp.WebConfig -import semmle.code.csharp.frameworks.system.Web -import semmle.code.csharp.frameworks.microsoft.AspNetCore -deprecated import experimental.dataflow.flowsources.AuthCookie - -deprecated query predicate problems(Expr httpOnlySink, string message) { - ( - exists(Assignment a, Expr val | - httpOnlySink = a.getRValue() and - val.getValue() = "false" and - ( - exists(ObjectCreation oc | - getAValueForProp(oc, a, "HttpOnly") = val and - ( - oc.getType() instanceof SystemWebHttpCookie and - isCookieWithSensitiveName(oc.getArgument(0)) - or - exists(MethodCall mc, MicrosoftAspNetCoreHttpResponseCookies iResponse | - oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and - iResponse.getAppendMethod() = mc.getTarget() and - isCookieWithSensitiveName(mc.getArgument(0)) and - // there is no callback `OnAppendCookie` that sets `HttpOnly` to true - not OnAppendCookieHttpOnlyTracking::flowTo(_) and - // Passed as third argument to `IResponseCookies.Append` - exists(DataFlow::Node creation, DataFlow::Node append | - CookieOptionsTracking::flow(creation, append) and - creation.asExpr() = oc and - append.asExpr() = mc.getArgument(2) - ) - ) - ) - ) - or - exists(PropertyWrite pw | - ( - pw.getProperty().getDeclaringType() instanceof MicrosoftAspNetCoreHttpCookieBuilder or - pw.getProperty().getDeclaringType() instanceof - MicrosoftAspNetCoreAuthenticationCookiesCookieAuthenticationOptions - ) and - pw.getProperty().getName() = "HttpOnly" and - a.getLValue() = pw and - DataFlow::localExprFlow(val, a.getRValue()) - ) - ) - ) - or - exists(Call c | - httpOnlySink = c and - ( - exists(MicrosoftAspNetCoreHttpResponseCookies iResponse, MethodCall mc | - // default is not configured or is not set to `Always` - not getAValueForCookiePolicyProp("HttpOnly").getValue() = "1" and - // there is no callback `OnAppendCookie` that sets `HttpOnly` to true - not OnAppendCookieHttpOnlyTracking::flowTo(_) and - iResponse.getAppendMethod() = mc.getTarget() and - isCookieWithSensitiveName(mc.getArgument(0)) and - ( - // `HttpOnly` property in `CookieOptions` passed to IResponseCookies.Append(...) wasn't set - exists(ObjectCreation oc | - oc = c and - oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and - not isPropertySet(oc, "HttpOnly") and - exists(DataFlow::Node creation | - CookieOptionsTracking::flow(creation, _) and - creation.asExpr() = oc - ) - ) - or - // IResponseCookies.Append(String, String) was called, `HttpOnly` is set to `false` by default - mc = c and - mc.getNumberOfArguments() < 3 - ) - ) - or - exists(ObjectCreation oc | - oc = c and - oc.getType() instanceof SystemWebHttpCookie and - isCookieWithSensitiveName(oc.getArgument(0)) and - // the property wasn't explicitly set, so a default value from config is used - not isPropertySet(oc, "HttpOnly") and - // the default in config is not set to `true` - not exists(XmlElement element | - element instanceof HttpCookiesElement and - element.(HttpCookiesElement).isHttpOnlyCookies() - ) - ) - ) - ) - ) and - message = "Cookie attribute 'HttpOnly' is not set to true." -} diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.qhelp b/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.qhelp deleted file mode 100644 index ddf825aed26..00000000000 --- a/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.qhelp +++ /dev/null @@ -1,55 +0,0 @@ - - - - -

    -Sensitive data that is transmitted using HTTP is vulnerable to being read by a third party. By default, -cookies are sent via HTTP, not HTTPS. -

    -
    - - -

    -In ASP.NET case when using cookies ensure that HTTPS is used by setting the property Microsoft.AspNetCore.Http.CookieOptions.Secure to true. -

    -

    -In ASP.NET Core case when using cookies, ensure that HTTPS is used, either via the <forms> attribute above, or -the <httpCookies> element, with the attribute requireSSL="true". It is also possible to require cookies -to use HTTPS programmatically, by setting the property System.Web.HttpCookie.Secure to true. -

    -
    - - - -

    -In the example below Microsoft.AspNetCore.Http.CookieOptions.Secure is set to true programmatically. -

    - - - -

    -In the following example CookiePolicyOptions are set programmatically to configure defaults. -

    - - - -

    -In the example below System.Web.HttpCookie.Secure is set to true programmatically. -

    - - - -
    - - - -
  • CookieOptions.Secure Property,
  • -
  • Set-Cookie Header,
  • -
  • FormsAuthentication.RequireSSL Property,
  • -
  • forms Element for authentication,
  • -
  • httpCookies Element,
  • - -
    -
    diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.ql b/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.ql deleted file mode 100644 index d7628f7b2c7..00000000000 --- a/csharp/ql/src/experimental/Security Features/CWE-614/CookieWithoutSecure.ql +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @name 'Secure' attribute is not set to true - * @description Omitting the 'Secure' attribute allows data to be transmitted insecurely - * using HTTP. Always set 'Secure' to 'true' to ensure that HTTPS - * is used at all times. - * @kind problem - * @problem.severity error - * @precision high - * @id cs/web/cookie-secure-not-set - * @tags security - * experimental - * external/cwe/cwe-319 - * external/cwe/cwe-614 - */ - -import csharp -import semmle.code.asp.WebConfig -import semmle.code.csharp.frameworks.system.Web -import semmle.code.csharp.frameworks.microsoft.AspNetCore -deprecated import experimental.dataflow.flowsources.AuthCookie - -deprecated query predicate problems(Expr secureSink, string message) { - ( - exists(Call c | - secureSink = c and - ( - // default is not configured or is not set to `Always` or `SameAsRequest` - not ( - getAValueForCookiePolicyProp("Secure").getValue() = "0" or - getAValueForCookiePolicyProp("Secure").getValue() = "1" - ) and - // there is no callback `OnAppendCookie` that sets `Secure` to true - not OnAppendCookieSecureTracking::flowTo(_) and - ( - // `Secure` property in `CookieOptions` passed to IResponseCookies.Append(...) wasn't set - exists(ObjectCreation oc | - oc = c and - oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and - not isPropertySet(oc, "Secure") and - exists(DataFlow::Node creation | - CookieOptionsTracking::flow(creation, _) and - creation.asExpr() = oc - ) - ) - or - // IResponseCookies.Append(String, String) was called, `Secure` is set to `false` by default - exists(MethodCall mc, MicrosoftAspNetCoreHttpResponseCookies iResponse | - mc = c and - iResponse.getAppendMethod() = mc.getTarget() and - mc.getNumberOfArguments() < 3 - ) - ) - or - exists(ObjectCreation oc | - oc = c and - oc.getType() instanceof SystemWebHttpCookie and - // the property wasn't explicitly set, so a default value from config is used - not isPropertySet(oc, "Secure") and - // the default in config is not set to `true` - // the `exists` below covers the `cs/web/requiressl-not-set` - not exists(XmlElement element | - element instanceof FormsElement and - element.(FormsElement).isRequireSsl() - or - element instanceof HttpCookiesElement and - element.(HttpCookiesElement).isRequireSsl() - ) - ) - ) - ) - or - exists(Assignment a, Expr val | - secureSink = a.getRValue() and - ( - exists(ObjectCreation oc | - getAValueForProp(oc, a, "Secure") = val and - val.getValue() = "false" and - ( - oc.getType() instanceof SystemWebHttpCookie - or - oc.getType() instanceof MicrosoftAspNetCoreHttpCookieOptions and - // there is no callback `OnAppendCookie` that sets `Secure` to true - not OnAppendCookieSecureTracking::flowTo(_) and - // the cookie option is passed to `Append` - exists(DataFlow::Node creation | - CookieOptionsTracking::flow(creation, _) and - creation.asExpr() = oc - ) - ) - ) - or - exists(PropertyWrite pw | - ( - pw.getProperty().getDeclaringType() instanceof MicrosoftAspNetCoreHttpCookieBuilder or - pw.getProperty().getDeclaringType() instanceof - MicrosoftAspNetCoreAuthenticationCookiesCookieAuthenticationOptions - ) and - pw.getProperty().getName() = "SecurePolicy" and - a.getLValue() = pw and - DataFlow::localExprFlow(val, a.getRValue()) and - val.getValue() = "2" // None - ) - ) - ) - ) and - message = "Cookie attribute 'Secure' is not set to true." -} diff --git a/csharp/ql/src/experimental/Security Features/CWE-614/Web.config b/csharp/ql/src/experimental/Security Features/CWE-614/Web.config deleted file mode 100644 index 89d4561cd62..00000000000 --- a/csharp/ql/src/experimental/Security Features/CWE-614/Web.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql index f18798c8b08..f175723c099 100644 --- a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql +++ b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql @@ -10,6 +10,7 @@ */ import csharp +import semmle.code.csharp.frameworks.system.Collections import HashWithoutSalt::PathGraph /** The C# class `Windows.Security.Cryptography.Core.HashAlgorithmProvider`. */ @@ -93,12 +94,17 @@ predicate hasAnotherHashCall(MethodCall mc) { /** Holds if a password hash without salt is further processed in another method call. */ predicate hasFurtherProcessing(MethodCall mc) { - mc.getTarget().fromLibrary() and - ( - mc.getTarget().hasFullyQualifiedName("System", "Array", "Copy") or // Array.Copy(passwordHash, 0, password.Length), 0, key, 0, keyLen); - mc.getTarget().hasFullyQualifiedName("System", "String", "Concat") or // string.Concat(passwordHash, saltkey) - mc.getTarget().hasFullyQualifiedName("System", "Buffer", "BlockCopy") or // Buffer.BlockCopy(passwordHash, 0, allBytes, 0, 20) - mc.getTarget().hasFullyQualifiedName("System", "String", "Format") // String.Format("{0}:{1}:{2}", username, salt, password) + exists(Method m | m = mc.getTarget() and m.fromLibrary() | + m.hasFullyQualifiedName("System", "Array", "Copy") // Array.Copy(passwordHash, 0, password.Length), 0, key, 0, keyLen); + or + m.hasFullyQualifiedName("System", "String", "Concat") // string.Concat(passwordHash, saltkey) + or + m.hasFullyQualifiedName("System", "Buffer", "BlockCopy") // Buffer.BlockCopy(passwordHash, 0, allBytes, 0, 20) + or + m.hasFullyQualifiedName("System", "String", "Format") // String.Format("{0}:{1}:{2}", username, salt, password) + or + m.getName() = "CopyTo" and + m.getDeclaringType().getABaseType*() instanceof SystemCollectionsICollectionInterface // passBytes.CopyTo(rawSalted, 0); ) } diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index ec0fab1f111..2597e99f55b 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.3.3-dev +version: 1.4.4-dev groups: - csharp - queries diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.expected b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.expected deleted file mode 100644 index 968e28976a8..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.expected +++ /dev/null @@ -1,4 +0,0 @@ -| Program.cs:25:34:25:38 | false | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:38:88:38:92 | false | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:61:34:61:34 | access to local variable v | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:68:88:68:88 | access to local variable v | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/Program.cs deleted file mode 100644 index 60f217eff20..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/Program.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.AspNetCore.Http; - -public class MyController : Microsoft.AspNetCore.Mvc.Controller -{ - public void CookieDefault() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - cookieOptions.HttpOnly = false; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: HttpOnly is set in callback - } -} - -public class Startup -{ - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - app.UseCookiePolicy(); - } - - public void ConfigureServices(IServiceCollection services) - { - services.Configure(options => - { - options.OnAppendCookie = cookieContext => SetCookies(cookieContext.CookieOptions); - }); - } - - private void SetCookies(CookieOptions options) - { - options.Secure = true; - options.HttpOnly = true; - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/options b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/options deleted file mode 100644 index ce3f295ed11..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.expected b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.expected deleted file mode 100644 index 28844595859..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.expected +++ /dev/null @@ -1,4 +0,0 @@ -| Program.cs:23:27:23:31 | false | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:28:74:28:78 | false | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:48:27:48:27 | access to local variable v | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:54:74:54:74 | access to local variable v | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/options b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/options deleted file mode 100644 index 9290f65d5b2..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.expected b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.expected deleted file mode 100644 index aac50988302..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.expected +++ /dev/null @@ -1,2 +0,0 @@ -| Program.cs:5:9:5:49 | call to method Append | Cookie attribute 'HttpOnly' is not set to true. | -| Program.cs:15:29:15:73 | object creation of type CookieOptions | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/Program.cs deleted file mode 100644 index 945c5be55db..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/NoPolicy/Program.cs +++ /dev/null @@ -1,52 +0,0 @@ -public class MyController : Microsoft.AspNetCore.Mvc.Controller -{ - public void CookieDefault() - { - Response.Cookies.Append("auth", "secret"); // BAD: HttpOnly is set to false by default - } - - public void CookieDefaultForgery() - { - Response.Cookies.Append("antiforgerytoken", "secret"); // GOOD: not an auth cookie - } - - public void CookieDefault2() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - Response.Cookies.Append("auth", "secret", cookieOptions); // BAD: HttpOnly is set to false by default - } - - public void CookieDelete() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - Response.Cookies.Delete("auth", cookieOptions); // GOOD: Delete call - } - - void CookieDirectTrue() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - cookieOptions.HttpOnly = true; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = true }; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD - } - - void CookieIntermediateTrue() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - bool v = true; - cookieOptions.HttpOnly = v; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = v }; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/options b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/options deleted file mode 100644 index ce3f295ed11..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.expected b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.expected deleted file mode 100644 index 85b07c94e9e..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.expected +++ /dev/null @@ -1 +0,0 @@ -| Program.cs:5:22:5:59 | object creation of type HttpCookie | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/Program.cs deleted file mode 100644 index bc66b526fa5..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("sessionID"); // BAD: httpOnlyCookies is set to false by default - } - - void CookieDefaultForgery() - { - var cookie = new System.Web.HttpCookie("anticsrftoken"); // GOOD: not an auth cookie - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - cookie.HttpOnly = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - bool v = true; - cookie.HttpOnly = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.expected b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.expected deleted file mode 100644 index 85b07c94e9e..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.expected +++ /dev/null @@ -1 +0,0 @@ -| Program.cs:5:22:5:59 | object creation of type HttpCookie | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Program.cs deleted file mode 100644 index 52ef13373f7..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("sessionID"); // BAD: httpOnlyCookies is set to false in config - } - - void CookieDefaultForgery() - { - var cookie = new System.Web.HttpCookie("anticsrftoken"); // GOOD: not an auth cookie - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - cookie.HttpOnly = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - bool v = true; - cookie.HttpOnly = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Web.config b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Web.config deleted file mode 100644 index d6202a55188..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/Web.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/options b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigFalse/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/HttpOnly.qlref b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/HttpOnly.qlref deleted file mode 100644 index 91ce226003c..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/HttpOnly.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-1004/CookieWithoutHttpOnly.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Program.cs deleted file mode 100644 index 6eeb4f6d334..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("sessionID"); // GOOD: httpOnlyCookies is set to true in config - } - - void CookieDefaultForgery() - { - var cookie = new System.Web.HttpCookie("anticsrftoken"); // GOOD: not an auth cookie - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - cookie.HttpOnly = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("sessionID"); - bool v = true; - cookie.HttpOnly = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/options b/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/Program.cs deleted file mode 100644 index 9c21416940b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/Program.cs +++ /dev/null @@ -1,47 +0,0 @@ -public class MyController : Microsoft.AspNetCore.Mvc.Controller -{ - public void CookieDefault() - { - Response.Cookies.Append("name", "value"); // BAD: requireSSL is set to false by default - } - - public void CookieDefault2() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - Response.Cookies.Append("name", "value", cookieOptions); // BAD: requireSSL is set to false by default - } - - public void CookieDelete() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - Response.Cookies.Delete("name", cookieOptions); // GOOD: Delete call - } - - void CookieDirectTrue() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - cookieOptions.Secure = true; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = true }; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD - } - - void CookieIntermediateTrue() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - bool v = true; - cookieOptions.Secure = v; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = v }; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.expected b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.expected deleted file mode 100644 index f96df31ad21..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.expected +++ /dev/null @@ -1,2 +0,0 @@ -| Program.cs:5:9:5:48 | call to method Append | Cookie attribute 'Secure' is not set to true. | -| Program.cs:10:29:10:73 | object creation of type CookieOptions | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/NoPolicy/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/options deleted file mode 100644 index ce3f295ed11..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.expected b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.expected deleted file mode 100644 index 7b7bc343942..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.expected +++ /dev/null @@ -1,4 +0,0 @@ -| Program.cs:25:32:25:36 | false | Cookie attribute 'Secure' is not set to true. | -| Program.cs:31:86:31:90 | false | Cookie attribute 'Secure' is not set to true. | -| Program.cs:54:32:54:32 | access to local variable v | Cookie attribute 'Secure' is not set to true. | -| Program.cs:61:86:61:86 | access to local variable v | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/Program.cs deleted file mode 100644 index 542b1a298fa..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/Program.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.AspNetCore.Http; - -public class MyController : Microsoft.AspNetCore.Mvc.Controller -{ - public void CookieDefault() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - cookieOptions.Secure = false; - Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: Secure is set in callback - } -} - -public class Startup -{ - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - app.UseCookiePolicy(); - } - - public void ConfigureServices(IServiceCollection services) - { - services.Configure(options => - { - options.OnAppendCookie = cookieContext => SetCookies(cookieContext.CookieOptions); - }); - } - - private void SetCookies(CookieOptions options) - { - options.Secure = true; - options.HttpOnly = true; - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/options deleted file mode 100644 index ce3f295ed11..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.expected b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.expected deleted file mode 100644 index fb6b5e842e2..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.expected +++ /dev/null @@ -1,4 +0,0 @@ -| Program.cs:17:25:17:29 | false | Cookie attribute 'Secure' is not set to true. | -| Program.cs:22:73:22:77 | false | Cookie attribute 'Secure' is not set to true. | -| Program.cs:42:25:42:25 | access to local variable v | Cookie attribute 'Secure' is not set to true. | -| Program.cs:48:73:48:73 | access to local variable v | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/options deleted file mode 100644 index 9290f65d5b2..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Program.cs deleted file mode 100644 index 4011a7d1a63..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("cookieName"); // BAD: requireSSL is set to false by default - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - cookie.Secure = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("cookieName") { Secure = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - bool v = true; - cookie.Secure = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.expected b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.expected deleted file mode 100644 index 6c224aab89d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.expected +++ /dev/null @@ -1 +0,0 @@ -| Program.cs:5:22:5:60 | object creation of type HttpCookie | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Program.cs deleted file mode 100644 index 392366a72d2..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("cookieName"); // BAD: requireSSL is set to false in config - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - cookie.Secure = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("cookieName") { Secure = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - bool v = true; - cookie.Secure = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.expected b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.expected deleted file mode 100644 index 6c224aab89d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.expected +++ /dev/null @@ -1 +0,0 @@ -| Program.cs:5:22:5:60 | object creation of type HttpCookie | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/Program.cs deleted file mode 100644 index be53a64ae6e..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("cookieName"); // GOOD: requireSSL is set to true in config - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - cookie.Secure = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("cookieName") { Secure = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - bool v = true; - cookie.Secure = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/Program.cs b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/Program.cs deleted file mode 100644 index be53a64ae6e..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/Program.cs +++ /dev/null @@ -1,31 +0,0 @@ -class Program -{ - void CookieDefault() - { - var cookie = new System.Web.HttpCookie("cookieName"); // GOOD: requireSSL is set to true in config - } - - void CookieDirectTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - cookie.Secure = true; // GOOD - } - - void CookieDirectTrueInitializer() - { - var cookie = new System.Web.HttpCookie("cookieName") { Secure = true }; // GOOD - } - - void CookieIntermediateTrue() - { - var cookie = new System.Web.HttpCookie("cookieName"); - bool v = true; - cookie.Secure = v; // GOOD: should track local data flow - } - - void CookieIntermediateTrueInitializer() - { - bool v = true; - var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // GOOD: should track local data flow - } -} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/RequireSSL.qlref b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/RequireSSL.qlref deleted file mode 100644 index f76146a862b..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/RequireSSL.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security Features/CWE-614/CookieWithoutSecure.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/options b/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/options deleted file mode 100644 index 9d05f9bf06d..00000000000 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/options +++ /dev/null @@ -1,3 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj -semmle-extractor-options: ${testdir}/../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected b/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected index 7d1d5bf5af2..a877dc5a99c 100644 --- a/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected +++ b/csharp/ql/test/library-tests/assignables/AssignableDefinitionNode.expected @@ -31,7 +31,7 @@ | Assignables.cs:69:13:69:17 | ... = ... | Assignables.cs:69:13:69:17 | ... = ... | | Assignables.cs:78:22:78:22 | String s | Assignables.cs:78:22:78:22 | String s | | Assignables.cs:82:21:82:33 | String temp = ... | Assignables.cs:82:21:82:33 | String temp = ... | -| Assignables.cs:84:30:84:30 | Exception e | Assignables.cs:84:30:84:30 | [exception: OutOfMemoryException] Exception e | +| Assignables.cs:84:30:84:30 | Exception e | Assignables.cs:84:30:84:30 | Exception e | | Assignables.cs:92:9:92:54 | ... = ... | Assignables.cs:92:9:92:54 | ... = ... | | Assignables.cs:92:9:92:54 | ... = ... | Assignables.cs:92:9:92:54 | ... = ... | | Assignables.cs:92:9:92:54 | ... = ... | Assignables.cs:92:9:92:54 | ... = ... | @@ -81,7 +81,6 @@ | Discards.cs:25:22:25:22 | String _ | Discards.cs:25:22:25:22 | String _ | | Finally.cs:7:13:7:17 | Int32 i = ... | Finally.cs:7:13:7:17 | Int32 i = ... | | Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | ... = ... | -| Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | [finally: exception(Exception)] ... = ... | | Patterns.cs:7:16:7:23 | Object o = ... | Patterns.cs:7:16:7:23 | Object o = ... | | Patterns.cs:8:18:8:23 | Int32 i1 | Patterns.cs:8:18:8:23 | Int32 i1 | | Patterns.cs:12:23:12:31 | String s1 | Patterns.cs:12:23:12:31 | String s1 | diff --git a/csharp/ql/test/library-tests/assignables/Assignables.expected b/csharp/ql/test/library-tests/assignables/Assignables.expected index 6c11ac4869a..97c22cd9127 100644 --- a/csharp/ql/test/library-tests/assignables/Assignables.expected +++ b/csharp/ql/test/library-tests/assignables/Assignables.expected @@ -43,12 +43,6 @@ | Assignables.cs:92:23:92:23 | b | | Assignables.cs:92:33:92:33 | s | | Assignables.cs:95:40:95:44 | tuple | -| Assignables.cs:97:24:97:24 | Item1 | -| Assignables.cs:97:27:97:36 | Item2 | -| Assignables.cs:101:6:101:8 | Item1 | -| Assignables.cs:101:11:101:24 | Item2 | -| Assignables.cs:101:12:101:15 | Item1 | -| Assignables.cs:101:18:101:23 | Item2 | | Assignables.cs:108:13:108:13 | i | | Assignables.cs:109:14:109:14 | p | | Assignables.cs:113:25:113:25 | i | @@ -69,8 +63,6 @@ | Assignables.cs:132:13:132:13 | x | | Assignables.cs:133:29:133:29 | s | | Assignables.cs:138:19:138:19 | x | -| Discards.cs:5:6:5:8 | Item1 | -| Discards.cs:5:11:5:16 | Item2 | | Discards.cs:5:30:5:30 | x | | Discards.cs:19:14:19:14 | x | | Discards.cs:20:17:20:17 | y | diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index 6177eb7e335..c9f7d2ab35c 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -20,177 +20,149 @@ | Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | exit AssertTests | 5 | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:20:9:20 | access to parameter b | 4 | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | exit M1 | 1 | -| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:22:10:30 | ... != ... | 6 | +| Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | exit M1 (abnormal) | 1 | +| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:9:10:31 | call to method Assert | 7 | | Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null | 1 | | Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" | 1 | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | exit M1 (abnormal) | 2 | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:7:10:7:11 | exit M1 (normal) | 6 | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:7:10:7:11 | exit M1 (normal) | 5 | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:20:16:20 | access to parameter b | 4 | | Assert.cs:14:10:14:11 | exit M2 | Assert.cs:14:10:14:11 | exit M2 | 1 | -| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:23:17:23 | access to local variable s | 4 | +| Assert.cs:14:10:14:11 | exit M2 (abnormal) | Assert.cs:14:10:14:11 | exit M2 (abnormal) | 1 | +| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:9:17:24 | call to method IsNull | 5 | | Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null | 1 | | Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" | 1 | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | 2 | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (normal) | 6 | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:14:10:14:11 | exit M2 (normal) | 5 | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:20:23:20 | access to parameter b | 4 | | Assert.cs:21:10:21:11 | exit M3 | Assert.cs:21:10:21:11 | exit M3 | 1 | -| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:26:24:26 | access to local variable s | 4 | +| Assert.cs:21:10:21:11 | exit M3 (abnormal) | Assert.cs:21:10:21:11 | exit M3 (abnormal) | 1 | +| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:9:24:27 | call to method IsNotNull | 5 | | Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null | 1 | | Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" | 1 | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | 2 | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (normal) | 6 | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:21:10:21:11 | exit M3 (normal) | 5 | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:20:30:20 | access to parameter b | 4 | | Assert.cs:28:10:28:11 | exit M4 | Assert.cs:28:10:28:11 | exit M4 | 1 | -| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:23:31:31 | ... == ... | 6 | +| Assert.cs:28:10:28:11 | exit M4 (abnormal) | Assert.cs:28:10:28:11 | exit M4 (abnormal) | 1 | +| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:9:31:32 | call to method IsTrue | 7 | | Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null | 1 | | Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" | 1 | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | 2 | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (normal) | 6 | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:28:10:28:11 | exit M4 (normal) | 5 | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:20:37:20 | access to parameter b | 4 | | Assert.cs:35:10:35:11 | exit M5 | Assert.cs:35:10:35:11 | exit M5 | 1 | -| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:23:38:31 | ... != ... | 6 | +| Assert.cs:35:10:35:11 | exit M5 (abnormal) | Assert.cs:35:10:35:11 | exit M5 (abnormal) | 1 | +| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:9:38:32 | call to method IsTrue | 7 | | Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null | 1 | | Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" | 1 | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | 2 | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (normal) | 6 | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:35:10:35:11 | exit M5 (normal) | 5 | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:20:44:20 | access to parameter b | 4 | | Assert.cs:42:10:42:11 | exit M6 | Assert.cs:42:10:42:11 | exit M6 | 1 | -| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:24:45:32 | ... != ... | 6 | +| Assert.cs:42:10:42:11 | exit M6 (abnormal) | Assert.cs:42:10:42:11 | exit M6 (abnormal) | 1 | +| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:9:45:33 | call to method IsFalse | 7 | | Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null | 1 | | Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" | 1 | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | 2 | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (normal) | 6 | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:42:10:42:11 | exit M6 (normal) | 5 | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:20:51:20 | access to parameter b | 4 | | Assert.cs:49:10:49:11 | exit M7 | Assert.cs:49:10:49:11 | exit M7 | 1 | -| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:24:52:32 | ... == ... | 6 | +| Assert.cs:49:10:49:11 | exit M7 (abnormal) | Assert.cs:49:10:49:11 | exit M7 (abnormal) | 1 | +| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:9:52:33 | call to method IsFalse | 7 | | Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null | 1 | | Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" | 1 | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | 2 | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (normal) | 6 | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:49:10:49:11 | exit M7 (normal) | 5 | | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:20:58:20 | access to parameter b | 4 | | Assert.cs:56:10:56:11 | exit M8 | Assert.cs:56:10:56:11 | exit M8 | 1 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | 7 | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | 7 | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | 2 | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (normal) | 6 | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:23:59:36 | [false] ... && ... | 1 | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:23:59:36 | [true] ... && ... | 1 | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | 1 | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | 1 | +| Assert.cs:56:10:56:11 | exit M8 (abnormal) | Assert.cs:56:10:56:11 | exit M8 (abnormal) | 1 | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:59:23:59:31 | ... != ... | 6 | +| Assert.cs:58:24:58:27 | null | Assert.cs:58:24:58:27 | null | 1 | +| Assert.cs:58:31:58:32 | "" | Assert.cs:58:31:58:32 | "" | 1 | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:9:59:37 | call to method IsTrue | 2 | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | 1 | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:56:10:56:11 | exit M8 (normal) | 5 | | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:20:65:20 | access to parameter b | 4 | | Assert.cs:63:10:63:11 | exit M9 | Assert.cs:63:10:63:11 | exit M9 | 1 | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | 7 | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | 7 | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | 2 | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (normal) | 6 | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:24:66:37 | [false] ... \|\| ... | 1 | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | 1 | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | 1 | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | 1 | +| Assert.cs:63:10:63:11 | exit M9 (abnormal) | Assert.cs:63:10:63:11 | exit M9 (abnormal) | 1 | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:66:24:66:32 | ... == ... | 6 | +| Assert.cs:65:24:65:27 | null | Assert.cs:65:24:65:27 | null | 1 | +| Assert.cs:65:31:65:32 | "" | Assert.cs:65:31:65:32 | "" | 1 | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:9:66:38 | call to method IsFalse | 2 | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | 1 | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:63:10:63:11 | exit M9 (normal) | 5 | | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:20:72:20 | access to parameter b | 4 | | Assert.cs:70:10:70:12 | exit M10 | Assert.cs:70:10:70:12 | exit M10 | 1 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | 7 | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | 7 | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | 2 | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (normal) | 6 | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:23:73:36 | [false] ... && ... | 1 | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:23:73:36 | [true] ... && ... | 1 | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | 1 | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | 1 | +| Assert.cs:70:10:70:12 | exit M10 (abnormal) | Assert.cs:70:10:70:12 | exit M10 (abnormal) | 1 | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:73:23:73:31 | ... == ... | 6 | +| Assert.cs:72:24:72:27 | null | Assert.cs:72:24:72:27 | null | 1 | +| Assert.cs:72:31:72:32 | "" | Assert.cs:72:31:72:32 | "" | 1 | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:9:73:37 | call to method IsTrue | 2 | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | 1 | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:70:10:70:12 | exit M10 (normal) | 5 | | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:20:79:20 | access to parameter b | 4 | | Assert.cs:77:10:77:12 | exit M11 | Assert.cs:77:10:77:12 | exit M11 | 1 | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | 7 | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | 7 | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | 2 | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (normal) | 6 | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:24:80:37 | [false] ... \|\| ... | 1 | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | 1 | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | 1 | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | 1 | +| Assert.cs:77:10:77:12 | exit M11 (abnormal) | Assert.cs:77:10:77:12 | exit M11 (abnormal) | 1 | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:80:24:80:32 | ... != ... | 6 | +| Assert.cs:79:24:79:27 | null | Assert.cs:79:24:79:27 | null | 1 | +| Assert.cs:79:31:79:32 | "" | Assert.cs:79:31:79:32 | "" | 1 | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:9:80:38 | call to method IsFalse | 2 | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | 1 | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:77:10:77:12 | exit M11 (normal) | 5 | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:20:86:20 | access to parameter b | 4 | | Assert.cs:84:10:84:12 | exit M12 | Assert.cs:84:10:84:12 | exit M12 | 1 | | Assert.cs:84:10:84:12 | exit M12 (abnormal) | Assert.cs:84:10:84:12 | exit M12 (abnormal) | 1 | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | 7 | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | 7 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | 1 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | 1 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | 5 | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | 5 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | 1 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | 1 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | 5 | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | 5 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | 1 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | 1 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | 7 | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | 7 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | 1 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | 1 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | 7 | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | 7 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | 1 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | 1 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | 7 | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | 7 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | 1 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | 1 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | 7 | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | 7 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | 1 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | 1 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | 7 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | 7 | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | 7 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | 1 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | 1 | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | 1 | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | 1 | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | 1 | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | 1 | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | 1 | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | 7 | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | 1 | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | 1 | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | 1 | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | 1 | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | 1 | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | 7 | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | 1 | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | 7 | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | 1 | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | 1 | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | 1 | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | 7 | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | 1 | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (normal) | 6 | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | 1 | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | 1 | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:37:127:38 | [false] !... | 1 | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | 1 | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:87:9:87:31 | call to method Assert | 7 | +| Assert.cs:86:24:86:27 | null | Assert.cs:86:24:86:27 | null | 1 | +| Assert.cs:86:31:86:32 | "" | Assert.cs:86:31:86:32 | "" | 1 | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:13:90:13 | access to parameter b | 6 | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:91:9:91:24 | call to method IsNull | 5 | +| Assert.cs:90:17:90:20 | null | Assert.cs:90:17:90:20 | null | 1 | +| Assert.cs:90:24:90:25 | "" | Assert.cs:90:24:90:25 | "" | 1 | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:13:94:13 | access to parameter b | 6 | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:95:9:95:27 | call to method IsNotNull | 5 | +| Assert.cs:94:17:94:20 | null | Assert.cs:94:17:94:20 | null | 1 | +| Assert.cs:94:24:94:25 | "" | Assert.cs:94:24:94:25 | "" | 1 | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:13:98:13 | access to parameter b | 6 | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:99:9:99:32 | call to method IsTrue | 7 | +| Assert.cs:98:17:98:20 | null | Assert.cs:98:17:98:20 | null | 1 | +| Assert.cs:98:24:98:25 | "" | Assert.cs:98:24:98:25 | "" | 1 | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:13:102:13 | access to parameter b | 6 | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:103:9:103:32 | call to method IsTrue | 7 | +| Assert.cs:102:17:102:20 | null | Assert.cs:102:17:102:20 | null | 1 | +| Assert.cs:102:24:102:25 | "" | Assert.cs:102:24:102:25 | "" | 1 | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:13:106:13 | access to parameter b | 6 | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:107:9:107:33 | call to method IsFalse | 7 | +| Assert.cs:106:17:106:20 | null | Assert.cs:106:17:106:20 | null | 1 | +| Assert.cs:106:24:106:25 | "" | Assert.cs:106:24:106:25 | "" | 1 | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:13:110:13 | access to parameter b | 6 | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:111:9:111:33 | call to method IsFalse | 7 | +| Assert.cs:110:17:110:20 | null | Assert.cs:110:17:110:20 | null | 1 | +| Assert.cs:110:24:110:25 | "" | Assert.cs:110:24:110:25 | "" | 1 | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:13:114:13 | access to parameter b | 6 | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:115:23:115:31 | ... != ... | 6 | +| Assert.cs:114:17:114:20 | null | Assert.cs:114:17:114:20 | null | 1 | +| Assert.cs:114:24:114:25 | "" | Assert.cs:114:24:114:25 | "" | 1 | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:9:115:37 | call to method IsTrue | 2 | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | 1 | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:13:118:13 | access to parameter b | 6 | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:119:24:119:32 | ... == ... | 6 | +| Assert.cs:118:17:118:20 | null | Assert.cs:118:17:118:20 | null | 1 | +| Assert.cs:118:24:118:25 | "" | Assert.cs:118:24:118:25 | "" | 1 | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:9:119:39 | call to method IsFalse | 2 | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:37:119:38 | !... | 2 | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:13:122:13 | access to parameter b | 6 | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:123:23:123:31 | ... == ... | 6 | +| Assert.cs:122:17:122:20 | null | Assert.cs:122:17:122:20 | null | 1 | +| Assert.cs:122:24:122:25 | "" | Assert.cs:122:24:122:25 | "" | 1 | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:9:123:37 | call to method IsTrue | 2 | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | 1 | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:13:126:13 | access to parameter b | 6 | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:127:24:127:32 | ... != ... | 6 | +| Assert.cs:126:17:126:20 | null | Assert.cs:126:17:126:20 | null | 1 | +| Assert.cs:126:24:126:25 | "" | Assert.cs:126:24:126:25 | "" | 1 | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:9:127:39 | call to method IsFalse | 2 | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:37:127:38 | !... | 2 | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:84:10:84:12 | exit M12 (normal) | 5 | | Assert.cs:131:18:131:32 | enter AssertTrueFalse | Assert.cs:131:18:131:32 | exit AssertTrueFalse | 4 | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:25:140:26 | access to parameter b1 | 5 | +| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | 8 | | Assert.cs:138:10:138:12 | exit M13 | Assert.cs:138:10:138:12 | exit M13 | 1 | | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 (abnormal) | 1 | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | 1 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | 1 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | 2 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | 2 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:138:10:138:12 | exit M13 (normal) | 4 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | 2 | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | exit Assignments | 5 | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... | 4 | @@ -206,31 +178,24 @@ | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:22:29:22:32 | access to parameter args | 3 | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | 1 | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:26:21:26:31 | ... == ... | 8 | -| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | 6 | +| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:27:21:27:26 | break; | 1 | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:31:21:31:32 | ... == ... | 5 | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:32:21:32:21 | ; | 1 | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | 1 | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | exit M2 | 3 | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:42:17:42:28 | ... == ... | 8 | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | exit M3 | 2 | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | 3 | +| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:43:17:43:23 | return ...; | 1 | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:47:33:47:36 | access to parameter args | 2 | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | 1 | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | 1 | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:49:21:49:31 | ... == ... | 6 | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | 6 | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:50:21:50:26 | [finally: return] break; | 1 | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:50:21:50:26 | break; | 1 | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:53:7:53:7 | ; | 1 | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:60:17:60:28 | ... == ... | 8 | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | exit M4 | 2 | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | 3 | +| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:61:17:61:23 | return ...; | 1 | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:65:33:65:36 | access to parameter args | 2 | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | 1 | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | 1 | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:67:21:67:31 | ... == ... | 6 | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | 6 | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:68:21:68:26 | [finally: return] break; | 1 | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | 1 | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | 5 | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | exit Default | 6 | @@ -238,7 +203,11 @@ | CompileTimeOperators.cs:15:10:15:15 | enter Typeof | CompileTimeOperators.cs:15:10:15:15 | exit Typeof | 6 | | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | CompileTimeOperators.cs:20:12:20:17 | exit Nameof | 6 | | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | 5 | -| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | exit M | 15 | +| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | 9 | +| CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | exit M | 1 | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | 1 | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | 3 | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | 5 | | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | exit ConditionalAccess | 5 | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:26 | access to parameter i | 2 | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | exit M1 | 2 | @@ -279,49 +248,41 @@ | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 5 | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:5:13:5:15 | access to parameter inc | 4 | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | 2 | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | 5 | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | 2 | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:15 | ...++ | 3 | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:14:7:16 | access to parameter inc | 2 | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:7:13:7:16 | [false] !... | 1 | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:7:13:7:16 | [true] !... | 1 | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:15 | ...-- | 3 | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:14:13:14:13 | access to parameter b | 7 | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | 7 | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | 4 | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | 2 | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | 2 | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:15:13:15:15 | ...++ | 3 | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:16:13:16:17 | ... > ... | 4 | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:18:17:18 | access to parameter b | 2 | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:17:17:17:18 | [false] !... | 1 | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:17:17:17:18 | [true] !... | 1 | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:18:17:18:19 | ...-- | 3 | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:11:9:11:10 | exit M1 | 4 | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:25:13:25:14 | access to parameter b1 | 7 | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:26:17:26:18 | access to parameter b2 | 2 | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | 5 | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | 2 | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:27:17:27:19 | ...++ | 3 | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:28:13:28:14 | access to parameter b2 | 2 | | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:29:13:29:15 | ...++ | 3 | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:22:9:22:10 | exit M2 | 4 | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:37:13:37:14 | access to parameter b1 | 10 | | Conditions.cs:38:13:38:20 | ...; | Conditions.cs:38:13:38:19 | ... = ... | 3 | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:39:13:39:14 | access to local variable b2 | 2 | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | 5 | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | 2 | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:40:13:40:15 | ...++ | 3 | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:41:13:41:14 | access to local variable b2 | 2 | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:15 | ...++ | 3 | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:33:9:33:10 | exit M3 | 4 | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:49:16:49:22 | ... > ... | 10 | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | 4 | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | 3 | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | 3 | +| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:49:9:53:9 | while (...) ... | 6 | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:16:49:22 | ... > ... | 4 | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:51:17:51:17 | access to parameter b | 3 | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | 7 | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:19 | ...++ | 3 | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:46:9:46:10 | exit M4 | 4 | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:60:16:60:22 | ... > ... | 10 | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | 4 | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | 3 | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | 3 | +| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:60:9:64:9 | while (...) ... | 6 | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:16:60:22 | ... > ... | 4 | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:62:17:62:17 | access to parameter b | 3 | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | 7 | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | 2 | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | 2 | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:63:17:63:19 | ...++ | 3 | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:65:13:65:13 | access to parameter b | 2 | | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:66:13:66:15 | ...++ | 3 | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:57:9:57:10 | exit M5 | 4 | @@ -344,10 +305,9 @@ | Conditions.cs:97:17:97:20 | ...; | Conditions.cs:97:17:97:19 | ...++ | 3 | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:86:9:86:10 | exit M7 | 4 | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:105:13:105:13 | access to parameter b | 8 | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | 10 | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | 5 | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | 2 | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | 2 | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... = ... | 5 | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | 5 | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:18:108:18 | access to parameter b | 2 | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:17:108:18 | [false] !... | 1 | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:17:108:18 | [true] !... | 1 | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... = ... | 5 | @@ -357,26 +317,21 @@ | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:39 | ... < ... | 4 | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:44 | ...++ | 2 | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:18:119:21 | access to local variable last | 11 | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | 1 | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | 1 | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | 5 | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | 2 | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:119:17:119:21 | [false] !... | 1 | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:119:17:119:21 | [true] !... | 1 | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:120:17:120:22 | ... = ... | 3 | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:121:17:121:20 | access to local variable last | 2 | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:17:122:24 | ... = ... | 3 | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | true | 4 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | 1 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | 1 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | 4 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | 4 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | 4 | +| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:9:140:9 | while (...) ... | 3 | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:131:16:131:19 | true | 1 | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:133:17:133:22 | access to field Field1 | 4 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | 4 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | 4 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | 4 | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | 6 | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:135:21:135:26 | access to field Field2 | 4 | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:137:21:137:37 | call to method ToString | 5 | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:17:145:17 | access to parameter b | 4 | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 | 2 | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | 5 | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | 5 | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:146:13:146:13 | access to parameter b | 4 | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:21:145:23 | "a" | 1 | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" | 1 | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 6 | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 6 | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods | 5 | @@ -385,12 +340,10 @@ | ExitMethods.cs:20:10:20:11 | enter M3 | ExitMethods.cs:20:10:20:11 | exit M3 | 7 | | ExitMethods.cs:26:10:26:11 | enter M4 | ExitMethods.cs:26:10:26:11 | exit M4 | 7 | | ExitMethods.cs:32:10:32:11 | enter M5 | ExitMethods.cs:32:10:32:11 | exit M5 | 7 | -| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | 7 | +| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:44:9:47:9 | catch (...) {...} | 8 | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:38:10:38:11 | exit M6 | 2 | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | 1 | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | 1 | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:46:13:46:19 | return ...; | 2 | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | 1 | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | 1 | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:50:13:50:19 | return ...; | 2 | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:54:10:54:11 | exit M7 | 6 | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:60:10:60:11 | exit M8 | 6 | @@ -415,15 +368,13 @@ | ExitMethods.cs:117:16:117:38 | ... ? ... : ... | ExitMethods.cs:115:16:115:34 | exit ExtensionMethodCall | 4 | | ExitMethods.cs:117:34:117:34 | 0 | ExitMethods.cs:117:34:117:34 | 0 | 1 | | ExitMethods.cs:117:38:117:38 | 1 | ExitMethods.cs:117:38:117:38 | 1 | 1 | -| ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:122:23:122:27 | false | 4 | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | 3 | +| ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | 7 | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 | 7 | -| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | 2 | +| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:33:132:49 | call to method IsFalse | 3 | | ExitMethods.cs:132:10:132:20 | exit AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse | 1 | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | 2 | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | 2 | -| ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:136:21:136:24 | true | 5 | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | 3 | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | 1 | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | 1 | +| ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | 8 | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:142:13:142:13 | access to parameter b | 4 | | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow | 2 | | ExitMethods.cs:143:13:143:43 | ...; | ExitMethods.cs:143:13:143:42 | call to method Throw | 3 | @@ -433,62 +384,51 @@ | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | exit CallToInt32 | 5 | | Extensions.cs:20:17:20:20 | enter Main | Extensions.cs:20:17:20:20 | exit Main | 20 | | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 5 | -| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:11:13:11:37 | call to method WriteLine | 7 | +| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:15:13:15:40 | call to method WriteLine | 11 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | 1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 5 | -| Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | exit M1 (normal) | 5 | +| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 1 | +| Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:7:10:7:11 | exit M1 (normal) | 1 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:23:13:23:37 | call to method WriteLine | 7 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | 1 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | 1 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | 1 | -| Finally.cs:24:13:24:19 | return ...; | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | 5 | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | 2 | -| Finally.cs:27:9:29:9 | {...} | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | 6 | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:21:34:24 | true | 6 | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | 9 | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:50:13:50:40 | call to method WriteLine | 5 | +| Finally.cs:24:13:24:19 | return ...; | Finally.cs:24:13:24:19 | return ...; | 1 | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:9:29:9 | catch (...) {...} | 1 | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:26:48:26:51 | true | 2 | +| Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | 2 | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | 1 | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:34:21:34:24 | true | 6 | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:38:17:38:44 | throw ...; | 5 | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | 1 | +| Finally.cs:42:9:43:9 | {...} | Finally.cs:42:9:43:9 | {...} | 1 | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:46:13:46:19 | return ...; | 3 | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:50:13:50:40 | call to method WriteLine | 4 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:58:13:58:37 | call to method WriteLine | 7 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | 1 | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | 1 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | 1 | -| Finally.cs:59:13:59:19 | return ...; | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | 5 | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | 2 | -| Finally.cs:62:9:64:9 | {...} | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | 6 | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | 5 | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:70:13:70:40 | call to method WriteLine | 5 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | 4 | +| Finally.cs:59:13:59:19 | return ...; | Finally.cs:59:13:59:19 | return ...; | 1 | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:9:64:9 | catch (...) {...} | 1 | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:61:48:61:51 | true | 2 | +| Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | 2 | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | 1 | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:65:35:65:51 | ... != ... | 5 | +| Finally.cs:66:9:67:9 | {...} | Finally.cs:66:9:67:9 | {...} | 1 | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:70:13:70:40 | call to method WriteLine | 4 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:77:9:100:9 | while (...) ... | 6 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | 1 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | 1 | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:74:10:74:11 | exit M4 (normal) | 1 | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:77:16:77:20 | ... > ... | 3 | | Finally.cs:78:9:100:9 | {...} | Finally.cs:81:21:81:26 | ... == ... | 7 | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:92:25:92:30 | [finally: return] ... == ... | 8 | +| Finally.cs:82:21:82:27 | return ...; | Finally.cs:82:21:82:27 | return ...; | 1 | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:21:83:26 | ... == ... | 4 | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | 8 | +| Finally.cs:84:21:84:29 | continue; | Finally.cs:84:21:84:29 | continue; | 1 | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:21:85:26 | ... == ... | 4 | -| Finally.cs:86:21:86:26 | break; | Finally.cs:92:25:92:30 | [finally: break] ... == ... | 8 | +| Finally.cs:86:21:86:26 | break; | Finally.cs:86:21:86:26 | break; | 1 | | Finally.cs:89:13:99:13 | {...} | Finally.cs:92:25:92:30 | ... == ... | 7 | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | 1 | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | 1 | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | 1 | | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:93:25:93:46 | throw ...; | 1 | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | 1 | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | 1 | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | 1 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:23 | [finally: break] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:23 | [finally: continue] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | 4 | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:23 | [finally: return] ...-- | 4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:23 | ...-- | 4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:107:17:107:21 | access to field Field | 7 | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | exit M5 | 1 | @@ -496,79 +436,33 @@ | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:103:10:103:11 | exit M5 (normal) | 1 | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:17:107:28 | access to property Length | 1 | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:33 | ... == ... | 2 | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:19:114:35 | [finally: return] ... == ... | 8 | +| Finally.cs:108:17:108:23 | return ...; | Finally.cs:108:17:108:23 | return ...; | 1 | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | access to field Field | 3 | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | 1 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | 2 | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | 8 | +| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | 1 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | 1 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | 7 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | 7 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:19:114:35 | ... == ... | 7 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | 1 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | 1 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | 1 | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | 1 | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | 1 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:40 | call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 4 | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | 4 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | 6 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | 6 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | 6 | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:32 | [finally: return] ... > ... | 6 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:32 | ... > ... | 6 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:36 | call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 3 | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | 3 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | exit M6 | 12 | -| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:137:13:137:36 | call to method WriteLine | 7 | -| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 | 2 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | 4 | -| Finally.cs:140:9:143:9 | {...} | Finally.cs:141:13:141:44 | throw ...; | 4 | +| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | exit M7 | 13 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:151:17:151:28 | ... == ... | 8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | 1 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | 1 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | 1 | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | 7 | +| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | 1 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | 1 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | 6 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:158:21:158:31 | access to property Length | 6 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | 2 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | 2 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | 2 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | 1 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | 1 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | 1 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | 2 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | 2 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | 2 | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | 1 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | 1 | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | 5 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | 5 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | 6 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | 6 | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:13:164:13 | catch (...) {...} | 1 | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:39:161:54 | ... == ... | 5 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:42 | call to method WriteLine | 6 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | 5 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | 5 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:167:17:167:37 | call to method WriteLine | 5 | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 5 | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 5 | @@ -577,90 +471,46 @@ | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | 1 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | 1 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | 1 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | 6 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | 1 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | 5 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | 5 | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 2 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | 1 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 1 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | 3 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | 3 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | 3 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | 2 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | 2 | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:180:21:180:43 | throw ...; | 1 | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:27:180:42 | object creation of type ExceptionA | 1 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:186:21:186:22 | access to parameter b2 | 5 | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:186:25:186:47 | throw ...; | 1 | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:31:186:46 | object creation of type ExceptionB | 1 | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:13:191:13 | catch (...) {...} | 1 | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:188:38:188:39 | access to parameter b2 | 1 | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:190:21:190:22 | access to parameter b1 | 3 | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:25:190:47 | throw ...; | 2 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:17:199:18 | access to parameter b1 | 6 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | 1 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | 1 | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | 6 | +| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | 1 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | 1 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | 5 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | 5 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | 4 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | 1 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | 1 | +| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | 1 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | 1 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | 3 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:21:209:22 | access to parameter b3 | 3 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | 2 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | 2 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | 2 | -| Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 9 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | 4 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | 4 | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:28 | ... = ... | 4 | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 5 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine | 7 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 9 | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:239:21:239:22 | access to parameter b1 | 8 | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | 1 | | Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | 1 | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | 6 | +| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | 1 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | 1 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | 5 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | 5 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | 5 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | 1 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | 1 | +| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | 1 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | 1 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | 4 | -| Finally.cs:250:17:252:17 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | 7 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | 4 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | 4 | -| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (normal) | 8 | -| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:267:13:267:34 | call to method WriteLine | 7 | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:251:21:251:54 | call to method WriteLine | 4 | +| Finally.cs:254:13:254:45 | ...; | Finally.cs:254:13:254:44 | call to method WriteLine | 3 | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:46 | call to method WriteLine | 4 | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | exit M12 (normal) | 4 | +| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:272:13:272:18 | ... = ... | 16 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | exit M13 (normal) | 10 | +| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 1 | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | exit M13 (normal) | 1 | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 5 | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | exit M1 | 2 | @@ -705,48 +555,60 @@ | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:9:13:9:28 | ... == ... | 7 | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | 2 | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:10:13:10:19 | return ...; | 1 | -| LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | 5 | -| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | 2 | -| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | 12 | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | 4 | +| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:29:11:32 | access to parameter args | 1 | +| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | 11 | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:15:10:15:11 | exit M2 | 2 | -| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | 5 | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | 4 | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:24:29:24:32 | access to parameter args | 3 | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:22:10:22:11 | exit M3 | 2 | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | 1 | -| LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | 3 | -| LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | 5 | -| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | 8 | +| LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:34:25:37 | access to parameter args | 2 | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | 4 | +| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | 7 | | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:29:10:29:11 | exit M4 | 2 | -| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | 20 | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | 4 | +| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | 19 | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | exit M5 | 2 | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | 1 | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | 3 | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | 7 | -| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | 12 | +| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | 2 | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | 6 | +| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | 12 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | exit M6 | 2 | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:49:9:52:9 | {...} | 2 | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:51:13:51:23 | goto ...; | 5 | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | 12 | +| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | 11 | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | exit M7 | 2 | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | 1 | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:60:17:60:17 | access to parameter b | 4 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | 4 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | 4 | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | 5 | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | 2 | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | 4 | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | 3 | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:62:17:62:17 | access to parameter b | 2 | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | 3 | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:69:14:69:23 | call to method Any | 5 | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | exit M8 | 2 | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:69:13:69:23 | [false] !... | 1 | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:69:13:69:23 | [true] !... | 1 | | LoopUnrolling.cs:70:13:70:19 | return ...; | LoopUnrolling.cs:70:13:70:19 | return ...; | 1 | -| LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | 5 | -| LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | 9 | +| LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:72:29:72:32 | access to parameter args | 4 | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | 4 | +| LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:79:27:79:28 | access to local variable xs | 8 | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | exit M9 | 2 | -| LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | 9 | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | 5 | +| LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:88:27:88:28 | access to local variable xs | 8 | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | exit M10 | 2 | -| LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | 9 | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | 5 | +| LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:97:27:97:28 | access to local variable xs | 8 | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 | 2 | -| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | 6 | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | 1 | +| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | 5 | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | {...} | 2 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | enter C1 | 1 | | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | MultiImplementationA.cs:4:7:4:8 | exit C1 | 2 | @@ -1264,9 +1126,12 @@ | cflow.cs:254:17:254:27 | goto ...; | cflow.cs:254:17:254:27 | goto ...; | 1 | | cflow.cs:255:13:255:20 | default: | cflow.cs:257:17:257:22 | break; | 5 | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:264:18:264:22 | Int32 i = ... | 7 | +| cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | exit Yield | 1 | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | exit Yield (abnormal) | 1 | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | exit Yield (normal) | 1 | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:264:25:264:30 | ... < ... | 3 | | cflow.cs:265:9:267:9 | {...} | cflow.cs:264:33:264:35 | ...++ | 5 | -| cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | exit Yield | 9 | +| cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:275:13:275:41 | call to method WriteLine | 7 | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | exit ControlFlowSub | 5 | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:5:284:18 | exit ControlFlowSub | 5 | | cflow.cs:286:5:286:18 | enter ControlFlowSub | cflow.cs:286:5:286:18 | exit ControlFlowSub | 7 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/CONSISTENCY/CfgConsistency.expected b/csharp/ql/test/library-tests/controlflow/graph/CONSISTENCY/CfgConsistency.expected new file mode 100644 index 00000000000..ff3ec45f5ce --- /dev/null +++ b/csharp/ql/test/library-tests/controlflow/graph/CONSISTENCY/CfgConsistency.expected @@ -0,0 +1,6 @@ +multipleSuccessors +| BreakInTry.cs:31:21:31:32 | ... == ... | false | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | +| BreakInTry.cs:31:21:31:32 | ... == ... | false | BreakInTry.cs:35:7:35:7 | ; | +simpleAndNormalSuccessors +| BreakInTry.cs:32:21:32:21 | ; | break | successor | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | +| Finally.cs:97:21:97:23 | ...-- | break | successor | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:77:16:77:16 | access to local variable i | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected index a59100474ea..2c2f3dbb018 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected @@ -1,1088 +1,56 @@ conditionBlock | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:24:9:27 | null | true | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:31:9:32 | "" | false | -| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | false | -| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | true | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:24:16:27 | null | true | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:31:16:32 | "" | false | -| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | false | -| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | true | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:24:23:27 | null | true | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:31:23:32 | "" | false | -| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | true | -| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | false | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:24:30:27 | null | true | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:31:30:32 | "" | false | -| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | true | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:24:37:27 | null | true | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:31:37:32 | "" | false | -| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | true | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:24:44:27 | null | true | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:31:44:32 | "" | false | -| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | false | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:24:51:27 | null | true | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:31:51:32 | "" | false | -| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | false | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:24:58:27 | [b (line 56): true] null | true | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:31:58:32 | [b (line 56): false] "" | false | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:23:59:36 | [true] ... && ... | true | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | false | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:23:59:36 | [true] ... && ... | true | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | true | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:36 | [true] ... && ... | true | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:24:65:27 | [b (line 63): true] null | true | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:31:65:32 | [b (line 63): false] "" | false | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:24:66:37 | [false] ... \|\| ... | false | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | true | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | false | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:24:66:37 | [false] ... \|\| ... | false | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:37 | [false] ... \|\| ... | false | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:24:72:27 | [b (line 70): true] null | true | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:31:72:32 | [b (line 70): false] "" | false | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:23:73:36 | [true] ... && ... | true | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | false | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:23:73:36 | [true] ... && ... | true | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | true | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:36 | [true] ... && ... | true | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:24:79:27 | [b (line 77): true] null | true | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:31:79:32 | [b (line 77): false] "" | false | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:24:80:37 | [false] ... \|\| ... | false | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | true | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | false | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:24:80:37 | [false] ... \|\| ... | false | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:37 | [false] ... \|\| ... | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:24:86:27 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:31:86:32 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:17:90:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:24:90:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | false | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:90:24:90:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:90:24:90:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:90:17:90:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | false | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | false | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | true | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | true | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:122:17:122:20 | [b (line 84): true] null | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:126:17:126:20 | [b (line 84): true] null | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | true | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | false | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | true | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | true | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | false | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:29:140:30 | access to parameter b2 | true | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | false | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | false | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | false | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:24:58:27 | null | true | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:31:58:32 | "" | false | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:59:36:59:36 | access to parameter b | true | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:24:65:27 | null | true | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:31:65:32 | "" | false | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:66:37:66:37 | access to parameter b | false | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:24:72:27 | null | true | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:31:72:32 | "" | false | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:73:36:73:36 | access to parameter b | true | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:24:79:27 | null | true | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:31:79:32 | "" | false | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:80:37:80:37 | access to parameter b | false | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:24:86:27 | null | true | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:31:86:32 | "" | false | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:17:90:20 | null | true | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:24:90:25 | "" | false | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:17:94:20 | null | true | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:24:94:25 | "" | false | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:17:98:20 | null | true | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:24:98:25 | "" | false | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:17:102:20 | null | true | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:24:102:25 | "" | false | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:17:106:20 | null | true | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:24:106:25 | "" | false | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:17:110:20 | null | true | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:24:110:25 | "" | false | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:17:114:20 | null | true | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:24:114:25 | "" | false | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | true | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:17:118:20 | null | true | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:24:118:25 | "" | false | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | false | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:17:122:20 | null | true | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:24:122:25 | "" | false | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | true | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:17:126:20 | null | true | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:24:126:25 | "" | false | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | false | | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | BreakInTry.cs:7:26:7:28 | String arg | false | | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | BreakInTry.cs:10:21:10:26 | break; | false | | BreakInTry.cs:7:26:7:28 | String arg | BreakInTry.cs:10:21:10:26 | break; | true | @@ -1091,42 +59,16 @@ conditionBlock | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:27:21:27:26 | break; | false | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:30:13:33:13 | {...} | false | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | ; | false | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | [finally: break] ; | false | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:27:21:27:26 | break; | true | -| BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:30:13:33:13 | {...} | false | -| BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:32:21:32:21 | ; | false | -| BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:32:21:32:21 | [finally: break] ; | true | -| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | true | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:32:21:32:21 | ; | true | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:43:17:43:23 | return ...; | true | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:46:9:52:9 | {...} | false | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | true | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | false | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:26:47:28 | String arg | false | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | true | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:50:21:50:26 | [finally: return] break; | true | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:50:21:50:26 | break; | false | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:53:7:53:7 | ; | false | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | false | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:50:21:50:26 | [finally: return] break; | false | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | String arg | false | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:50:21:50:26 | break; | false | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:50:21:50:26 | break; | true | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:50:21:50:26 | [finally: return] break; | true | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:61:17:61:23 | return ...; | true | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:64:9:70:9 | {...} | false | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | true | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | false | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:26:65:28 | String arg | false | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | true | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:68:21:68:26 | [finally: return] break; | true | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:68:21:68:26 | break; | false | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | false | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:68:21:68:26 | [finally: return] break; | false | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | String arg | false | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:68:21:68:26 | break; | false | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:68:21:68:26 | break; | true | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:68:21:68:26 | [finally: return] break; | true | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:38 | call to method ToString | false | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | false | | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | false | @@ -1149,71 +91,38 @@ conditionBlock | ConditionalAccess.cs:23:13:23:38 | Nullable j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false | | ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false | | ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out | false | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | true | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | false | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:13:7:16 | [false] !... | true | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:13:7:16 | [true] !... | false | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:8:13:8:16 | ...; | false | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:7:13:7:16 | [false] !... | true | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | false | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:8:13:8:16 | ...; | false | +| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | ...; | true | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [false] !... | true | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | false | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:8:13:8:16 | ...; | false | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:8:13:8:16 | ...; | true | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | true | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | false | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | false | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | true | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:17:17:18 | [false] !... | true | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:17:17:18 | [true] !... | false | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:18:17:18:20 | ...; | false | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | true | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:17:17:17:18 | [false] !... | true | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | true | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | true | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:18:17:18:20 | ...; | true | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | false | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:18:17:18:20 | ...; | false | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:15:13:15:16 | ...; | true | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:13:18:20 | if (...) ... | true | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | true | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:18:17:18:20 | ...; | true | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | false | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:18:17:18:20 | ...; | false | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:18:17:18:20 | ...; | true | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:26:13:27:20 | if (...) ... | true | -| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | true | -| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | true | -| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:28:9:29:16 | if (...) ... | false | -| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | true | -| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | false | +| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:27:17:27:20 | ...; | true | +| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:27:17:27:20 | ...; | true | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:29:13:29:16 | ...; | true | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:38:13:38:20 | ...; | true | -| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | true | -| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | false | -| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:42:13:42:16 | ...; | true | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:42:13:42:16 | ...; | true | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | true | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | true | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | true | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | {...} | true | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | true | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | false | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | false | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | true | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | {...} | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | true | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | if (...) ... | false | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | true | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | false | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | false | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | false | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | true | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | false | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | true | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | true | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | false | +| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:40:13:40:16 | ...; | true | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:42:13:42:16 | ...; | true | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:50:9:53:9 | {...} | true | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:52:17:52:20 | ...; | true | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:54:16:54:16 | access to local variable y | false | +| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:52:17:52:20 | ...; | true | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:61:9:64:9 | {...} | true | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:63:17:63:20 | ...; | true | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:65:9:66:16 | if (...) ... | false | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:66:13:66:16 | ...; | false | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:67:16:67:16 | access to local variable y | false | +| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:63:17:63:20 | ...; | true | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:66:13:66:16 | ...; | true | | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... | Conditions.cs:74:22:74:22 | String _ | false | | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... | Conditions.cs:77:17:77:20 | ...; | false | | Conditions.cs:74:9:80:9 | foreach (... ... in ...) ... | Conditions.cs:78:13:79:26 | if (...) ... | false | @@ -1234,80 +143,42 @@ conditionBlock | Conditions.cs:90:22:90:22 | String _ | Conditions.cs:93:17:93:20 | ...; | true | | Conditions.cs:94:13:95:26 | if (...) ... | Conditions.cs:95:17:95:26 | ...; | true | | Conditions.cs:96:13:97:20 | if (...) ... | Conditions.cs:97:17:97:20 | ...; | true | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | true | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | false | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | false | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:17:108:18 | [false] !... | true | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:17:108:18 | [true] !... | false | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:109:17:109:24 | ...; | false | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:108:17:108:18 | [false] !... | true | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | true | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | true | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:24 | ...; | true | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | false | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:24 | ...; | false | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:106:13:106:20 | ...; | true | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:13:109:24 | if (...) ... | true | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | true | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:24 | ...; | true | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | false | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:24 | ...; | false | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:109:17:109:24 | ...; | true | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:113:10:113:11 | exit M9 (normal) | false | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | true | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | true | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | true | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | true | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false] !... | true | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true] !... | true | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | ...; | true | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | if (...) ... | true | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:122:17:122:25 | ...; | true | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | true | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | false | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | false | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | true | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:122:17:122:25 | ...; | true | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | false | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:122:17:122:25 | ...; | false | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:122:17:122:25 | ...; | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | false | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | false | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | false | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | true | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | false | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:147:13:147:49 | ...; | true | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:149:13:149:49 | ...; | false | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:147:13:147:49 | ...; | true | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:149:13:149:49 | ...; | false | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | false | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | false | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | true | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [false] !... | true | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [true] !... | false | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:120:17:120:23 | ...; | false | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:120:17:120:23 | ...; | true | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:122:17:122:25 | ...; | true | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:132:9:140:9 | {...} | true | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:134:13:139:13 | {...} | true | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:136:17:138:17 | {...} | true | +| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | {...} | true | +| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:136:17:138:17 | {...} | true | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:136:17:138:17 | {...} | true | +| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:21:145:23 | "a" | true | +| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:27:145:29 | "b" | false | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:147:13:147:49 | ...; | true | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:149:13:149:49 | ...; | false | +| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:45:9:47:9 | {...} | true | +| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:48:9:51:9 | catch (...) {...} | false | +| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:49:9:51:9 | {...} | false | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | true | | ExitMethods.cs:66:17:66:26 | enter ErrorMaybe | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (normal) | false | | ExitMethods.cs:66:17:66:26 | enter ErrorMaybe | ExitMethods.cs:69:19:69:33 | object creation of type Exception | true | | ExitMethods.cs:72:17:72:27 | enter ErrorAlways | ExitMethods.cs:75:19:75:33 | object creation of type Exception | true | @@ -1316,37 +187,34 @@ conditionBlock | ExitMethods.cs:110:13:110:21 | enter ThrowExpr | ExitMethods.cs:112:69:112:75 | "input" | false | | ExitMethods.cs:115:16:115:34 | enter ExtensionMethodCall | ExitMethods.cs:117:34:117:34 | 0 | true | | ExitMethods.cs:115:16:115:34 | enter ExtensionMethodCall | ExitMethods.cs:117:38:117:38 | 1 | false | -| ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | false | -| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | true | -| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | false | -| ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | true | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:143:13:143:43 | ...; | true | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:145:13:145:53 | ...; | false | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | true | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:27:9:29:9 | {...} | true | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | false | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | false | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | false | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | false | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | false | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:27:9:29:9 | {...} | true | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | true | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | true | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | false | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | false | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:27:34:32 | throw ...; | true | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | true | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | true | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:62:9:64:9 | {...} | true | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | false | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | false | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | false | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | false | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | true | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | true | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | true | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | true | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | true | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:38:26:39 | IOException ex | true | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:27:9:29:9 | {...} | true | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | false | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | false | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | false | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | false | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | false | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | false | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:27:9:29:9 | {...} | true | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | true | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | true | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | false | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | false | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | false | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:34:27:34:32 | throw ...; | true | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | true | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | false | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:38:61:39 | IOException ex | true | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:62:9:64:9 | {...} | true | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | false | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | false | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:66:9:67:9 | {...} | false | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:62:9:64:9 | {...} | true | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | true | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:66:9:67:9 | {...} | true | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:66:9:67:9 | {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:74:10:74:11 | exit M4 (abnormal) | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:78:9:100:9 | {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:82:21:82:27 | return ...; | true | @@ -1355,338 +223,65 @@ conditionBlock | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:85:17:86:26 | if (...) ... | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:86:21:86:26 | break; | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:89:13:99:13 | {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | throw ...; | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:82:21:82:27 | return ...; | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:83:17:84:29 | if (...) ... | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:84:21:84:29 | continue; | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:85:17:86:26 | if (...) ... | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:86:21:86:26 | break; | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:89:13:99:13 | {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: break] throw ...; | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | throw ...; | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | true | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | false | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:86:21:86:26 | break; | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:89:13:99:13 | {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | [finally: break] throw ...; | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | true | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:89:13:99:13 | {...} | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | true | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | -| Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true | -| Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | false | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | true | -| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | -| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:17:109:28 | access to property Length | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:33:109:33 | 1 | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | true | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | true | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | true | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | false | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | true | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | true | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | false | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | false | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (abnormal) | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | false | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | true | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | true | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | false | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:30:161:30 | Exception e | true | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:162:13:164:13 | {...} | true | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:162:13:164:13 | {...} | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | throw ...; | true | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | object creation of type ExceptionA | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:186:25:186:47 | throw ...; | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:186:31:186:46 | object creation of type ExceptionB | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:188:13:191:13 | catch (...) {...} | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:188:38:188:39 | access to parameter b2 | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:189:13:191:13 | {...} | true | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:38:188:39 | access to parameter b2 | true | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:189:13:191:13 | {...} | true | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:189:13:191:13 | {...} | true | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | true | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | false | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | false | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:213:9:213:25 | ...; | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | true | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | false | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | false | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | true | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | false | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | false | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 (normal) | true | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg | false | | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 (normal) | true | @@ -1701,60 +296,51 @@ conditionBlock | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:36:10:36:11 | exit M6 (normal) | true | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:26:38:26 | String x | false | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:10:13:10:19 | return ...; | true | +| LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | false | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:22:11:24 | String arg | false | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:29:11:32 | access to parameter args | false | -| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:22:11:24 | String arg | false | -| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | false | -| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:22:18:22 | String x | false | -| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | true | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | false | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | true | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | false | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | true | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | false | +| LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | false | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | false | -| LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:26:25:29 | Char arg0 | false | -| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | true | -| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | false | -| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:22:40:22 | String x | false | -| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:41:26:41:26 | String y | false | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | false | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | true | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:22:32:22 | String x | false | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | true | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | false | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:26:41:26 | String y | false | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | true | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | true | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | false | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | false | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | false | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | false | +| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | true | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:48:22:48:22 | String x | false | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:50:9:50:13 | Label: | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | String x | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | false | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | false | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | false | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | true | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | true | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | false | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | false | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | true | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | false | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:61:17:61:37 | ...; | false | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:62:13:63:37 | if (...) ... | false | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:63:17:63:37 | ...; | false | +| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:61:17:61:37 | ...; | true | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:63:17:63:37 | ...; | true | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:69:13:69:23 | [false] !... | true | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:69:13:69:23 | [true] !... | false | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:70:13:70:19 | return ...; | false | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:71:9:71:21 | ...; | true | +| LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | true | +| LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:72:22:72:24 | String arg | true | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:71:9:71:21 | ...; | false | +| LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | false | +| LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:72:22:72:24 | String arg | false | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:70:13:70:19 | return ...; | true | -| LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | true | -| LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | true | -| LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | false | -| LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:97:22:97:22 | String x | false | -| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | true | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:22:72:24 | String arg | false | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | true | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:22:79:22 | String x | false | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | true | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:22:88:22 | String x | false | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | true | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | false | | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:28:3:28 | 0 | true | | NullCoalescing.cs:5:9:5:10 | enter M2 | NullCoalescing.cs:5:25:5:34 | [true] ... ?? ... | true | | NullCoalescing.cs:5:9:5:10 | enter M2 | NullCoalescing.cs:5:30:5:34 | false | true | @@ -2446,6 +1032,9 @@ conditionBlock | cflow.cs:250:13:250:19 | case ...: | cflow.cs:253:13:253:19 | case ...: | false | | cflow.cs:250:13:250:19 | case ...: | cflow.cs:254:17:254:27 | goto ...; | false | | cflow.cs:253:13:253:19 | case ...: | cflow.cs:254:17:254:27 | goto ...; | true | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield | false | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield (abnormal) | false | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield (normal) | false | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:265:9:267:9 | {...} | true | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:268:9:276:9 | try {...} ... | false | | cflow.cs:298:10:298:10 | enter M | cflow.cs:300:44:300:51 | [false] !... | true | @@ -2455,139 +1044,64 @@ conditionBlock conditionFlow | Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:24:9:27 | null | true | | Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:31:9:32 | "" | false | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | false | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | true | | Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:24:16:27 | null | true | | Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:31:16:32 | "" | false | | Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:24:23:27 | null | true | | Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:31:23:32 | "" | false | | Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:24:30:27 | null | true | | Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:31:30:32 | "" | false | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | true | | Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:24:37:27 | null | true | | Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:31:37:32 | "" | false | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | true | | Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:24:44:27 | null | true | | Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:31:44:32 | "" | false | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | false | | Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:24:51:27 | null | true | | Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:31:51:32 | "" | false | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | false | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | true | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | [b (line 56): false] "" | false | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | true | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:36 | [true] ... && ... | true | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | [b (line 63): true] null | true | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | false | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | false | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:37 | [false] ... \|\| ... | false | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | true | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | [b (line 70): false] "" | false | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | true | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:36 | [true] ... && ... | true | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | [b (line 77): true] null | true | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | false | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | false | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:37 | [false] ... \|\| ... | false | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | true | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | [b (line 84): false] "" | false | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | true | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | false | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:24:90:25 | [b (line 84): false] "" | false | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | true | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | false | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | access to parameter b2 | true | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | false | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | false | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | null | true | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | "" | false | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:36 | ... && ... | false | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:36:59:36 | access to parameter b | true | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | null | true | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | "" | false | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:37 | ... \|\| ... | true | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:37:66:37 | access to parameter b | false | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | null | true | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | "" | false | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:36 | ... && ... | false | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:36:73:36 | access to parameter b | true | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | null | true | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | "" | false | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:37 | ... \|\| ... | true | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:37:80:37 | access to parameter b | false | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | null | true | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | "" | false | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:17:90:20 | null | true | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:24:90:25 | "" | false | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:17:94:20 | null | true | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:24:94:25 | "" | false | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:17:98:20 | null | true | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:24:98:25 | "" | false | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:17:102:20 | null | true | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:24:102:25 | "" | false | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:17:106:20 | null | true | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:24:106:25 | "" | false | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:17:110:20 | null | true | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:24:110:25 | "" | false | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:17:114:20 | null | true | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:24:114:25 | "" | false | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:36 | ... && ... | false | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:36:115:36 | access to parameter b | true | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:17:118:20 | null | true | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:24:118:25 | "" | false | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:38 | ... \|\| ... | true | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:38:119:38 | access to parameter b | false | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:17:122:20 | null | true | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:24:122:25 | "" | false | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:36 | ... && ... | false | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:36:123:36 | access to parameter b | true | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:17:126:20 | null | true | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:24:126:25 | "" | false | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:38 | ... \|\| ... | true | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:38:127:38 | access to parameter b | false | | BreakInTry.cs:9:21:9:31 | ... == ... | BreakInTry.cs:7:13:11:13 | foreach (... ... in ...) ... | false | | BreakInTry.cs:9:21:9:31 | ... == ... | BreakInTry.cs:10:21:10:26 | break; | true | | BreakInTry.cs:15:17:15:28 | ... == ... | BreakInTry.cs:3:10:3:11 | exit M1 (normal) | false | @@ -2596,74 +1110,51 @@ conditionFlow | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:30:13:33:13 | {...} | false | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | false | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:32:21:32:21 | ; | true | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:32:21:32:21 | [finally: break] ; | true | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:35:7:35:7 | ; | false | +| BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:35:7:35:7 | ; | false | | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:43:17:43:23 | return ...; | true | | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:46:9:52:9 | {...} | false | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | false | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:50:21:50:26 | break; | true | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | false | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:50:21:50:26 | [finally: return] break; | true | | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:61:17:61:23 | return ...; | true | | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:64:9:70:9 | {...} | false | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | false | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:68:21:68:26 | break; | true | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | false | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:68:21:68:26 | [finally: return] break; | true | | ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:14:20:14:20 | 0 | true | | ConditionalAccess.cs:13:13:13:25 | ... > ... | ConditionalAccess.cs:16:20:16:20 | 1 | false | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | true | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | false | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | ...; | true | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | if (...) ... | false | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | false | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:8:13:8:16 | ...; | true | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | false | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | true | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | true | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | false | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | true | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | true | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | true | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | false | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | ...; | true | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | if (...) ... | false | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:17:13:18:20 | if (...) ... | true | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:19:16:19:16 | access to local variable x | false | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:18:17:18:20 | ...; | true | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | false | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | false | | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:26:13:27:20 | if (...) ... | true | | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:28:9:29:16 | if (...) ... | false | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | true | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | false | -| Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | Conditions.cs:30:16:30:16 | access to local variable x | false | -| Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | Conditions.cs:29:13:29:16 | ...; | true | +| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | ...; | true | +| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:28:9:29:16 | if (...) ... | false | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:29:13:29:16 | ...; | true | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:30:16:30:16 | access to local variable x | false | | Conditions.cs:37:13:37:14 | access to parameter b1 | Conditions.cs:38:13:38:20 | ...; | true | | Conditions.cs:37:13:37:14 | access to parameter b1 | Conditions.cs:39:9:40:16 | if (...) ... | false | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | true | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | false | -| Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | Conditions.cs:43:16:43:16 | access to local variable x | false | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | true | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | ...; | true | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | if (...) ... | false | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | true | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:43:16:43:16 | access to local variable x | false | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:50:9:53:9 | {...} | true | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | true | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | true | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | -| Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | false | -| Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | false | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | +| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:49:16:49:16 | access to parameter x | false | +| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | ...; | true | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:61:9:64:9 | {...} | true | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:65:9:66:16 | if (...) ... | false | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | true | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | false | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | true | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | false | -| Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | false | -| Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | false | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | Conditions.cs:67:16:67:16 | access to local variable y | false | -| Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | Conditions.cs:66:13:66:16 | ...; | true | +| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:60:16:60:16 | access to parameter x | false | +| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | ...; | true | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:66:13:66:16 | ...; | true | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:67:16:67:16 | access to local variable y | false | | Conditions.cs:76:17:76:17 | access to local variable b | Conditions.cs:77:17:77:20 | ...; | true | @@ -2678,41 +1169,31 @@ conditionFlow | Conditions.cs:94:17:94:21 | ... > ... | Conditions.cs:96:13:97:20 | if (...) ... | false | | Conditions.cs:96:17:96:17 | access to local variable b | Conditions.cs:90:9:98:9 | foreach (... ... in ...) ... | false | | Conditions.cs:96:17:96:17 | access to local variable b | Conditions.cs:97:17:97:20 | ...; | true | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | true | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | false | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | true | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | true | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | false | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:108:13:109:24 | if (...) ... | true | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:110:16:110:16 | access to local variable x | false | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:109:17:109:24 | ...; | true | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false | | Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:113:10:113:11 | exit M9 (normal) | false | | Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:117:9:123:9 | {...} | true | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | false | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | true | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | false | -| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | false | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:122:17:122:25 | ...; | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:121:13:122:25 | if (...) ... | false | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:120:17:120:23 | ...; | true | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false] !... | true | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true] !... | false | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | false | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:122:17:122:25 | ...; | true | | Conditions.cs:131:16:131:19 | true | Conditions.cs:132:9:140:9 | {...} | true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | true | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | false | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:149:13:149:49 | ...; | false | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:147:13:147:49 | ...; | true | +| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:131:16:131:19 | true | false | +| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | {...} | true | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:131:16:131:19 | true | false | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:136:17:138:17 | {...} | true | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | "a" | true | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | "b" | false | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:147:13:147:49 | ...; | true | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:149:13:149:49 | ...; | false | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (normal) | false | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:69:19:69:33 | object creation of type Exception | true | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:75:19:75:33 | object creation of type Exception | true | @@ -2721,16 +1202,12 @@ conditionFlow | ExitMethods.cs:112:16:112:25 | ... != ... | ExitMethods.cs:112:69:112:75 | "input" | false | | ExitMethods.cs:117:16:117:30 | call to method Contains | ExitMethods.cs:117:34:117:34 | 0 | true | | ExitMethods.cs:117:16:117:30 | call to method Contains | ExitMethods.cs:117:38:117:38 | 1 | false | -| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | false | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | true | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | false | -| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | true | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:143:13:143:43 | ...; | true | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:145:13:145:53 | ...; | false | -| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | true | +| Finally.cs:26:48:26:51 | true | Finally.cs:27:9:29:9 | {...} | true | | Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | true | -| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | true | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:66:9:67:9 | {...} | true | +| Finally.cs:61:48:61:51 | true | Finally.cs:62:9:64:9 | {...} | true | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:66:9:67:9 | {...} | true | | Finally.cs:77:16:77:20 | ... > ... | Finally.cs:74:10:74:11 | exit M4 (normal) | false | | Finally.cs:77:16:77:20 | ... > ... | Finally.cs:78:9:100:9 | {...} | true | | Finally.cs:81:21:81:26 | ... == ... | Finally.cs:82:21:82:27 | return ...; | true | @@ -2741,111 +1218,45 @@ conditionFlow | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:89:13:99:13 | {...} | false | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:93:31:93:45 | object creation of type Exception | true | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:96:17:98:17 | {...} | false | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:96:17:98:17 | [finally: return] {...} | false | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:162:13:164:13 | {...} | true | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | object creation of type ExceptionA | true | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | {...} | false | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:186:31:186:46 | object creation of type ExceptionB | true | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:189:13:191:13 | {...} | true | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | true | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | false | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | true | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | ...; | true | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | if (...) ... | false | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | false | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:63:17:63:37 | ...; | true | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:71:9:71:21 | ...; | false | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:70:13:70:19 | return ...; | true | | LoopUnrolling.cs:69:14:69:23 | call to method Any | LoopUnrolling.cs:69:13:69:23 | [false] !... | true | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.ql b/csharp/ql/test/library-tests/controlflow/graph/Condition.ql index 25de07e9d5b..61c80181924 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.ql +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.ql @@ -4,8 +4,7 @@ import ControlFlow query predicate conditionBlock( BasicBlocks::ConditionBlock cb, BasicBlock controlled, boolean testIsTrue ) { - cb.edgeDominates(controlled, - any(SuccessorTypes::ConditionalSuccessor s | testIsTrue = s.getValue())) + cb.edgeDominates(controlled, any(ConditionalSuccessor s | testIsTrue = s.getValue())) } ControlFlow::Node successor(ControlFlow::Node node, boolean kind) { diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index f0a0c6459cb..f5368b5c7e9 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -347,12 +347,11 @@ dominance | Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:24:9:27 | null | | Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:31:9:32 | "" | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:16:9:32 | String s = ... | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | exit M1 (abnormal) | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:11:9:11:36 | ...; | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:7:10:7:11 | exit M1 (abnormal) | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:11:9:11:36 | ...; | | Assert.cs:10:9:10:32 | ...; | Assert.cs:10:22:10:22 | access to local variable s | | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:27:10:30 | null | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | call to method Assert | | Assert.cs:10:27:10:30 | null | Assert.cs:10:22:10:30 | ... != ... | | Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:7:10:7:11 | exit M1 (normal) | | Assert.cs:11:9:11:36 | ...; | Assert.cs:11:27:11:27 | access to local variable s | @@ -365,11 +364,10 @@ dominance | Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:24:16:27 | null | | Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:31:16:32 | "" | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:16:16:32 | String s = ... | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:18:9:18:36 | ...; | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:18:9:18:36 | ...; | | Assert.cs:17:9:17:25 | ...; | Assert.cs:17:23:17:23 | access to local variable s | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | call to method IsNull | | Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:14:10:14:11 | exit M2 (normal) | | Assert.cs:18:9:18:36 | ...; | Assert.cs:18:27:18:27 | access to local variable s | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:34 | access to property Length | @@ -381,11 +379,10 @@ dominance | Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:24:23:27 | null | | Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:31:23:32 | "" | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:16:23:32 | String s = ... | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | | Assert.cs:24:9:24:28 | ...; | Assert.cs:24:26:24:26 | access to local variable s | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | call to method IsNotNull | | Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:21:10:21:11 | exit M3 (normal) | | Assert.cs:25:9:25:36 | ...; | Assert.cs:25:27:25:27 | access to local variable s | | Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:34 | access to property Length | @@ -397,12 +394,11 @@ dominance | Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:24:30:27 | null | | Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:31:30:32 | "" | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:16:30:32 | String s = ... | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:32:9:32:36 | ...; | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:32:9:32:36 | ...; | | Assert.cs:31:9:31:33 | ...; | Assert.cs:31:23:31:23 | access to local variable s | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:28:31:31 | null | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | call to method IsTrue | | Assert.cs:31:28:31:31 | null | Assert.cs:31:23:31:31 | ... == ... | | Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:28:10:28:11 | exit M4 (normal) | | Assert.cs:32:9:32:36 | ...; | Assert.cs:32:27:32:27 | access to local variable s | @@ -415,12 +411,11 @@ dominance | Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:24:37:27 | null | | Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:31:37:32 | "" | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:16:37:32 | String s = ... | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:39:9:39:36 | ...; | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:39:9:39:36 | ...; | | Assert.cs:38:9:38:33 | ...; | Assert.cs:38:23:38:23 | access to local variable s | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:28:38:31 | null | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | call to method IsTrue | | Assert.cs:38:28:38:31 | null | Assert.cs:38:23:38:31 | ... != ... | | Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:35:10:35:11 | exit M5 (normal) | | Assert.cs:39:9:39:36 | ...; | Assert.cs:39:27:39:27 | access to local variable s | @@ -433,12 +428,11 @@ dominance | Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:24:44:27 | null | | Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:31:44:32 | "" | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:16:44:32 | String s = ... | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:46:9:46:36 | ...; | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:46:9:46:36 | ...; | | Assert.cs:45:9:45:34 | ...; | Assert.cs:45:24:45:24 | access to local variable s | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:29:45:32 | null | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | call to method IsFalse | | Assert.cs:45:29:45:32 | null | Assert.cs:45:24:45:32 | ... != ... | | Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:42:10:42:11 | exit M6 (normal) | | Assert.cs:46:9:46:36 | ...; | Assert.cs:46:27:46:27 | access to local variable s | @@ -451,12 +445,11 @@ dominance | Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:24:51:27 | null | | Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:31:51:32 | "" | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:16:51:32 | String s = ... | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:53:9:53:36 | ...; | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:53:9:53:36 | ...; | | Assert.cs:52:9:52:34 | ...; | Assert.cs:52:24:52:24 | access to local variable s | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:29:52:32 | null | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | call to method IsFalse | | Assert.cs:52:29:52:32 | null | Assert.cs:52:24:52:32 | ... == ... | | Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:49:10:49:11 | exit M7 (normal) | | Assert.cs:53:9:53:36 | ...; | Assert.cs:53:27:53:27 | access to local variable s | @@ -465,27 +458,18 @@ dominance | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:57:5:61:5 | {...} | | Assert.cs:57:5:61:5 | {...} | Assert.cs:58:9:58:33 | ... ...; | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:20:58:20 | access to parameter b | -| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): false] ...; | -| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): true] ...; | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | [b (line 56): false] "" | -| Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | -| Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:60:9:60:36 | ...; | -| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | -| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | -| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): false] null | -| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): true] null | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:59:28:59:31 | [b (line 56): false] null | Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | -| Assert.cs:59:28:59:31 | [b (line 56): true] null | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:36 | [true] ... && ... | +| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:59:9:59:38 | ...; | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | null | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | "" | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:16:58:32 | String s = ... | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:60:9:60:36 | ...; | +| Assert.cs:59:9:59:38 | ...; | Assert.cs:59:23:59:23 | access to local variable s | +| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:28:59:31 | null | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:9:59:37 | call to method IsTrue | +| Assert.cs:59:28:59:31 | null | Assert.cs:59:23:59:31 | ... != ... | | Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:56:10:56:11 | exit M8 (normal) | | Assert.cs:60:9:60:36 | ...; | Assert.cs:60:27:60:27 | access to local variable s | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:34 | access to property Length | @@ -493,27 +477,18 @@ dominance | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:64:5:68:5 | {...} | | Assert.cs:64:5:68:5 | {...} | Assert.cs:65:9:65:33 | ... ...; | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:20:65:20 | access to parameter b | -| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): false] ...; | -| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): true] ...; | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | [b (line 63): true] null | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | -| Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:67:9:67:36 | ...; | -| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | -| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | -| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): false] null | -| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): true] null | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | -| Assert.cs:66:29:66:32 | [b (line 63): false] null | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | -| Assert.cs:66:29:66:32 | [b (line 63): true] null | Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:37 | [false] ... \|\| ... | +| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:66:9:66:39 | ...; | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | null | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | "" | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:16:65:32 | String s = ... | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:67:9:67:36 | ...; | +| Assert.cs:66:9:66:39 | ...; | Assert.cs:66:24:66:24 | access to local variable s | +| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:29:66:32 | null | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:9:66:38 | call to method IsFalse | +| Assert.cs:66:29:66:32 | null | Assert.cs:66:24:66:32 | ... == ... | | Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:63:10:63:11 | exit M9 (normal) | | Assert.cs:67:9:67:36 | ...; | Assert.cs:67:27:67:27 | access to local variable s | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:34 | access to property Length | @@ -521,27 +496,18 @@ dominance | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:71:5:75:5 | {...} | | Assert.cs:71:5:75:5 | {...} | Assert.cs:72:9:72:33 | ... ...; | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:20:72:20 | access to parameter b | -| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): false] ...; | -| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): true] ...; | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | [b (line 70): false] "" | -| Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | -| Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:74:9:74:36 | ...; | -| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | -| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | -| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): false] null | -| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): true] null | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:73:28:73:31 | [b (line 70): false] null | Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | -| Assert.cs:73:28:73:31 | [b (line 70): true] null | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:36 | [true] ... && ... | +| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:73:9:73:38 | ...; | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | null | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | "" | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:16:72:32 | String s = ... | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:74:9:74:36 | ...; | +| Assert.cs:73:9:73:38 | ...; | Assert.cs:73:23:73:23 | access to local variable s | +| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:28:73:31 | null | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:9:73:37 | call to method IsTrue | +| Assert.cs:73:28:73:31 | null | Assert.cs:73:23:73:31 | ... == ... | | Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:70:10:70:12 | exit M10 (normal) | | Assert.cs:74:9:74:36 | ...; | Assert.cs:74:27:74:27 | access to local variable s | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:34 | access to property Length | @@ -549,27 +515,18 @@ dominance | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:78:5:82:5 | {...} | | Assert.cs:78:5:82:5 | {...} | Assert.cs:79:9:79:33 | ... ...; | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:20:79:20 | access to parameter b | -| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): false] ...; | -| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): true] ...; | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | [b (line 77): true] null | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | -| Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:81:9:81:36 | ...; | -| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | -| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | -| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): false] null | -| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): true] null | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | -| Assert.cs:80:29:80:32 | [b (line 77): false] null | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | -| Assert.cs:80:29:80:32 | [b (line 77): true] null | Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:37 | [false] ... \|\| ... | +| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:80:9:80:39 | ...; | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | null | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | "" | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:16:79:32 | String s = ... | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:81:9:81:36 | ...; | +| Assert.cs:80:9:80:39 | ...; | Assert.cs:80:24:80:24 | access to local variable s | +| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:29:80:32 | null | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:9:80:38 | call to method IsFalse | +| Assert.cs:80:29:80:32 | null | Assert.cs:80:24:80:32 | ... != ... | | Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:77:10:77:12 | exit M11 (normal) | | Assert.cs:81:9:81:36 | ...; | Assert.cs:81:27:81:27 | access to local variable s | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:34 | access to property Length | @@ -577,287 +534,162 @@ dominance | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:85:5:129:5 | {...} | | Assert.cs:85:5:129:5 | {...} | Assert.cs:86:9:86:33 | ... ...; | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:20:86:20 | access to parameter b | -| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): false] ...; | -| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): true] ...; | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | [b (line 84): false] "" | -| Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | -| Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): false] ...; | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): true] ...; | -| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | -| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | -| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): false] null | -| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): true] null | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:87:27:87:30 | [b (line 84): false] null | Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | -| Assert.cs:87:27:87:30 | [b (line 84): true] null | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | -| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): false] ...; | -| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): true] ...; | -| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | -| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | -| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | -| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | -| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): false] ...; | -| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): true] ...; | -| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | -| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | -| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): false] ...; | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): true] ...; | -| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | -| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): false] ...; | -| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): true] ...; | -| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | -| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | -| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | -| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | -| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): false] ...; | -| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): true] ...; | -| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | -| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | -| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): false] ...; | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): true] ...; | -| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | -| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): false] ...; | -| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): true] ...; | -| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | -| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | -| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | -| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | -| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): false] ...; | -| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): true] ...; | -| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | -| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | -| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): false] ...; | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): true] ...; | -| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | -| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | -| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): false] null | -| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): true] null | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:99:28:99:31 | [b (line 84): false] null | Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | -| Assert.cs:99:28:99:31 | [b (line 84): true] null | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | -| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): false] ...; | -| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): true] ...; | -| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | -| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | -| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | -| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | -| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): false] ...; | -| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): true] ...; | -| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | -| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | -| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): false] ...; | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): true] ...; | -| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | -| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | -| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): false] null | -| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): true] null | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:103:28:103:31 | [b (line 84): false] null | Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | -| Assert.cs:103:28:103:31 | [b (line 84): true] null | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | -| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): false] ...; | -| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): true] ...; | -| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | -| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | -| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | -| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | -| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): false] ...; | -| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): true] ...; | -| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | -| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | -| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): false] ...; | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): true] ...; | -| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | -| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | -| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): false] null | -| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): true] null | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:107:29:107:32 | [b (line 84): false] null | Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | -| Assert.cs:107:29:107:32 | [b (line 84): true] null | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | -| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): false] ...; | -| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): true] ...; | -| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | -| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | -| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | -| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | -| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): false] ...; | -| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): true] ...; | -| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | -| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | -| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): false] ...; | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): true] ...; | -| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | -| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | -| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): false] null | -| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): true] null | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:111:29:111:32 | [b (line 84): false] null | Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | -| Assert.cs:111:29:111:32 | [b (line 84): true] null | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | -| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): false] ...; | -| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): true] ...; | -| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | -| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | -| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | -| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | -| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): false] ...; | -| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): true] ...; | -| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | -| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | -| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:116:9:116:36 | [b (line 84): true] ...; | -| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | -| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | -| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): false] null | -| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): true] null | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:28:115:31 | [b (line 84): false] null | Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | -| Assert.cs:115:28:115:31 | [b (line 84): true] null | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | Assert.cs:118:9:118:26 | [b (line 84): true] ...; | -| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | -| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | -| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | Assert.cs:119:9:119:40 | [b (line 84): true] ...; | -| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:120:9:120:36 | [b (line 84): true] ...; | -| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | -| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:119:29:119:32 | [b (line 84): true] null | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:119:29:119:32 | [b (line 84): true] null | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | Assert.cs:122:9:122:26 | [b (line 84): true] ...; | -| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | -| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | -| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | Assert.cs:123:9:123:38 | [b (line 84): true] ...; | -| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:124:9:124:36 | [b (line 84): true] ...; | -| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | -| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:123:28:123:31 | [b (line 84): true] null | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:28:123:31 | [b (line 84): true] null | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | Assert.cs:126:9:126:26 | [b (line 84): true] ...; | -| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | -| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | -| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | Assert.cs:127:9:127:40 | [b (line 84): true] ...; | -| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:128:9:128:36 | ...; | -| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | -| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:127:29:127:32 | [b (line 84): true] null | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:127:29:127:32 | [b (line 84): true] null | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | +| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:87:9:87:32 | ...; | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | null | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:16:86:32 | String s = ... | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:84:10:84:12 | exit M12 (abnormal) | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:87:9:87:32 | ...; | Assert.cs:87:22:87:22 | access to local variable s | +| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:27:87:30 | null | +| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:9:87:31 | call to method Assert | +| Assert.cs:87:27:87:30 | null | Assert.cs:87:22:87:30 | ... != ... | +| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:90:9:90:26 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:27:88:27 | access to local variable s | +| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:88:27:88:34 | access to property Length | +| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:88:9:88:35 | call to method WriteLine | +| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:91:9:91:25 | ...; | +| Assert.cs:90:9:90:26 | ...; | Assert.cs:90:13:90:13 | access to parameter b | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:17:90:20 | null | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:24:90:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:9:90:25 | ... = ... | +| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:91:9:91:25 | ...; | Assert.cs:91:23:91:23 | access to local variable s | +| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:9:91:24 | call to method IsNull | +| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:94:9:94:26 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:27:92:27 | access to local variable s | +| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:27:92:34 | access to property Length | +| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:92:9:92:35 | call to method WriteLine | +| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:95:9:95:28 | ...; | +| Assert.cs:94:9:94:26 | ...; | Assert.cs:94:13:94:13 | access to parameter b | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:17:94:20 | null | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:24:94:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:9:94:25 | ... = ... | +| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:95:9:95:28 | ...; | Assert.cs:95:26:95:26 | access to local variable s | +| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:9:95:27 | call to method IsNotNull | +| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:98:9:98:26 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:27:96:27 | access to local variable s | +| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:27:96:34 | access to property Length | +| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:96:9:96:35 | call to method WriteLine | +| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:99:9:99:33 | ...; | +| Assert.cs:98:9:98:26 | ...; | Assert.cs:98:13:98:13 | access to parameter b | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:17:98:20 | null | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:24:98:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:9:98:25 | ... = ... | +| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:99:9:99:33 | ...; | Assert.cs:99:23:99:23 | access to local variable s | +| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:28:99:31 | null | +| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:9:99:32 | call to method IsTrue | +| Assert.cs:99:28:99:31 | null | Assert.cs:99:23:99:31 | ... == ... | +| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:102:9:102:26 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:27:100:27 | access to local variable s | +| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:100:27:100:34 | access to property Length | +| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:100:9:100:35 | call to method WriteLine | +| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:103:9:103:33 | ...; | +| Assert.cs:102:9:102:26 | ...; | Assert.cs:102:13:102:13 | access to parameter b | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:17:102:20 | null | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:24:102:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:9:102:25 | ... = ... | +| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:103:9:103:33 | ...; | Assert.cs:103:23:103:23 | access to local variable s | +| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:28:103:31 | null | +| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:9:103:32 | call to method IsTrue | +| Assert.cs:103:28:103:31 | null | Assert.cs:103:23:103:31 | ... != ... | +| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:106:9:106:26 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:27:104:27 | access to local variable s | +| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:104:27:104:34 | access to property Length | +| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:104:9:104:35 | call to method WriteLine | +| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:107:9:107:34 | ...; | +| Assert.cs:106:9:106:26 | ...; | Assert.cs:106:13:106:13 | access to parameter b | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:17:106:20 | null | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:24:106:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:9:106:25 | ... = ... | +| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:107:9:107:34 | ...; | Assert.cs:107:24:107:24 | access to local variable s | +| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:29:107:32 | null | +| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:9:107:33 | call to method IsFalse | +| Assert.cs:107:29:107:32 | null | Assert.cs:107:24:107:32 | ... != ... | +| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:110:9:110:26 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:27:108:27 | access to local variable s | +| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:108:27:108:34 | access to property Length | +| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:108:9:108:35 | call to method WriteLine | +| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:111:9:111:34 | ...; | +| Assert.cs:110:9:110:26 | ...; | Assert.cs:110:13:110:13 | access to parameter b | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:17:110:20 | null | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:24:110:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:9:110:25 | ... = ... | +| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:111:9:111:34 | ...; | Assert.cs:111:24:111:24 | access to local variable s | +| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:29:111:32 | null | +| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:9:111:33 | call to method IsFalse | +| Assert.cs:111:29:111:32 | null | Assert.cs:111:24:111:32 | ... == ... | +| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:114:9:114:26 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:27:112:27 | access to local variable s | +| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:112:27:112:34 | access to property Length | +| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:112:9:112:35 | call to method WriteLine | +| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:115:9:115:38 | ...; | +| Assert.cs:114:9:114:26 | ...; | Assert.cs:114:13:114:13 | access to parameter b | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:17:114:20 | null | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:24:114:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:9:114:25 | ... = ... | +| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:115:9:115:38 | ...; | Assert.cs:115:23:115:23 | access to local variable s | +| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:28:115:31 | null | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:9:115:37 | call to method IsTrue | +| Assert.cs:115:28:115:31 | null | Assert.cs:115:23:115:31 | ... != ... | +| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:118:9:118:26 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:27:116:27 | access to local variable s | +| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:27:116:34 | access to property Length | +| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:116:9:116:35 | call to method WriteLine | +| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:119:9:119:40 | ...; | +| Assert.cs:118:9:118:26 | ...; | Assert.cs:118:13:118:13 | access to parameter b | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:17:118:20 | null | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:24:118:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:9:118:25 | ... = ... | +| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:119:9:119:40 | ...; | Assert.cs:119:24:119:24 | access to local variable s | +| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:29:119:32 | null | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:9:119:39 | call to method IsFalse | +| Assert.cs:119:29:119:32 | null | Assert.cs:119:24:119:32 | ... == ... | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:37:119:38 | !... | +| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:122:9:122:26 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:27:120:27 | access to local variable s | +| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:27:120:34 | access to property Length | +| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:120:9:120:35 | call to method WriteLine | +| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:123:9:123:38 | ...; | +| Assert.cs:122:9:122:26 | ...; | Assert.cs:122:13:122:13 | access to parameter b | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:17:122:20 | null | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:24:122:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:9:122:25 | ... = ... | +| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:123:9:123:38 | ...; | Assert.cs:123:23:123:23 | access to local variable s | +| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:28:123:31 | null | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:9:123:37 | call to method IsTrue | +| Assert.cs:123:28:123:31 | null | Assert.cs:123:23:123:31 | ... == ... | +| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:126:9:126:26 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:27:124:27 | access to local variable s | +| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:27:124:34 | access to property Length | +| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:124:9:124:35 | call to method WriteLine | +| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:127:9:127:40 | ...; | +| Assert.cs:126:9:126:26 | ...; | Assert.cs:126:13:126:13 | access to parameter b | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:17:126:20 | null | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:24:126:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:9:126:25 | ... = ... | +| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:127:9:127:40 | ...; | Assert.cs:127:24:127:24 | access to local variable s | +| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:29:127:32 | null | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:9:127:39 | call to method IsFalse | +| Assert.cs:127:29:127:32 | null | Assert.cs:127:24:127:32 | ... != ... | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:37:127:38 | !... | | Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:84:10:84:12 | exit M12 (normal) | | Assert.cs:128:9:128:36 | ...; | Assert.cs:128:27:128:27 | access to local variable s | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:34 | access to property Length | @@ -867,17 +699,13 @@ dominance | Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | exit AssertTrueFalse (normal) | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:139:5:142:5 | {...} | | Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:36 | ...; | -| Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | Assert.cs:141:9:141:15 | return ...; | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:141:9:141:15 | return ...; | | Assert.cs:140:9:140:35 | this access | Assert.cs:140:25:140:26 | access to parameter b1 | | Assert.cs:140:9:140:36 | ...; | Assert.cs:140:9:140:35 | this access | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | | Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | +| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | access to parameter b3 | +| Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | {...} | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | call to constructor Object | @@ -963,16 +791,10 @@ dominance | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:26:28:26:31 | null | BreakInTry.cs:26:21:26:31 | ... == ... | -| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:30:13:33:13 | [finally: break] {...} | -| BreakInTry.cs:30:13:33:13 | [finally: break] {...} | BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:31:17:32:21 | if (...) ... | -| BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | | BreakInTry.cs:31:17:32:21 | if (...) ... | BreakInTry.cs:31:21:31:24 | access to parameter args | -| BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | BreakInTry.cs:31:29:31:32 | [finally: break] null | | BreakInTry.cs:31:21:31:24 | access to parameter args | BreakInTry.cs:31:29:31:32 | null | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:32:21:32:21 | [finally: break] ; | -| BreakInTry.cs:31:29:31:32 | [finally: break] null | BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:21:31:32 | ... == ... | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | exit M2 (normal) | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:39:5:54:5 | {...} | @@ -985,25 +807,16 @@ dominance | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:46:9:52:9 | {...} | | BreakInTry.cs:42:25:42:28 | null | BreakInTry.cs:42:17:42:28 | ... == ... | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:46:9:52:9 | [finally: return] {...} | -| BreakInTry.cs:46:9:52:9 | [finally: return] {...} | BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:47:33:47:36 | access to parameter args | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | +| BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | String arg | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:48:13:51:13 | {...} | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:48:13:51:13 | [finally: return] {...} | -| BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:47:33:47:36 | access to parameter args | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | -| BreakInTry.cs:48:13:51:13 | [finally: return] {...} | BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | | BreakInTry.cs:48:13:51:13 | {...} | BreakInTry.cs:49:17:50:26 | if (...) ... | -| BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | | BreakInTry.cs:49:17:50:26 | if (...) ... | BreakInTry.cs:49:21:49:23 | access to local variable arg | -| BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | BreakInTry.cs:49:28:49:31 | [finally: return] null | | BreakInTry.cs:49:21:49:23 | access to local variable arg | BreakInTry.cs:49:28:49:31 | null | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:50:21:50:26 | break; | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:50:21:50:26 | [finally: return] break; | -| BreakInTry.cs:49:28:49:31 | [finally: return] null | BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:49:21:49:31 | ... == ... | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:57:5:71:5 | {...} | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | exit M4 | @@ -1015,24 +828,15 @@ dominance | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:64:9:70:9 | {...} | | BreakInTry.cs:60:25:60:28 | null | BreakInTry.cs:60:17:60:28 | ... == ... | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:64:9:70:9 | [finally: return] {...} | -| BreakInTry.cs:64:9:70:9 | [finally: return] {...} | BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:65:33:65:36 | access to parameter args | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | +| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | String arg | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:66:13:69:13 | {...} | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:66:13:69:13 | [finally: return] {...} | -| BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:65:33:65:36 | access to parameter args | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | -| BreakInTry.cs:66:13:69:13 | [finally: return] {...} | BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | | BreakInTry.cs:66:13:69:13 | {...} | BreakInTry.cs:67:17:68:26 | if (...) ... | -| BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | | BreakInTry.cs:67:17:68:26 | if (...) ... | BreakInTry.cs:67:21:67:23 | access to local variable arg | -| BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | BreakInTry.cs:67:28:67:31 | [finally: return] null | | BreakInTry.cs:67:21:67:23 | access to local variable arg | BreakInTry.cs:67:28:67:31 | null | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:68:21:68:26 | break; | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:68:21:68:26 | [finally: return] break; | -| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:31 | ... == ... | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | {...} | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | @@ -1063,15 +867,18 @@ dominance | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:29:5:41:5 | {...} | -| CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | CompileTimeOperators.cs:28:10:28:10 | exit M | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:31:9:34:9 | {...} | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | -| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | +| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | {...} | +| CompileTimeOperators.cs:36:9:38:9 | {...} | CompileTimeOperators.cs:37:13:37:41 | ...; | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | +| CompileTimeOperators.cs:37:13:37:41 | ...; | CompileTimeOperators.cs:37:31:37:39 | "Finally" | +| CompileTimeOperators.cs:37:31:37:39 | "Finally" | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:27:39:32 | "Dead" | +| CompileTimeOperators.cs:39:27:39:32 | "Dead" | CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:14:40:38 | ...; | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | @@ -1163,16 +970,14 @@ dominance | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:5:9:6:16 | if (...) ... | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:5:13:5:15 | access to parameter inc | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | -| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | -| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | -| Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | if (...) ... | +| Conditions.cs:6:13:6:13 | access to parameter x | Conditions.cs:6:13:6:15 | ...++ | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:13 | access to parameter x | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:14:7:16 | access to parameter inc | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:8:13:8:16 | ...; | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | | Conditions.cs:8:13:8:13 | access to parameter x | Conditions.cs:8:13:8:15 | ...-- | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:13 | access to parameter x | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:12:5:20:5 | {...} | @@ -1182,24 +987,19 @@ dominance | Conditions.cs:13:13:13:17 | Int32 x = ... | Conditions.cs:14:9:15:16 | if (...) ... | | Conditions.cs:13:17:13:17 | 0 | Conditions.cs:13:13:13:17 | Int32 x = ... | | Conditions.cs:14:9:15:16 | if (...) ... | Conditions.cs:14:13:14:13 | access to parameter b | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | -| Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | -| Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | -| Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | -| Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | -| Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:15:13:15:13 | access to local variable x | Conditions.cs:15:13:15:15 | ...++ | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:15:13:15:13 | access to local variable x | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:16:13:16:13 | access to local variable x | +| Conditions.cs:16:13:16:13 | access to local variable x | Conditions.cs:16:17:16:17 | 0 | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:17:13:18:20 | if (...) ... | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | +| Conditions.cs:16:17:16:17 | 0 | Conditions.cs:16:13:16:17 | ... > ... | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:18:17:18 | access to parameter b | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:18:17:18:20 | ...; | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:18:17:18:17 | access to local variable x | Conditions.cs:18:17:18:19 | ...-- | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:18:17:18:17 | access to local variable x | | Conditions.cs:19:9:19:17 | return ...; | Conditions.cs:11:9:11:10 | exit M1 (normal) | @@ -1214,14 +1014,12 @@ dominance | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:26:13:27:20 | if (...) ... | | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:28:9:29:16 | if (...) ... | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:26:17:26:18 | access to parameter b2 | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | -| Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | -| Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | -| Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | +| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | ...; | +| Conditions.cs:27:17:27:17 | access to local variable x | Conditions.cs:27:17:27:19 | ...++ | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:27:17:27:17 | access to local variable x | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:28:13:28:14 | access to parameter b2 | +| Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:29:13:29:16 | ...; | +| Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:29:13:29:13 | access to local variable x | Conditions.cs:29:13:29:15 | ...++ | | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:29:13:29:13 | access to local variable x | | Conditions.cs:30:9:30:17 | return ...; | Conditions.cs:22:9:22:10 | exit M2 (normal) | @@ -1241,14 +1039,13 @@ dominance | Conditions.cs:38:13:38:20 | ...; | Conditions.cs:38:18:38:19 | access to parameter b1 | | Conditions.cs:38:18:38:19 | access to parameter b1 | Conditions.cs:38:13:38:19 | ... = ... | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:39:13:39:14 | access to local variable b2 | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | -| Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | -| Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | -| Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | if (...) ... | +| Conditions.cs:40:13:40:13 | access to local variable x | Conditions.cs:40:13:40:15 | ...++ | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:40:13:40:13 | access to local variable x | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:41:13:41:14 | access to local variable b2 | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:42:13:42:13 | access to local variable x | Conditions.cs:42:13:42:15 | ...++ | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:13 | access to local variable x | | Conditions.cs:43:9:43:17 | return ...; | Conditions.cs:33:9:33:10 | exit M3 (normal) | @@ -1260,30 +1057,16 @@ dominance | Conditions.cs:48:13:48:17 | Int32 y = ... | Conditions.cs:49:9:53:9 | while (...) ... | | Conditions.cs:48:17:48:17 | 0 | Conditions.cs:48:13:48:17 | Int32 y = ... | | Conditions.cs:49:9:53:9 | while (...) ... | Conditions.cs:49:16:49:16 | access to parameter x | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | -| Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | | Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:16:49:18 | ...-- | | Conditions.cs:49:16:49:18 | ...-- | Conditions.cs:49:22:49:22 | 0 | -| Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | -| Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:50:9:53:9 | {...} | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | | Conditions.cs:49:22:49:22 | 0 | Conditions.cs:49:16:49:22 | ... > ... | -| Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | -| Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:51:13:52:20 | if (...) ... | -| Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | -| Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | | Conditions.cs:51:13:52:20 | if (...) ... | Conditions.cs:51:17:51:17 | access to parameter b | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | -| Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | -| Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | +| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | ...; | +| Conditions.cs:52:17:52:17 | access to local variable y | Conditions.cs:52:17:52:19 | ...++ | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:17 | access to local variable y | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:46:9:46:10 | exit M4 (normal) | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:9:54:17 | return ...; | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:58:5:68:5 | {...} | @@ -1293,35 +1076,19 @@ dominance | Conditions.cs:59:13:59:17 | Int32 y = ... | Conditions.cs:60:9:64:9 | while (...) ... | | Conditions.cs:59:17:59:17 | 0 | Conditions.cs:59:13:59:17 | Int32 y = ... | | Conditions.cs:60:9:64:9 | while (...) ... | Conditions.cs:60:16:60:16 | access to parameter x | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | -| Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | | Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:16:60:18 | ...-- | | Conditions.cs:60:16:60:18 | ...-- | Conditions.cs:60:22:60:22 | 0 | -| Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | -| Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:61:9:64:9 | {...} | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:65:9:66:16 | if (...) ... | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | | Conditions.cs:60:22:60:22 | 0 | Conditions.cs:60:16:60:22 | ... > ... | -| Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | -| Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:62:13:63:20 | if (...) ... | -| Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | -| Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | | Conditions.cs:62:13:63:20 | if (...) ... | Conditions.cs:62:17:62:17 | access to parameter b | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | -| Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | +| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | ...; | +| Conditions.cs:63:17:63:17 | access to local variable y | Conditions.cs:63:17:63:19 | ...++ | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:63:17:63:17 | access to local variable y | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:65:13:65:13 | access to parameter b | +| Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:66:13:66:16 | ...; | +| Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:66:13:66:13 | access to local variable y | Conditions.cs:66:13:66:15 | ...++ | | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:66:13:66:13 | access to local variable y | | Conditions.cs:67:9:67:17 | return ...; | Conditions.cs:57:9:57:10 | exit M5 (normal) | @@ -1404,28 +1171,22 @@ dominance | Conditions.cs:104:17:104:17 | access to parameter b | Conditions.cs:104:17:104:28 | call to method ToString | | Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:104:13:104:28 | String x = ... | | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | Conditions.cs:106:18:106:19 | [b (line 102): true] "" | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | -| Conditions.cs:106:18:106:19 | [b (line 102): true] "" | Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | -| Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | -| Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | -| Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | -| Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | -| Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | -| Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" | +| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x | +| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length | +| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:108:13:109:24 | if (...) ... | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | +| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:13:107:24 | ... > ... | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:18:108:18 | access to parameter b | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:109:17:109:24 | ...; | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" | | Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x | @@ -1457,73 +1218,43 @@ dominance | Conditions.cs:118:29:118:43 | ... - ... | Conditions.cs:118:24:118:43 | ... == ... | | Conditions.cs:118:43:118:43 | 1 | Conditions.cs:118:29:118:43 | ... - ... | | Conditions.cs:119:13:120:23 | if (...) ... | Conditions.cs:119:18:119:21 | access to local variable last | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:120:21:120:22 | [last (line 118): false] "" | -| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | -| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:122:17:122:25 | ...; | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:120:21:120:22 | "" | +| Conditions.cs:120:21:120:22 | "" | Conditions.cs:120:17:120:22 | ... = ... | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:121:17:121:20 | access to local variable last | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:21:122:24 | null | | Conditions.cs:122:21:122:24 | null | Conditions.cs:122:17:122:24 | ... = ... | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:130:5:141:5 | {...} | | Conditions.cs:130:5:141:5 | {...} | Conditions.cs:131:9:140:9 | while (...) ... | | Conditions.cs:131:9:140:9 | while (...) ... | Conditions.cs:131:16:131:19 | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | | Conditions.cs:131:16:131:19 | true | Conditions.cs:132:9:140:9 | {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:133:13:139:13 | if (...) ... | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | | Conditions.cs:133:13:139:13 | if (...) ... | Conditions.cs:133:17:133:22 | this access | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | +| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | {...} | | Conditions.cs:133:17:133:22 | this access | Conditions.cs:133:17:133:22 | access to field Field1 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:135:17:138:17 | if (...) ... | +| Conditions.cs:135:17:138:17 | if (...) ... | Conditions.cs:135:21:135:26 | this access | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:136:17:138:17 | {...} | +| Conditions.cs:135:21:135:26 | this access | Conditions.cs:135:21:135:26 | access to field Field2 | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:137:21:137:38 | ...; | +| Conditions.cs:137:21:137:26 | access to field Field1 | Conditions.cs:137:21:137:37 | call to method ToString | +| Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:26 | access to field Field1 | +| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:26 | this access | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:144:5:150:5 | {...} | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:145:9:145:30 | ... ...; | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:17:145:17 | access to parameter b | -| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | -| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | -| Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | -| Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | -| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | -| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:149:13:149:49 | ...; | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:147:13:147:49 | ...; | +| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:146:9:149:49 | if (...) ... | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | "b" | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:13:145:29 | String s = ... | +| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:146:13:146:13 | access to parameter b | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:147:13:147:49 | ...; | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:149:13:149:49 | ...; | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s | @@ -1575,13 +1306,13 @@ dominance | ExitMethods.cs:39:5:52:5 | {...} | ExitMethods.cs:40:9:51:9 | try {...} ... | | ExitMethods.cs:40:9:51:9 | try {...} ... | ExitMethods.cs:41:9:43:9 | {...} | | ExitMethods.cs:41:9:43:9 | {...} | ExitMethods.cs:42:13:42:31 | ...; | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | catch (...) {...} | | ExitMethods.cs:42:13:42:31 | ...; | ExitMethods.cs:42:25:42:29 | false | | ExitMethods.cs:42:25:42:29 | false | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:45:9:47:9 | {...} | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:46:13:46:19 | return ...; | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:50:13:50:19 | return ...; | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:55:5:58:5 | {...} | | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | ExitMethods.cs:54:10:54:11 | exit M7 | @@ -1665,9 +1396,9 @@ dominance | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:121:5:124:5 | {...} | | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:122:9:122:29 | ...; | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | +| ExitMethods.cs:122:9:122:28 | call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:122:23:122:27 | false | -| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | +| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | call to method IsTrue | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:127:5:130:5 | {...} | | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 | | ExitMethods.cs:127:5:130:5 | {...} | ExitMethods.cs:128:9:128:27 | ...; | @@ -1675,17 +1406,16 @@ dominance | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:26 | this access | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | +| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | call to method IsFalse | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:135:5:138:5 | {...} | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:136:9:136:26 | ...; | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | +| ExitMethods.cs:136:9:136:25 | call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:21:136:24 | true | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | this access | -| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | +| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:141:5:147:5 | {...} | | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:142:9:145:53 | if (...) ... | @@ -1741,95 +1471,72 @@ dominance | Finally.cs:8:5:17:5 | {...} | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:10:9:12:9 | {...} | | Finally.cs:10:9:12:9 | {...} | Finally.cs:11:13:11:38 | ...; | -| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | | Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | {...} | | Finally.cs:11:13:11:38 | ...; | Finally.cs:11:31:11:36 | "Try1" | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:37 | call to method WriteLine | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | | Finally.cs:14:9:16:9 | {...} | Finally.cs:15:13:15:41 | ...; | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | +| Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (normal) | | Finally.cs:15:13:15:41 | ...; | Finally.cs:15:31:15:39 | "Finally" | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:40 | call to method WriteLine | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:20:5:52:5 | {...} | | Finally.cs:20:5:52:5 | {...} | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:21:9:51:9 | try {...} ... | Finally.cs:22:9:25:9 | {...} | | Finally.cs:22:9:25:9 | {...} | Finally.cs:23:13:23:38 | ...; | | Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | +| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | catch (...) {...} | | Finally.cs:23:13:23:38 | ...; | Finally.cs:23:31:23:36 | "Try2" | | Finally.cs:23:31:23:36 | "Try2" | Finally.cs:23:13:23:37 | call to method WriteLine | -| Finally.cs:24:13:24:19 | return ...; | Finally.cs:49:9:51:9 | [finally: return] {...} | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | -| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:26:48:26:51 | true | +| Finally.cs:26:48:26:51 | true | Finally.cs:27:9:29:9 | {...} | | Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | -| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:31:9:40:9 | {...} | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:31:9:40:9 | {...} | | Finally.cs:31:9:40:9 | {...} | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:32:13:39:13 | try {...} ... | Finally.cs:33:13:35:13 | {...} | | Finally.cs:33:13:35:13 | {...} | Finally.cs:34:17:34:32 | if (...) ... | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:34:21:34:24 | true | | Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:49:9:51:9 | {...} | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | -| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:50:13:50:41 | [finally: return] ...; | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | {...} | +| Finally.cs:37:13:39:13 | {...} | Finally.cs:38:37:38:42 | "Boo!" | +| Finally.cs:38:23:38:43 | object creation of type Exception | Finally.cs:38:17:38:44 | throw ...; | +| Finally.cs:38:37:38:42 | "Boo!" | Finally.cs:38:23:38:43 | object creation of type Exception | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:45:9:47:9 | {...} | +| Finally.cs:45:9:47:9 | {...} | Finally.cs:46:13:46:19 | return ...; | | Finally.cs:49:9:51:9 | {...} | Finally.cs:50:13:50:41 | ...; | +| Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | +| Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:50:13:50:41 | ...; | Finally.cs:50:31:50:39 | "Finally" | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | -| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:50:31:50:39 | [finally: return] "Finally" | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:40 | call to method WriteLine | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | -| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:55:5:72:5 | {...} | | Finally.cs:55:5:72:5 | {...} | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:56:9:71:9 | try {...} ... | Finally.cs:57:9:60:9 | {...} | | Finally.cs:57:9:60:9 | {...} | Finally.cs:58:13:58:38 | ...; | | Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | +| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | catch (...) {...} | | Finally.cs:58:13:58:38 | ...; | Finally.cs:58:31:58:36 | "Try3" | | Finally.cs:58:31:58:36 | "Try3" | Finally.cs:58:13:58:37 | call to method WriteLine | -| Finally.cs:59:13:59:19 | return ...; | Finally.cs:69:9:71:9 | [finally: return] {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | -| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:61:48:61:51 | true | +| Finally.cs:61:48:61:51 | true | Finally.cs:62:9:64:9 | {...} | | Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | -| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | -| Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | -| Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:65:48:65:51 | [exception: Exception] null | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | -| Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:69:9:71:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | -| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:70:13:70:41 | [finally: return] ...; | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:65:35:65:35 | access to local variable e | +| Finally.cs:65:35:65:35 | access to local variable e | Finally.cs:65:35:65:43 | access to property Message | +| Finally.cs:65:35:65:43 | access to property Message | Finally.cs:65:48:65:51 | null | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:66:9:67:9 | {...} | +| Finally.cs:65:48:65:51 | null | Finally.cs:65:35:65:51 | ... != ... | | Finally.cs:69:9:71:9 | {...} | Finally.cs:70:13:70:41 | ...; | +| Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | +| Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:70:13:70:41 | ...; | Finally.cs:70:31:70:39 | "Finally" | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | -| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:40 | call to method WriteLine | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | -| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:75:5:101:5 | {...} | | Finally.cs:75:5:101:5 | {...} | Finally.cs:76:9:76:19 | ... ...; | | Finally.cs:76:9:76:19 | ... ...; | Finally.cs:76:17:76:18 | 10 | @@ -1848,206 +1555,69 @@ dominance | Finally.cs:81:21:81:26 | ... == ... | Finally.cs:82:21:82:27 | return ...; | | Finally.cs:81:21:81:26 | ... == ... | Finally.cs:83:17:84:29 | if (...) ... | | Finally.cs:81:26:81:26 | 0 | Finally.cs:81:21:81:26 | ... == ... | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:89:13:99:13 | [finally: return] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:21:83:21 | access to local variable i | | Finally.cs:83:21:83:21 | access to local variable i | Finally.cs:83:26:83:26 | 1 | | Finally.cs:83:21:83:26 | ... == ... | Finally.cs:84:21:84:29 | continue; | | Finally.cs:83:21:83:26 | ... == ... | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:83:26:83:26 | 1 | Finally.cs:83:21:83:26 | ... == ... | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:89:13:99:13 | [finally: continue] {...} | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:21:85:21 | access to local variable i | | Finally.cs:85:21:85:21 | access to local variable i | Finally.cs:85:26:85:26 | 2 | | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:86:21:86:26 | break; | -| Finally.cs:85:21:85:26 | ... == ... | Finally.cs:89:13:99:13 | {...} | | Finally.cs:85:26:85:26 | 2 | Finally.cs:85:21:85:26 | ... == ... | -| Finally.cs:86:21:86:26 | break; | Finally.cs:89:13:99:13 | [finally: break] {...} | -| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:90:17:98:17 | [finally: break] try {...} ... | -| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | -| Finally.cs:89:13:99:13 | [finally: return] {...} | Finally.cs:90:17:98:17 | [finally: return] try {...} ... | | Finally.cs:89:13:99:13 | {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:90:17:98:17 | [finally: break] try {...} ... | Finally.cs:91:17:94:17 | [finally: break] {...} | -| Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | Finally.cs:91:17:94:17 | [finally: continue] {...} | -| Finally.cs:90:17:98:17 | [finally: return] try {...} ... | Finally.cs:91:17:94:17 | [finally: return] {...} | | Finally.cs:90:17:98:17 | try {...} ... | Finally.cs:91:17:94:17 | {...} | -| Finally.cs:91:17:94:17 | [finally: break] {...} | Finally.cs:92:21:93:46 | [finally: break] if (...) ... | -| Finally.cs:91:17:94:17 | [finally: continue] {...} | Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | -| Finally.cs:91:17:94:17 | [finally: return] {...} | Finally.cs:92:21:93:46 | [finally: return] if (...) ... | | Finally.cs:91:17:94:17 | {...} | Finally.cs:92:21:93:46 | if (...) ... | -| Finally.cs:92:21:93:46 | [finally: break] if (...) ... | Finally.cs:92:25:92:25 | [finally: break] access to local variable i | -| Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | -| Finally.cs:92:21:93:46 | [finally: return] if (...) ... | Finally.cs:92:25:92:25 | [finally: return] access to local variable i | | Finally.cs:92:21:93:46 | if (...) ... | Finally.cs:92:25:92:25 | access to local variable i | -| Finally.cs:92:25:92:25 | [finally: break] access to local variable i | Finally.cs:92:30:92:30 | [finally: break] 3 | -| Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | Finally.cs:92:30:92:30 | [finally: continue] 3 | -| Finally.cs:92:25:92:25 | [finally: return] access to local variable i | Finally.cs:92:30:92:30 | [finally: return] 3 | | Finally.cs:92:25:92:25 | access to local variable i | Finally.cs:92:30:92:30 | 3 | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:93:31:93:45 | object creation of type Exception | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:96:17:98:17 | {...} | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:92:30:92:30 | 3 | Finally.cs:92:25:92:30 | ... == ... | -| Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:92:25:92:30 | [finally: break] ... == ... | -| Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | -| Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:92:25:92:30 | [finally: return] ... == ... | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:24 | [finally: break] ...; | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:24 | [finally: continue] ...; | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:24 | [finally: return] ...; | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:24 | ...; | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | -| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:23 | [finally: break] ...-- | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | -| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue] ...-- | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | -| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:23 | [finally: return] ...-- | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:23 | ...-- | +| Finally.cs:97:21:97:23 | ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | | Finally.cs:97:21:97:24 | ...; | Finally.cs:97:21:97:21 | access to local variable i | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:104:5:119:5 | {...} | | Finally.cs:104:5:119:5 | {...} | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:105:9:118:9 | try {...} ... | Finally.cs:106:9:111:9 | {...} | | Finally.cs:106:9:111:9 | {...} | Finally.cs:107:13:108:23 | if (...) ... | | Finally.cs:107:13:108:23 | if (...) ... | Finally.cs:107:17:107:21 | this access | | Finally.cs:107:17:107:21 | access to field Field | Finally.cs:107:17:107:28 | access to property Length | -| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | +| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | {...} | | Finally.cs:107:17:107:21 | this access | Finally.cs:107:17:107:21 | access to field Field | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:33:107:33 | 0 | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:33 | ... == ... | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:113:9:118:9 | [finally: return] {...} | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | this access | | Finally.cs:109:17:109:21 | access to field Field | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:109:17:109:21 | this access | Finally.cs:109:17:109:21 | access to field Field | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:13:115:41 | if (...) ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:114:19:114:23 | [finally: return] this access | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:114:19:114:23 | this access | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:30 | [finally: return] access to property Length | -| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:30 | access to property Length | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:19:114:23 | access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | -| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:35:114:35 | [finally: return] 0 | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:35:114:35 | 0 | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:35 | ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | -| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:35 | [finally: return] ... == ... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:35:115:39 | this access | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:35:115:39 | [finally: return] this access | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | -| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:17:115:40 | call to method WriteLine | | Finally.cs:115:35:115:39 | this access | Finally.cs:115:35:115:39 | access to field Field | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:21 | [finally: return] this access | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:21 | this access | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:28 | [finally: return] access to property Length | -| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:28 | access to property Length | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:17:116:21 | access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | -| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:32:116:32 | [finally: return] 0 | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:32:116:32 | 0 | +| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:32 | ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | -| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:32 | [finally: return] ... > ... | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:35:117:35 | 1 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:35:117:35 | [finally: return] 1 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:36 | call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | -| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:122:5:131:5 | {...} | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:121:10:121:11 | exit M6 | | Finally.cs:122:5:131:5 | {...} | Finally.cs:123:9:130:9 | try {...} ... | @@ -2064,16 +1634,13 @@ dominance | Finally.cs:134:5:145:5 | {...} | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:135:9:143:9 | try {...} ... | Finally.cs:136:9:138:9 | {...} | | Finally.cs:136:9:138:9 | {...} | Finally.cs:137:13:137:37 | ...; | -| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | {...} | | Finally.cs:137:13:137:37 | ...; | Finally.cs:137:31:137:35 | "Try" | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:36 | call to method WriteLine | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:41:141:42 | "" | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | +| Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:13:141:44 | throw ...; | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:148:5:170:5 | {...} | | Finally.cs:148:5:170:5 | {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:149:9:169:9 | try {...} ... | Finally.cs:150:9:153:9 | {...} | @@ -2083,102 +1650,34 @@ dominance | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:28 | ... == ... | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | | Finally.cs:155:9:169:9 | {...} | Finally.cs:156:13:168:13 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:157:13:160:13 | {...} | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | | Finally.cs:157:13:160:13 | {...} | Finally.cs:158:17:159:45 | if (...) ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:158:21:158:24 | access to parameter args | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:21:158:31 | access to property Length | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | +| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | catch (...) {...} | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | -| Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | -| Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [exception: Exception] "1" | -| Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | -| Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | -| Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:30:161:30 | Exception e | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:165:13:168:13 | catch {...} | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:39:161:39 | access to local variable e | +| Finally.cs:161:39:161:39 | access to local variable e | Finally.cs:161:39:161:47 | access to property Message | +| Finally.cs:161:39:161:47 | access to property Message | Finally.cs:161:52:161:54 | "1" | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:162:13:164:13 | {...} | +| Finally.cs:161:52:161:54 | "1" | Finally.cs:161:39:161:54 | ... == ... | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:43 | ...; | | Finally.cs:163:17:163:43 | ...; | Finally.cs:163:35:163:38 | access to parameter args | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:40:163:40 | 0 | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:17:163:42 | call to method WriteLine | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:41 | access to array element | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:166:13:168:13 | {...} | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | | Finally.cs:166:13:168:13 | {...} | Finally.cs:167:17:167:38 | ...; | | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | @@ -2196,52 +1695,24 @@ dominance | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:179:9:181:9 | {...} | | Finally.cs:179:9:181:9 | {...} | Finally.cs:180:13:180:43 | if (...) ... | | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:180:17:180:18 | access to parameter b1 | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | -| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | -| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | -| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:184:13:191:13 | try {...} ... | +| Finally.cs:184:13:191:13 | try {...} ... | Finally.cs:185:13:187:13 | {...} | +| Finally.cs:185:13:187:13 | {...} | Finally.cs:186:17:186:47 | if (...) ... | +| Finally.cs:186:17:186:47 | if (...) ... | Finally.cs:186:21:186:22 | access to parameter b2 | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:190:17:190:47 | if (...) ... | +| Finally.cs:190:17:190:47 | if (...) ... | Finally.cs:190:21:190:22 | access to parameter b1 | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:25:190:47 | throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:196:5:214:5 | {...} | | Finally.cs:196:5:214:5 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:198:9:200:9 | {...} | @@ -2249,85 +1720,24 @@ dominance | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:199:17:199:18 | access to parameter b1 | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | | Finally.cs:202:9:212:9 | {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:204:13:206:13 | {...} | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:204:13:206:13 | {...} | Finally.cs:205:17:205:47 | if (...) ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:205:21:205:22 | access to parameter b2 | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:17:209:47 | if (...) ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:209:21:209:22 | access to parameter b3 | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:213:9:213:25 | ...; | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:16 | this access | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (normal) | | Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | @@ -2361,77 +1771,26 @@ dominance | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:239:21:239:22 | access to parameter b1 | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | | Finally.cs:243:13:253:13 | {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:245:17:248:17 | {...} | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:245:17:248:17 | {...} | Finally.cs:246:21:247:47 | if (...) ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:246:25:246:26 | access to parameter b2 | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | | Finally.cs:250:17:252:17 | {...} | Finally.cs:251:21:251:55 | ...; | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:254:13:254:45 | ...; | +| Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | | Finally.cs:251:21:251:55 | ...; | Finally.cs:251:39:251:53 | "Inner finally" | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:54 | call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | -| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | | Finally.cs:254:13:254:45 | ...; | Finally.cs:254:31:254:43 | "Mid finally" | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:44 | call to method WriteLine | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | | Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:47 | ...; | +| Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:260:9:260:34 | ...; | | Finally.cs:258:13:258:47 | ...; | Finally.cs:258:31:258:45 | "Outer finally" | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:46 | call to method WriteLine | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (normal) | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | @@ -2439,28 +1798,19 @@ dominance | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:266:9:268:9 | {...} | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:35 | ...; | -| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} | | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:31:267:33 | "1" | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:34 | call to method WriteLine | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | | Finally.cs:270:9:273:9 | {...} | Finally.cs:271:13:271:35 | ...; | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:272:13:272:19 | ...; | | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | +| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | @@ -2740,10 +2090,9 @@ dominance | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:9:28:9:28 | 0 | LoopUnrolling.cs:9:13:9:28 | ... == ... | -| LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:12:13:12:35 | ...; | -| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:12:13:12:35 | ...; | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:16:5:20:5 | {...} | @@ -2757,11 +2106,10 @@ dominance | LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:17:38:17:40 | "b" | | LoopUnrolling.cs:17:38:17:40 | "b" | LoopUnrolling.cs:17:43:17:45 | "c" | | LoopUnrolling.cs:17:43:17:45 | "c" | LoopUnrolling.cs:17:31:17:47 | { ..., ... } | -| LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:19:13:19:33 | ...; | -| LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:19:31:19:31 | access to local variable x | | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:23:5:27:5 | {...} | @@ -2771,10 +2119,9 @@ dominance | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:34:25:37 | access to parameter args | | LoopUnrolling.cs:24:29:24:32 | access to parameter args | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | -| LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:26:17:26:40 | ...; | -| LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:26:17:26:40 | ...; | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | | LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:30:5:34:5 | {...} | @@ -2784,8 +2131,12 @@ dominance | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | | LoopUnrolling.cs:31:29:31:29 | 0 | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | -| LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | -| LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:22:32:22 | String x | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:33:13:33:33 | ...; | +| LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:33:13:33:33 | ...; | LoopUnrolling.cs:33:31:33:31 | access to local variable x | +| LoopUnrolling.cs:33:31:33:31 | access to local variable x | LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:37:5:43:5 | {...} | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | exit M5 | | LoopUnrolling.cs:37:5:43:5 | {...} | LoopUnrolling.cs:38:9:38:48 | ... ...; | @@ -2805,20 +2156,19 @@ dominance | LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:39:38:39:40 | "1" | | LoopUnrolling.cs:39:38:39:40 | "1" | LoopUnrolling.cs:39:43:39:45 | "2" | | LoopUnrolling.cs:39:43:39:45 | "2" | LoopUnrolling.cs:39:31:39:47 | { ..., ... } | -| LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | -| LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | -| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:42:17:42:41 | ...; | -| LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:42:17:42:41 | ...; | LoopUnrolling.cs:42:35:42:35 | access to local variable x | | LoopUnrolling.cs:42:35:42:35 | access to local variable x | LoopUnrolling.cs:42:39:42:39 | access to local variable y | | LoopUnrolling.cs:42:35:42:39 | ... + ... | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | | LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:42:35:42:39 | ... + ... | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:46:5:53:5 | {...} | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | exit M6 | | LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:47:9:47:48 | ... ...; | | LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:47:18:47:47 | 3 | | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | @@ -2828,9 +2178,10 @@ dominance | LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:47:38:47:40 | "b" | | LoopUnrolling.cs:47:38:47:40 | "b" | LoopUnrolling.cs:47:43:47:45 | "c" | | LoopUnrolling.cs:47:43:47:45 | "c" | LoopUnrolling.cs:47:31:47:47 | { ..., ... } | -| LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | LoopUnrolling.cs:48:22:48:22 | String x | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:48:22:48:22 | String x | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:49:9:52:9 | {...} | -| LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:49:9:52:9 | {...} | LoopUnrolling.cs:50:9:50:13 | Label: | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:50:16:50:36 | ...; | | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | LoopUnrolling.cs:51:13:51:23 | goto ...; | @@ -2847,31 +2198,20 @@ dominance | LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:57:38:57:40 | "b" | | LoopUnrolling.cs:57:38:57:40 | "b" | LoopUnrolling.cs:57:43:57:45 | "c" | | LoopUnrolling.cs:57:43:57:45 | "c" | LoopUnrolling.cs:57:31:57:47 | { ..., ... } | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:59:9:64:9 | {...} | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | -| LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | +| LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:59:9:64:9 | {...} | LoopUnrolling.cs:60:13:61:37 | if (...) ... | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | | LoopUnrolling.cs:60:13:61:37 | if (...) ... | LoopUnrolling.cs:60:17:60:17 | access to parameter b | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | -| LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | -| LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:61:35:61:35 | access to local variable x | +| LoopUnrolling.cs:61:35:61:35 | access to local variable x | LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:62:17:62:17 | access to parameter b | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:63:17:63:37 | ...; | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:35:63:35 | access to local variable x | +| LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:68:5:74:5 | {...} | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | exit M8 | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:69:9:70:19 | if (...) ... | @@ -2884,7 +2224,11 @@ dominance | LoopUnrolling.cs:71:9:71:12 | access to parameter args | LoopUnrolling.cs:71:9:71:20 | call to method Clear | | LoopUnrolling.cs:71:9:71:20 | call to method Clear | LoopUnrolling.cs:72:29:72:32 | access to parameter args | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:71:9:71:12 | access to parameter args | -| LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:22:72:24 | String arg | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:73:13:73:35 | ...; | +| LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:73:13:73:35 | ...; | LoopUnrolling.cs:73:31:73:33 | access to local variable arg | +| LoopUnrolling.cs:73:31:73:33 | access to local variable arg | LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:77:5:83:5 | {...} | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | exit M9 | | LoopUnrolling.cs:77:5:83:5 | {...} | LoopUnrolling.cs:78:9:78:34 | ... ...; | @@ -2893,8 +2237,13 @@ dominance | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | LoopUnrolling.cs:78:13:78:33 | String[,] xs = ... | | LoopUnrolling.cs:78:29:78:29 | 2 | LoopUnrolling.cs:78:32:78:32 | 0 | | LoopUnrolling.cs:78:32:78:32 | 0 | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | -| LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | -| LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:22:79:22 | String x | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:80:9:82:9 | {...} | +| LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:80:9:82:9 | {...} | LoopUnrolling.cs:81:13:81:33 | ...; | +| LoopUnrolling.cs:81:13:81:33 | ...; | LoopUnrolling.cs:81:31:81:31 | access to local variable x | +| LoopUnrolling.cs:81:31:81:31 | access to local variable x | LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:86:5:92:5 | {...} | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | exit M10 | | LoopUnrolling.cs:86:5:92:5 | {...} | LoopUnrolling.cs:87:9:87:34 | ... ...; | @@ -2903,8 +2252,13 @@ dominance | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | LoopUnrolling.cs:87:13:87:33 | String[,] xs = ... | | LoopUnrolling.cs:87:29:87:29 | 0 | LoopUnrolling.cs:87:32:87:32 | 2 | | LoopUnrolling.cs:87:32:87:32 | 2 | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | -| LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | -| LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:22:88:22 | String x | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:89:9:91:9 | {...} | +| LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:89:9:91:9 | {...} | LoopUnrolling.cs:90:13:90:33 | ...; | +| LoopUnrolling.cs:90:13:90:33 | ...; | LoopUnrolling.cs:90:31:90:31 | access to local variable x | +| LoopUnrolling.cs:90:31:90:31 | access to local variable x | LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:95:5:101:5 | {...} | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 | | LoopUnrolling.cs:95:5:101:5 | {...} | LoopUnrolling.cs:96:9:96:34 | ... ...; | @@ -2913,12 +2267,11 @@ dominance | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | LoopUnrolling.cs:96:13:96:33 | String[,] xs = ... | | LoopUnrolling.cs:96:29:96:29 | 2 | LoopUnrolling.cs:96:32:96:32 | 2 | | LoopUnrolling.cs:96:32:96:32 | 2 | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | -| LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:98:9:100:9 | {...} | -| LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:98:9:100:9 | {...} | LoopUnrolling.cs:99:13:99:33 | ...; | -| LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | LoopUnrolling.cs:99:31:99:31 | access to local variable x | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | {...} | @@ -4364,7 +3717,6 @@ dominance | cflow.cs:256:17:256:37 | ...; | cflow.cs:256:35:256:35 | 0 | | cflow.cs:256:35:256:35 | 0 | cflow.cs:256:17:256:36 | call to method WriteLine | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:262:5:277:5 | {...} | -| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | exit Yield | | cflow.cs:262:5:277:5 | {...} | cflow.cs:263:22:263:22 | 0 | | cflow.cs:263:9:263:23 | yield return ...; | cflow.cs:264:9:267:9 | for (...;...;...) ... | | cflow.cs:263:22:263:22 | 0 | cflow.cs:263:9:263:23 | yield return ...; | @@ -4381,11 +3733,12 @@ dominance | cflow.cs:266:26:266:26 | access to local variable i | cflow.cs:266:13:266:27 | yield return ...; | | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:269:9:272:9 | {...} | | cflow.cs:269:9:272:9 | {...} | cflow.cs:270:13:270:24 | yield break; | -| cflow.cs:270:13:270:24 | yield break; | cflow.cs:274:9:276:9 | [finally: return] {...} | -| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:275:13:275:42 | [finally: return] ...; | -| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | -| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:275:31:275:40 | [finally: return] "not dead" | -| cflow.cs:275:31:275:40 | [finally: return] "not dead" | cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | +| cflow.cs:270:13:270:24 | yield break; | cflow.cs:274:9:276:9 | {...} | +| cflow.cs:274:9:276:9 | {...} | cflow.cs:275:13:275:42 | ...; | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | +| cflow.cs:275:13:275:42 | ...; | cflow.cs:275:31:275:40 | "not dead" | +| cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:41 | call to method WriteLine | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | exit ControlFlowSub | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:31:282:33 | {...} | @@ -4785,7 +4138,6 @@ postDominance | Assert.cs:5:7:5:17 | exit AssertTests | Assert.cs:5:7:5:17 | exit AssertTests (normal) | | Assert.cs:5:7:5:17 | exit AssertTests (normal) | Assert.cs:5:7:5:17 | {...} | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | call to constructor Object | -| Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | | Assert.cs:7:10:7:11 | exit M1 (normal) | Assert.cs:11:9:11:35 | call to method WriteLine | | Assert.cs:8:5:12:5 | {...} | Assert.cs:7:10:7:11 | enter M1 | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:8:5:12:5 | {...} | @@ -4793,16 +4145,15 @@ postDominance | Assert.cs:9:20:9:20 | access to parameter b | Assert.cs:9:9:9:33 | ... ...; | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:24:9:27 | null | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:31:9:32 | "" | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:10:22:10:30 | ... != ... | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:22:10:30 | ... != ... | | Assert.cs:10:9:10:32 | ...; | Assert.cs:9:16:9:32 | String s = ... | | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:9:10:32 | ...; | | Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:27:10:30 | null | | Assert.cs:10:27:10:30 | null | Assert.cs:10:22:10:22 | access to local variable s | | Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:11:27:11:34 | access to property Length | -| Assert.cs:11:9:11:36 | ...; | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:10:9:10:31 | call to method Assert | | Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:11:9:11:36 | ...; | | Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:27 | access to local variable s | -| Assert.cs:14:10:14:11 | exit M2 (abnormal) | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | | Assert.cs:14:10:14:11 | exit M2 (normal) | Assert.cs:18:9:18:35 | call to method WriteLine | | Assert.cs:15:5:19:5 | {...} | Assert.cs:14:10:14:11 | enter M2 | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:15:5:19:5 | {...} | @@ -4810,14 +4161,13 @@ postDominance | Assert.cs:16:20:16:20 | access to parameter b | Assert.cs:16:9:16:33 | ... ...; | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:24:16:27 | null | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:31:16:32 | "" | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:17:23:17:23 | access to local variable s | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:23:17:23 | access to local variable s | | Assert.cs:17:9:17:25 | ...; | Assert.cs:16:16:16:32 | String s = ... | | Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:25 | ...; | | Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:18:27:18:34 | access to property Length | -| Assert.cs:18:9:18:36 | ...; | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:17:9:17:24 | call to method IsNull | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:9:18:36 | ...; | | Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:27 | access to local variable s | -| Assert.cs:21:10:21:11 | exit M3 (abnormal) | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | | Assert.cs:21:10:21:11 | exit M3 (normal) | Assert.cs:25:9:25:35 | call to method WriteLine | | Assert.cs:22:5:26:5 | {...} | Assert.cs:21:10:21:11 | enter M3 | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:22:5:26:5 | {...} | @@ -4825,14 +4175,13 @@ postDominance | Assert.cs:23:20:23:20 | access to parameter b | Assert.cs:23:9:23:33 | ... ...; | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:24:23:27 | null | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:31:23:32 | "" | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:24:26:24:26 | access to local variable s | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:26:24:26 | access to local variable s | | Assert.cs:24:9:24:28 | ...; | Assert.cs:23:16:23:32 | String s = ... | | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:28 | ...; | | Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:25:27:25:34 | access to property Length | -| Assert.cs:25:9:25:36 | ...; | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:24:9:24:27 | call to method IsNotNull | | Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:9:25:36 | ...; | | Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:27 | access to local variable s | -| Assert.cs:28:10:28:11 | exit M4 (abnormal) | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | | Assert.cs:28:10:28:11 | exit M4 (normal) | Assert.cs:32:9:32:35 | call to method WriteLine | | Assert.cs:29:5:33:5 | {...} | Assert.cs:28:10:28:11 | enter M4 | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:29:5:33:5 | {...} | @@ -4840,16 +4189,15 @@ postDominance | Assert.cs:30:20:30:20 | access to parameter b | Assert.cs:30:9:30:33 | ... ...; | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:24:30:27 | null | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:31:30:32 | "" | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:31:23:31:31 | ... == ... | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:23:31:31 | ... == ... | | Assert.cs:31:9:31:33 | ...; | Assert.cs:30:16:30:32 | String s = ... | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:9:31:33 | ...; | | Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:28:31:31 | null | | Assert.cs:31:28:31:31 | null | Assert.cs:31:23:31:23 | access to local variable s | | Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:32:27:32:34 | access to property Length | -| Assert.cs:32:9:32:36 | ...; | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:31:9:31:32 | call to method IsTrue | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:32:9:32:36 | ...; | | Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:27 | access to local variable s | -| Assert.cs:35:10:35:11 | exit M5 (abnormal) | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | | Assert.cs:35:10:35:11 | exit M5 (normal) | Assert.cs:39:9:39:35 | call to method WriteLine | | Assert.cs:36:5:40:5 | {...} | Assert.cs:35:10:35:11 | enter M5 | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:36:5:40:5 | {...} | @@ -4857,16 +4205,15 @@ postDominance | Assert.cs:37:20:37:20 | access to parameter b | Assert.cs:37:9:37:33 | ... ...; | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:24:37:27 | null | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:31:37:32 | "" | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:38:23:38:31 | ... != ... | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:23:38:31 | ... != ... | | Assert.cs:38:9:38:33 | ...; | Assert.cs:37:16:37:32 | String s = ... | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:9:38:33 | ...; | | Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:28:38:31 | null | | Assert.cs:38:28:38:31 | null | Assert.cs:38:23:38:23 | access to local variable s | | Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:39:27:39:34 | access to property Length | -| Assert.cs:39:9:39:36 | ...; | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:38:9:38:32 | call to method IsTrue | | Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:39:9:39:36 | ...; | | Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:27 | access to local variable s | -| Assert.cs:42:10:42:11 | exit M6 (abnormal) | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | | Assert.cs:42:10:42:11 | exit M6 (normal) | Assert.cs:46:9:46:35 | call to method WriteLine | | Assert.cs:43:5:47:5 | {...} | Assert.cs:42:10:42:11 | enter M6 | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:43:5:47:5 | {...} | @@ -4874,16 +4221,15 @@ postDominance | Assert.cs:44:20:44:20 | access to parameter b | Assert.cs:44:9:44:33 | ... ...; | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:24:44:27 | null | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:31:44:32 | "" | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:45:24:45:32 | ... != ... | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:24:45:32 | ... != ... | | Assert.cs:45:9:45:34 | ...; | Assert.cs:44:16:44:32 | String s = ... | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:9:45:34 | ...; | | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:29:45:32 | null | | Assert.cs:45:29:45:32 | null | Assert.cs:45:24:45:24 | access to local variable s | | Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:46:27:46:34 | access to property Length | -| Assert.cs:46:9:46:36 | ...; | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:45:9:45:33 | call to method IsFalse | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:46:9:46:36 | ...; | | Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:27 | access to local variable s | -| Assert.cs:49:10:49:11 | exit M7 (abnormal) | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | | Assert.cs:49:10:49:11 | exit M7 (normal) | Assert.cs:53:9:53:35 | call to method WriteLine | | Assert.cs:50:5:54:5 | {...} | Assert.cs:49:10:49:11 | enter M7 | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:50:5:54:5 | {...} | @@ -4891,361 +4237,247 @@ postDominance | Assert.cs:51:20:51:20 | access to parameter b | Assert.cs:51:9:51:33 | ... ...; | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:24:51:27 | null | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:31:51:32 | "" | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:52:24:52:32 | ... == ... | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:24:52:32 | ... == ... | | Assert.cs:52:9:52:34 | ...; | Assert.cs:51:16:51:32 | String s = ... | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:9:52:34 | ...; | | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:29:52:32 | null | | Assert.cs:52:29:52:32 | null | Assert.cs:52:24:52:24 | access to local variable s | | Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:53:27:53:34 | access to property Length | -| Assert.cs:53:9:53:36 | ...; | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:52:9:52:33 | call to method IsFalse | | Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:53:9:53:36 | ...; | | Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:27 | access to local variable s | -| Assert.cs:56:10:56:11 | exit M8 (abnormal) | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | | Assert.cs:56:10:56:11 | exit M8 (normal) | Assert.cs:60:9:60:35 | call to method WriteLine | | Assert.cs:57:5:61:5 | {...} | Assert.cs:56:10:56:11 | enter M8 | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:57:5:61:5 | {...} | -| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | -| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | +| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:58:20:58:32 | ... ? ... : ... | | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:9:58:33 | ... ...; | -| Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | Assert.cs:58:31:58:32 | [b (line 56): false] "" | -| Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:20:58:20 | access to parameter b | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | -| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | -| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | Assert.cs:59:9:59:38 | [b (line 56): false] ...; | -| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | Assert.cs:59:9:59:38 | [b (line 56): true] ...; | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:28:59:31 | [b (line 56): false] null | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:28:59:31 | [b (line 56): true] null | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | -| Assert.cs:59:28:59:31 | [b (line 56): false] null | Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | -| Assert.cs:59:28:59:31 | [b (line 56): true] null | Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:24:58:27 | null | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:31:58:32 | "" | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:59:9:59:38 | ...; | Assert.cs:58:16:58:32 | String s = ... | +| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:9:59:38 | ...; | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:28:59:31 | null | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:31 | ... != ... | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:59:28:59:31 | null | Assert.cs:59:23:59:23 | access to local variable s | | Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:60:27:60:34 | access to property Length | -| Assert.cs:60:9:60:36 | ...; | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:59:9:59:37 | call to method IsTrue | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:9:60:36 | ...; | | Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:27 | access to local variable s | -| Assert.cs:63:10:63:11 | exit M9 (abnormal) | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | | Assert.cs:63:10:63:11 | exit M9 (normal) | Assert.cs:67:9:67:35 | call to method WriteLine | | Assert.cs:64:5:68:5 | {...} | Assert.cs:63:10:63:11 | enter M9 | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:64:5:68:5 | {...} | -| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | -| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | +| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:65:20:65:32 | ... ? ... : ... | | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:9:65:33 | ... ...; | -| Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | Assert.cs:65:24:65:27 | [b (line 63): true] null | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:20:65:20 | access to parameter b | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | -| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | -| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | Assert.cs:66:9:66:39 | [b (line 63): false] ...; | -| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | Assert.cs:66:9:66:39 | [b (line 63): true] ...; | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:29:66:32 | [b (line 63): false] null | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:29:66:32 | [b (line 63): true] null | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:29:66:32 | [b (line 63): false] null | Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | -| Assert.cs:66:29:66:32 | [b (line 63): true] null | Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:24:65:27 | null | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:31:65:32 | "" | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:66:9:66:39 | ...; | Assert.cs:65:16:65:32 | String s = ... | +| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:9:66:39 | ...; | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:29:66:32 | null | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:32 | ... == ... | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:66:29:66:32 | null | Assert.cs:66:24:66:24 | access to local variable s | | Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:67:27:67:34 | access to property Length | -| Assert.cs:67:9:67:36 | ...; | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:66:9:66:38 | call to method IsFalse | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:9:67:36 | ...; | | Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:27 | access to local variable s | -| Assert.cs:70:10:70:12 | exit M10 (abnormal) | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | | Assert.cs:70:10:70:12 | exit M10 (normal) | Assert.cs:74:9:74:35 | call to method WriteLine | | Assert.cs:71:5:75:5 | {...} | Assert.cs:70:10:70:12 | enter M10 | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:71:5:75:5 | {...} | -| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | -| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | +| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:72:20:72:32 | ... ? ... : ... | | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:9:72:33 | ... ...; | -| Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | Assert.cs:72:31:72:32 | [b (line 70): false] "" | -| Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:20:72:20 | access to parameter b | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | -| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | -| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | Assert.cs:73:9:73:38 | [b (line 70): false] ...; | -| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | Assert.cs:73:9:73:38 | [b (line 70): true] ...; | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:28:73:31 | [b (line 70): false] null | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:28:73:31 | [b (line 70): true] null | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | -| Assert.cs:73:28:73:31 | [b (line 70): false] null | Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | -| Assert.cs:73:28:73:31 | [b (line 70): true] null | Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:24:72:27 | null | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:31:72:32 | "" | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:73:9:73:38 | ...; | Assert.cs:72:16:72:32 | String s = ... | +| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:9:73:38 | ...; | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:28:73:31 | null | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:31 | ... == ... | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:73:28:73:31 | null | Assert.cs:73:23:73:23 | access to local variable s | | Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:74:27:74:34 | access to property Length | -| Assert.cs:74:9:74:36 | ...; | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:73:9:73:37 | call to method IsTrue | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:9:74:36 | ...; | | Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:27 | access to local variable s | -| Assert.cs:77:10:77:12 | exit M11 (abnormal) | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | | Assert.cs:77:10:77:12 | exit M11 (normal) | Assert.cs:81:9:81:35 | call to method WriteLine | | Assert.cs:78:5:82:5 | {...} | Assert.cs:77:10:77:12 | enter M11 | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:78:5:82:5 | {...} | -| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | -| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | +| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:79:20:79:32 | ... ? ... : ... | | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:9:79:33 | ... ...; | -| Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | Assert.cs:79:24:79:27 | [b (line 77): true] null | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:20:79:20 | access to parameter b | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | -| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | -| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | Assert.cs:80:9:80:39 | [b (line 77): false] ...; | -| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | Assert.cs:80:9:80:39 | [b (line 77): true] ...; | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:29:80:32 | [b (line 77): false] null | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:29:80:32 | [b (line 77): true] null | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:29:80:32 | [b (line 77): false] null | Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | -| Assert.cs:80:29:80:32 | [b (line 77): true] null | Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:24:79:27 | null | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:31:79:32 | "" | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:80:9:80:39 | ...; | Assert.cs:79:16:79:32 | String s = ... | +| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:9:80:39 | ...; | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:29:80:32 | null | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:32 | ... != ... | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:80:29:80:32 | null | Assert.cs:80:24:80:24 | access to local variable s | | Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:81:27:81:34 | access to property Length | -| Assert.cs:81:9:81:36 | ...; | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:80:9:80:38 | call to method IsFalse | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:9:81:36 | ...; | | Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:27 | access to local variable s | | Assert.cs:84:10:84:12 | exit M12 (normal) | Assert.cs:128:9:128:35 | call to method WriteLine | | Assert.cs:85:5:129:5 | {...} | Assert.cs:84:10:84:12 | enter M12 | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:85:5:129:5 | {...} | -| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | +| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:86:20:86:32 | ... ? ... : ... | | Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:9:86:33 | ... ...; | -| Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | Assert.cs:86:31:86:32 | [b (line 84): false] "" | -| Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:20:86:20 | access to parameter b | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | -| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | -| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | -| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | Assert.cs:87:9:87:32 | [b (line 84): false] ...; | -| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | Assert.cs:87:9:87:32 | [b (line 84): true] ...; | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:27:87:30 | [b (line 84): false] null | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:27:87:30 | [b (line 84): true] null | -| Assert.cs:87:27:87:30 | [b (line 84): false] null | Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | -| Assert.cs:87:27:87:30 | [b (line 84): true] null | Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | -| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | -| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | -| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | Assert.cs:88:9:88:36 | [b (line 84): false] ...; | -| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | Assert.cs:88:9:88:36 | [b (line 84): true] ...; | -| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | -| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | -| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:9:90:26 | [b (line 84): false] ...; | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:9:90:26 | [b (line 84): true] ...; | -| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | -| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | -| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:25 | [b (line 84): false] ...; | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:25 | [b (line 84): true] ...; | -| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | -| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | -| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | Assert.cs:92:9:92:36 | [b (line 84): false] ...; | -| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | Assert.cs:92:9:92:36 | [b (line 84): true] ...; | -| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | -| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | -| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:9:94:26 | [b (line 84): false] ...; | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:9:94:26 | [b (line 84): true] ...; | -| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | -| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | -| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:28 | [b (line 84): false] ...; | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:28 | [b (line 84): true] ...; | -| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | -| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | -| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | Assert.cs:96:9:96:36 | [b (line 84): false] ...; | -| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | Assert.cs:96:9:96:36 | [b (line 84): true] ...; | -| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | -| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | -| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:9:98:26 | [b (line 84): false] ...; | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:9:98:26 | [b (line 84): true] ...; | -| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | -| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | -| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | -| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | Assert.cs:99:9:99:33 | [b (line 84): false] ...; | -| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | Assert.cs:99:9:99:33 | [b (line 84): true] ...; | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:28:99:31 | [b (line 84): false] null | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:28:99:31 | [b (line 84): true] null | -| Assert.cs:99:28:99:31 | [b (line 84): false] null | Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | -| Assert.cs:99:28:99:31 | [b (line 84): true] null | Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | -| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | -| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | -| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | Assert.cs:100:9:100:36 | [b (line 84): false] ...; | -| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | Assert.cs:100:9:100:36 | [b (line 84): true] ...; | -| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | -| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | -| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:9:102:26 | [b (line 84): false] ...; | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:9:102:26 | [b (line 84): true] ...; | -| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | -| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | -| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | -| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | Assert.cs:103:9:103:33 | [b (line 84): false] ...; | -| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | Assert.cs:103:9:103:33 | [b (line 84): true] ...; | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:28:103:31 | [b (line 84): false] null | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:28:103:31 | [b (line 84): true] null | -| Assert.cs:103:28:103:31 | [b (line 84): false] null | Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | -| Assert.cs:103:28:103:31 | [b (line 84): true] null | Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | -| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | -| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | -| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | Assert.cs:104:9:104:36 | [b (line 84): false] ...; | -| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | Assert.cs:104:9:104:36 | [b (line 84): true] ...; | -| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | -| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | -| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:9:106:26 | [b (line 84): false] ...; | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:9:106:26 | [b (line 84): true] ...; | -| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | -| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | -| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | -| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | Assert.cs:107:9:107:34 | [b (line 84): false] ...; | -| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | Assert.cs:107:9:107:34 | [b (line 84): true] ...; | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:29:107:32 | [b (line 84): false] null | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:29:107:32 | [b (line 84): true] null | -| Assert.cs:107:29:107:32 | [b (line 84): false] null | Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | -| Assert.cs:107:29:107:32 | [b (line 84): true] null | Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | -| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | -| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | -| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | Assert.cs:108:9:108:36 | [b (line 84): false] ...; | -| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | Assert.cs:108:9:108:36 | [b (line 84): true] ...; | -| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | -| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | -| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:9:110:26 | [b (line 84): false] ...; | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:9:110:26 | [b (line 84): true] ...; | -| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | -| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | -| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | -| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | Assert.cs:111:9:111:34 | [b (line 84): false] ...; | -| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | Assert.cs:111:9:111:34 | [b (line 84): true] ...; | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:29:111:32 | [b (line 84): false] null | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:29:111:32 | [b (line 84): true] null | -| Assert.cs:111:29:111:32 | [b (line 84): false] null | Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | -| Assert.cs:111:29:111:32 | [b (line 84): true] null | Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | -| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | -| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | -| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | Assert.cs:112:9:112:36 | [b (line 84): false] ...; | -| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | Assert.cs:112:9:112:36 | [b (line 84): true] ...; | -| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | -| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | -| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | -| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | -| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:9:114:26 | [b (line 84): false] ...; | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:9:114:26 | [b (line 84): true] ...; | -| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | -| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | -| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | Assert.cs:115:9:115:38 | [b (line 84): false] ...; | -| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | Assert.cs:115:9:115:38 | [b (line 84): true] ...; | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:28:115:31 | [b (line 84): false] null | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:28:115:31 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:28:115:31 | [b (line 84): false] null | Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | -| Assert.cs:115:28:115:31 | [b (line 84): true] null | Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | -| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | -| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | Assert.cs:116:9:116:36 | [b (line 84): true] ...; | -| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | -| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:9:118:26 | [b (line 84): true] ...; | -| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | -| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:119:9:119:40 | [b (line 84): true] ...; | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:29:119:32 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:29:119:32 | [b (line 84): true] null | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | -| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | -| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | Assert.cs:120:9:120:36 | [b (line 84): true] ...; | -| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | -| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:9:122:26 | [b (line 84): true] ...; | -| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | -| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:123:9:123:38 | [b (line 84): true] ...; | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:28:123:31 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:28:123:31 | [b (line 84): true] null | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | -| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | -| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | Assert.cs:124:9:124:36 | [b (line 84): true] ...; | -| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | -| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | -| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:9:126:26 | [b (line 84): true] ...; | -| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | -| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:127:9:127:40 | [b (line 84): true] ...; | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:29:127:32 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:29:127:32 | [b (line 84): true] null | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:87:22:87:30 | ... != ... | +| Assert.cs:87:9:87:32 | ...; | Assert.cs:86:16:86:32 | String s = ... | +| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:9:87:32 | ...; | +| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:27:87:30 | null | +| Assert.cs:87:27:87:30 | null | Assert.cs:87:22:87:22 | access to local variable s | +| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:88:27:88:34 | access to property Length | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:87:9:87:31 | call to method Assert | +| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:88:27:88:27 | access to local variable s | +| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:90:9:90:26 | ...; | Assert.cs:88:9:88:35 | call to method WriteLine | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:9:90:26 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:91:23:91:23 | access to local variable s | +| Assert.cs:91:9:91:25 | ...; | Assert.cs:90:9:90:25 | ... = ... | +| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:9:91:25 | ...; | +| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:92:27:92:34 | access to property Length | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:91:9:91:24 | call to method IsNull | +| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:92:27:92:27 | access to local variable s | +| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:94:9:94:26 | ...; | Assert.cs:92:9:92:35 | call to method WriteLine | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:9:94:26 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:95:26:95:26 | access to local variable s | +| Assert.cs:95:9:95:28 | ...; | Assert.cs:94:9:94:25 | ... = ... | +| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:9:95:28 | ...; | +| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:96:27:96:34 | access to property Length | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:95:9:95:27 | call to method IsNotNull | +| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:96:27:96:27 | access to local variable s | +| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:98:9:98:26 | ...; | Assert.cs:96:9:96:35 | call to method WriteLine | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:9:98:26 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:99:23:99:31 | ... == ... | +| Assert.cs:99:9:99:33 | ...; | Assert.cs:98:9:98:25 | ... = ... | +| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:9:99:33 | ...; | +| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:28:99:31 | null | +| Assert.cs:99:28:99:31 | null | Assert.cs:99:23:99:23 | access to local variable s | +| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:100:27:100:34 | access to property Length | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:99:9:99:32 | call to method IsTrue | +| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:100:27:100:27 | access to local variable s | +| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:102:9:102:26 | ...; | Assert.cs:100:9:100:35 | call to method WriteLine | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:9:102:26 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:103:23:103:31 | ... != ... | +| Assert.cs:103:9:103:33 | ...; | Assert.cs:102:9:102:25 | ... = ... | +| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:9:103:33 | ...; | +| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:28:103:31 | null | +| Assert.cs:103:28:103:31 | null | Assert.cs:103:23:103:23 | access to local variable s | +| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:104:27:104:34 | access to property Length | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:103:9:103:32 | call to method IsTrue | +| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:104:27:104:27 | access to local variable s | +| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:106:9:106:26 | ...; | Assert.cs:104:9:104:35 | call to method WriteLine | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:9:106:26 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:107:24:107:32 | ... != ... | +| Assert.cs:107:9:107:34 | ...; | Assert.cs:106:9:106:25 | ... = ... | +| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:9:107:34 | ...; | +| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:29:107:32 | null | +| Assert.cs:107:29:107:32 | null | Assert.cs:107:24:107:24 | access to local variable s | +| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:108:27:108:34 | access to property Length | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:107:9:107:33 | call to method IsFalse | +| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:108:27:108:27 | access to local variable s | +| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:110:9:110:26 | ...; | Assert.cs:108:9:108:35 | call to method WriteLine | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:9:110:26 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:111:24:111:32 | ... == ... | +| Assert.cs:111:9:111:34 | ...; | Assert.cs:110:9:110:25 | ... = ... | +| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:9:111:34 | ...; | +| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:29:111:32 | null | +| Assert.cs:111:29:111:32 | null | Assert.cs:111:24:111:24 | access to local variable s | +| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:112:27:112:34 | access to property Length | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:111:9:111:33 | call to method IsFalse | +| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:112:27:112:27 | access to local variable s | +| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:114:9:114:26 | ...; | Assert.cs:112:9:112:35 | call to method WriteLine | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:9:114:26 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:115:9:115:38 | ...; | Assert.cs:114:9:114:25 | ... = ... | +| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:9:115:38 | ...; | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:28:115:31 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:31 | ... != ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:115:28:115:31 | null | Assert.cs:115:23:115:23 | access to local variable s | +| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:116:27:116:34 | access to property Length | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:115:9:115:37 | call to method IsTrue | +| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:116:27:116:27 | access to local variable s | +| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:118:9:118:26 | ...; | Assert.cs:116:9:116:35 | call to method WriteLine | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:9:118:26 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:119:9:119:40 | ...; | Assert.cs:118:9:118:25 | ... = ... | +| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:9:119:40 | ...; | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:29:119:32 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:32 | ... == ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:37:119:38 | !... | +| Assert.cs:119:29:119:32 | null | Assert.cs:119:24:119:24 | access to local variable s | +| Assert.cs:119:37:119:38 | !... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:120:27:120:34 | access to property Length | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:119:9:119:39 | call to method IsFalse | +| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:120:27:120:27 | access to local variable s | +| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:122:9:122:26 | ...; | Assert.cs:120:9:120:35 | call to method WriteLine | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:9:122:26 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:123:9:123:38 | ...; | Assert.cs:122:9:122:25 | ... = ... | +| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:9:123:38 | ...; | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:28:123:31 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:31 | ... == ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:123:28:123:31 | null | Assert.cs:123:23:123:23 | access to local variable s | +| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:124:27:124:34 | access to property Length | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:123:9:123:37 | call to method IsTrue | +| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:124:27:124:27 | access to local variable s | +| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:126:9:126:26 | ...; | Assert.cs:124:9:124:35 | call to method WriteLine | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:9:126:26 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:127:9:127:40 | ...; | Assert.cs:126:9:126:25 | ... = ... | +| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:9:127:40 | ...; | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:29:127:32 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:32 | ... != ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:37:127:38 | !... | +| Assert.cs:127:29:127:32 | null | Assert.cs:127:24:127:24 | access to local variable s | +| Assert.cs:127:37:127:38 | !... | Assert.cs:127:38:127:38 | access to parameter b | | Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:128:27:128:34 | access to property Length | -| Assert.cs:128:9:128:36 | ...; | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:127:9:127:39 | call to method IsFalse | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:9:128:36 | ...; | | Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:27 | access to local variable s | | Assert.cs:131:18:131:32 | exit AssertTrueFalse | Assert.cs:131:18:131:32 | exit AssertTrueFalse (normal) | @@ -5253,15 +4485,13 @@ postDominance | Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | enter AssertTrueFalse | | Assert.cs:138:10:138:12 | exit M13 (normal) | Assert.cs:141:9:141:15 | return ...; | | Assert.cs:139:5:142:5 | {...} | Assert.cs:138:10:138:12 | enter M13 | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:140:33:140:34 | access to parameter b3 | | Assert.cs:140:9:140:35 | this access | Assert.cs:140:9:140:36 | ...; | | Assert.cs:140:9:140:36 | ...; | Assert.cs:139:5:142:5 | {...} | | Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:9:140:35 | this access | | Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:25:140:26 | access to parameter b1 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:141:9:141:15 | return ...; | Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | +| Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:29:140:30 | access to parameter b2 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | enter Assignments | | Assignments.cs:1:7:1:17 | exit Assignments | Assignments.cs:1:7:1:17 | exit Assignments (normal) | | Assignments.cs:1:7:1:17 | exit Assignments (normal) | Assignments.cs:1:7:1:17 | {...} | @@ -5334,8 +4564,6 @@ postDominance | BreakInTry.cs:20:10:20:11 | exit M2 (normal) | BreakInTry.cs:35:7:35:7 | ; | | BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:20:10:20:11 | enter M2 | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:29:22:32 | access to parameter args | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:31:21:31:32 | ... == ... | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | ; | | BreakInTry.cs:22:29:22:32 | access to parameter args | BreakInTry.cs:21:5:36:5 | {...} | | BreakInTry.cs:23:9:34:9 | {...} | BreakInTry.cs:22:22:22:24 | String arg | | BreakInTry.cs:24:13:33:13 | try {...} ... | BreakInTry.cs:23:9:34:9 | {...} | @@ -5344,21 +4572,18 @@ postDominance | BreakInTry.cs:26:21:26:23 | access to local variable arg | BreakInTry.cs:26:17:27:26 | if (...) ... | | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:26:28:26:31 | null | | BreakInTry.cs:26:28:26:31 | null | BreakInTry.cs:26:21:26:23 | access to local variable arg | -| BreakInTry.cs:30:13:33:13 | [finally: break] {...} | BreakInTry.cs:27:21:27:26 | break; | -| BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | BreakInTry.cs:30:13:33:13 | [finally: break] {...} | +| BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:26:21:26:31 | ... == ... | +| BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:31:17:32:21 | if (...) ... | BreakInTry.cs:30:13:33:13 | {...} | -| BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | | BreakInTry.cs:31:21:31:24 | access to parameter args | BreakInTry.cs:31:17:32:21 | if (...) ... | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:31:29:31:32 | null | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:31:29:31:32 | [finally: break] null | -| BreakInTry.cs:31:29:31:32 | [finally: break] null | BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:21:31:24 | access to parameter args | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | -| BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | -| BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | +| BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:31:21:31:32 | ... == ... | +| BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:32:21:32:21 | ; | | BreakInTry.cs:38:10:38:11 | exit M3 | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | -| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | -| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:50:21:50:26 | [finally: return] break; | +| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | +| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:38:10:38:11 | enter M3 | | BreakInTry.cs:40:9:52:9 | try {...} ... | BreakInTry.cs:39:5:54:5 | {...} | @@ -5367,27 +4592,17 @@ postDominance | BreakInTry.cs:42:17:42:20 | access to parameter args | BreakInTry.cs:42:13:43:23 | if (...) ... | | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:42:25:42:28 | null | | BreakInTry.cs:42:25:42:28 | null | BreakInTry.cs:42:17:42:20 | access to parameter args | -| BreakInTry.cs:46:9:52:9 | [finally: return] {...} | BreakInTry.cs:43:17:43:23 | return ...; | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | +| BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:42:17:42:28 | ... == ... | +| BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:33:47:36 | access to parameter args | -| BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | BreakInTry.cs:46:9:52:9 | [finally: return] {...} | | BreakInTry.cs:47:33:47:36 | access to parameter args | BreakInTry.cs:46:9:52:9 | {...} | -| BreakInTry.cs:48:13:51:13 | [finally: return] {...} | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | | BreakInTry.cs:48:13:51:13 | {...} | BreakInTry.cs:47:26:47:28 | String arg | -| BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | BreakInTry.cs:48:13:51:13 | [finally: return] {...} | | BreakInTry.cs:49:17:50:26 | if (...) ... | BreakInTry.cs:48:13:51:13 | {...} | -| BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | | BreakInTry.cs:49:21:49:23 | access to local variable arg | BreakInTry.cs:49:17:50:26 | if (...) ... | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:49:28:49:31 | null | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:49:28:49:31 | [finally: return] null | -| BreakInTry.cs:49:28:49:31 | [finally: return] null | BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:49:21:49:23 | access to local variable arg | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:56:10:56:11 | exit M4 | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | -| BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | -| BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:68:21:68:26 | [finally: return] break; | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:68:21:68:26 | break; | | BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:56:10:56:11 | enter M4 | | BreakInTry.cs:58:9:70:9 | try {...} ... | BreakInTry.cs:57:5:71:5 | {...} | @@ -5396,20 +4611,14 @@ postDominance | BreakInTry.cs:60:17:60:20 | access to parameter args | BreakInTry.cs:60:13:61:23 | if (...) ... | | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:60:25:60:28 | null | | BreakInTry.cs:60:25:60:28 | null | BreakInTry.cs:60:17:60:20 | access to parameter args | -| BreakInTry.cs:64:9:70:9 | [finally: return] {...} | BreakInTry.cs:61:17:61:23 | return ...; | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | +| BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:60:17:60:28 | ... == ... | +| BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:33:65:36 | access to parameter args | -| BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | BreakInTry.cs:64:9:70:9 | [finally: return] {...} | | BreakInTry.cs:65:33:65:36 | access to parameter args | BreakInTry.cs:64:9:70:9 | {...} | -| BreakInTry.cs:66:13:69:13 | [finally: return] {...} | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | | BreakInTry.cs:66:13:69:13 | {...} | BreakInTry.cs:65:26:65:28 | String arg | -| BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | BreakInTry.cs:66:13:69:13 | [finally: return] {...} | | BreakInTry.cs:67:17:68:26 | if (...) ... | BreakInTry.cs:66:13:69:13 | {...} | -| BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | | BreakInTry.cs:67:21:67:23 | access to local variable arg | BreakInTry.cs:67:17:68:26 | if (...) ... | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:67:28:67:31 | null | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:67:28:67:31 | [finally: return] null | -| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:23 | access to local variable arg | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | @@ -5439,17 +4648,19 @@ postDominance | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | {...} | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | call to constructor Object | -| CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:28:10:28:10 | enter M | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:29:5:41:5 | {...} | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:31:9:34:9 | {...} | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | -| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | +| CompileTimeOperators.cs:36:9:38:9 | {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:37:31:37:39 | "Finally" | +| CompileTimeOperators.cs:37:13:37:41 | ...; | CompileTimeOperators.cs:36:9:38:9 | {...} | +| CompileTimeOperators.cs:37:31:37:39 | "Finally" | CompileTimeOperators.cs:37:13:37:41 | ...; | +| CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | CompileTimeOperators.cs:39:27:39:32 | "Dead" | +| CompileTimeOperators.cs:39:27:39:32 | "Dead" | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:40:32:40:36 | "End" | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:9:40:11 | End: | | CompileTimeOperators.cs:40:32:40:36 | "End" | CompileTimeOperators.cs:40:14:40:38 | ...; | @@ -5542,13 +4753,11 @@ postDominance | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:5:9:6:16 | if (...) ... | -| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | -| Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | -| Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | -| Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | +| Conditions.cs:6:13:6:13 | access to parameter x | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:6:13:6:15 | ...++ | Conditions.cs:6:13:6:13 | access to parameter x | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:5:13:5:15 | access to parameter inc | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:6:13:6:15 | ...++ | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:9:8:16 | if (...) ... | | Conditions.cs:8:13:8:13 | access to parameter x | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:8:13:8:15 | ...-- | Conditions.cs:8:13:8:13 | access to parameter x | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:7:13:7:16 | [true] !... | @@ -5560,25 +4769,19 @@ postDominance | Conditions.cs:13:17:13:17 | 0 | Conditions.cs:13:9:13:18 | ... ...; | | Conditions.cs:14:9:15:16 | if (...) ... | Conditions.cs:13:13:13:17 | Int32 x = ... | | Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:14:9:15:16 | if (...) ... | -| Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | -| Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | -| Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | -| Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | -| Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | -| Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | -| Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | +| Conditions.cs:15:13:15:13 | access to local variable x | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:15:13:15:15 | ...++ | Conditions.cs:15:13:15:13 | access to local variable x | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:14:13:14:13 | access to parameter b | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:15:13:15:15 | ...++ | +| Conditions.cs:16:13:16:13 | access to local variable x | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:16:17:16:17 | 0 | +| Conditions.cs:16:17:16:17 | 0 | Conditions.cs:16:13:16:13 | access to local variable x | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:13:18:20 | if (...) ... | | Conditions.cs:18:17:18:17 | access to local variable x | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:18:17:18:19 | ...-- | Conditions.cs:18:17:18:17 | access to local variable x | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:19:9:19:17 | return ...; | Conditions.cs:19:16:19:16 | access to local variable x | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | +| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:16:13:16:17 | ... > ... | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:17:17:18 | [false] !... | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:18:17:18:19 | ...-- | | Conditions.cs:22:9:22:10 | exit M2 | Conditions.cs:22:9:22:10 | exit M2 (normal) | @@ -5590,17 +4793,15 @@ postDominance | Conditions.cs:25:9:27:20 | if (...) ... | Conditions.cs:24:13:24:17 | Int32 x = ... | | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:25:9:27:20 | if (...) ... | | Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:26:13:27:20 | if (...) ... | -| Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | -| Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | -| Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | -| Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | +| Conditions.cs:27:17:27:17 | access to local variable x | Conditions.cs:27:17:27:20 | ...; | +| Conditions.cs:27:17:27:19 | ...++ | Conditions.cs:27:17:27:17 | access to local variable x | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:25:13:25:14 | access to parameter b1 | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:26:17:26:18 | access to parameter b2 | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:27:17:27:19 | ...++ | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:28:9:29:16 | if (...) ... | | Conditions.cs:29:13:29:13 | access to local variable x | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:29:13:29:15 | ...++ | Conditions.cs:29:13:29:13 | access to local variable x | -| Conditions.cs:29:13:29:16 | ...; | Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | | Conditions.cs:30:9:30:17 | return ...; | Conditions.cs:30:16:30:16 | access to local variable x | -| Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:28:13:28:14 | access to parameter b2 | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:29:13:29:15 | ...++ | | Conditions.cs:33:9:33:10 | exit M3 | Conditions.cs:33:9:33:10 | exit M3 (normal) | @@ -5619,16 +4820,15 @@ postDominance | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:37:13:37:14 | access to parameter b1 | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:38:13:38:19 | ... = ... | | Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:39:9:40:16 | if (...) ... | -| Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | -| Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | -| Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | +| Conditions.cs:40:13:40:13 | access to local variable x | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:40:13:40:15 | ...++ | Conditions.cs:40:13:40:13 | access to local variable x | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:39:13:39:14 | access to local variable b2 | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:40:13:40:15 | ...++ | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | if (...) ... | | Conditions.cs:42:13:42:13 | access to local variable x | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:42:13:42:15 | ...++ | Conditions.cs:42:13:42:13 | access to local variable x | -| Conditions.cs:42:13:42:16 | ...; | Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | | Conditions.cs:43:9:43:17 | return ...; | Conditions.cs:43:16:43:16 | access to local variable x | -| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | +| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:41:13:41:14 | access to local variable b2 | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:42:13:42:15 | ...++ | | Conditions.cs:46:9:46:10 | exit M4 | Conditions.cs:46:9:46:10 | exit M4 (normal) | | Conditions.cs:46:9:46:10 | exit M4 (normal) | Conditions.cs:54:9:54:17 | return ...; | @@ -5637,31 +4837,18 @@ postDominance | Conditions.cs:48:13:48:17 | Int32 y = ... | Conditions.cs:48:17:48:17 | 0 | | Conditions.cs:48:17:48:17 | 0 | Conditions.cs:48:9:48:18 | ... ...; | | Conditions.cs:49:9:53:9 | while (...) ... | Conditions.cs:48:13:48:17 | Int32 y = ... | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | -| Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | | Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:9:53:9 | while (...) ... | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:51:17:51:17 | access to parameter b | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:52:17:52:19 | ...++ | | Conditions.cs:49:16:49:18 | ...-- | Conditions.cs:49:16:49:16 | access to parameter x | -| Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:49:22:49:22 | 0 | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | | Conditions.cs:49:22:49:22 | 0 | Conditions.cs:49:16:49:18 | ...-- | -| Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | -| Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | -| Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | | Conditions.cs:51:13:52:20 | if (...) ... | Conditions.cs:50:9:53:9 | {...} | -| Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | -| Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | | Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:51:13:52:20 | if (...) ... | -| Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | -| Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | +| Conditions.cs:52:17:52:17 | access to local variable y | Conditions.cs:52:17:52:20 | ...; | +| Conditions.cs:52:17:52:19 | ...++ | Conditions.cs:52:17:52:17 | access to local variable y | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:49:16:49:22 | ... > ... | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | | Conditions.cs:57:9:57:10 | exit M5 | Conditions.cs:57:9:57:10 | exit M5 (normal) | | Conditions.cs:57:9:57:10 | exit M5 (normal) | Conditions.cs:67:9:67:17 | return ...; | | Conditions.cs:58:5:68:5 | {...} | Conditions.cs:57:9:57:10 | enter M5 | @@ -5669,37 +4856,21 @@ postDominance | Conditions.cs:59:13:59:17 | Int32 y = ... | Conditions.cs:59:17:59:17 | 0 | | Conditions.cs:59:17:59:17 | 0 | Conditions.cs:59:9:59:18 | ... ...; | | Conditions.cs:60:9:64:9 | while (...) ... | Conditions.cs:59:13:59:17 | Int32 y = ... | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | -| Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | | Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:9:64:9 | while (...) ... | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:62:17:62:17 | access to parameter b | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:63:17:63:19 | ...++ | | Conditions.cs:60:16:60:18 | ...-- | Conditions.cs:60:16:60:16 | access to parameter x | -| Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:60:22:60:22 | 0 | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | | Conditions.cs:60:22:60:22 | 0 | Conditions.cs:60:16:60:18 | ...-- | -| Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | -| Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | -| Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | | Conditions.cs:62:13:63:20 | if (...) ... | Conditions.cs:61:9:64:9 | {...} | -| Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | -| Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | | Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:62:13:63:20 | if (...) ... | -| Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | -| Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | +| Conditions.cs:63:17:63:17 | access to local variable y | Conditions.cs:63:17:63:20 | ...; | +| Conditions.cs:63:17:63:19 | ...++ | Conditions.cs:63:17:63:17 | access to local variable y | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:60:16:60:22 | ... > ... | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:65:9:66:16 | if (...) ... | | Conditions.cs:66:13:66:13 | access to local variable y | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:66:13:66:15 | ...++ | Conditions.cs:66:13:66:13 | access to local variable y | -| Conditions.cs:66:13:66:16 | ...; | Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | | Conditions.cs:67:9:67:17 | return ...; | Conditions.cs:67:16:67:16 | access to local variable y | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:65:13:65:13 | access to parameter b | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:66:13:66:15 | ...++ | | Conditions.cs:70:9:70:10 | exit M6 | Conditions.cs:70:9:70:10 | exit M6 (normal) | @@ -5781,31 +4952,24 @@ postDominance | Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:104:17:104:17 | access to parameter b | | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:104:13:104:28 | String x = ... | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:9:106:20 | if (...) ... | -| Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | Conditions.cs:106:18:106:19 | [b (line 102): true] "" | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | -| Conditions.cs:106:18:106:19 | [b (line 102): true] "" | Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | -| Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | -| Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | -| Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | -| Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | -| Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | -| Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | -| Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | +| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:18:106:19 | "" | +| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:19 | ... + ... | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:13 | access to local variable x | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:19 | ... = ... | +| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:13:107:13 | access to local variable x | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:24:107:24 | 0 | +| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:13:107:20 | access to property Length | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:13:109:24 | if (...) ... | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:24 | ...; | | Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:22:109:23 | "" | | Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:23 | ... + ... | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:17 | access to local variable x | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | +| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | ... > ... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:17:108:18 | [false] !... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... = ... | | Conditions.cs:113:10:113:11 | exit M9 | Conditions.cs:113:10:113:11 | exit M9 (normal) | @@ -5822,7 +4986,7 @@ postDominance | Conditions.cs:116:25:116:39 | ... < ... | Conditions.cs:116:29:116:39 | access to property Length | | Conditions.cs:116:29:116:32 | access to parameter args | Conditions.cs:116:25:116:25 | access to local variable i | | Conditions.cs:116:29:116:39 | access to property Length | Conditions.cs:116:29:116:32 | access to parameter args | -| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | +| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:121:17:121:20 | access to local variable last | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:122:17:122:24 | ... = ... | | Conditions.cs:116:42:116:44 | ...++ | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:118:13:118:44 | ... ...; | Conditions.cs:117:9:123:9 | {...} | @@ -5835,67 +4999,43 @@ postDominance | Conditions.cs:118:43:118:43 | 1 | Conditions.cs:118:29:118:39 | access to property Length | | Conditions.cs:119:13:120:23 | if (...) ... | Conditions.cs:118:17:118:43 | Boolean last = ... | | Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:13:120:23 | if (...) ... | -| Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | Conditions.cs:120:21:120:22 | [last (line 118): false] "" | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:120:17:120:22 | ... = ... | Conditions.cs:120:21:120:22 | "" | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:120:21:120:22 | "" | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:120:17:120:22 | ... = ... | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:122:17:122:24 | ... = ... | Conditions.cs:122:21:122:24 | null | -| Conditions.cs:122:17:122:25 | ...; | Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | | Conditions.cs:122:21:122:24 | null | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:130:5:141:5 | {...} | Conditions.cs:129:10:129:12 | enter M10 | | Conditions.cs:131:9:140:9 | while (...) ... | Conditions.cs:130:5:141:5 | {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | -| Conditions.cs:131:16:131:19 | true | Conditions.cs:131:9:140:9 | while (...) ... | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | | Conditions.cs:133:13:139:13 | if (...) ... | Conditions.cs:132:9:140:9 | {...} | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | | Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:133:17:133:22 | this access | | Conditions.cs:133:17:133:22 | this access | Conditions.cs:133:13:139:13 | if (...) ... | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:135:17:138:17 | if (...) ... | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:135:21:135:26 | this access | +| Conditions.cs:135:21:135:26 | this access | Conditions.cs:135:17:138:17 | if (...) ... | +| Conditions.cs:137:21:137:26 | access to field Field1 | Conditions.cs:137:21:137:26 | this access | +| Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:38 | ...; | +| Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:26 | access to field Field1 | +| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:136:17:138:17 | {...} | | Conditions.cs:143:10:143:12 | exit M11 | Conditions.cs:143:10:143:12 | exit M11 (normal) | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:147:13:147:48 | call to method WriteLine | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:149:13:149:48 | call to method WriteLine | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:143:10:143:12 | enter M11 | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:144:5:150:5 | {...} | -| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | -| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | +| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:145:17:145:29 | ... ? ... : ... | | Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:9:145:30 | ... ...; | -| Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | -| Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | -| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:27:145:29 | "b" | +| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:145:13:145:29 | String s = ... | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:146:9:149:49 | if (...) ... | | Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:147:38:147:47 | $"..." | -| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:44:147:46 | {...} | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:13:147:49 | ...; | | Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:45:147:45 | access to local variable s | | Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:40:147:43 | "a = " | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:38:149:47 | $"..." | -| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:44:149:46 | {...} | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:13:149:49 | ...; | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | @@ -5945,9 +5085,9 @@ postDominance | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:42:25:42:29 | false | | ExitMethods.cs:42:13:42:31 | ...; | ExitMethods.cs:41:9:43:9 | {...} | | ExitMethods.cs:42:25:42:29 | false | ExitMethods.cs:42:13:42:31 | ...; | -| ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | | ExitMethods.cs:46:13:46:19 | return ...; | ExitMethods.cs:45:9:47:9 | {...} | -| ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | | ExitMethods.cs:50:13:50:19 | return ...; | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:54:10:54:11 | exit M7 | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | @@ -6025,8 +5165,9 @@ postDominance | ExitMethods.cs:117:16:117:38 | ... ? ... : ... | ExitMethods.cs:117:38:117:38 | 1 | | ExitMethods.cs:117:27:117:29 | - | ExitMethods.cs:117:16:117:16 | access to parameter s | | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | -| ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | +| ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:122:9:122:28 | call to method IsTrue | | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | +| ExitMethods.cs:122:9:122:28 | call to method IsTrue | ExitMethods.cs:122:23:122:27 | false | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:121:5:124:5 | {...} | | ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:29 | ...; | | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | @@ -6035,13 +5176,13 @@ postDominance | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:128:9:128:26 | this access | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:27 | ...; | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:127:5:130:5 | {...} | -| ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | -| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:33:132:49 | call to method IsFalse | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:10:132:20 | enter AssertFalse | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | -| ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | +| ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | +| ExitMethods.cs:136:9:136:25 | call to method AssertFalse | ExitMethods.cs:136:21:136:24 | true | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:9:136:26 | ...; | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:135:5:138:5 | {...} | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | this access | @@ -6094,7 +5235,6 @@ postDominance | Finally.cs:3:14:3:20 | exit Finally | Finally.cs:3:14:3:20 | exit Finally (normal) | | Finally.cs:3:14:3:20 | exit Finally (normal) | Finally.cs:3:14:3:20 | {...} | | Finally.cs:3:14:3:20 | {...} | Finally.cs:3:14:3:20 | call to constructor Object | -| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | | Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:15:13:15:40 | call to method WriteLine | | Finally.cs:8:5:17:5 | {...} | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:8:5:17:5 | {...} | @@ -6103,13 +5243,9 @@ postDominance | Finally.cs:11:13:11:38 | ...; | Finally.cs:10:9:12:9 | {...} | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:38 | ...; | | Finally.cs:14:9:16:9 | {...} | Finally.cs:11:13:11:37 | call to method WriteLine | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:15:31:15:39 | "Finally" | | Finally.cs:15:13:15:41 | ...; | Finally.cs:14:9:16:9 | {...} | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:41 | ...; | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | -| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:50:13:50:40 | call to method WriteLine | | Finally.cs:20:5:52:5 | {...} | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:21:9:51:9 | try {...} ... | Finally.cs:20:5:52:5 | {...} | @@ -6117,37 +5253,29 @@ postDominance | Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:23:31:23:36 | "Try2" | | Finally.cs:23:13:23:38 | ...; | Finally.cs:22:9:25:9 | {...} | | Finally.cs:23:31:23:36 | "Try2" | Finally.cs:23:13:23:38 | ...; | -| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | +| Finally.cs:26:48:26:51 | true | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:27:9:29:9 | {...} | Finally.cs:26:48:26:51 | true | | Finally.cs:28:13:28:18 | throw ...; | Finally.cs:27:9:29:9 | {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:31:9:40:9 | {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | +| Finally.cs:31:9:40:9 | {...} | Finally.cs:30:41:30:42 | ArgumentException ex | | Finally.cs:32:13:39:13 | try {...} ... | Finally.cs:31:9:40:9 | {...} | | Finally.cs:33:13:35:13 | {...} | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:33:13:35:13 | {...} | | Finally.cs:34:21:34:24 | true | Finally.cs:34:17:34:32 | if (...) ... | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:28:13:28:18 | throw ...; | -| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:24:13:24:19 | return ...; | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:34:21:34:24 | true | +| Finally.cs:37:13:39:13 | {...} | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:38:17:38:44 | throw ...; | Finally.cs:38:23:38:43 | object creation of type Exception | +| Finally.cs:38:23:38:43 | object creation of type Exception | Finally.cs:38:37:38:42 | "Boo!" | +| Finally.cs:38:37:38:42 | "Boo!" | Finally.cs:37:13:39:13 | {...} | +| Finally.cs:45:9:47:9 | {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:46:13:46:19 | return ...; | Finally.cs:45:9:47:9 | {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:24:13:24:19 | return ...; | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:38:17:38:44 | throw ...; | | Finally.cs:49:9:51:9 | {...} | Finally.cs:42:9:43:9 | {...} | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | -| Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:50:31:50:39 | [finally: return] "Finally" | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:46:13:46:19 | return ...; | | Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:50:31:50:39 | "Finally" | | Finally.cs:50:13:50:41 | ...; | Finally.cs:49:9:51:9 | {...} | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | -| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:49:9:51:9 | [finally: return] {...} | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:41 | ...; | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | -| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:41 | [finally: return] ...; | -| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:70:13:70:40 | call to method WriteLine | | Finally.cs:55:5:72:5 | {...} | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:56:9:71:9 | try {...} ... | Finally.cs:55:5:72:5 | {...} | @@ -6155,41 +5283,29 @@ postDominance | Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:58:31:58:36 | "Try3" | | Finally.cs:58:13:58:38 | ...; | Finally.cs:57:9:60:9 | {...} | | Finally.cs:58:31:58:36 | "Try3" | Finally.cs:58:13:58:38 | ...; | -| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | +| Finally.cs:61:48:61:51 | true | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:62:9:64:9 | {...} | Finally.cs:61:48:61:51 | true | | Finally.cs:63:13:63:18 | throw ...; | Finally.cs:62:9:64:9 | {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:65:48:65:51 | [exception: Exception] null | -| Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:63:13:63:18 | throw ...; | -| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:59:13:59:19 | return ...; | +| Finally.cs:65:35:65:35 | access to local variable e | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:65:35:65:43 | access to property Message | Finally.cs:65:35:65:35 | access to local variable e | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:65:48:65:51 | null | +| Finally.cs:65:48:65:51 | null | Finally.cs:65:35:65:43 | access to property Message | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:59:13:59:19 | return ...; | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:65:35:65:51 | ... != ... | | Finally.cs:69:9:71:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | -| Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:70:31:70:39 | "Finally" | | Finally.cs:70:13:70:41 | ...; | Finally.cs:69:9:71:9 | {...} | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | -| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:69:9:71:9 | [finally: return] {...} | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:41 | ...; | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | -| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:41 | [finally: return] ...; | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:77:16:77:20 | ... > ... | -| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:97:21:97:23 | [finally: break] ...-- | -| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:97:21:97:23 | [finally: return] ...-- | +| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:97:21:97:23 | ...-- | | Finally.cs:75:5:101:5 | {...} | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:76:9:76:19 | ... ...; | Finally.cs:75:5:101:5 | {...} | | Finally.cs:76:13:76:18 | Int32 i = ... | Finally.cs:76:17:76:18 | 10 | | Finally.cs:76:17:76:18 | 10 | Finally.cs:76:9:76:19 | ... ...; | | Finally.cs:77:9:100:9 | while (...) ... | Finally.cs:76:13:76:18 | Int32 i = ... | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:77:9:100:9 | while (...) ... | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:97:21:97:23 | ...-- | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:97:21:97:23 | [finally: continue] ...-- | | Finally.cs:77:16:77:20 | ... > ... | Finally.cs:77:20:77:20 | 0 | | Finally.cs:77:20:77:20 | 0 | Finally.cs:77:16:77:16 | access to local variable i | | Finally.cs:79:13:99:13 | try {...} ... | Finally.cs:78:9:100:9 | {...} | @@ -6204,64 +5320,23 @@ postDominance | Finally.cs:85:21:85:21 | access to local variable i | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:85:26:85:26 | 2 | | Finally.cs:85:26:85:26 | 2 | Finally.cs:85:21:85:21 | access to local variable i | -| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:86:21:86:26 | break; | -| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:84:21:84:29 | continue; | -| Finally.cs:89:13:99:13 | [finally: return] {...} | Finally.cs:82:21:82:27 | return ...; | -| Finally.cs:90:17:98:17 | [finally: break] try {...} ... | Finally.cs:89:13:99:13 | [finally: break] {...} | -| Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | Finally.cs:89:13:99:13 | [finally: continue] {...} | -| Finally.cs:90:17:98:17 | [finally: return] try {...} ... | Finally.cs:89:13:99:13 | [finally: return] {...} | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:82:21:82:27 | return ...; | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:84:21:84:29 | continue; | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:85:21:85:26 | ... == ... | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:86:21:86:26 | break; | | Finally.cs:90:17:98:17 | try {...} ... | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:91:17:94:17 | [finally: break] {...} | Finally.cs:90:17:98:17 | [finally: break] try {...} ... | -| Finally.cs:91:17:94:17 | [finally: continue] {...} | Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | -| Finally.cs:91:17:94:17 | [finally: return] {...} | Finally.cs:90:17:98:17 | [finally: return] try {...} ... | | Finally.cs:91:17:94:17 | {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:92:21:93:46 | [finally: break] if (...) ... | Finally.cs:91:17:94:17 | [finally: break] {...} | -| Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | Finally.cs:91:17:94:17 | [finally: continue] {...} | -| Finally.cs:92:21:93:46 | [finally: return] if (...) ... | Finally.cs:91:17:94:17 | [finally: return] {...} | | Finally.cs:92:21:93:46 | if (...) ... | Finally.cs:91:17:94:17 | {...} | -| Finally.cs:92:25:92:25 | [finally: break] access to local variable i | Finally.cs:92:21:93:46 | [finally: break] if (...) ... | -| Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | -| Finally.cs:92:25:92:25 | [finally: return] access to local variable i | Finally.cs:92:21:93:46 | [finally: return] if (...) ... | | Finally.cs:92:25:92:25 | access to local variable i | Finally.cs:92:21:93:46 | if (...) ... | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:92:30:92:30 | 3 | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:92:30:92:30 | [finally: break] 3 | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:92:30:92:30 | [finally: continue] 3 | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:92:30:92:30 | [finally: return] 3 | | Finally.cs:92:30:92:30 | 3 | Finally.cs:92:25:92:25 | access to local variable i | -| Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:92:25:92:25 | [finally: break] access to local variable i | -| Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | -| Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:92:25:92:25 | [finally: return] access to local variable i | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:92:25:92:30 | [finally: break] ... == ... | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:92:25:92:30 | [finally: return] ... == ... | | Finally.cs:96:17:98:17 | {...} | Finally.cs:92:25:92:30 | ... == ... | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | -| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:24 | [finally: break] ...; | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | -| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:24 | [finally: continue] ...; | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | -| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:24 | [finally: return] ...; | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:93:25:93:46 | throw ...; | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:24 | ...; | | Finally.cs:97:21:97:23 | ...-- | Finally.cs:97:21:97:21 | access to local variable i | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | -| Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | Finally.cs:97:21:97:24 | ...; | Finally.cs:96:17:98:17 | {...} | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:17:116:32 | ... > ... | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:17:116:32 | [finally: return] ... > ... | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:117:17:117:36 | call to method WriteLine | | Finally.cs:104:5:119:5 | {...} | Finally.cs:103:10:103:11 | enter M5 | | Finally.cs:105:9:118:9 | try {...} ... | Finally.cs:104:5:119:5 | {...} | @@ -6269,103 +5344,37 @@ postDominance | Finally.cs:107:13:108:23 | if (...) ... | Finally.cs:106:9:111:9 | {...} | | Finally.cs:107:17:107:21 | access to field Field | Finally.cs:107:17:107:21 | this access | | Finally.cs:107:17:107:21 | this access | Finally.cs:107:13:108:23 | if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:17:107:21 | access to field Field | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:107:33:107:33 | 0 | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:28 | access to property Length | | Finally.cs:109:17:109:21 | access to field Field | Finally.cs:109:17:109:21 | this access | | Finally.cs:109:17:109:21 | this access | Finally.cs:109:13:110:49 | if (...) ... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:21 | access to field Field | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:109:33:109:33 | 1 | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:28 | access to property Length | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:110:17:110:49 | throw ...; | -| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:108:17:108:23 | return ...; | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:107:17:107:21 | access to field Field | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:107:17:107:28 | access to property Length | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:108:17:108:23 | return ...; | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:21 | access to field Field | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:33 | ... == ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | -| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:113:9:118:9 | [finally: return] {...} | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:110:17:110:49 | throw ...; | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:23 | [finally: return] this access | -| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:23 | this access | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:13:115:41 | if (...) ... | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:19:114:23 | access to field Field | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:35:114:35 | 0 | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:35:114:35 | [finally: return] 0 | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:30 | access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:30 | [finally: return] access to property Length | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:115:35:115:39 | access to field Field | | Finally.cs:115:17:115:41 | ...; | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:35:115:39 | [finally: return] this access | -| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:35:115:39 | this access | | Finally.cs:115:35:115:39 | this access | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:115:17:115:40 | call to method WriteLine | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:21 | [finally: return] this access | -| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:21 | this access | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | -| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:17:116:21 | access to field Field | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:116:32:116:32 | 0 | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:116:32:116:32 | [finally: return] 0 | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:28 | access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | -| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:28 | [finally: return] access to property Length | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | -| Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:117:35:117:35 | [finally: return] 1 | | Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:117:35:117:35 | 1 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | exit M6 | Finally.cs:121:10:121:11 | exit M6 (normal) | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:125:17:125:40 | Double temp = ... | | Finally.cs:122:5:131:5 | {...} | Finally.cs:121:10:121:11 | enter M6 | @@ -6378,18 +5387,17 @@ postDominance | Finally.cs:125:24:125:40 | ... / ... | Finally.cs:125:28:125:40 | access to constant E | | Finally.cs:125:28:125:40 | access to constant E | Finally.cs:125:24:125:24 | (...) ... | | Finally.cs:133:10:133:11 | exit M7 | Finally.cs:133:10:133:11 | exit M7 (abnormal) | +| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:141:13:141:44 | throw ...; | | Finally.cs:134:5:145:5 | {...} | Finally.cs:133:10:133:11 | enter M7 | | Finally.cs:135:9:143:9 | try {...} ... | Finally.cs:134:5:145:5 | {...} | | Finally.cs:136:9:138:9 | {...} | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:137:31:137:35 | "Try" | | Finally.cs:137:13:137:37 | ...; | Finally.cs:136:9:138:9 | {...} | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:37 | ...; | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | +| Finally.cs:140:9:143:9 | {...} | Finally.cs:137:13:137:36 | call to method WriteLine | | Finally.cs:141:13:141:44 | throw ...; | Finally.cs:141:19:141:43 | object creation of type ArgumentException | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:41:141:42 | "" | Finally.cs:140:9:143:9 | {...} | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:158:21:158:36 | ... == ... | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:163:17:163:42 | call to method WriteLine | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:167:17:167:37 | call to method WriteLine | @@ -6400,84 +5408,31 @@ postDominance | Finally.cs:151:17:151:20 | access to parameter args | Finally.cs:151:13:152:50 | if (...) ... | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:151:25:151:28 | null | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:20 | access to parameter args | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:155:9:169:9 | {...} | Finally.cs:151:17:151:28 | ... == ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:152:17:152:50 | throw ...; | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:155:9:169:9 | {...} | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | | Finally.cs:157:13:160:13 | {...} | Finally.cs:156:13:168:13 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:157:13:160:13 | {...} | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:17:159:45 | if (...) ... | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:21:158:24 | access to parameter args | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:27:159:44 | object creation of type Exception | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | -| Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [exception: Exception] "1" | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | -| Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | -| Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:159:27:159:44 | object creation of type Exception | +| Finally.cs:161:39:161:39 | access to local variable e | Finally.cs:161:30:161:30 | Exception e | +| Finally.cs:161:39:161:47 | access to property Message | Finally.cs:161:39:161:39 | access to local variable e | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:161:52:161:54 | "1" | +| Finally.cs:161:52:161:54 | "1" | Finally.cs:161:39:161:47 | access to property Message | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:163:35:163:41 | access to array element | | Finally.cs:163:17:163:43 | ...; | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:17:163:43 | ...; | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:40:163:40 | 0 | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:38 | access to parameter args | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | | Finally.cs:166:13:168:13 | {...} | Finally.cs:165:13:168:13 | catch {...} | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:167:35:167:36 | "" | | Finally.cs:167:17:167:38 | ...; | Finally.cs:166:13:168:13 | {...} | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:38 | ...; | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | {...} | @@ -6490,103 +5445,50 @@ postDominance | Finally.cs:174:11:174:20 | exit ExceptionC | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | | Finally.cs:174:11:174:20 | exit ExceptionC (normal) | Finally.cs:174:11:174:20 | {...} | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | call to constructor Exception | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:21:186:22 | access to parameter b2 | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:190:21:190:22 | access to parameter b1 | | Finally.cs:177:5:193:5 | {...} | Finally.cs:176:10:176:11 | enter M9 | | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:177:5:193:5 | {...} | | Finally.cs:179:9:181:9 | {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:179:9:181:9 | {...} | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:13:180:43 | if (...) ... | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:180:17:180:18 | access to parameter b1 | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | -| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:180:17:180:18 | access to parameter b1 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:184:13:191:13 | try {...} ... | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:185:13:187:13 | {...} | Finally.cs:184:13:191:13 | try {...} ... | +| Finally.cs:186:17:186:47 | if (...) ... | Finally.cs:185:13:187:13 | {...} | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:186:17:186:47 | if (...) ... | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:190:17:190:47 | if (...) ... | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:190:17:190:47 | if (...) ... | +| Finally.cs:190:25:190:47 | throw ...; | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:195:10:195:12 | exit M10 (normal) | Finally.cs:213:9:213:24 | ... = ... | | Finally.cs:196:5:214:5 | {...} | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:196:5:214:5 | {...} | | Finally.cs:198:9:200:9 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:198:9:200:9 | {...} | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:13:199:43 | if (...) ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:202:9:212:9 | {...} | Finally.cs:199:17:199:18 | access to parameter b1 | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:199:21:199:43 | throw ...; | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | | Finally.cs:204:13:206:13 | {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:204:13:206:13 | {...} | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:17:205:47 | if (...) ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:208:13:210:13 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:205:25:205:47 | throw ...; | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:17:209:47 | if (...) ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:209:31:209:46 | object creation of type ExceptionC | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:13:211:29 | ...; | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:211:26:211:28 | "0" | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | | Finally.cs:211:13:211:29 | ...; | Finally.cs:209:21:209:22 | access to parameter b3 | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:16 | this access | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:9:213:25 | ...; | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:213:22:213:24 | "1" | | Finally.cs:213:9:213:25 | ...; | Finally.cs:211:13:211:28 | ... = ... | @@ -6619,68 +5521,29 @@ postDominance | Finally.cs:238:13:241:13 | {...} | Finally.cs:237:13:253:13 | try {...} ... | | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:238:13:241:13 | {...} | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:239:17:240:43 | if (...) ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:243:13:253:13 | {...} | Finally.cs:239:21:239:22 | access to parameter b1 | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:240:21:240:43 | throw ...; | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | | Finally.cs:245:17:248:17 | {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:245:17:248:17 | {...} | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:246:21:247:47 | if (...) ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:250:17:252:17 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:247:25:247:47 | throw ...; | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:251:39:251:53 | "Inner finally" | | Finally.cs:251:21:251:55 | ...; | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:55 | ...; | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:254:31:254:43 | "Mid finally" | -| Finally.cs:254:13:254:45 | ...; | Finally.cs:251:21:251:54 | call to method WriteLine | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:45 | ...; | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:251:21:251:54 | call to method WriteLine | | Finally.cs:257:9:259:9 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:258:31:258:45 | "Outer finally" | | Finally.cs:258:13:258:47 | ...; | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:47 | ...; | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:9:260:34 | ...; | Finally.cs:258:13:258:46 | call to method WriteLine | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:34 | ...; | -| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | | Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... = ... | | Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} | @@ -6689,22 +5552,14 @@ postDominance | Finally.cs:267:13:267:35 | ...; | Finally.cs:266:9:268:9 | {...} | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:35 | ...; | | Finally.cs:270:9:273:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:31:271:33 | "3" | | Finally.cs:271:13:271:35 | ...; | Finally.cs:270:9:273:9 | {...} | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:35 | ...; | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:19 | ...; | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:18:272:18 | 3 | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | | Finally.cs:272:13:272:19 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:13 | access to parameter i | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | exit Foreach (normal) | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | {...} | @@ -6984,9 +5839,8 @@ postDominance | LoopUnrolling.cs:9:13:9:23 | access to property Length | LoopUnrolling.cs:9:13:9:16 | access to parameter args | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:9:28:9:28 | 0 | | LoopUnrolling.cs:9:28:9:28 | 0 | LoopUnrolling.cs:9:13:9:23 | access to property Length | -| LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | -| LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | | LoopUnrolling.cs:12:13:12:35 | ...; | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | LoopUnrolling.cs:12:13:12:35 | ...; | @@ -7001,9 +5855,8 @@ postDominance | LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:17:18:17:47 | array creation of type String[] | | LoopUnrolling.cs:17:38:17:40 | "b" | LoopUnrolling.cs:17:33:17:35 | "a" | | LoopUnrolling.cs:17:43:17:45 | "c" | LoopUnrolling.cs:17:38:17:40 | "b" | -| LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | -| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:17:13:17:47 | String[] xs = ... | | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | LoopUnrolling.cs:19:31:19:31 | access to local variable x | | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:18:22:18:22 | String x | @@ -7014,22 +5867,25 @@ postDominance | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:29:24:32 | access to parameter args | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:29:24:32 | access to parameter args | LoopUnrolling.cs:23:5:27:5 | {...} | -| LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | LoopUnrolling.cs:25:34:25:37 | access to parameter args | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:34:25:37 | access to parameter args | | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | -| LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | | LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:24:22:24:24 | Char arg | | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | | LoopUnrolling.cs:26:17:26:40 | ...; | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | LoopUnrolling.cs:26:17:26:40 | ...; | | LoopUnrolling.cs:29:10:29:11 | exit M4 | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | -| LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | | LoopUnrolling.cs:30:5:34:5 | {...} | LoopUnrolling.cs:29:10:29:11 | enter M4 | | LoopUnrolling.cs:31:9:31:31 | ... ...; | LoopUnrolling.cs:30:5:34:5 | {...} | | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | LoopUnrolling.cs:31:29:31:29 | 0 | | LoopUnrolling.cs:31:29:31:29 | 0 | LoopUnrolling.cs:31:9:31:31 | ... ...; | -| LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | +| LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | LoopUnrolling.cs:33:31:33:31 | access to local variable x | +| LoopUnrolling.cs:33:13:33:33 | ...; | LoopUnrolling.cs:32:22:32:22 | String x | +| LoopUnrolling.cs:33:31:33:31 | access to local variable x | LoopUnrolling.cs:33:13:33:33 | ...; | | LoopUnrolling.cs:36:10:36:11 | exit M5 | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:37:5:43:5 | {...} | LoopUnrolling.cs:36:10:36:11 | enter M5 | @@ -7049,19 +5905,19 @@ postDominance | LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:39:18:39:47 | array creation of type String[] | | LoopUnrolling.cs:39:38:39:40 | "1" | LoopUnrolling.cs:39:33:39:35 | "0" | | LoopUnrolling.cs:39:43:39:45 | "2" | LoopUnrolling.cs:39:38:39:40 | "1" | -| LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:39:13:39:47 | String[] ys = ... | -| LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:40:22:40:22 | String x | | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | LoopUnrolling.cs:42:35:42:39 | ... + ... | | LoopUnrolling.cs:42:17:42:41 | ...; | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:42:35:42:35 | access to local variable x | LoopUnrolling.cs:42:17:42:41 | ...; | | LoopUnrolling.cs:42:35:42:39 | ... + ... | LoopUnrolling.cs:42:39:42:39 | access to local variable y | | LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:42:35:42:35 | access to local variable x | +| LoopUnrolling.cs:45:10:45:11 | exit M6 | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:45:10:45:11 | enter M6 | | LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:46:5:53:5 | {...} | | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:47:31:47:47 | { ..., ... } | @@ -7071,7 +5927,7 @@ postDominance | LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:47:18:47:47 | array creation of type String[] | | LoopUnrolling.cs:47:38:47:40 | "b" | LoopUnrolling.cs:47:33:47:35 | "a" | | LoopUnrolling.cs:47:43:47:45 | "c" | LoopUnrolling.cs:47:38:47:40 | "b" | -| LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | | LoopUnrolling.cs:49:9:52:9 | {...} | LoopUnrolling.cs:48:22:48:22 | String x | | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | LoopUnrolling.cs:50:34:50:34 | access to local variable x | @@ -7079,8 +5935,7 @@ postDominance | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:16:50:36 | ...; | | LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | | LoopUnrolling.cs:55:10:55:11 | exit M7 | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | +| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:55:10:55:11 | enter M7 | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:56:5:65:5 | {...} | | LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | LoopUnrolling.cs:57:31:57:47 | { ..., ... } | @@ -7090,33 +5945,23 @@ postDominance | LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:57:18:57:47 | array creation of type String[] | | LoopUnrolling.cs:57:38:57:40 | "b" | LoopUnrolling.cs:57:33:57:35 | "a" | | LoopUnrolling.cs:57:43:57:45 | "c" | LoopUnrolling.cs:57:38:57:40 | "b" | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | -| LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:62:17:62:17 | access to parameter b | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:57:13:57:47 | String[] xs = ... | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | | LoopUnrolling.cs:59:9:64:9 | {...} | LoopUnrolling.cs:58:22:58:22 | String x | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | | LoopUnrolling.cs:60:13:61:37 | if (...) ... | LoopUnrolling.cs:59:9:64:9 | {...} | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | | LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:60:13:61:37 | if (...) ... | -| LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | -| LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | -| LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | -| LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | +| LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | LoopUnrolling.cs:61:35:61:35 | access to local variable x | +| LoopUnrolling.cs:61:35:61:35 | access to local variable x | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:60:17:60:17 | access to parameter b | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | LoopUnrolling.cs:63:35:63:35 | access to local variable x | +| LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:67:10:67:11 | exit M8 | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:70:13:70:19 | return ...; | -| LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:67:10:67:11 | enter M8 | | LoopUnrolling.cs:69:9:70:19 | if (...) ... | LoopUnrolling.cs:68:5:74:5 | {...} | | LoopUnrolling.cs:69:14:69:17 | access to parameter args | LoopUnrolling.cs:69:9:70:19 | if (...) ... | @@ -7125,28 +5970,42 @@ postDominance | LoopUnrolling.cs:71:9:71:12 | access to parameter args | LoopUnrolling.cs:71:9:71:21 | ...; | | LoopUnrolling.cs:71:9:71:20 | call to method Clear | LoopUnrolling.cs:71:9:71:12 | access to parameter args | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:69:13:69:23 | [false] !... | -| LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | LoopUnrolling.cs:72:29:72:32 | access to parameter args | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:29:72:32 | access to parameter args | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | | LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:71:9:71:20 | call to method Clear | +| LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | LoopUnrolling.cs:73:31:73:33 | access to local variable arg | +| LoopUnrolling.cs:73:13:73:35 | ...; | LoopUnrolling.cs:72:22:72:24 | String arg | +| LoopUnrolling.cs:73:31:73:33 | access to local variable arg | LoopUnrolling.cs:73:13:73:35 | ...; | | LoopUnrolling.cs:76:10:76:11 | exit M9 | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | -| LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:77:5:83:5 | {...} | LoopUnrolling.cs:76:10:76:11 | enter M9 | | LoopUnrolling.cs:78:9:78:34 | ... ...; | LoopUnrolling.cs:77:5:83:5 | {...} | | LoopUnrolling.cs:78:13:78:33 | String[,] xs = ... | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | LoopUnrolling.cs:78:32:78:32 | 0 | | LoopUnrolling.cs:78:29:78:29 | 2 | LoopUnrolling.cs:78:9:78:34 | ... ...; | | LoopUnrolling.cs:78:32:78:32 | 0 | LoopUnrolling.cs:78:29:78:29 | 2 | -| LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | LoopUnrolling.cs:79:27:79:28 | access to local variable xs | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:27:79:28 | access to local variable xs | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | | LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:78:13:78:33 | String[,] xs = ... | +| LoopUnrolling.cs:80:9:82:9 | {...} | LoopUnrolling.cs:79:22:79:22 | String x | +| LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | LoopUnrolling.cs:81:31:81:31 | access to local variable x | +| LoopUnrolling.cs:81:13:81:33 | ...; | LoopUnrolling.cs:80:9:82:9 | {...} | +| LoopUnrolling.cs:81:31:81:31 | access to local variable x | LoopUnrolling.cs:81:13:81:33 | ...; | | LoopUnrolling.cs:85:10:85:12 | exit M10 | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | -| LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | +| LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:86:5:92:5 | {...} | LoopUnrolling.cs:85:10:85:12 | enter M10 | | LoopUnrolling.cs:87:9:87:34 | ... ...; | LoopUnrolling.cs:86:5:92:5 | {...} | | LoopUnrolling.cs:87:13:87:33 | String[,] xs = ... | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | LoopUnrolling.cs:87:32:87:32 | 2 | | LoopUnrolling.cs:87:29:87:29 | 0 | LoopUnrolling.cs:87:9:87:34 | ... ...; | | LoopUnrolling.cs:87:32:87:32 | 2 | LoopUnrolling.cs:87:29:87:29 | 0 | -| LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | LoopUnrolling.cs:88:27:88:28 | access to local variable xs | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:27:88:28 | access to local variable xs | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | | LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:87:13:87:33 | String[,] xs = ... | +| LoopUnrolling.cs:89:9:91:9 | {...} | LoopUnrolling.cs:88:22:88:22 | String x | +| LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | LoopUnrolling.cs:90:31:90:31 | access to local variable x | +| LoopUnrolling.cs:90:13:90:33 | ...; | LoopUnrolling.cs:89:9:91:9 | {...} | +| LoopUnrolling.cs:90:31:90:31 | access to local variable x | LoopUnrolling.cs:90:13:90:33 | ...; | | LoopUnrolling.cs:94:10:94:12 | exit M11 | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:95:5:101:5 | {...} | LoopUnrolling.cs:94:10:94:12 | enter M11 | @@ -7155,9 +6014,8 @@ postDominance | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | LoopUnrolling.cs:96:32:96:32 | 2 | | LoopUnrolling.cs:96:29:96:29 | 2 | LoopUnrolling.cs:96:9:96:34 | ... ...; | | LoopUnrolling.cs:96:32:96:32 | 2 | LoopUnrolling.cs:96:29:96:29 | 2 | -| LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | LoopUnrolling.cs:97:27:97:28 | access to local variable xs | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:27:97:28 | access to local variable xs | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | -| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | | LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:96:13:96:33 | String[,] xs = ... | | LoopUnrolling.cs:98:9:100:9 | {...} | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | LoopUnrolling.cs:99:31:99:31 | access to local variable x | @@ -8541,8 +7399,7 @@ postDominance | cflow.cs:256:17:256:37 | ...; | cflow.cs:255:13:255:20 | default: | | cflow.cs:256:35:256:35 | 0 | cflow.cs:256:17:256:37 | ...; | | cflow.cs:257:17:257:22 | break; | cflow.cs:256:17:256:36 | call to method WriteLine | -| cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | exit Yield (normal) | -| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:275:13:275:41 | call to method WriteLine | | cflow.cs:262:5:277:5 | {...} | cflow.cs:261:49:261:53 | enter Yield | | cflow.cs:263:9:263:23 | yield return ...; | cflow.cs:263:22:263:22 | 0 | | cflow.cs:263:22:263:22 | 0 | cflow.cs:262:5:277:5 | {...} | @@ -8560,10 +7417,10 @@ postDominance | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:264:25:264:30 | ... < ... | | cflow.cs:269:9:272:9 | {...} | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:270:13:270:24 | yield break; | cflow.cs:269:9:272:9 | {...} | -| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:270:13:270:24 | yield break; | -| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:275:31:275:40 | [finally: return] "not dead" | -| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:274:9:276:9 | [finally: return] {...} | -| cflow.cs:275:31:275:40 | [finally: return] "not dead" | cflow.cs:275:13:275:42 | [finally: return] ...; | +| cflow.cs:274:9:276:9 | {...} | cflow.cs:270:13:270:24 | yield break; | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:275:31:275:40 | "not dead" | +| cflow.cs:275:13:275:42 | ...; | cflow.cs:274:9:276:9 | {...} | +| cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:42 | ...; | | cflow.cs:282:5:282:18 | exit ControlFlowSub | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:31:282:33 | {...} | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:5:282:18 | enter ControlFlowSub | @@ -8644,1313 +7501,970 @@ blockDominance | Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | enter AssertTests | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | enter M1 | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | exit M1 | +| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | exit M1 (abnormal) | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:20:9:32 | ... ? ... : ... | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:24:9:27 | null | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:9:31:9:32 | "" | -| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | -| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:7:10:7:11 | enter M1 | Assert.cs:11:9:11:36 | ...; | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | exit M1 | +| Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | exit M1 (abnormal) | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:7:10:7:11 | exit M1 | +| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:7:10:7:11 | exit M1 (abnormal) | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:20:9:32 | ... ? ... : ... | -| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | -| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:11:9:11:36 | ...; | | Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null | | Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:36 | ...; | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:14:10:14:11 | enter M2 | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:14:10:14:11 | exit M2 | +| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:14:10:14:11 | exit M2 (abnormal) | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:20:16:32 | ... ? ... : ... | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:24:16:27 | null | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:16:31:16:32 | "" | -| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | -| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:14:10:14:11 | enter M2 | Assert.cs:18:9:18:36 | ...; | | Assert.cs:14:10:14:11 | exit M2 | Assert.cs:14:10:14:11 | exit M2 | +| Assert.cs:14:10:14:11 | exit M2 (abnormal) | Assert.cs:14:10:14:11 | exit M2 (abnormal) | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:14:10:14:11 | exit M2 | +| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:14:10:14:11 | exit M2 (abnormal) | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:20:16:32 | ... ? ... : ... | -| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | -| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:18:9:18:36 | ...; | | Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null | | Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:36 | ...; | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:21:10:21:11 | enter M3 | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:21:10:21:11 | exit M3 | +| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:21:10:21:11 | exit M3 (abnormal) | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:20:23:32 | ... ? ... : ... | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:24:23:27 | null | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:23:31:23:32 | "" | -| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | -| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:21:10:21:11 | enter M3 | Assert.cs:25:9:25:36 | ...; | | Assert.cs:21:10:21:11 | exit M3 | Assert.cs:21:10:21:11 | exit M3 | +| Assert.cs:21:10:21:11 | exit M3 (abnormal) | Assert.cs:21:10:21:11 | exit M3 (abnormal) | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:21:10:21:11 | exit M3 | +| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:21:10:21:11 | exit M3 (abnormal) | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:20:23:32 | ... ? ... : ... | -| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | -| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:25:9:25:36 | ...; | | Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null | | Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:36 | ...; | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:28:10:28:11 | enter M4 | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:28:10:28:11 | exit M4 | +| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:28:10:28:11 | exit M4 (abnormal) | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:20:30:32 | ... ? ... : ... | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:24:30:27 | null | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:30:31:30:32 | "" | -| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | -| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:28:10:28:11 | enter M4 | Assert.cs:32:9:32:36 | ...; | | Assert.cs:28:10:28:11 | exit M4 | Assert.cs:28:10:28:11 | exit M4 | +| Assert.cs:28:10:28:11 | exit M4 (abnormal) | Assert.cs:28:10:28:11 | exit M4 (abnormal) | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:28:10:28:11 | exit M4 | +| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:28:10:28:11 | exit M4 (abnormal) | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:20:30:32 | ... ? ... : ... | -| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | -| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:32:9:32:36 | ...; | | Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null | | Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:36 | ...; | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:35:10:35:11 | enter M5 | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:35:10:35:11 | exit M5 | +| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:35:10:35:11 | exit M5 (abnormal) | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:20:37:32 | ... ? ... : ... | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:24:37:27 | null | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:37:31:37:32 | "" | -| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | -| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:35:10:35:11 | enter M5 | Assert.cs:39:9:39:36 | ...; | | Assert.cs:35:10:35:11 | exit M5 | Assert.cs:35:10:35:11 | exit M5 | +| Assert.cs:35:10:35:11 | exit M5 (abnormal) | Assert.cs:35:10:35:11 | exit M5 (abnormal) | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:35:10:35:11 | exit M5 | +| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:35:10:35:11 | exit M5 (abnormal) | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:20:37:32 | ... ? ... : ... | -| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | -| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:39:9:39:36 | ...; | | Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null | | Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:36 | ...; | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:42:10:42:11 | enter M6 | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:42:10:42:11 | exit M6 | +| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:42:10:42:11 | exit M6 (abnormal) | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:20:44:32 | ... ? ... : ... | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:24:44:27 | null | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:44:31:44:32 | "" | -| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | -| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:42:10:42:11 | enter M6 | Assert.cs:46:9:46:36 | ...; | | Assert.cs:42:10:42:11 | exit M6 | Assert.cs:42:10:42:11 | exit M6 | +| Assert.cs:42:10:42:11 | exit M6 (abnormal) | Assert.cs:42:10:42:11 | exit M6 (abnormal) | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:42:10:42:11 | exit M6 | +| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:42:10:42:11 | exit M6 (abnormal) | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:20:44:32 | ... ? ... : ... | -| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | -| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:46:9:46:36 | ...; | | Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null | | Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:36 | ...; | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:49:10:49:11 | enter M7 | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:49:10:49:11 | exit M7 | +| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:49:10:49:11 | exit M7 (abnormal) | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:20:51:32 | ... ? ... : ... | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:24:51:27 | null | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:51:31:51:32 | "" | -| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | -| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:49:10:49:11 | enter M7 | Assert.cs:53:9:53:36 | ...; | | Assert.cs:49:10:49:11 | exit M7 | Assert.cs:49:10:49:11 | exit M7 | +| Assert.cs:49:10:49:11 | exit M7 (abnormal) | Assert.cs:49:10:49:11 | exit M7 (abnormal) | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:49:10:49:11 | exit M7 | +| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:49:10:49:11 | exit M7 (abnormal) | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:20:51:32 | ... ? ... : ... | -| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | -| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:53:9:53:36 | ...; | | Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null | | Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:36 | ...; | | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:56:10:56:11 | enter M8 | | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:56:10:56:11 | exit M8 | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:31:58:32 | [b (line 56): false] "" | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:23:59:36 | [false] ... && ... | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | -| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:20:58:32 | ... ? ... : ... | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:24:58:27 | null | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:58:31:58:32 | "" | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:56:10:56:11 | enter M8 | Assert.cs:60:9:60:36 | ...; | | Assert.cs:56:10:56:11 | exit M8 | Assert.cs:56:10:56:11 | exit M8 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:31:58:32 | [b (line 56): false] "" | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:23:59:36 | [false] ... && ... | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | +| Assert.cs:56:10:56:11 | exit M8 (abnormal) | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:56:10:56:11 | exit M8 | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:32 | ... ? ... : ... | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:60:9:60:36 | ...; | +| Assert.cs:58:24:58:27 | null | Assert.cs:58:24:58:27 | null | +| Assert.cs:58:31:58:32 | "" | Assert.cs:58:31:58:32 | "" | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:56:10:56:11 | exit M8 | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:60:9:60:36 | ...; | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:36 | ...; | | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:63:10:63:11 | enter M9 | | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:63:10:63:11 | exit M9 | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:24:65:27 | [b (line 63): true] null | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:24:66:37 | [true] ... \|\| ... | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:20:65:32 | ... ? ... : ... | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:24:65:27 | null | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:65:31:65:32 | "" | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:63:10:63:11 | enter M9 | Assert.cs:67:9:67:36 | ...; | | Assert.cs:63:10:63:11 | exit M9 | Assert.cs:63:10:63:11 | exit M9 | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:24:65:27 | [b (line 63): true] null | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | +| Assert.cs:63:10:63:11 | exit M9 (abnormal) | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:63:10:63:11 | exit M9 | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:32 | ... ? ... : ... | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:67:9:67:36 | ...; | +| Assert.cs:65:24:65:27 | null | Assert.cs:65:24:65:27 | null | +| Assert.cs:65:31:65:32 | "" | Assert.cs:65:31:65:32 | "" | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:63:10:63:11 | exit M9 | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:67:9:67:36 | ...; | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:36 | ...; | | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:70:10:70:12 | enter M10 | | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:70:10:70:12 | exit M10 | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:31:72:32 | [b (line 70): false] "" | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:23:73:36 | [false] ... && ... | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | -| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:20:72:32 | ... ? ... : ... | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:24:72:27 | null | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:72:31:72:32 | "" | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:70:10:70:12 | enter M10 | Assert.cs:74:9:74:36 | ...; | | Assert.cs:70:10:70:12 | exit M10 | Assert.cs:70:10:70:12 | exit M10 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:31:72:32 | [b (line 70): false] "" | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:23:73:36 | [false] ... && ... | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | +| Assert.cs:70:10:70:12 | exit M10 (abnormal) | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:70:10:70:12 | exit M10 | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:32 | ... ? ... : ... | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:74:9:74:36 | ...; | +| Assert.cs:72:24:72:27 | null | Assert.cs:72:24:72:27 | null | +| Assert.cs:72:31:72:32 | "" | Assert.cs:72:31:72:32 | "" | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:70:10:70:12 | exit M10 | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:74:9:74:36 | ...; | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:36 | ...; | | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:77:10:77:12 | enter M11 | | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:77:10:77:12 | exit M11 | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:24:79:27 | [b (line 77): true] null | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:24:80:37 | [true] ... \|\| ... | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:20:79:32 | ... ? ... : ... | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:24:79:27 | null | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:79:31:79:32 | "" | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:77:10:77:12 | enter M11 | Assert.cs:81:9:81:36 | ...; | | Assert.cs:77:10:77:12 | exit M11 | Assert.cs:77:10:77:12 | exit M11 | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:24:79:27 | [b (line 77): true] null | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | +| Assert.cs:77:10:77:12 | exit M11 (abnormal) | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:77:10:77:12 | exit M11 | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:32 | ... ? ... : ... | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:81:9:81:36 | ...; | +| Assert.cs:79:24:79:27 | null | Assert.cs:79:24:79:27 | null | +| Assert.cs:79:31:79:32 | "" | Assert.cs:79:31:79:32 | "" | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:77:10:77:12 | exit M11 | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:81:9:81:36 | ...; | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:36 | ...; | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:84:10:84:12 | enter M12 | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:84:10:84:12 | exit M12 | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:84:10:84:12 | exit M12 (abnormal) | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:31:86:32 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:24:86:27 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:86:31:86:32 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:17:90:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:90:24:90:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:17:94:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:94:24:94:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:17:98:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:98:24:98:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:17:102:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:102:24:102:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:17:106:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:106:24:106:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:17:110:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:110:24:110:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:17:114:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:114:24:114:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:118:17:118:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:118:24:118:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:122:17:122:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:122:24:122:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:126:17:126:20 | null | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:126:24:126:25 | "" | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:84:10:84:12 | enter M12 | Assert.cs:128:9:128:36 | ...; | | Assert.cs:84:10:84:12 | exit M12 | Assert.cs:84:10:84:12 | exit M12 | | Assert.cs:84:10:84:12 | exit M12 (abnormal) | Assert.cs:84:10:84:12 | exit M12 (abnormal) | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:86:31:86:32 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:84:10:84:12 | exit M12 | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:84:10:84:12 | exit M12 (abnormal) | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:86:24:86:27 | null | Assert.cs:86:24:86:27 | null | +| Assert.cs:86:31:86:32 | "" | Assert.cs:86:31:86:32 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:90:17:90:20 | null | Assert.cs:90:17:90:20 | null | +| Assert.cs:90:24:90:25 | "" | Assert.cs:90:24:90:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:94:17:94:20 | null | Assert.cs:94:17:94:20 | null | +| Assert.cs:94:24:94:25 | "" | Assert.cs:94:24:94:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:98:17:98:20 | null | Assert.cs:98:17:98:20 | null | +| Assert.cs:98:24:98:25 | "" | Assert.cs:98:24:98:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:102:17:102:20 | null | Assert.cs:102:17:102:20 | null | +| Assert.cs:102:24:102:25 | "" | Assert.cs:102:24:102:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:106:17:106:20 | null | Assert.cs:106:17:106:20 | null | +| Assert.cs:106:24:106:25 | "" | Assert.cs:106:24:106:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:110:17:110:20 | null | Assert.cs:110:17:110:20 | null | +| Assert.cs:110:24:110:25 | "" | Assert.cs:110:24:110:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:114:17:114:20 | null | Assert.cs:114:17:114:20 | null | +| Assert.cs:114:24:114:25 | "" | Assert.cs:114:24:114:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:118:17:118:20 | null | Assert.cs:118:17:118:20 | null | +| Assert.cs:118:24:118:25 | "" | Assert.cs:118:24:118:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:122:17:122:20 | null | Assert.cs:122:17:122:20 | null | +| Assert.cs:122:24:122:25 | "" | Assert.cs:122:24:122:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:126:17:126:20 | null | Assert.cs:126:17:126:20 | null | +| Assert.cs:126:24:126:25 | "" | Assert.cs:126:24:126:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:128:9:128:36 | ...; | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:36 | ...; | | Assert.cs:131:18:131:32 | enter AssertTrueFalse | Assert.cs:131:18:131:32 | enter AssertTrueFalse | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:138:10:138:12 | enter M13 | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:138:10:138:12 | exit M13 | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:138:10:138:12 | exit M13 (abnormal) | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | +| Assert.cs:138:10:138:12 | enter M13 | Assert.cs:141:9:141:15 | return ...; | | Assert.cs:138:10:138:12 | exit M13 | Assert.cs:138:10:138:12 | exit M13 | | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 (abnormal) | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:141:9:141:15 | return ...; | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | enter Assignments | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | enter M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | enter (...) => ... | @@ -9983,92 +8497,67 @@ blockDominance | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:35:7:35:7 | ; | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:22:22:24 | String arg | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:35:7:35:7 | ; | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:22:22:22:24 | String arg | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:27:21:27:26 | break; | -| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:32:21:32:21 | ; | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:35:7:35:7 | ; | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:38:10:38:11 | enter M3 | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:46:9:52:9 | {...} | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:26:47:28 | String arg | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:50:21:50:26 | [finally: return] break; | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:43:17:43:23 | return ...; | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:50:21:50:26 | [finally: return] break; | +| BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:46:9:52:9 | {...} | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:47:26:47:28 | String arg | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:53:7:53:7 | ; | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:50:21:50:26 | [finally: return] break; | +| BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | String arg | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:47:26:47:28 | String arg | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:50:21:50:26 | break; | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:50:21:50:26 | [finally: return] break; | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:50:21:50:26 | [finally: return] break; | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:56:10:56:11 | enter M4 | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:64:9:70:9 | {...} | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:26:65:28 | String arg | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:68:21:68:26 | [finally: return] break; | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:68:21:68:26 | break; | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:61:17:61:23 | return ...; | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:68:21:68:26 | [finally: return] break; | +| BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:64:9:70:9 | {...} | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:65:26:65:28 | String arg | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:68:21:68:26 | break; | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:68:21:68:26 | [finally: return] break; | +| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | String arg | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:68:21:68:26 | break; | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:65:26:65:28 | String arg | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:68:21:68:26 | break; | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:68:21:68:26 | [finally: return] break; | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:68:21:68:26 | [finally: return] break; | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | enter Default | @@ -10077,6 +8566,14 @@ blockDominance | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | enter M | +| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | exit M | +| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | +| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:40:9:40:11 | End: | +| CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | exit M | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:9:40:11 | End: | | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | enter M1 | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | @@ -10152,42 +8649,41 @@ blockDominance | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | +| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:9:8:16 | if (...) ... | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:13:7:16 | [false] !... | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:7:13:7:16 | [true] !... | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:7:13:7:16 | [false] !... | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:8:13:8:16 | ...; | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:9:8:16 | if (...) ... | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [false] !... | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:7:13:7:16 | [false] !... | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:7:13:7:16 | [true] !... | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:11:9:11:10 | enter M1 | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | +| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:13:18:20 | if (...) ... | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:17:17:18 | [false] !... | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:19:16:19:16 | access to local variable x | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:17:17:17:18 | [false] !... | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:18:17:18:20 | ...; | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:18:17:18:20 | ...; | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:13:18:20 | if (...) ... | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:18:17:18:20 | ...; | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:19:16:19:16 | access to local variable x | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:13:18:20 | if (...) ... | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [false] !... | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:17:17:18 | [true] !... | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:17:17:17:18 | [false] !... | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:18:17:18:20 | ...; | @@ -10195,85 +8691,69 @@ blockDominance | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:16:19:16 | access to local variable x | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:22:9:22:10 | enter M2 | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:26:13:27:20 | if (...) ... | -| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | +| Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:27:17:27:20 | ...; | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:28:9:29:16 | if (...) ... | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:26:13:27:20 | if (...) ... | -| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | +| Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:27:17:27:20 | ...; | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:27:17:27:20 | ...; | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:28:9:29:16 | if (...) ... | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:29:13:29:16 | ...; | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:33:9:33:10 | enter M3 | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:38:13:38:20 | ...; | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:39:9:40:16 | if (...) ... | -| Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | +| Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:41:9:42:16 | if (...) ... | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:38:13:38:20 | ...; | Conditions.cs:38:13:38:20 | ...; | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:39:9:40:16 | if (...) ... | -| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | +| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:41:9:42:16 | if (...) ... | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:43:16:43:16 | access to local variable x | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:42:13:42:16 | ...; | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:41:9:42:16 | if (...) ... | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:42:13:42:16 | ...; | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:46:9:46:10 | enter M4 | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | +| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:49:16:49:16 | access to parameter x | | Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:50:9:53:9 | {...} | -| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | +| Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:54:16:54:16 | access to local variable y | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:16:49:16 | access to parameter x | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:50:9:53:9 | {...} | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:52:17:52:20 | ...; | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | {...} | -| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | +| Conditions.cs:50:9:53:9 | {...} | Conditions.cs:52:17:52:20 | ...; | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:57:9:57:10 | enter M5 | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | +| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:60:16:60:16 | access to parameter x | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:61:9:64:9 | {...} | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | +| Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:63:17:63:20 | ...; | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:65:9:66:16 | if (...) ... | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:67:16:67:16 | access to local variable y | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:16:60:16 | access to parameter x | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:61:9:64:9 | {...} | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:63:17:63:20 | ...; | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:65:9:66:16 | if (...) ... | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:66:13:66:16 | ...; | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | {...} | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | +| Conditions.cs:61:9:64:9 | {...} | Conditions.cs:63:17:63:20 | ...; | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:63:17:63:20 | ...; | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:65:9:66:16 | if (...) ... | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:66:13:66:16 | ...; | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:70:9:70:10 | enter M6 | Conditions.cs:70:9:70:10 | enter M6 | @@ -10340,26 +8820,24 @@ blockDominance | Conditions.cs:97:17:97:20 | ...; | Conditions.cs:97:17:97:20 | ...; | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:16:99:16 | access to local variable x | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:102:12:102:13 | enter M8 | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | +| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:13:109:24 | if (...) ... | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:17:108:18 | [false] !... | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:109:17:109:24 | ...; | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:110:16:110:16 | access to local variable x | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:108:17:108:18 | [false] !... | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:24 | ...; | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:109:17:109:24 | ...; | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:13:109:24 | if (...) ... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:24 | ...; | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:110:16:110:16 | access to local variable x | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:13:109:24 | if (...) ... | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [false] !... | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | [true] !... | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:24 | ...; | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:17:108:18 | [false] !... | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:109:17:109:24 | ...; | @@ -10370,92 +8848,66 @@ blockDominance | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:25:116:25 | access to local variable i | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:113:10:113:11 | exit M9 (normal) | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:113:10:113:11 | exit M9 (normal) | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:25 | access to local variable i | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:117:9:123:9 | {...} | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:122:17:122:25 | ...; | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:122:17:122:25 | ...; | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:122:17:122:25 | ...; | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:116:42:116:42 | access to local variable i | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:121:13:122:25 | if (...) ... | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:129:10:129:12 | enter M10 | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:131:16:131:19 | true | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:132:9:140:9 | {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | -| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:136:17:138:17 | {...} | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:131:16:131:19 | true | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:132:9:140:9 | {...} | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:136:17:138:17 | {...} | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | -| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:132:9:140:9 | {...} | Conditions.cs:136:17:138:17 | {...} | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:136:17:138:17 | {...} | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:136:17:138:17 | {...} | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:143:10:143:12 | enter M11 | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:143:10:143:12 | exit M11 (normal) | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | +| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:17:145:29 | ... ? ... : ... | +| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:145:27:145:29 | "b" | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:147:13:147:49 | ...; | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:149:13:149:49 | ...; | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 (normal) | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:147:13:147:49 | ...; | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:149:13:149:49 | ...; | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:143:10:143:12 | exit M11 (normal) | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:17:145:29 | ... ? ... : ... | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:147:13:147:49 | ...; | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:149:13:149:49 | ...; | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:49 | ...; | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:49 | ...; | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | enter ExitMethods | @@ -10466,19 +8918,13 @@ blockDominance | ExitMethods.cs:32:10:32:11 | enter M5 | ExitMethods.cs:32:10:32:11 | enter M5 | | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:38:10:38:11 | enter M6 | | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | -| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | -| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:45:9:47:9 | {...} | -| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:48:9:51:9 | catch (...) {...} | | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:45:9:47:9 | {...} | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:54:10:54:11 | enter M7 | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:60:10:60:11 | enter M8 | @@ -10516,19 +8962,15 @@ blockDominance | ExitMethods.cs:117:34:117:34 | 0 | ExitMethods.cs:117:34:117:34 | 0 | | ExitMethods.cs:117:38:117:38 | 1 | ExitMethods.cs:117:38:117:38 | 1 | | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | -| ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | enter AssertFalse | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse | -| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | -| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | +| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | +| ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | ExitMethods.cs:132:10:132:20 | exit AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | -| ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:143:13:143:43 | ...; | @@ -10543,87 +8985,95 @@ blockDominance | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | enter Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | -| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:14:9:16:9 | {...} | +| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | exit M1 (abnormal) | +| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | exit M1 (normal) | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | -| Finally.cs:14:9:16:9 | {...} | Finally.cs:14:9:16:9 | {...} | +| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | exit M1 (abnormal) | +| Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:7:10:7:11 | exit M1 (normal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:26:9:29:9 | catch (...) {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:26:38:26:39 | IOException ex | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:27:9:29:9 | {...} | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:30:41:30:42 | ArgumentException ex | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:41:9:43:9 | catch (...) {...} | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:49:9:51:9 | {...} | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | exit M2 (abnormal) | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:27:9:29:9 | {...} | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:27:9:29:9 | {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:9:29:9 | catch (...) {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:27:9:29:9 | {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:27:9:29:9 | {...} | | Finally.cs:27:9:29:9 | {...} | Finally.cs:27:9:29:9 | {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:34:27:34:32 | throw ...; | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | exit M2 | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | exit M2 (abnormal) | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | exit M2 (normal) | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:49:9:51:9 | {...} | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:61:9:64:9 | catch (...) {...} | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:61:38:61:39 | IOException ex | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:62:9:64:9 | {...} | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:65:26:65:26 | Exception e | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:69:9:71:9 | {...} | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | exit M3 (abnormal) | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:62:9:64:9 | {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:9:64:9 | catch (...) {...} | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:62:9:64:9 | {...} | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:66:9:67:9 | {...} | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:62:9:64:9 | {...} | | Finally.cs:62:9:64:9 | {...} | Finally.cs:62:9:64:9 | {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:66:9:67:9 | {...} | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:66:9:67:9 | {...} | | Finally.cs:66:9:67:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | exit M3 | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | exit M3 (abnormal) | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | exit M3 (normal) | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:69:9:71:9 | {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | exit M4 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -10636,21 +9086,8 @@ blockDominance | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:86:21:86:26 | break; | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:96:17:98:17 | {...} | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -10666,21 +9103,8 @@ blockDominance | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:86:21:86:26 | break; | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:74:10:74:11 | exit M4 (abnormal) | | Finally.cs:78:9:100:9 | {...} | Finally.cs:78:9:100:9 | {...} | @@ -10690,93 +9114,27 @@ blockDominance | Finally.cs:78:9:100:9 | {...} | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:78:9:100:9 | {...} | Finally.cs:86:21:86:26 | break; | | Finally.cs:78:9:100:9 | {...} | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:82:21:82:27 | return ...; | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:17:84:29 | if (...) ... | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:86:21:86:26 | break; | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | | Finally.cs:84:21:84:29 | continue; | Finally.cs:84:21:84:29 | continue; | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | | Finally.cs:86:21:86:26 | break; | Finally.cs:86:21:86:26 | break; | -| Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:74:10:74:11 | exit M4 (abnormal) | | Finally.cs:89:13:99:13 | {...} | Finally.cs:89:13:99:13 | {...} | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | | Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:74:10:74:11 | exit M4 (abnormal) | | Finally.cs:96:17:98:17 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | enter M5 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | exit M5 | @@ -10790,38 +9148,15 @@ blockDominance | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | exit M5 | | Finally.cs:103:10:103:11 | exit M5 (abnormal) | Finally.cs:103:10:103:11 | exit M5 (abnormal) | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:103:10:103:11 | exit M5 (normal) | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:17:107:28 | access to property Length | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:33:107:33 | 0 | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:108:17:108:23 | return ...; | @@ -10830,29 +9165,6 @@ blockDominance | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: return] ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:33:107:33 | 0 | | Finally.cs:107:33:107:33 | 0 | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:13:110:49 | if (...) ... | @@ -10860,279 +9172,87 @@ blockDominance | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:108:17:108:23 | return ...; | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | exit M5 | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:113:9:118:9 | {...} | Finally.cs:113:9:118:9 | {...} | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | | Finally.cs:113:9:118:9 | {...} | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | exit M5 | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | exit M5 (normal) | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | enter M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | enter M7 | -| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | -| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:140:9:143:9 | {...} | -| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | -| Finally.cs:140:9:143:9 | {...} | Finally.cs:140:9:143:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | catch (...) {...} | +| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | Exception e | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | exit M8 | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | exit M8 (normal) | | Finally.cs:155:9:169:9 | {...} | Finally.cs:155:9:169:9 | {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:158:36:158:36 | 1 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:155:9:169:9 | {...} | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:13:164:13 | catch (...) {...} | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:161:30:161:30 | Exception e | | Finally.cs:155:9:169:9 | {...} | Finally.cs:162:13:164:13 | {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:36:158:36 | 1 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:13:164:13 | catch (...) {...} | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:30:161:30 | Exception e | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:162:13:164:13 | {...} | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:165:13:168:13 | catch {...} | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:30:161:30 | Exception e | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:162:13:164:13 | {...} | | Finally.cs:162:13:164:13 | {...} | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | enter ExceptionB | @@ -11141,246 +9261,87 @@ blockDominance | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (normal) | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | exit M9 (normal) | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | exit M9 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | exit M9 (normal) | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:213:9:213:25 | ...; | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | exit M10 | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:202:9:212:9 | {...} | Finally.cs:202:9:212:9 | {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | | Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:213:9:213:25 | ...; | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | exit M10 | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:208:13:210:13 | {...} | Finally.cs:208:13:210:13 | {...} | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:213:9:213:25 | ...; | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:213:9:213:25 | ...; | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:25 | ...; | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:222:9:225:9 | catch {...} | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:227:9:229:9 | {...} | @@ -11391,81 +9352,49 @@ blockDominance | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:254:13:254:45 | ...; | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | +| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:260:9:260:34 | ...; | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | | Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | exit M12 | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:243:13:253:13 | {...} | Finally.cs:243:13:253:13 | {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:254:13:254:45 | ...; | | Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:260:9:260:34 | ...; | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | exit M12 | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:250:17:252:17 | {...} | Finally.cs:250:17:252:17 | {...} | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:254:13:254:45 | ...; | | Finally.cs:250:17:252:17 | {...} | Finally.cs:257:9:259:9 | {...} | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:260:9:260:34 | ...; | +| Finally.cs:254:13:254:45 | ...; | Finally.cs:254:13:254:45 | ...; | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:260:9:260:34 | ...; | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:34 | ...; | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | -| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:270:9:273:9 | {...} | +| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | exit M13 (abnormal) | +| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | exit M13 (normal) | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} | +| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | exit M13 (abnormal) | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | exit M13 (normal) | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | exit M1 (normal) | @@ -11546,110 +9475,149 @@ blockDominance | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:7:10:7:11 | enter M1 | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:10:13:10:19 | return ...; | +| LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:10:13:10:19 | return ...; | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:22:11:24 | String arg | +| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:15:10:15:11 | enter M2 | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | +| LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | -| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:22:10:22:11 | enter M3 | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:26:25:29 | Char arg0 | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | enter M4 | | LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | +| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:32:22:32:22 | String x | | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:22:32:22 | String x | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:32:22:32:22 | String x | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | enter M5 | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:26:41:26 | String y | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | enter M6 | +| LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:48:22:48:22 | String x | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:50:9:50:13 | Label: | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:48:22:48:22 | String x | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:50:9:50:13 | Label: | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:50:9:50:13 | Label: | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:55:10:55:11 | enter M7 | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | +| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | String x | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | +| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | String x | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | +| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:63:17:63:37 | ...; | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:63:17:63:37 | ...; | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:67:10:67:11 | enter M8 | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:69:13:69:23 | [false] !... | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:69:13:69:23 | [true] !... | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:70:13:70:19 | return ...; | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:72:22:72:24 | String arg | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:69:13:69:23 | [false] !... | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:72:22:72:24 | String arg | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:69:13:69:23 | [true] !... | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:70:13:70:19 | return ...; | | LoopUnrolling.cs:70:13:70:19 | return ...; | LoopUnrolling.cs:70:13:70:19 | return ...; | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:72:22:72:24 | String arg | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:22:72:24 | String arg | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:72:22:72:24 | String arg | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | enter M9 | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | +| LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:79:22:79:22 | String x | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:22:79:22 | String x | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:79:22:79:22 | String x | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | enter M10 | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | +| LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:88:22:88:22 | String x | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:22:88:22 | String x | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:88:22:88:22 | String x | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | enter M11 | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | +| LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | -| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:22:97:22 | String x | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | @@ -13285,13 +11253,25 @@ blockDominance | cflow.cs:254:17:254:27 | goto ...; | cflow.cs:254:17:254:27 | goto ...; | | cflow.cs:255:13:255:20 | default: | cflow.cs:255:13:255:20 | default: | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | enter Yield | +| cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | exit Yield | +| cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | exit Yield (normal) | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:264:25:264:25 | access to local variable i | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:265:9:267:9 | {...} | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:268:9:276:9 | try {...} ... | +| cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | exit Yield | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | exit Yield (normal) | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | exit Yield (normal) | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:264:25:264:25 | access to local variable i | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:265:9:267:9 | {...} | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:265:9:267:9 | {...} | cflow.cs:265:9:267:9 | {...} | +| cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | exit Yield | +| cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | exit Yield (normal) | | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | enter ControlFlowSub | | cflow.cs:284:5:284:18 | enter ControlFlowSub | cflow.cs:284:5:284:18 | enter ControlFlowSub | @@ -13335,797 +11315,972 @@ postBlockDominance | Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | enter AssertTests | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | enter M1 | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | exit M1 | +| Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | exit M1 (abnormal) | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:7:10:7:11 | enter M1 | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:20:9:32 | ... ? ... : ... | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:24:9:27 | null | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:31:9:32 | "" | | Assert.cs:9:24:9:27 | null | Assert.cs:9:24:9:27 | null | | Assert.cs:9:31:9:32 | "" | Assert.cs:9:31:9:32 | "" | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:7:10:7:11 | enter M1 | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:9:20:9:32 | ... ? ... : ... | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:9:24:9:27 | null | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:9:31:9:32 | "" | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:7:10:7:11 | enter M1 | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:9:20:9:32 | ... ? ... : ... | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:9:24:9:27 | null | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:9:31:9:32 | "" | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:36 | ...; | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:14:10:14:11 | enter M2 | | Assert.cs:14:10:14:11 | exit M2 | Assert.cs:14:10:14:11 | exit M2 | +| Assert.cs:14:10:14:11 | exit M2 (abnormal) | Assert.cs:14:10:14:11 | exit M2 (abnormal) | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:14:10:14:11 | enter M2 | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:20:16:32 | ... ? ... : ... | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:24:16:27 | null | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:31:16:32 | "" | | Assert.cs:16:24:16:27 | null | Assert.cs:16:24:16:27 | null | | Assert.cs:16:31:16:32 | "" | Assert.cs:16:31:16:32 | "" | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:14:10:14:11 | enter M2 | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:16:20:16:32 | ... ? ... : ... | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:16:24:16:27 | null | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:16:31:16:32 | "" | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:14:10:14:11 | enter M2 | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:16:20:16:32 | ... ? ... : ... | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:16:24:16:27 | null | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:16:31:16:32 | "" | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:36 | ...; | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:21:10:21:11 | enter M3 | | Assert.cs:21:10:21:11 | exit M3 | Assert.cs:21:10:21:11 | exit M3 | +| Assert.cs:21:10:21:11 | exit M3 (abnormal) | Assert.cs:21:10:21:11 | exit M3 (abnormal) | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:21:10:21:11 | enter M3 | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:20:23:32 | ... ? ... : ... | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:24:23:27 | null | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:31:23:32 | "" | | Assert.cs:23:24:23:27 | null | Assert.cs:23:24:23:27 | null | | Assert.cs:23:31:23:32 | "" | Assert.cs:23:31:23:32 | "" | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:21:10:21:11 | enter M3 | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:23:20:23:32 | ... ? ... : ... | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:23:24:23:27 | null | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:23:31:23:32 | "" | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:21:10:21:11 | enter M3 | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:23:20:23:32 | ... ? ... : ... | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:23:24:23:27 | null | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:23:31:23:32 | "" | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:36 | ...; | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:28:10:28:11 | enter M4 | | Assert.cs:28:10:28:11 | exit M4 | Assert.cs:28:10:28:11 | exit M4 | +| Assert.cs:28:10:28:11 | exit M4 (abnormal) | Assert.cs:28:10:28:11 | exit M4 (abnormal) | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:28:10:28:11 | enter M4 | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:20:30:32 | ... ? ... : ... | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:24:30:27 | null | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:31:30:32 | "" | | Assert.cs:30:24:30:27 | null | Assert.cs:30:24:30:27 | null | | Assert.cs:30:31:30:32 | "" | Assert.cs:30:31:30:32 | "" | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:28:10:28:11 | enter M4 | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:30:20:30:32 | ... ? ... : ... | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:30:24:30:27 | null | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:30:31:30:32 | "" | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:28:10:28:11 | enter M4 | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:30:20:30:32 | ... ? ... : ... | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:30:24:30:27 | null | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:30:31:30:32 | "" | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:36 | ...; | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:35:10:35:11 | enter M5 | | Assert.cs:35:10:35:11 | exit M5 | Assert.cs:35:10:35:11 | exit M5 | +| Assert.cs:35:10:35:11 | exit M5 (abnormal) | Assert.cs:35:10:35:11 | exit M5 (abnormal) | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:35:10:35:11 | enter M5 | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:20:37:32 | ... ? ... : ... | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:24:37:27 | null | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:31:37:32 | "" | | Assert.cs:37:24:37:27 | null | Assert.cs:37:24:37:27 | null | | Assert.cs:37:31:37:32 | "" | Assert.cs:37:31:37:32 | "" | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:35:10:35:11 | enter M5 | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:37:20:37:32 | ... ? ... : ... | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:37:24:37:27 | null | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:37:31:37:32 | "" | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:35:10:35:11 | enter M5 | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:37:20:37:32 | ... ? ... : ... | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:37:24:37:27 | null | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:37:31:37:32 | "" | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:36 | ...; | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:42:10:42:11 | enter M6 | | Assert.cs:42:10:42:11 | exit M6 | Assert.cs:42:10:42:11 | exit M6 | +| Assert.cs:42:10:42:11 | exit M6 (abnormal) | Assert.cs:42:10:42:11 | exit M6 (abnormal) | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:42:10:42:11 | enter M6 | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:20:44:32 | ... ? ... : ... | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:24:44:27 | null | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:31:44:32 | "" | | Assert.cs:44:24:44:27 | null | Assert.cs:44:24:44:27 | null | | Assert.cs:44:31:44:32 | "" | Assert.cs:44:31:44:32 | "" | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:42:10:42:11 | enter M6 | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:44:20:44:32 | ... ? ... : ... | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:44:24:44:27 | null | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:44:31:44:32 | "" | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:42:10:42:11 | enter M6 | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:44:20:44:32 | ... ? ... : ... | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:44:24:44:27 | null | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:44:31:44:32 | "" | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:36 | ...; | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:49:10:49:11 | enter M7 | | Assert.cs:49:10:49:11 | exit M7 | Assert.cs:49:10:49:11 | exit M7 | +| Assert.cs:49:10:49:11 | exit M7 (abnormal) | Assert.cs:49:10:49:11 | exit M7 (abnormal) | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:49:10:49:11 | enter M7 | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:20:51:32 | ... ? ... : ... | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:24:51:27 | null | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:31:51:32 | "" | | Assert.cs:51:24:51:27 | null | Assert.cs:51:24:51:27 | null | | Assert.cs:51:31:51:32 | "" | Assert.cs:51:31:51:32 | "" | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:49:10:49:11 | enter M7 | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:51:20:51:32 | ... ? ... : ... | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:51:24:51:27 | null | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:51:31:51:32 | "" | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:49:10:49:11 | enter M7 | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:51:20:51:32 | ... ? ... : ... | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:51:24:51:27 | null | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:51:31:51:32 | "" | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:36 | ...; | | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:56:10:56:11 | enter M8 | | Assert.cs:56:10:56:11 | exit M8 | Assert.cs:56:10:56:11 | exit M8 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:56:10:56:11 | enter M8 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:31:58:32 | [b (line 56): false] "" | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:56:10:56:11 | enter M8 | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:23:59:36 | [false] ... && ... | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:56:10:56:11 | enter M8 | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:23:59:36 | [true] ... && ... | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:56:10:56:11 | enter M8 | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | +| Assert.cs:56:10:56:11 | exit M8 (abnormal) | Assert.cs:56:10:56:11 | exit M8 (abnormal) | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:56:10:56:11 | enter M8 | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:32 | ... ? ... : ... | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:24:58:27 | null | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:31:58:32 | "" | +| Assert.cs:58:24:58:27 | null | Assert.cs:58:24:58:27 | null | +| Assert.cs:58:31:58:32 | "" | Assert.cs:58:31:58:32 | "" | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:56:10:56:11 | enter M8 | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:58:20:58:32 | ... ? ... : ... | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:58:24:58:27 | null | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:58:31:58:32 | "" | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:56:10:56:11 | enter M8 | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:58:20:58:32 | ... ? ... : ... | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:58:24:58:27 | null | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:58:31:58:32 | "" | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:59:23:59:36 | ... && ... | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:59:36:59:36 | access to parameter b | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:36 | ...; | | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:63:10:63:11 | enter M9 | | Assert.cs:63:10:63:11 | exit M9 | Assert.cs:63:10:63:11 | exit M9 | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:24:65:27 | [b (line 63): true] null | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:63:10:63:11 | enter M9 | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:63:10:63:11 | enter M9 | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:63:10:63:11 | enter M9 | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:24:66:37 | [false] ... \|\| ... | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:63:10:63:11 | enter M9 | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | +| Assert.cs:63:10:63:11 | exit M9 (abnormal) | Assert.cs:63:10:63:11 | exit M9 (abnormal) | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:63:10:63:11 | enter M9 | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:32 | ... ? ... : ... | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:24:65:27 | null | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:31:65:32 | "" | +| Assert.cs:65:24:65:27 | null | Assert.cs:65:24:65:27 | null | +| Assert.cs:65:31:65:32 | "" | Assert.cs:65:31:65:32 | "" | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:63:10:63:11 | enter M9 | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:65:20:65:32 | ... ? ... : ... | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:65:24:65:27 | null | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:65:31:65:32 | "" | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:63:10:63:11 | enter M9 | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:65:20:65:32 | ... ? ... : ... | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:65:24:65:27 | null | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:65:31:65:32 | "" | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:66:24:66:37 | ... \|\| ... | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:66:37:66:37 | access to parameter b | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:36 | ...; | | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:70:10:70:12 | enter M10 | | Assert.cs:70:10:70:12 | exit M10 | Assert.cs:70:10:70:12 | exit M10 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:70:10:70:12 | enter M10 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:31:72:32 | [b (line 70): false] "" | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:70:10:70:12 | enter M10 | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:23:73:36 | [false] ... && ... | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:70:10:70:12 | enter M10 | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:23:73:36 | [true] ... && ... | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:70:10:70:12 | enter M10 | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | +| Assert.cs:70:10:70:12 | exit M10 (abnormal) | Assert.cs:70:10:70:12 | exit M10 (abnormal) | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:70:10:70:12 | enter M10 | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:32 | ... ? ... : ... | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:24:72:27 | null | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:31:72:32 | "" | +| Assert.cs:72:24:72:27 | null | Assert.cs:72:24:72:27 | null | +| Assert.cs:72:31:72:32 | "" | Assert.cs:72:31:72:32 | "" | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:70:10:70:12 | enter M10 | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:72:20:72:32 | ... ? ... : ... | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:72:24:72:27 | null | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:72:31:72:32 | "" | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:70:10:70:12 | enter M10 | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:72:20:72:32 | ... ? ... : ... | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:72:24:72:27 | null | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:72:31:72:32 | "" | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:73:23:73:36 | ... && ... | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:73:36:73:36 | access to parameter b | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:36 | ...; | | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:77:10:77:12 | enter M11 | | Assert.cs:77:10:77:12 | exit M11 | Assert.cs:77:10:77:12 | exit M11 | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:24:79:27 | [b (line 77): true] null | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:77:10:77:12 | enter M11 | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:77:10:77:12 | enter M11 | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:77:10:77:12 | enter M11 | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:24:80:37 | [false] ... \|\| ... | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:77:10:77:12 | enter M11 | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | +| Assert.cs:77:10:77:12 | exit M11 (abnormal) | Assert.cs:77:10:77:12 | exit M11 (abnormal) | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:77:10:77:12 | enter M11 | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:32 | ... ? ... : ... | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:24:79:27 | null | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:31:79:32 | "" | +| Assert.cs:79:24:79:27 | null | Assert.cs:79:24:79:27 | null | +| Assert.cs:79:31:79:32 | "" | Assert.cs:79:31:79:32 | "" | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:77:10:77:12 | enter M11 | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:79:20:79:32 | ... ? ... : ... | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:79:24:79:27 | null | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:79:31:79:32 | "" | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:77:10:77:12 | enter M11 | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:79:20:79:32 | ... ? ... : ... | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:79:24:79:27 | null | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:79:31:79:32 | "" | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:80:24:80:37 | ... \|\| ... | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:80:37:80:37 | access to parameter b | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:36 | ...; | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:84:10:84:12 | enter M12 | | Assert.cs:84:10:84:12 | exit M12 | Assert.cs:84:10:84:12 | exit M12 | | Assert.cs:84:10:84:12 | exit M12 (abnormal) | Assert.cs:84:10:84:12 | exit M12 (abnormal) | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:86:31:86:32 | [b (line 84): false] "" | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:24:90:25 | [b (line 84): false] "" | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:24:94:25 | [b (line 84): false] "" | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:24:98:25 | [b (line 84): false] "" | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:24:102:25 | [b (line 84): false] "" | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:24:106:25 | [b (line 84): false] "" | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:24:110:25 | [b (line 84): false] "" | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:24:114:25 | [b (line 84): false] "" | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:37:127:38 | [false] !... | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | enter M12 | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:86:24:86:27 | null | Assert.cs:86:24:86:27 | null | +| Assert.cs:86:31:86:32 | "" | Assert.cs:86:31:86:32 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:90:17:90:20 | null | Assert.cs:90:17:90:20 | null | +| Assert.cs:90:24:90:25 | "" | Assert.cs:90:24:90:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:94:17:94:20 | null | Assert.cs:94:17:94:20 | null | +| Assert.cs:94:24:94:25 | "" | Assert.cs:94:24:94:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:98:17:98:20 | null | Assert.cs:98:17:98:20 | null | +| Assert.cs:98:24:98:25 | "" | Assert.cs:98:24:98:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:102:17:102:20 | null | Assert.cs:102:17:102:20 | null | +| Assert.cs:102:24:102:25 | "" | Assert.cs:102:24:102:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:106:17:106:20 | null | Assert.cs:106:17:106:20 | null | +| Assert.cs:106:24:106:25 | "" | Assert.cs:106:24:106:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:110:17:110:20 | null | Assert.cs:110:17:110:20 | null | +| Assert.cs:110:24:110:25 | "" | Assert.cs:110:24:110:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:114:17:114:20 | null | Assert.cs:114:17:114:20 | null | +| Assert.cs:114:24:114:25 | "" | Assert.cs:114:24:114:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:118:17:118:20 | null | Assert.cs:118:17:118:20 | null | +| Assert.cs:118:24:118:25 | "" | Assert.cs:118:24:118:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:122:17:122:20 | null | Assert.cs:122:17:122:20 | null | +| Assert.cs:122:24:122:25 | "" | Assert.cs:122:24:122:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:126:17:126:20 | null | Assert.cs:126:17:126:20 | null | +| Assert.cs:126:24:126:25 | "" | Assert.cs:126:24:126:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:86:24:86:27 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:86:31:86:32 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:90:17:90:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:90:24:90:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:94:17:94:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:94:24:94:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:98:17:98:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:98:24:98:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:102:17:102:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:102:24:102:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:106:17:106:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:106:24:106:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:110:17:110:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:110:24:110:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:114:17:114:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:114:24:114:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:118:17:118:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:118:24:118:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:122:17:122:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:122:24:122:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:126:17:126:20 | null | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:126:24:126:25 | "" | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:84:10:84:12 | enter M12 | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:86:20:86:32 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:86:24:86:27 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:86:31:86:32 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:88:9:88:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:90:13:90:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:90:17:90:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:90:24:90:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:92:9:92:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:94:13:94:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:94:17:94:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:94:24:94:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:96:9:96:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:98:13:98:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:98:17:98:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:98:24:98:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:100:9:100:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:102:13:102:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:102:17:102:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:102:24:102:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:104:9:104:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:106:13:106:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:106:17:106:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:106:24:106:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:108:9:108:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:110:13:110:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:110:17:110:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:110:24:110:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:112:9:112:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:114:13:114:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:114:17:114:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:114:24:114:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:115:23:115:36 | ... && ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:115:36:115:36 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:116:9:116:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:118:13:118:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:118:17:118:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:118:24:118:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:119:24:119:38 | ... \|\| ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:119:38:119:38 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:120:9:120:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:122:13:122:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:122:17:122:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:122:24:122:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:123:23:123:36 | ... && ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:123:36:123:36 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:124:9:124:36 | ...; | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:126:13:126:25 | ... ? ... : ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:126:17:126:20 | null | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:126:24:126:25 | "" | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:127:24:127:38 | ... \|\| ... | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:127:38:127:38 | access to parameter b | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:36 | ...; | | Assert.cs:131:18:131:32 | enter AssertTrueFalse | Assert.cs:131:18:131:32 | enter AssertTrueFalse | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:138:10:138:12 | enter M13 | | Assert.cs:138:10:138:12 | exit M13 | Assert.cs:138:10:138:12 | exit M13 | | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 (abnormal) | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:138:10:138:12 | enter M13 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:138:10:138:12 | enter M13 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:29:140:30 | access to parameter b2 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | enter M13 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:141:9:141:15 | return ...; | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | enter Assignments | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | enter M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | enter (...) => ... | @@ -14152,68 +12307,56 @@ postBlockDominance | BreakInTry.cs:20:10:20:11 | enter M2 | BreakInTry.cs:20:10:20:11 | enter M2 | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:20:10:20:11 | enter M2 | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:30:13:33:13 | {...} | -| BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:32:21:32:21 | ; | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:22:22:22:24 | String arg | | BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:27:21:27:26 | break; | +| BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:22:22:22:24 | String arg | +| BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | enter M2 | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:22:22:22:24 | String arg | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:27:21:27:26 | break; | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:30:13:33:13 | {...} | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:32:21:32:21 | ; | -| BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:32:21:32:21 | [finally: break] ; | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:35:7:35:7 | ; | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:38:10:38:11 | enter M3 | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | enter M3 | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:46:9:52:9 | {...} | -| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:26:47:28 | String arg | -| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:50:21:50:26 | [finally: return] break; | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:43:17:43:23 | return ...; | +| BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:38:10:38:11 | enter M3 | +| BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:46:9:52:9 | {...} | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:43:17:43:23 | return ...; | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | +| BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | enter M3 | +| BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:43:17:43:23 | return ...; | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:46:9:52:9 | {...} | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:47:26:47:28 | String arg | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:50:21:50:26 | [finally: return] break; | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:50:21:50:26 | break; | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:46:9:52:9 | {...} | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:47:26:47:28 | String arg | -| BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:56:10:56:11 | enter M4 | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | enter M4 | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:64:9:70:9 | {...} | -| BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:26:65:28 | String arg | -| BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:68:21:68:26 | [finally: return] break; | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:68:21:68:26 | break; | | BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:61:17:61:23 | return ...; | +| BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:56:10:56:11 | enter M4 | +| BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:64:9:70:9 | {...} | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:61:17:61:23 | return ...; | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | +| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | enter M4 | +| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:61:17:61:23 | return ...; | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:64:9:70:9 | {...} | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:65:26:65:28 | String arg | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:68:21:68:26 | [finally: return] break; | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:68:21:68:26 | break; | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | enter Default | @@ -14222,6 +12365,12 @@ postBlockDominance | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | enter M | +| CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | exit M | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | enter M | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:39:9:39:34 | ...; | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:9:40:11 | End: | | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | enter M1 | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | enter M1 | @@ -14295,52 +12444,48 @@ postBlockDominance | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | enter IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | -| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | +| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:7:9:8:16 | if (...) ... | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:7:13:7:16 | [false] !... | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:7:13:7:16 | [true] !... | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:8:13:8:16 | ...; | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | -| Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:3:10:3:19 | enter IncrOrDecr | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:6:13:6:16 | ...; | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:9:8:16 | if (...) ... | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:7:13:7:16 | [false] !... | -| Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:7:13:7:16 | [true] !... | -| Conditions.cs:8:13:8:16 | ...; | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:7:13:7:16 | [true] !... | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:16 | ...; | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:11:9:11:10 | enter M1 | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | -| Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:11:9:11:10 | enter M1 | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:13:18:20 | if (...) ... | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:17:17:17:18 | [false] !... | -| Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:17:17:17:18 | [true] !... | -| Conditions.cs:18:17:18:20 | ...; | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:11:9:11:10 | enter M1 | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | -| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | +| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:15:13:15:16 | ...; | +| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:16:9:18:20 | if (...) ... | +| Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:13:18:20 | if (...) ... | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:17:17:18 | [false] !... | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:17:17:17:18 | [true] !... | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:16:19:16 | access to local variable x | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:22:9:22:10 | enter M2 | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:26:13:27:20 | if (...) ... | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:27:17:27:20 | ...; | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:22:9:22:10 | enter M2 | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:26:13:27:20 | if (...) ... | +| Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:27:17:27:20 | ...; | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:28:9:29:16 | if (...) ... | -| Conditions.cs:29:13:29:16 | ...; | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:22:9:22:10 | enter M2 | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:26:13:27:20 | if (...) ... | -| Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | -| Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | +| Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:27:17:27:20 | ...; | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:28:9:29:16 | if (...) ... | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:16:30:16 | access to local variable x | @@ -14349,59 +12494,49 @@ postBlockDominance | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:33:9:33:10 | enter M3 | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:38:13:38:20 | ...; | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:39:9:40:16 | if (...) ... | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | -| Conditions.cs:42:13:42:16 | ...; | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:33:9:33:10 | enter M3 | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:38:13:38:20 | ...; | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:39:9:40:16 | if (...) ... | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:41:9:42:16 | if (...) ... | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:33:9:33:10 | enter M3 | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:38:13:38:20 | ...; | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:39:9:40:16 | if (...) ... | -| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | -| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | +| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:40:13:40:16 | ...; | +| Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:41:9:42:16 | if (...) ... | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:46:9:46:10 | enter M4 | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:46:9:46:10 | enter M4 | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:16:49:16 | access to parameter x | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:50:9:53:9 | {...} | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:50:9:53:9 | {...} | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:46:9:46:10 | enter M4 | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | +| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:49:16:49:16 | access to parameter x | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:50:9:53:9 | {...} | -| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | +| Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:57:9:57:10 | enter M5 | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:57:9:57:10 | enter M5 | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:16:60:16 | access to parameter x | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:61:9:64:9 | {...} | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:63:17:63:20 | ...; | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:61:9:64:9 | {...} | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:63:17:63:20 | ...; | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:57:9:57:10 | enter M5 | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:60:16:60:16 | access to parameter x | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:61:9:64:9 | {...} | +| Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:63:17:63:20 | ...; | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:65:9:66:16 | if (...) ... | -| Conditions.cs:66:13:66:16 | ...; | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | -| Conditions.cs:66:13:66:16 | ...; | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:66:13:66:16 | ...; | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:57:9:57:10 | enter M5 | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | +| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:60:16:60:16 | access to parameter x | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:61:9:64:9 | {...} | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | -| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | +| Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:63:17:63:20 | ...; | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:65:9:66:16 | if (...) ... | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:16:67:16 | access to local variable y | @@ -14466,22 +12601,19 @@ postBlockDominance | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:97:17:97:20 | ...; | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:16:99:16 | access to local variable x | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:102:12:102:13 | enter M8 | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | -| Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | enter M8 | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:13:109:24 | if (...) ... | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:17:108:18 | [false] !... | -| Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:17:108:18 | [true] !... | -| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:24 | ...; | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:102:12:102:13 | enter M8 | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | -| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | +| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:106:13:106:20 | ...; | +| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:9:109:24 | if (...) ... | +| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:13:109:24 | if (...) ... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:17:108:18 | [false] !... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:17:108:18 | [true] !... | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:24 | ...; | @@ -14492,60 +12624,58 @@ postBlockDominance | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:116:25:116:25 | access to local variable i | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:113:10:113:11 | enter M9 | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:25:116:25 | access to local variable i | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:116:42:116:42 | access to local variable i | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:117:9:123:9 | {...} | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | -| Conditions.cs:122:17:122:25 | ...; | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | -| Conditions.cs:122:17:122:25 | ...; | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:117:9:123:9 | {...} | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:119:17:119:21 | [false] !... | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:119:17:119:21 | [true] !... | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:120:17:120:23 | ...; | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:121:13:122:25 | if (...) ... | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:17:122:25 | ...; | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:129:10:129:12 | enter M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:131:16:131:19 | true | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:132:9:140:9 | {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:134:13:139:13 | {...} | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:136:17:138:17 | {...} | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:143:10:143:12 | enter M11 | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | enter M11 | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 (normal) | -| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | +| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:145:17:145:29 | ... ? ... : ... | +| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:145:27:145:29 | "b" | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:147:13:147:49 | ...; | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:149:13:149:49 | ...; | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | -| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:143:10:143:12 | enter M11 | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:17:145:29 | ... ? ... : ... | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:27:145:29 | "b" | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:21:145:23 | "a" | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:27:145:29 | "b" | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:49 | ...; | -| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:49 | ...; | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | enter ExitMethods | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:8:10:8:11 | enter M1 | @@ -14556,17 +12686,12 @@ postBlockDominance | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:38:10:38:11 | enter M6 | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:38:10:38:11 | enter M6 | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | -| ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | -| ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:45:9:47:9 | {...} | -| ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:48:9:51:9 | catch (...) {...} | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:49:9:51:9 | {...} | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | -| ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:45:9:47:9 | {...} | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | -| ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | +| ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:49:9:51:9 | {...} | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:54:10:54:11 | enter M7 | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:60:10:60:11 | enter M8 | @@ -14597,15 +12722,13 @@ postBlockDominance | ExitMethods.cs:117:34:117:34 | 0 | ExitMethods.cs:117:34:117:34 | 0 | | ExitMethods.cs:117:38:117:38 | 1 | ExitMethods.cs:117:38:117:38 | 1 | | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | enter AssertFalse | | ExitMethods.cs:132:10:132:20 | exit AssertFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | enter AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | enter AssertFalse | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | | ExitMethods.cs:143:13:143:43 | ...; | ExitMethods.cs:143:13:143:43 | ...; | @@ -14617,58 +12740,79 @@ postBlockDominance | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | enter Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | enter M1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | -| Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | enter M1 | -| Finally.cs:14:9:16:9 | {...} | Finally.cs:14:9:16:9 | {...} | +| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | exit M1 (abnormal) | +| Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:7:10:7:11 | enter M1 | +| Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:7:10:7:11 | exit M1 (normal) | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | enter M2 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:26:9:29:9 | catch (...) {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:27:9:29:9 | {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:41:9:43:9 | catch (...) {...} | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:49:9:51:9 | {...} | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:24:13:24:19 | return ...; | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:9:29:9 | catch (...) {...} | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:27:9:29:9 | {...} | Finally.cs:26:38:26:39 | IOException ex | | Finally.cs:27:9:29:9 | {...} | Finally.cs:27:9:29:9 | {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:30:41:30:42 | ArgumentException ex | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:34:27:34:32 | throw ...; | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:42:9:43:9 | {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | | Finally.cs:42:9:43:9 | {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | enter M2 | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:24:13:24:19 | return ...; | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:26:9:29:9 | catch (...) {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:26:38:26:39 | IOException ex | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:27:9:29:9 | {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:30:9:40:9 | catch (...) {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:30:41:30:42 | ArgumentException ex | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:34:27:34:32 | throw ...; | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:41:9:43:9 | catch (...) {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:42:9:43:9 | {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:44:9:47:9 | catch {...} | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:49:9:51:9 | {...} | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | enter M3 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:61:9:64:9 | catch (...) {...} | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:62:9:64:9 | {...} | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:65:26:65:26 | Exception e | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:66:9:67:9 | {...} | +| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:69:9:71:9 | {...} | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:59:13:59:19 | return ...; | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:9:64:9 | catch (...) {...} | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:62:9:64:9 | {...} | Finally.cs:61:38:61:39 | IOException ex | | Finally.cs:62:9:64:9 | {...} | Finally.cs:62:9:64:9 | {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | -| Finally.cs:66:9:67:9 | {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:65:26:65:26 | Exception e | | Finally.cs:66:9:67:9 | {...} | Finally.cs:66:9:67:9 | {...} | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | enter M3 | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:59:13:59:19 | return ...; | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:61:9:64:9 | catch (...) {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:61:38:61:39 | IOException ex | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:62:9:64:9 | {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:65:9:67:9 | catch (...) {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:65:26:65:26 | Exception e | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:66:9:67:9 | {...} | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:69:9:71:9 | {...} | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | @@ -14682,42 +12826,35 @@ postBlockDominance | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:86:21:86:26 | break; | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:96:17:98:17 | [finally: return] {...} | +| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:93:25:93:46 | throw ...; | +| Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:93:31:93:45 | object creation of type Exception | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:96:17:98:17 | {...} | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:74:10:74:11 | enter M4 | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:77:16:77:16 | access to local variable i | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:84:21:84:29 | continue; | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | | Finally.cs:78:9:100:9 | {...} | Finally.cs:78:9:100:9 | {...} | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:82:21:82:27 | return ...; | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:17:84:29 | if (...) ... | | Finally.cs:84:21:84:29 | continue; | Finally.cs:84:21:84:29 | continue; | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | | Finally.cs:86:21:86:26 | break; | Finally.cs:86:21:86:26 | break; | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:78:9:100:9 | {...} | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:82:21:82:27 | return ...; | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:83:17:84:29 | if (...) ... | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:84:21:84:29 | continue; | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:85:17:86:26 | if (...) ... | +| Finally.cs:89:13:99:13 | {...} | Finally.cs:86:21:86:26 | break; | | Finally.cs:89:13:99:13 | {...} | Finally.cs:89:13:99:13 | {...} | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:93:25:93:46 | throw ...; | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:86:21:86:26 | break; | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:84:21:84:29 | continue; | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:82:21:82:27 | return ...; | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:78:9:100:9 | {...} | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:82:21:82:27 | return ...; | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:83:17:84:29 | if (...) ... | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:84:21:84:29 | continue; | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:85:17:86:26 | if (...) ... | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:86:21:86:26 | break; | | Finally.cs:96:17:98:17 | {...} | Finally.cs:89:13:99:13 | {...} | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:93:25:93:46 | throw ...; | +| Finally.cs:96:17:98:17 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | | Finally.cs:96:17:98:17 | {...} | Finally.cs:96:17:98:17 | {...} | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | enter M5 | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | exit M5 | @@ -14730,132 +12867,82 @@ postBlockDominance | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:109:33:109:33 | 1 | +| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:110:17:110:49 | throw ...; | +| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:117:17:117:37 | [finally: return] ...; | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:103:10:103:11 | enter M5 | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:17:107:28 | access to property Length | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:103:10:103:11 | enter M5 | -| Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:28 | access to property Length | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:33:107:33 | 0 | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:13:110:49 | if (...) ... | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:109:13:110:49 | if (...) ... | -| Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:33:109:33 | 1 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | enter M5 | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:107:17:107:28 | access to property Length | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:107:33:107:33 | 0 | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:113:9:118:9 | {...} | Finally.cs:109:33:109:33 | 1 | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:110:17:110:49 | throw ...; | +| Finally.cs:113:9:118:9 | {...} | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:113:9:118:9 | {...} | Finally.cs:113:9:118:9 | {...} | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:41 | ...; | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:108:17:108:23 | return ...; | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:115:17:115:41 | [finally: return] ...; | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | enter M5 | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:107:17:107:28 | access to property Length | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:107:33:107:33 | 0 | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:108:17:108:23 | return ...; | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:109:13:110:49 | if (...) ... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:109:17:109:28 | access to property Length | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:109:33:109:33 | 1 | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:110:17:110:49 | throw ...; | +| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:113:9:118:9 | {...} | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:114:17:114:36 | [false] !... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:114:17:114:36 | [true] !... | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:115:17:115:41 | ...; | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:13:117:37 | if (...) ... | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:37 | ...; | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:37 | [finally: return] ...; | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | enter M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | enter M7 | -| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 (abnormal) | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | -| Finally.cs:140:9:143:9 | {...} | Finally.cs:140:9:143:9 | {...} | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | enter M8 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | +| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:152:17:152:50 | throw ...; | +| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:155:9:169:9 | {...} | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:158:36:158:36 | 1 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | +| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:13:164:13 | catch (...) {...} | +| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:161:30:161:30 | Exception e | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:162:13:164:13 | {...} | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | enter M8 | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:152:17:152:50 | throw ...; | +| Finally.cs:155:9:169:9 | {...} | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | | Finally.cs:155:9:169:9 | {...} | Finally.cs:155:9:169:9 | {...} | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:36:158:36 | 1 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:159:21:159:45 | throw ...; | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:159:41:159:43 | "1" | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:159:21:159:45 | throw ...; | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:159:41:159:43 | "1" | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:13:164:13 | catch (...) {...} | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:30:161:30 | Exception e | | Finally.cs:162:13:164:13 | {...} | Finally.cs:162:13:164:13 | {...} | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:165:13:168:13 | catch {...} | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | enter ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | enter ExceptionB | @@ -14865,82 +12952,71 @@ postBlockDominance | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | enter M9 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | enter M9 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | enter M9 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:180:21:180:43 | throw ...; | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:180:27:180:42 | object creation of type ExceptionA | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:183:9:192:9 | {...} | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:186:25:186:47 | throw ...; | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:186:31:186:46 | object creation of type ExceptionB | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:188:13:191:13 | catch (...) {...} | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:188:38:188:39 | access to parameter b2 | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:189:13:191:13 | {...} | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | enter M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | enter M10 | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:199:21:199:43 | throw ...; | +| Finally.cs:202:9:212:9 | {...} | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:202:9:212:9 | {...} | Finally.cs:202:9:212:9 | {...} | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | enter M10 | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:199:21:199:43 | throw ...; | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:208:13:210:13 | {...} | Finally.cs:202:9:212:9 | {...} | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:205:25:205:47 | throw ...; | +| Finally.cs:208:13:210:13 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | | Finally.cs:208:13:210:13 | {...} | Finally.cs:208:13:210:13 | {...} | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:31:209:46 | object creation of type ExceptionC | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | enter M10 | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:199:21:199:43 | throw ...; | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:199:27:199:42 | object creation of type ExceptionA | | Finally.cs:211:13:211:29 | ...; | Finally.cs:202:9:212:9 | {...} | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:205:25:205:47 | throw ...; | +| Finally.cs:211:13:211:29 | ...; | Finally.cs:205:31:205:46 | object creation of type ExceptionB | | Finally.cs:211:13:211:29 | ...; | Finally.cs:208:13:210:13 | {...} | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:29 | ...; | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | enter M10 | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:199:21:199:43 | throw ...; | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:199:27:199:42 | object creation of type ExceptionA | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:202:9:212:9 | {...} | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:205:25:205:47 | throw ...; | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:205:31:205:46 | object creation of type ExceptionB | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:208:13:210:13 | {...} | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:211:13:211:29 | ...; | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:25 | ...; | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | enter M11 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:222:9:225:9 | catch {...} | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | enter M11 | @@ -14951,34 +13027,44 @@ postBlockDominance | Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | enter M12 | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:240:21:240:43 | throw ...; | +| Finally.cs:243:13:253:13 | {...} | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:243:13:253:13 | {...} | Finally.cs:243:13:253:13 | {...} | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | enter M12 | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:240:21:240:43 | throw ...; | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:250:17:252:17 | {...} | Finally.cs:243:13:253:13 | {...} | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:247:25:247:47 | throw ...; | +| Finally.cs:250:17:252:17 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | | Finally.cs:250:17:252:17 | {...} | Finally.cs:250:17:252:17 | {...} | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | +| Finally.cs:254:13:254:45 | ...; | Finally.cs:254:13:254:45 | ...; | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | enter M12 | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:240:21:240:43 | throw ...; | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:240:27:240:42 | object creation of type ExceptionA | | Finally.cs:257:9:259:9 | {...} | Finally.cs:243:13:253:13 | {...} | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:247:25:247:47 | throw ...; | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | | Finally.cs:257:9:259:9 | {...} | Finally.cs:250:17:252:17 | {...} | +| Finally.cs:257:9:259:9 | {...} | Finally.cs:254:13:254:45 | ...; | | Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | {...} | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | enter M12 | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:240:21:240:43 | throw ...; | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:240:27:240:42 | object creation of type ExceptionA | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:243:13:253:13 | {...} | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:247:25:247:47 | throw ...; | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:247:31:247:46 | object creation of type ExceptionA | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:250:17:252:17 | {...} | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:254:13:254:45 | ...; | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:257:9:259:9 | {...} | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:34 | ...; | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | enter M13 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | enter M13 | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | {...} | +| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | exit M13 (abnormal) | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | enter M13 | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | exit M13 (normal) | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | enter Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | enter M1 | @@ -15063,76 +13149,92 @@ postBlockDominance | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | enter M1 | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:10:13:10:19 | return ...; | +| LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:11:22:11:24 | String arg | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:10:13:10:19 | return ...; | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:22:11:24 | String arg | -| LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:29:11:32 | access to parameter args | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:15:10:15:11 | enter M2 | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:15:10:15:11 | enter M2 | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | +| LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:18:22:18:22 | String x | -| LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:15:10:15:11 | enter M2 | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | enter M2 | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:22:18:22 | String x | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:22:10:22:11 | enter M3 | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:22:10:22:11 | enter M3 | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | enter M3 | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:24:22:24:24 | Char arg | -| LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:25:26:25:29 | Char arg0 | | LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | enter M4 | | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:29:10:29:11 | enter M4 | | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | +| LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:32:22:32:22 | String x | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | enter M4 | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:22:32:22 | String x | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:32:22:32:22 | String x | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | enter M5 | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | enter M5 | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | enter M5 | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | -| LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:36:10:36:11 | enter M5 | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:40:22:40:22 | String x | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:36:10:36:11 | enter M5 | -| LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:41:26:41:26 | String y | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | enter M6 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | enter M6 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:48:22:48:22 | String x | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:50:9:50:13 | Label: | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:55:10:55:11 | enter M7 | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | enter M7 | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | +| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:22:58:22 | String x | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:55:10:55:11 | enter M7 | +| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:63:17:63:37 | ...; | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | enter M7 | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:58:22:58:22 | String x | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:58:22:58:22 | String x | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:61:17:61:37 | ...; | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:62:13:63:37 | if (...) ... | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:67:10:67:11 | enter M8 | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | enter M8 | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | @@ -15140,23 +13242,45 @@ postBlockDominance | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:69:13:69:23 | [true] !... | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:70:13:70:19 | return ...; | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:72:22:72:24 | String arg | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:69:13:69:23 | [false] !... | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:69:13:69:23 | [true] !... | | LoopUnrolling.cs:70:13:70:19 | return ...; | LoopUnrolling.cs:69:13:69:23 | [true] !... | | LoopUnrolling.cs:70:13:70:19 | return ...; | LoopUnrolling.cs:70:13:70:19 | return ...; | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:69:13:69:23 | [false] !... | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:69:13:69:23 | [false] !... | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:71:9:71:21 | ...; | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:22:72:24 | String arg | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:72:22:72:24 | String arg | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | enter M9 | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | enter M9 | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | +| LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:79:22:79:22 | String x | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | enter M9 | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:22:79:22 | String x | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:79:22:79:22 | String x | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | enter M10 | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | enter M10 | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | +| LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:88:22:88:22 | String x | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | enter M10 | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:22:88:22 | String x | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:88:22:88:22 | String x | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | enter M11 | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | enter M11 | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | +| LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:97:22:97:22 | String x | -| LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | enter M11 | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | enter M11 | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:97:22:97:22 | String x | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | enter C1 | @@ -16520,6 +14644,13 @@ postBlockDominance | cflow.cs:255:13:255:20 | default: | cflow.cs:249:17:249:29 | goto default; | | cflow.cs:255:13:255:20 | default: | cflow.cs:255:13:255:20 | default: | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | enter Yield | +| cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | exit Yield | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | exit Yield (abnormal) | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | enter Yield | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | exit Yield (normal) | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:264:25:264:25 | access to local variable i | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:265:9:267:9 | {...} | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | enter Yield | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:264:25:264:25 | access to local variable i | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:265:9:267:9 | {...} | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index fd87b8db058..4a4631e454d 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -371,8 +371,7 @@ nodeEnclosing | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:24:9:27 | null | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:31:9:32 | "" | Assert.cs:7:10:7:11 | M1 | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | M1 | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:7:10:7:11 | M1 | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:7:10:7:11 | M1 | | Assert.cs:10:9:10:32 | ...; | Assert.cs:7:10:7:11 | M1 | | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:7:10:7:11 | M1 | | Assert.cs:10:22:10:30 | ... != ... | Assert.cs:7:10:7:11 | M1 | @@ -392,8 +391,7 @@ nodeEnclosing | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:24:16:27 | null | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:31:16:32 | "" | Assert.cs:14:10:14:11 | M2 | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | M2 | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:14:10:14:11 | M2 | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:14:10:14:11 | M2 | | Assert.cs:17:9:17:25 | ...; | Assert.cs:14:10:14:11 | M2 | | Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:14:10:14:11 | M2 | | Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:14:10:14:11 | M2 | @@ -411,8 +409,7 @@ nodeEnclosing | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:24:23:27 | null | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:31:23:32 | "" | Assert.cs:21:10:21:11 | M3 | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | M3 | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:21:10:21:11 | M3 | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:21:10:21:11 | M3 | | Assert.cs:24:9:24:28 | ...; | Assert.cs:21:10:21:11 | M3 | | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:21:10:21:11 | M3 | | Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:21:10:21:11 | M3 | @@ -430,8 +427,7 @@ nodeEnclosing | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:24:30:27 | null | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:31:30:32 | "" | Assert.cs:28:10:28:11 | M4 | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | M4 | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:28:10:28:11 | M4 | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:28:10:28:11 | M4 | | Assert.cs:31:9:31:33 | ...; | Assert.cs:28:10:28:11 | M4 | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:28:10:28:11 | M4 | | Assert.cs:31:23:31:31 | ... == ... | Assert.cs:28:10:28:11 | M4 | @@ -451,8 +447,7 @@ nodeEnclosing | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:24:37:27 | null | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:31:37:32 | "" | Assert.cs:35:10:35:11 | M5 | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | M5 | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:35:10:35:11 | M5 | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:35:10:35:11 | M5 | | Assert.cs:38:9:38:33 | ...; | Assert.cs:35:10:35:11 | M5 | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:35:10:35:11 | M5 | | Assert.cs:38:23:38:31 | ... != ... | Assert.cs:35:10:35:11 | M5 | @@ -472,8 +467,7 @@ nodeEnclosing | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:24:44:27 | null | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:31:44:32 | "" | Assert.cs:42:10:42:11 | M6 | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | M6 | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:42:10:42:11 | M6 | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:42:10:42:11 | M6 | | Assert.cs:45:9:45:34 | ...; | Assert.cs:42:10:42:11 | M6 | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:42:10:42:11 | M6 | | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:42:10:42:11 | M6 | @@ -493,8 +487,7 @@ nodeEnclosing | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:24:51:27 | null | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:31:51:32 | "" | Assert.cs:49:10:49:11 | M7 | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | M7 | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:49:10:49:11 | M7 | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:49:10:49:11 | M7 | | Assert.cs:52:9:52:34 | ...; | Assert.cs:49:10:49:11 | M7 | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:49:10:49:11 | M7 | | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:49:10:49:11 | M7 | @@ -509,27 +502,18 @@ nodeEnclosing | Assert.cs:56:10:56:11 | exit M8 (normal) | Assert.cs:56:10:56:11 | M8 | | Assert.cs:57:5:61:5 | {...} | Assert.cs:56:10:56:11 | M8 | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:56:10:56:11 | M8 | | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:28:59:31 | [b (line 56): false] null | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:28:59:31 | [b (line 56): true] null | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:24:58:27 | null | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:31:58:32 | "" | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:9:59:38 | ...; | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:28:59:31 | null | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:56:10:56:11 | M8 | | Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:56:10:56:11 | M8 | | Assert.cs:60:9:60:36 | ...; | Assert.cs:56:10:56:11 | M8 | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:56:10:56:11 | M8 | @@ -540,27 +524,18 @@ nodeEnclosing | Assert.cs:63:10:63:11 | exit M9 (normal) | Assert.cs:63:10:63:11 | M9 | | Assert.cs:64:5:68:5 | {...} | Assert.cs:63:10:63:11 | M9 | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:63:10:63:11 | M9 | | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:29:66:32 | [b (line 63): false] null | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:29:66:32 | [b (line 63): true] null | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:24:65:27 | null | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:31:65:32 | "" | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:9:66:39 | ...; | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:29:66:32 | null | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:63:10:63:11 | M9 | | Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:63:10:63:11 | M9 | | Assert.cs:67:9:67:36 | ...; | Assert.cs:63:10:63:11 | M9 | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:63:10:63:11 | M9 | @@ -571,27 +546,18 @@ nodeEnclosing | Assert.cs:70:10:70:12 | exit M10 (normal) | Assert.cs:70:10:70:12 | M10 | | Assert.cs:71:5:75:5 | {...} | Assert.cs:70:10:70:12 | M10 | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:70:10:70:12 | M10 | | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:28:73:31 | [b (line 70): false] null | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:28:73:31 | [b (line 70): true] null | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:24:72:27 | null | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:31:72:32 | "" | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:9:73:38 | ...; | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:28:73:31 | null | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:70:10:70:12 | M10 | | Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:70:10:70:12 | M10 | | Assert.cs:74:9:74:36 | ...; | Assert.cs:70:10:70:12 | M10 | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:70:10:70:12 | M10 | @@ -602,27 +568,18 @@ nodeEnclosing | Assert.cs:77:10:77:12 | exit M11 (normal) | Assert.cs:77:10:77:12 | M11 | | Assert.cs:78:5:82:5 | {...} | Assert.cs:77:10:77:12 | M11 | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:77:10:77:12 | M11 | | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:29:80:32 | [b (line 77): false] null | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:29:80:32 | [b (line 77): true] null | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:24:79:27 | null | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:31:79:32 | "" | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:9:80:39 | ...; | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:29:80:32 | null | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:77:10:77:12 | M11 | | Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:77:10:77:12 | M11 | | Assert.cs:81:9:81:36 | ...; | Assert.cs:77:10:77:12 | M11 | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:77:10:77:12 | M11 | @@ -633,287 +590,172 @@ nodeEnclosing | Assert.cs:84:10:84:12 | exit M12 (normal) | Assert.cs:84:10:84:12 | M12 | | Assert.cs:85:5:129:5 | {...} | Assert.cs:84:10:84:12 | M12 | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:84:10:84:12 | M12 | | Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:27:87:30 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:27:87:30 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:28:99:31 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:28:99:31 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:28:103:31 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:28:103:31 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:29:107:32 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:29:107:32 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:29:111:32 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:29:111:32 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:28:115:31 | [b (line 84): false] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:28:115:31 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:29:119:32 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:28:123:31 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:29:127:32 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:24:86:27 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:31:86:32 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:87:9:87:32 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:87:27:87:30 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:9:90:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:17:90:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:24:90:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:91:9:91:25 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:9:94:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:17:94:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:24:94:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:95:9:95:28 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:9:98:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:17:98:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:24:98:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:99:9:99:33 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:99:28:99:31 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:9:102:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:17:102:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:24:102:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:103:9:103:33 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:103:28:103:31 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:9:106:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:17:106:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:24:106:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:107:9:107:34 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:107:29:107:32 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:9:110:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:17:110:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:24:110:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:111:9:111:34 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:111:29:111:32 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:9:114:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:17:114:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:24:114:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:9:115:38 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:28:115:31 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:9:118:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:17:118:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:24:118:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:9:119:40 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:29:119:32 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:37:119:38 | !... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:9:122:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:17:122:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:24:122:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:9:123:38 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:28:123:31 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:9:126:26 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:17:126:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:24:126:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:9:127:40 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:29:127:32 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:37:127:38 | !... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:84:10:84:12 | M12 | | Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:84:10:84:12 | M12 | | Assert.cs:128:9:128:36 | ...; | Assert.cs:84:10:84:12 | M12 | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:84:10:84:12 | M12 | @@ -927,17 +769,12 @@ nodeEnclosing | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | exit M13 (normal) | Assert.cs:138:10:138:12 | M13 | | Assert.cs:139:5:142:5 | {...} | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:9:140:35 | this access | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:9:140:36 | ...; | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | M13 | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | Assignments | @@ -1029,18 +866,12 @@ nodeEnclosing | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:26:28:26:31 | null | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:30:13:33:13 | [finally: break] {...} | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:31:17:32:21 | if (...) ... | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:31:21:31:24 | access to parameter args | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:31:29:31:32 | [finally: break] null | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:38:10:38:11 | exit M3 | BreakInTry.cs:38:10:38:11 | M3 | @@ -1053,25 +884,15 @@ nodeEnclosing | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:42:25:42:28 | null | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:46:9:52:9 | [finally: return] {...} | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:47:33:47:36 | access to parameter args | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:48:13:51:13 | [finally: return] {...} | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:48:13:51:13 | {...} | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:49:17:50:26 | if (...) ... | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:49:21:49:23 | access to local variable arg | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:49:28:49:31 | [finally: return] null | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:56:10:56:11 | M4 | @@ -1085,25 +906,15 @@ nodeEnclosing | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:60:25:60:28 | null | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:64:9:70:9 | [finally: return] {...} | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:65:33:65:36 | access to parameter args | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:66:13:69:13 | [finally: return] {...} | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:66:13:69:13 | {...} | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:67:17:68:26 | if (...) ... | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:67:21:67:23 | access to local variable arg | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | M4 | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | @@ -1141,15 +952,19 @@ nodeEnclosing | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:28:10:28:10 | M | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:36:9:38:9 | {...} | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:13:37:41 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:37:31:37:39 | "Finally" | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:39:27:39:32 | "Dead" | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | M | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | @@ -1259,15 +1074,13 @@ nodeEnclosing | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:6:13:6:13 | access to parameter x | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:6:13:6:15 | ...++ | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:8:13:8:13 | access to parameter x | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:8:13:8:15 | ...-- | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | @@ -1280,23 +1093,17 @@ nodeEnclosing | Conditions.cs:13:17:13:17 | 0 | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:14:9:15:16 | if (...) ... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:15:13:15:13 | access to local variable x | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:15:13:15:15 | ...++ | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:16:13:16:13 | access to local variable x | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:16:17:16:17 | 0 | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:18:17:18:17 | access to local variable x | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:18:17:18:19 | ...-- | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:11:9:11:10 | M1 | @@ -1313,14 +1120,10 @@ nodeEnclosing | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:27:17:27:17 | access to local variable x | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:27:17:27:19 | ...++ | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:29:13:29:13 | access to local variable x | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:29:13:29:15 | ...++ | Conditions.cs:22:9:22:10 | M2 | @@ -1344,13 +1147,11 @@ nodeEnclosing | Conditions.cs:38:18:38:19 | access to parameter b1 | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:40:13:40:13 | access to local variable x | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:40:13:40:15 | ...++ | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:42:13:42:13 | access to local variable x | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:42:13:42:15 | ...++ | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:33:9:33:10 | M3 | @@ -1364,30 +1165,16 @@ nodeEnclosing | Conditions.cs:48:13:48:17 | Int32 y = ... | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:48:17:48:17 | 0 | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:49:9:53:9 | while (...) ... | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:49:16:49:18 | ...-- | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:49:22:49:22 | 0 | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:51:13:52:20 | if (...) ... | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:52:17:52:17 | access to local variable y | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:52:17:52:19 | ...++ | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:57:9:57:10 | M5 | @@ -1398,35 +1185,17 @@ nodeEnclosing | Conditions.cs:59:13:59:17 | Int32 y = ... | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:59:17:59:17 | 0 | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:60:9:64:9 | while (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:60:16:60:18 | ...-- | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:60:22:60:22 | 0 | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:62:13:63:20 | if (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:63:17:63:17 | access to local variable y | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:63:17:63:19 | ...++ | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:66:13:66:13 | access to local variable y | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:66:13:66:15 | ...++ | Conditions.cs:57:9:57:10 | M5 | @@ -1515,27 +1284,20 @@ nodeEnclosing | Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:18:106:19 | [b (line 102): true] "" | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:102:12:102:13 | M8 | @@ -1569,75 +1331,46 @@ nodeEnclosing | Conditions.cs:118:29:118:43 | ... - ... | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:118:43:118:43 | 1 | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:119:13:120:23 | if (...) ... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:120:17:120:22 | ... = ... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:120:21:120:22 | "" | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:122:17:122:24 | ... = ... | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:122:21:122:24 | null | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:130:5:141:5 | {...} | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:131:9:140:9 | while (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:131:16:131:19 | true | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:133:13:139:13 | if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:133:17:133:22 | this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:135:17:138:17 | if (...) ... | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:135:21:135:26 | this access | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:137:21:137:26 | access to field Field1 | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:137:21:137:26 | this access | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:143:10:143:12 | exit M11 | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:143:10:143:12 | M11 | @@ -1701,11 +1434,10 @@ nodeEnclosing | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:42:13:42:31 | ...; | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:42:25:42:29 | false | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:46:13:46:19 | return ...; | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:50:13:50:19 | return ...; | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:54:10:54:11 | M7 | @@ -1806,7 +1538,7 @@ nodeEnclosing | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:120:17:120:32 | FailingAssertion | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | FailingAssertion | +| ExitMethods.cs:122:9:122:28 | call to method IsTrue | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:126:17:126:33 | FailingAssertion2 | @@ -1820,14 +1552,13 @@ nodeEnclosing | ExitMethods.cs:132:10:132:20 | exit AssertFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | +| ExitMethods.cs:136:9:136:25 | call to method AssertFalse | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | @@ -1899,14 +1630,10 @@ nodeEnclosing | Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:11:13:11:38 | ...; | Finally.cs:7:10:7:11 | M1 | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | M1 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:13:15:41 | ...; | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:7:10:7:11 | M1 | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:7:10:7:11 | M1 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | M2 | @@ -1918,41 +1645,32 @@ nodeEnclosing | Finally.cs:23:13:23:38 | ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:23:31:23:36 | "Try2" | Finally.cs:19:10:19:11 | M2 | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:26:48:26:51 | true | Finally.cs:19:10:19:11 | M2 | | Finally.cs:27:9:29:9 | {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:28:13:28:18 | throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:19:10:19:11 | M2 | | Finally.cs:31:9:40:9 | {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:32:13:39:13 | try {...} ... | Finally.cs:19:10:19:11 | M2 | | Finally.cs:33:13:35:13 | {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:21:34:24 | true | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:37:13:39:13 | {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:17:38:44 | throw ...; | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:23:38:43 | object creation of type Exception | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:38:37:38:42 | "Boo!" | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:45:9:47:9 | {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:46:13:46:19 | return ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:13:50:41 | ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:19:10:19:11 | M2 | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:19:10:19:11 | M2 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | M3 | @@ -1964,34 +1682,22 @@ nodeEnclosing | Finally.cs:58:13:58:38 | ...; | Finally.cs:54:10:54:11 | M3 | | Finally.cs:58:31:58:36 | "Try3" | Finally.cs:54:10:54:11 | M3 | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:61:48:61:51 | true | Finally.cs:54:10:54:11 | M3 | | Finally.cs:62:9:64:9 | {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:63:13:63:18 | throw ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:35:65:35 | access to local variable e | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:35:65:43 | access to property Message | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:48:65:51 | null | Finally.cs:54:10:54:11 | M3 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:13:70:41 | ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:54:10:54:11 | M3 | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:54:10:54:11 | M3 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | M4 | @@ -2022,74 +1728,19 @@ nodeEnclosing | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:74:10:74:11 | M4 | | Finally.cs:85:26:85:26 | 2 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:86:21:86:26 | break; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:89:13:99:13 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:89:13:99:13 | {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:90:17:98:17 | [finally: break] try {...} ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:90:17:98:17 | [finally: return] try {...} ... | Finally.cs:74:10:74:11 | M4 | | Finally.cs:90:17:98:17 | try {...} ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:91:17:94:17 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:91:17:94:17 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:91:17:94:17 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:91:17:94:17 | {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:21:93:46 | [finally: break] if (...) ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:21:93:46 | [finally: return] if (...) ... | Finally.cs:74:10:74:11 | M4 | | Finally.cs:92:21:93:46 | if (...) ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:25 | [finally: break] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:25 | [finally: return] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:92:25:92:25 | access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:74:10:74:11 | M4 | | Finally.cs:92:30:92:30 | 3 | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:23 | ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:74:10:74:11 | M4 | | Finally.cs:97:21:97:24 | ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:103:10:103:11 | exit M5 (abnormal) | Finally.cs:103:10:103:11 | M5 | @@ -2112,116 +1763,28 @@ nodeEnclosing | Finally.cs:109:33:109:33 | 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:103:10:103:11 | M5 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:23 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:35:114:35 | 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:35:115:39 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:21 | this access | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:32:116:32 | 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:35:117:35 | 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | M6 | | Finally.cs:121:10:121:11 | exit M6 | Finally.cs:121:10:121:11 | M6 | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:121:10:121:11 | M6 | @@ -2243,14 +1806,10 @@ nodeEnclosing | Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:133:10:133:11 | M7 | | Finally.cs:137:13:137:37 | ...; | Finally.cs:133:10:133:11 | M7 | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:133:10:133:11 | M7 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:133:10:133:11 | M7 | | Finally.cs:141:41:141:42 | "" | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:133:10:133:11 | M7 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | M8 | @@ -2264,108 +1823,34 @@ nodeEnclosing | Finally.cs:151:25:151:28 | null | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:157:13:160:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:39 | access to local variable e | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:47 | access to property Message | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:52:161:54 | "1" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:17:163:43 | ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:147:10:147:11 | M8 | | Finally.cs:163:40:163:40 | 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:166:13:168:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:17:167:38 | ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:167:35:167:36 | "" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:147:10:147:11 | M8 | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:172:11:172:20 | exit ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | @@ -2390,54 +1875,22 @@ nodeEnclosing | Finally.cs:179:9:181:9 | {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:176:10:176:11 | M9 | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:184:13:191:13 | try {...} ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:185:13:187:13 | {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:17:186:47 | if (...) ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:17:190:47 | if (...) ... | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:25:190:47 | throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | M10 | @@ -2449,84 +1902,22 @@ nodeEnclosing | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:204:13:206:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:16 | this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:26:211:28 | "0" | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:12 | this access | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | M10 | | Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | M10 | @@ -2565,78 +1956,24 @@ nodeEnclosing | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:233:10:233:12 | M12 | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:245:17:248:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:233:10:233:12 | M12 | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:21:251:55 | ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:13:254:45 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:13:258:47 | ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:233:10:233:12 | M12 | @@ -2650,24 +1987,15 @@ nodeEnclosing | Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:267:13:267:35 | ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:267:31:267:33 | "1" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:13:271:35 | ...; | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:271:31:271:33 | "3" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:13:272:19 | ...; | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:263:10:263:12 | M13 | | Finally.cs:272:18:272:18 | 3 | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:263:10:263:12 | M13 | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:4:7:4:13 | exit Foreach | Foreach.cs:4:7:4:13 | Foreach | @@ -2964,7 +2292,6 @@ nodeEnclosing | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:9:28:9:28 | 0 | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:7:10:7:11 | M1 | -| LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:7:10:7:11 | M1 | @@ -2983,7 +2310,6 @@ nodeEnclosing | LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:17:38:17:40 | "b" | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:17:43:17:45 | "c" | LoopUnrolling.cs:15:10:15:11 | M2 | -| LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:15:10:15:11 | M2 | @@ -2997,7 +2323,6 @@ nodeEnclosing | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:24:29:24:32 | access to parameter args | LoopUnrolling.cs:22:10:22:11 | M3 | -| LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:22:10:22:11 | M3 | @@ -3012,8 +2337,12 @@ nodeEnclosing | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:31:29:31:29 | 0 | LoopUnrolling.cs:29:10:29:11 | M4 | -| LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:33:13:33:33 | ...; | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:33:31:33:31 | access to local variable x | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:36:10:36:11 | exit M5 | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | M5 | @@ -3034,11 +2363,9 @@ nodeEnclosing | LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:39:38:39:40 | "1" | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:39:43:39:45 | "2" | LoopUnrolling.cs:36:10:36:11 | M5 | -| LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:36:10:36:11 | M5 | -| LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:36:10:36:11 | M5 | @@ -3048,6 +2375,8 @@ nodeEnclosing | LoopUnrolling.cs:42:35:42:39 | ... + ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | M6 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 | LoopUnrolling.cs:45:10:45:11 | M6 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:45:10:45:11 | M6 | @@ -3057,7 +2386,7 @@ nodeEnclosing | LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:47:38:47:40 | "b" | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:47:43:47:45 | "c" | LoopUnrolling.cs:45:10:45:11 | M6 | -| LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | LoopUnrolling.cs:45:10:45:11 | M6 | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:49:9:52:9 | {...} | LoopUnrolling.cs:45:10:45:11 | M6 | @@ -3078,32 +2407,20 @@ nodeEnclosing | LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:57:38:57:40 | "b" | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:57:43:57:45 | "c" | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:59:9:64:9 | {...} | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:60:13:61:37 | if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:61:35:61:35 | access to local variable x | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:67:10:67:11 | exit M8 | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | M8 | @@ -3117,8 +2434,12 @@ nodeEnclosing | LoopUnrolling.cs:71:9:71:12 | access to parameter args | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:71:9:71:20 | call to method Clear | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:67:10:67:11 | M8 | -| LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:73:13:73:35 | ...; | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:73:31:73:33 | access to local variable arg | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:76:10:76:11 | exit M9 | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | M9 | @@ -3128,8 +2449,13 @@ nodeEnclosing | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:78:29:78:29 | 2 | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:78:32:78:32 | 0 | LoopUnrolling.cs:76:10:76:11 | M9 | -| LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:80:9:82:9 | {...} | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:81:13:81:33 | ...; | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:81:31:81:31 | access to local variable x | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:85:10:85:12 | exit M10 | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | M10 | @@ -3139,8 +2465,13 @@ nodeEnclosing | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:87:29:87:29 | 0 | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:87:32:87:32 | 2 | LoopUnrolling.cs:85:10:85:12 | M10 | -| LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:89:9:91:9 | {...} | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:90:13:90:33 | ...; | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:90:31:90:31 | access to local variable x | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:94:10:94:12 | exit M11 | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | M11 | @@ -3150,7 +2481,6 @@ nodeEnclosing | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:96:29:96:29 | 2 | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:96:32:96:32 | 2 | LoopUnrolling.cs:94:10:94:12 | M11 | -| LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:94:10:94:12 | M11 | @@ -4768,6 +4098,7 @@ nodeEnclosing | cflow.cs:257:17:257:22 | break; | cflow.cs:240:10:240:13 | Goto | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | Yield | | cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | Yield | | cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | Yield | | cflow.cs:262:5:277:5 | {...} | cflow.cs:261:49:261:53 | Yield | | cflow.cs:263:9:263:23 | yield return ...; | cflow.cs:261:49:261:53 | Yield | @@ -4786,10 +4117,10 @@ nodeEnclosing | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | Yield | | cflow.cs:269:9:272:9 | {...} | cflow.cs:261:49:261:53 | Yield | | cflow.cs:270:13:270:24 | yield break; | cflow.cs:261:49:261:53 | Yield | -| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:261:49:261:53 | Yield | -| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:261:49:261:53 | Yield | -| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:261:49:261:53 | Yield | -| cflow.cs:275:31:275:40 | [finally: return] "not dead" | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:274:9:276:9 | {...} | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:275:13:275:42 | ...; | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:275:31:275:40 | "not dead" | cflow.cs:261:49:261:53 | Yield | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:5:282:18 | exit ControlFlowSub | cflow.cs:282:5:282:18 | ControlFlowSub | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | ControlFlowSub | @@ -4881,177 +4212,149 @@ blockEnclosing | Assert.cs:5:7:5:17 | enter AssertTests | Assert.cs:5:7:5:17 | AssertTests | | Assert.cs:7:10:7:11 | enter M1 | Assert.cs:7:10:7:11 | M1 | | Assert.cs:7:10:7:11 | exit M1 | Assert.cs:7:10:7:11 | M1 | +| Assert.cs:7:10:7:11 | exit M1 (abnormal) | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:24:9:27 | null | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:31:9:32 | "" | Assert.cs:7:10:7:11 | M1 | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | M1 | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:7:10:7:11 | M1 | +| Assert.cs:11:9:11:36 | ...; | Assert.cs:7:10:7:11 | M1 | | Assert.cs:14:10:14:11 | enter M2 | Assert.cs:14:10:14:11 | M2 | | Assert.cs:14:10:14:11 | exit M2 | Assert.cs:14:10:14:11 | M2 | +| Assert.cs:14:10:14:11 | exit M2 (abnormal) | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:24:16:27 | null | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:31:16:32 | "" | Assert.cs:14:10:14:11 | M2 | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | M2 | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:14:10:14:11 | M2 | +| Assert.cs:18:9:18:36 | ...; | Assert.cs:14:10:14:11 | M2 | | Assert.cs:21:10:21:11 | enter M3 | Assert.cs:21:10:21:11 | M3 | | Assert.cs:21:10:21:11 | exit M3 | Assert.cs:21:10:21:11 | M3 | +| Assert.cs:21:10:21:11 | exit M3 (abnormal) | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:24:23:27 | null | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:31:23:32 | "" | Assert.cs:21:10:21:11 | M3 | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | M3 | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:21:10:21:11 | M3 | +| Assert.cs:25:9:25:36 | ...; | Assert.cs:21:10:21:11 | M3 | | Assert.cs:28:10:28:11 | enter M4 | Assert.cs:28:10:28:11 | M4 | | Assert.cs:28:10:28:11 | exit M4 | Assert.cs:28:10:28:11 | M4 | +| Assert.cs:28:10:28:11 | exit M4 (abnormal) | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:24:30:27 | null | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:31:30:32 | "" | Assert.cs:28:10:28:11 | M4 | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | M4 | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:28:10:28:11 | M4 | +| Assert.cs:32:9:32:36 | ...; | Assert.cs:28:10:28:11 | M4 | | Assert.cs:35:10:35:11 | enter M5 | Assert.cs:35:10:35:11 | M5 | | Assert.cs:35:10:35:11 | exit M5 | Assert.cs:35:10:35:11 | M5 | +| Assert.cs:35:10:35:11 | exit M5 (abnormal) | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:24:37:27 | null | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:31:37:32 | "" | Assert.cs:35:10:35:11 | M5 | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | M5 | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:35:10:35:11 | M5 | +| Assert.cs:39:9:39:36 | ...; | Assert.cs:35:10:35:11 | M5 | | Assert.cs:42:10:42:11 | enter M6 | Assert.cs:42:10:42:11 | M6 | | Assert.cs:42:10:42:11 | exit M6 | Assert.cs:42:10:42:11 | M6 | +| Assert.cs:42:10:42:11 | exit M6 (abnormal) | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:24:44:27 | null | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:31:44:32 | "" | Assert.cs:42:10:42:11 | M6 | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | M6 | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:42:10:42:11 | M6 | +| Assert.cs:46:9:46:36 | ...; | Assert.cs:42:10:42:11 | M6 | | Assert.cs:49:10:49:11 | enter M7 | Assert.cs:49:10:49:11 | M7 | | Assert.cs:49:10:49:11 | exit M7 | Assert.cs:49:10:49:11 | M7 | +| Assert.cs:49:10:49:11 | exit M7 (abnormal) | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:24:51:27 | null | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:31:51:32 | "" | Assert.cs:49:10:49:11 | M7 | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | M7 | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:49:10:49:11 | M7 | +| Assert.cs:53:9:53:36 | ...; | Assert.cs:49:10:49:11 | M7 | | Assert.cs:56:10:56:11 | enter M8 | Assert.cs:56:10:56:11 | M8 | | Assert.cs:56:10:56:11 | exit M8 | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:56:10:56:11 | M8 | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:56:10:56:11 | exit M8 (abnormal) | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:24:58:27 | null | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:58:31:58:32 | "" | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:60:9:60:36 | ...; | Assert.cs:56:10:56:11 | M8 | | Assert.cs:63:10:63:11 | enter M9 | Assert.cs:63:10:63:11 | M9 | | Assert.cs:63:10:63:11 | exit M9 | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:63:10:63:11 | M9 | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:63:10:63:11 | exit M9 (abnormal) | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:24:65:27 | null | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:65:31:65:32 | "" | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:67:9:67:36 | ...; | Assert.cs:63:10:63:11 | M9 | | Assert.cs:70:10:70:12 | enter M10 | Assert.cs:70:10:70:12 | M10 | | Assert.cs:70:10:70:12 | exit M10 | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:70:10:70:12 | M10 | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:70:10:70:12 | exit M10 (abnormal) | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:24:72:27 | null | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:72:31:72:32 | "" | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:74:9:74:36 | ...; | Assert.cs:70:10:70:12 | M10 | | Assert.cs:77:10:77:12 | enter M11 | Assert.cs:77:10:77:12 | M11 | | Assert.cs:77:10:77:12 | exit M11 | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:77:10:77:12 | M11 | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:77:10:77:12 | exit M11 (abnormal) | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:24:79:27 | null | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:79:31:79:32 | "" | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:81:9:81:36 | ...; | Assert.cs:77:10:77:12 | M11 | | Assert.cs:84:10:84:12 | enter M12 | Assert.cs:84:10:84:12 | M12 | | Assert.cs:84:10:84:12 | exit M12 | Assert.cs:84:10:84:12 | M12 | | Assert.cs:84:10:84:12 | exit M12 (abnormal) | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:84:10:84:12 | M12 | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:24:86:27 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:86:31:86:32 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:17:90:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:90:24:90:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:17:94:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:94:24:94:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:17:98:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:98:24:98:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:17:102:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:102:24:102:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:17:106:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:106:24:106:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:17:110:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:110:24:110:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:17:114:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:114:24:114:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:17:118:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:118:24:118:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:17:122:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:122:24:122:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:17:126:20 | null | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:126:24:126:25 | "" | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:128:9:128:36 | ...; | Assert.cs:84:10:84:12 | M12 | | Assert.cs:131:18:131:32 | enter AssertTrueFalse | Assert.cs:131:18:131:32 | AssertTrueFalse | | Assert.cs:138:10:138:12 | enter M13 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | exit M13 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | M13 | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | Assignments | | Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | M | | Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | (...) => ... | @@ -5070,28 +4373,21 @@ blockEnclosing | BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:20:10:20:11 | M2 | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:38:10:38:11 | M3 | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:56:10:56:11 | M4 | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | M4 | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | CompileTimeOperators | | CompileTimeOperators.cs:5:9:5:15 | enter Default | CompileTimeOperators.cs:5:9:5:15 | Default | @@ -5100,6 +4396,10 @@ blockEnclosing | CompileTimeOperators.cs:20:12:20:17 | enter Nameof | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:26:7:26:22 | enter GotoInTryFinally | CompileTimeOperators.cs:26:7:26:22 | GotoInTryFinally | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:28:10:28:10 | exit M | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:28:10:28:10 | M | +| CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | M | | ConditionalAccess.cs:1:7:1:23 | enter ConditionalAccess | ConditionalAccess.cs:1:7:1:23 | ConditionalAccess | | ConditionalAccess.cs:3:12:3:13 | enter M1 | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:12:3:13 | exit M1 (normal) | ConditionalAccess.cs:3:12:3:13 | M1 | @@ -5140,49 +4440,41 @@ blockEnclosing | Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions | | Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:11:9:11:10 | enter M1 | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:11:9:11:10 | M1 | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:22:9:22:10 | enter M2 | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:22:9:22:10 | M2 | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:33:9:33:10 | enter M3 | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:38:13:38:20 | ...; | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:33:9:33:10 | M3 | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:46:9:46:10 | enter M4 | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:46:9:46:10 | M4 | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:57:9:57:10 | M5 | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:57:9:57:10 | M5 | @@ -5205,10 +4497,9 @@ blockEnclosing | Conditions.cs:97:17:97:20 | ...; | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:102:12:102:13 | M8 | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:109:17:109:24 | ...; | Conditions.cs:102:12:102:13 | M8 | @@ -5218,26 +4509,21 @@ blockEnclosing | Conditions.cs:116:25:116:25 | access to local variable i | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:116:42:116:42 | access to local variable i | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:117:9:123:9 | {...} | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:113:10:113:11 | M9 | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:131:16:131:19 | true | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:129:10:129:12 | M10 | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:129:10:129:12 | M10 | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:143:10:143:12 | M11 | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:143:10:143:12 | M11 | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | ExitMethods | @@ -5248,10 +4534,8 @@ blockEnclosing | ExitMethods.cs:32:10:32:11 | enter M5 | ExitMethods.cs:32:10:32:11 | M5 | | ExitMethods.cs:38:10:38:11 | enter M6 | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:38:10:38:11 | M6 | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:38:10:38:11 | M6 | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:54:10:54:11 | M7 | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:60:10:60:11 | M8 | @@ -5277,14 +4561,12 @@ blockEnclosing | ExitMethods.cs:117:34:117:34 | 0 | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:117:38:117:38 | 1 | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:120:17:120:32 | FailingAssertion | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | FailingAssertion | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:126:17:126:33 | FailingAssertion2 | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:10:132:20 | exit AssertFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | AssertFalse | +| ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:143:13:143:43 | ...; | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | @@ -5296,33 +4578,35 @@ blockEnclosing | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | Finally | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:7:10:7:11 | M1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | M1 | -| Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:7:10:7:11 | exit M1 (abnormal) | Finally.cs:7:10:7:11 | M1 | +| Finally.cs:7:10:7:11 | exit M1 (normal) | Finally.cs:7:10:7:11 | M1 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | M2 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | M2 | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:19:10:19:11 | M2 | | Finally.cs:27:9:29:9 | {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:19:10:19:11 | M2 | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:19:10:19:11 | M2 | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:19:10:19:11 | M2 | +| Finally.cs:49:9:51:9 | {...} | Finally.cs:19:10:19:11 | M2 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | M3 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | M3 | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:54:10:54:11 | M3 | | Finally.cs:62:9:64:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:54:10:54:11 | M3 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:54:10:54:11 | M3 | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:54:10:54:11 | M3 | +| Finally.cs:69:9:71:9 | {...} | Finally.cs:54:10:54:11 | M3 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | M4 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | M4 | @@ -5335,21 +4619,8 @@ blockEnclosing | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:74:10:74:11 | M4 | | Finally.cs:86:21:86:26 | break; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:89:13:99:13 | {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:25:93:46 | throw ...; | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:74:10:74:11 | M4 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:74:10:74:11 | M4 | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:74:10:74:11 | M4 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:103:10:103:11 | exit M5 | Finally.cs:103:10:103:11 | M5 | @@ -5363,73 +4634,27 @@ blockEnclosing | Finally.cs:109:33:109:33 | 1 | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:103:10:103:11 | M5 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:103:10:103:11 | M5 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:103:10:103:11 | M5 | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:103:10:103:11 | M5 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | M6 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:133:10:133:11 | M7 | -| Finally.cs:140:9:143:9 | {...} | Finally.cs:133:10:133:11 | M7 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:147:10:147:11 | M8 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:147:10:147:11 | M8 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:147:10:147:11 | M8 | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | ExceptionA | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | ExceptionB | @@ -5438,61 +4663,27 @@ blockEnclosing | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | M9 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:176:10:176:11 | M9 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:195:10:195:12 | M10 | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | M10 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:216:10:216:12 | M11 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:216:10:216:12 | M11 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | M11 | @@ -5501,27 +4692,17 @@ blockEnclosing | Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:233:10:233:12 | M12 | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:254:13:254:45 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | M12 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:263:10:263:12 | M13 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | M13 | -| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | M13 | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | Foreach | | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:6:10:6:11 | exit M1 (normal) | Foreach.cs:6:10:6:11 | M1 | @@ -5565,47 +4746,59 @@ blockEnclosing | LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:7:10:7:11 | M1 | +| LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:15:10:15:11 | enter M2 | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | LoopUnrolling.cs:15:10:15:11 | M2 | +| LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:15:10:15:11 | M2 | | LoopUnrolling.cs:22:10:22:11 | enter M3 | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:22:10:22:11 | exit M3 (normal) | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:22:10:22:11 | M3 | +| LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:29:10:29:11 | enter M4 | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | M4 | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:29:10:29:11 | M4 | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:36:10:36:11 | M5 | +| LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:36:10:36:11 | M5 | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:45:10:45:11 | M6 | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:45:10:45:11 | M6 | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:69:13:69:23 | [false] !... | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:69:13:69:23 | [true] !... | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:70:13:70:19 | return ...; | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | M9 | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:76:10:76:11 | M9 | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | M10 | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:85:10:85:12 | M10 | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | M11 | +| LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | M11 | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:94:10:94:12 | M11 | | MultiImplementationA.cs:4:7:4:8 | call to constructor Object | MultiImplementationA.cs:4:7:4:8 | C1 | | MultiImplementationA.cs:4:7:4:8 | enter C1 | MultiImplementationA.cs:4:7:4:8 | C1 | @@ -6124,6 +5317,9 @@ blockEnclosing | cflow.cs:254:17:254:27 | goto ...; | cflow.cs:240:10:240:13 | Goto | | cflow.cs:255:13:255:20 | default: | cflow.cs:240:10:240:13 | Goto | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:261:49:261:53 | exit Yield | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | Yield | +| cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | Yield | | cflow.cs:264:25:264:25 | access to local variable i | cflow.cs:261:49:261:53 | Yield | | cflow.cs:265:9:267:9 | {...} | cflow.cs:261:49:261:53 | Yield | | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:261:49:261:53 | Yield | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected index 495c74f169c..11880f4f825 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected @@ -327,8 +327,7 @@ | Assert.cs:10:9:10:32 | ...; | Assert.cs:10:9:10:31 | call to method Assert | exit | | Assert.cs:10:9:10:32 | ...; | Assert.cs:10:9:10:31 | call to method Assert | normal | | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | normal | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:30 | ... != ... | false | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:30 | ... != ... | true | +| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:30 | ... != ... | normal | | Assert.cs:10:27:10:30 | null | Assert.cs:10:27:10:30 | null | normal | | Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:11:9:11:35 | call to method WriteLine | normal | | Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:35 | call to method WriteLine | normal | @@ -347,8 +346,7 @@ | Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:9:17:24 | call to method IsNull | throw(AssertFailedException) | | Assert.cs:17:9:17:25 | ...; | Assert.cs:17:9:17:24 | call to method IsNull | normal | | Assert.cs:17:9:17:25 | ...; | Assert.cs:17:9:17:24 | call to method IsNull | throw(AssertFailedException) | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | non-null | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | null | +| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | normal | | Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:18:9:18:35 | call to method WriteLine | normal | | Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:35 | call to method WriteLine | normal | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:27 | access to local variable s | normal | @@ -366,8 +364,7 @@ | Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:9:24:27 | call to method IsNotNull | throw(AssertFailedException) | | Assert.cs:24:9:24:28 | ...; | Assert.cs:24:9:24:27 | call to method IsNotNull | normal | | Assert.cs:24:9:24:28 | ...; | Assert.cs:24:9:24:27 | call to method IsNotNull | throw(AssertFailedException) | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | non-null | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | null | +| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | normal | | Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:25:9:25:35 | call to method WriteLine | normal | | Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:35 | call to method WriteLine | normal | | Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:27 | access to local variable s | normal | @@ -386,8 +383,7 @@ | Assert.cs:31:9:31:33 | ...; | Assert.cs:31:9:31:32 | call to method IsTrue | normal | | Assert.cs:31:9:31:33 | ...; | Assert.cs:31:9:31:32 | call to method IsTrue | throw(AssertFailedException) | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | normal | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:31 | ... == ... | false | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:31 | ... == ... | true | +| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:31 | ... == ... | normal | | Assert.cs:31:28:31:31 | null | Assert.cs:31:28:31:31 | null | normal | | Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:32:9:32:35 | call to method WriteLine | normal | | Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:35 | call to method WriteLine | normal | @@ -407,8 +403,7 @@ | Assert.cs:38:9:38:33 | ...; | Assert.cs:38:9:38:32 | call to method IsTrue | normal | | Assert.cs:38:9:38:33 | ...; | Assert.cs:38:9:38:32 | call to method IsTrue | throw(AssertFailedException) | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | normal | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:31 | ... != ... | false | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:31 | ... != ... | true | +| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:31 | ... != ... | normal | | Assert.cs:38:28:38:31 | null | Assert.cs:38:28:38:31 | null | normal | | Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:39:9:39:35 | call to method WriteLine | normal | | Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:35 | call to method WriteLine | normal | @@ -428,8 +423,7 @@ | Assert.cs:45:9:45:34 | ...; | Assert.cs:45:9:45:33 | call to method IsFalse | normal | | Assert.cs:45:9:45:34 | ...; | Assert.cs:45:9:45:33 | call to method IsFalse | throw(AssertFailedException) | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | normal | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:32 | ... != ... | false | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:32 | ... != ... | true | +| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:32 | ... != ... | normal | | Assert.cs:45:29:45:32 | null | Assert.cs:45:29:45:32 | null | normal | | Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:46:9:46:35 | call to method WriteLine | normal | | Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:35 | call to method WriteLine | normal | @@ -449,8 +443,7 @@ | Assert.cs:52:9:52:34 | ...; | Assert.cs:52:9:52:33 | call to method IsFalse | normal | | Assert.cs:52:9:52:34 | ...; | Assert.cs:52:9:52:33 | call to method IsFalse | throw(AssertFailedException) | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | normal | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:32 | ... == ... | false | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:32 | ... == ... | true | +| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:32 | ... == ... | normal | | Assert.cs:52:29:52:32 | null | Assert.cs:52:29:52:32 | null | normal | | Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:53:9:53:35 | call to method WriteLine | normal | | Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:35 | call to method WriteLine | normal | @@ -472,11 +465,9 @@ | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | normal | | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:31 | ... != ... | false | | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:31 | ... != ... | true | -| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... | false | -| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... | true | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:36 | ... && ... | normal | | Assert.cs:59:28:59:31 | null | Assert.cs:59:28:59:31 | null | normal | -| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | false | -| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | true | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:36:59:36 | access to parameter b | normal | | Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:60:9:60:35 | call to method WriteLine | normal | | Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:35 | call to method WriteLine | normal | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:27 | access to local variable s | normal | @@ -497,11 +488,9 @@ | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | normal | | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:32 | ... == ... | false | | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:32 | ... == ... | true | -| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... | false | -| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... | true | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:37 | ... \|\| ... | normal | | Assert.cs:66:29:66:32 | null | Assert.cs:66:29:66:32 | null | normal | -| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | false | -| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | true | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:37:66:37 | access to parameter b | normal | | Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:67:9:67:35 | call to method WriteLine | normal | | Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:35 | call to method WriteLine | normal | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:27 | access to local variable s | normal | @@ -522,11 +511,9 @@ | Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | normal | | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:31 | ... == ... | false | | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:31 | ... == ... | true | -| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... | false | -| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... | true | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:36 | ... && ... | normal | | Assert.cs:73:28:73:31 | null | Assert.cs:73:28:73:31 | null | normal | -| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | false | -| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | true | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:36:73:36 | access to parameter b | normal | | Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:74:9:74:35 | call to method WriteLine | normal | | Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:35 | call to method WriteLine | normal | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:27 | access to local variable s | normal | @@ -547,11 +534,9 @@ | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | normal | | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:32 | ... != ... | false | | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:32 | ... != ... | true | -| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... | false | -| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... | true | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:37 | ... \|\| ... | normal | | Assert.cs:80:29:80:32 | null | Assert.cs:80:29:80:32 | null | normal | -| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | false | -| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | true | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:37:80:37 | access to parameter b | normal | | Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:81:9:81:35 | call to method WriteLine | normal | | Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:35 | call to method WriteLine | normal | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:27 | access to local variable s | normal | @@ -580,8 +565,7 @@ | Assert.cs:87:9:87:32 | ...; | Assert.cs:87:9:87:31 | call to method Assert | exit | | Assert.cs:87:9:87:32 | ...; | Assert.cs:87:9:87:31 | call to method Assert | normal | | Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:22:87:22 | access to local variable s | normal | -| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:30 | ... != ... | false | -| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:30 | ... != ... | true | +| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:22:87:30 | ... != ... | normal | | Assert.cs:87:27:87:30 | null | Assert.cs:87:27:87:30 | null | normal | | Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:88:9:88:35 | call to method WriteLine | normal | | Assert.cs:88:9:88:36 | ...; | Assert.cs:88:9:88:35 | call to method WriteLine | normal | @@ -598,8 +582,7 @@ | Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:91:9:91:24 | call to method IsNull | throw(AssertFailedException) | | Assert.cs:91:9:91:25 | ...; | Assert.cs:91:9:91:24 | call to method IsNull | normal | | Assert.cs:91:9:91:25 | ...; | Assert.cs:91:9:91:24 | call to method IsNull | throw(AssertFailedException) | -| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s | non-null | -| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s | null | +| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:23:91:23 | access to local variable s | normal | | Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:92:9:92:35 | call to method WriteLine | normal | | Assert.cs:92:9:92:36 | ...; | Assert.cs:92:9:92:35 | call to method WriteLine | normal | | Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:27:92:27 | access to local variable s | normal | @@ -615,8 +598,7 @@ | Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:95:9:95:27 | call to method IsNotNull | throw(AssertFailedException) | | Assert.cs:95:9:95:28 | ...; | Assert.cs:95:9:95:27 | call to method IsNotNull | normal | | Assert.cs:95:9:95:28 | ...; | Assert.cs:95:9:95:27 | call to method IsNotNull | throw(AssertFailedException) | -| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s | non-null | -| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s | null | +| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:26:95:26 | access to local variable s | normal | | Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:96:9:96:35 | call to method WriteLine | normal | | Assert.cs:96:9:96:36 | ...; | Assert.cs:96:9:96:35 | call to method WriteLine | normal | | Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:27:96:27 | access to local variable s | normal | @@ -633,8 +615,7 @@ | Assert.cs:99:9:99:33 | ...; | Assert.cs:99:9:99:32 | call to method IsTrue | normal | | Assert.cs:99:9:99:33 | ...; | Assert.cs:99:9:99:32 | call to method IsTrue | throw(AssertFailedException) | | Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:23:99:23 | access to local variable s | normal | -| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:31 | ... == ... | false | -| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:31 | ... == ... | true | +| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:23:99:31 | ... == ... | normal | | Assert.cs:99:28:99:31 | null | Assert.cs:99:28:99:31 | null | normal | | Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:100:9:100:35 | call to method WriteLine | normal | | Assert.cs:100:9:100:36 | ...; | Assert.cs:100:9:100:35 | call to method WriteLine | normal | @@ -652,8 +633,7 @@ | Assert.cs:103:9:103:33 | ...; | Assert.cs:103:9:103:32 | call to method IsTrue | normal | | Assert.cs:103:9:103:33 | ...; | Assert.cs:103:9:103:32 | call to method IsTrue | throw(AssertFailedException) | | Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:23:103:23 | access to local variable s | normal | -| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:31 | ... != ... | false | -| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:31 | ... != ... | true | +| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:23:103:31 | ... != ... | normal | | Assert.cs:103:28:103:31 | null | Assert.cs:103:28:103:31 | null | normal | | Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:104:9:104:35 | call to method WriteLine | normal | | Assert.cs:104:9:104:36 | ...; | Assert.cs:104:9:104:35 | call to method WriteLine | normal | @@ -671,8 +651,7 @@ | Assert.cs:107:9:107:34 | ...; | Assert.cs:107:9:107:33 | call to method IsFalse | normal | | Assert.cs:107:9:107:34 | ...; | Assert.cs:107:9:107:33 | call to method IsFalse | throw(AssertFailedException) | | Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:24:107:24 | access to local variable s | normal | -| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:32 | ... != ... | false | -| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:32 | ... != ... | true | +| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:24:107:32 | ... != ... | normal | | Assert.cs:107:29:107:32 | null | Assert.cs:107:29:107:32 | null | normal | | Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:108:9:108:35 | call to method WriteLine | normal | | Assert.cs:108:9:108:36 | ...; | Assert.cs:108:9:108:35 | call to method WriteLine | normal | @@ -690,8 +669,7 @@ | Assert.cs:111:9:111:34 | ...; | Assert.cs:111:9:111:33 | call to method IsFalse | normal | | Assert.cs:111:9:111:34 | ...; | Assert.cs:111:9:111:33 | call to method IsFalse | throw(AssertFailedException) | | Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:24:111:24 | access to local variable s | normal | -| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:32 | ... == ... | false | -| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:32 | ... == ... | true | +| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:24:111:32 | ... == ... | normal | | Assert.cs:111:29:111:32 | null | Assert.cs:111:29:111:32 | null | normal | | Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:112:9:112:35 | call to method WriteLine | normal | | Assert.cs:112:9:112:36 | ...; | Assert.cs:112:9:112:35 | call to method WriteLine | normal | @@ -711,11 +689,9 @@ | Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:23:115:23 | access to local variable s | normal | | Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:31 | ... != ... | false | | Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:31 | ... != ... | true | -| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | false | -| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | true | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:23:115:36 | ... && ... | normal | | Assert.cs:115:28:115:31 | null | Assert.cs:115:28:115:31 | null | normal | -| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | false | -| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | true | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:36:115:36 | access to parameter b | normal | | Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:116:9:116:35 | call to method WriteLine | normal | | Assert.cs:116:9:116:36 | ...; | Assert.cs:116:9:116:35 | call to method WriteLine | normal | | Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:27:116:27 | access to local variable s | normal | @@ -734,13 +710,10 @@ | Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:24:119:24 | access to local variable s | normal | | Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:32 | ... == ... | false | | Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:32 | ... == ... | true | -| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | false | -| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | true | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:24:119:38 | ... \|\| ... | normal | | Assert.cs:119:29:119:32 | null | Assert.cs:119:29:119:32 | null | normal | -| Assert.cs:119:37:119:38 | !... | Assert.cs:119:37:119:38 | !... | false | -| Assert.cs:119:37:119:38 | !... | Assert.cs:119:37:119:38 | !... | true | -| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | false | -| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | true | +| Assert.cs:119:37:119:38 | !... | Assert.cs:119:37:119:38 | !... | normal | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:38:119:38 | access to parameter b | normal | | Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:120:9:120:35 | call to method WriteLine | normal | | Assert.cs:120:9:120:36 | ...; | Assert.cs:120:9:120:35 | call to method WriteLine | normal | | Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:27:120:27 | access to local variable s | normal | @@ -759,11 +732,9 @@ | Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:23:123:23 | access to local variable s | normal | | Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:31 | ... == ... | false | | Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:31 | ... == ... | true | -| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | false | -| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | true | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:23:123:36 | ... && ... | normal | | Assert.cs:123:28:123:31 | null | Assert.cs:123:28:123:31 | null | normal | -| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | false | -| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | true | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:36:123:36 | access to parameter b | normal | | Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:124:9:124:35 | call to method WriteLine | normal | | Assert.cs:124:9:124:36 | ...; | Assert.cs:124:9:124:35 | call to method WriteLine | normal | | Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:27:124:27 | access to local variable s | normal | @@ -782,13 +753,10 @@ | Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:24:127:24 | access to local variable s | normal | | Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:32 | ... != ... | false | | Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:32 | ... != ... | true | -| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | false | -| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | true | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:24:127:38 | ... \|\| ... | normal | | Assert.cs:127:29:127:32 | null | Assert.cs:127:29:127:32 | null | normal | -| Assert.cs:127:37:127:38 | !... | Assert.cs:127:37:127:38 | !... | false | -| Assert.cs:127:37:127:38 | !... | Assert.cs:127:37:127:38 | !... | true | -| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | false | -| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | true | +| Assert.cs:127:37:127:38 | !... | Assert.cs:127:37:127:38 | !... | normal | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:38:127:38 | access to parameter b | normal | | Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:128:9:128:35 | call to method WriteLine | normal | | Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:35 | call to method WriteLine | normal | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s | normal | @@ -801,10 +769,8 @@ | Assert.cs:140:9:140:35 | this access | Assert.cs:140:9:140:35 | this access | normal | | Assert.cs:140:9:140:36 | ...; | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | normal | | Assert.cs:140:9:140:36 | ...; | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | throw(Exception) | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:25:140:26 | access to parameter b1 | false | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:25:140:26 | access to parameter b1 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | false | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | true | +| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:25:140:26 | access to parameter b1 | normal | +| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:29:140:30 | access to parameter b2 | normal | | Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:33:140:34 | access to parameter b3 | normal | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:141:9:141:15 | return ...; | return | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | call to constructor Object | normal | @@ -1593,7 +1559,7 @@ | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:123:13:123:17 | Int32 x = ... | normal | | ExitMethods.cs:122:9:122:28 | call to method IsTrue | ExitMethods.cs:122:9:122:28 | call to method IsTrue | throw(AssertFailedException) | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:122:9:122:28 | call to method IsTrue | throw(AssertFailedException) | -| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:23:122:27 | false | false | +| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:23:122:27 | false | normal | | ExitMethods.cs:123:9:123:18 | ... ...; | ExitMethods.cs:123:13:123:17 | Int32 x = ... | normal | | ExitMethods.cs:123:13:123:17 | Int32 x = ... | ExitMethods.cs:123:13:123:17 | Int32 x = ... | normal | | ExitMethods.cs:123:17:123:17 | 0 | ExitMethods.cs:123:17:123:17 | 0 | normal | @@ -1607,14 +1573,13 @@ | ExitMethods.cs:129:17:129:17 | 0 | ExitMethods.cs:129:17:129:17 | 0 | normal | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:33:132:49 | call to method IsFalse | normal | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:33:132:49 | call to method IsFalse | throw(AssertFailedException) | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:48:132:48 | access to parameter b | false | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:48:132:48 | access to parameter b | true | +| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:48:132:48 | access to parameter b | normal | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | throw(AssertFailedException) | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:137:13:137:17 | Int32 x = ... | normal | | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | throw(AssertFailedException) | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:9:136:25 | this access | normal | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | throw(AssertFailedException) | -| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:21:136:24 | true | true | +| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:21:136:24 | true | normal | | ExitMethods.cs:137:9:137:18 | ... ...; | ExitMethods.cs:137:13:137:17 | Int32 x = ... | normal | | ExitMethods.cs:137:13:137:17 | Int32 x = ... | ExitMethods.cs:137:13:137:17 | Int32 x = ... | normal | | ExitMethods.cs:137:17:137:17 | 0 | ExitMethods.cs:137:17:137:17 | 0 | normal | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 1664d77538a..63855522ba6 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -350,12 +350,11 @@ | Assert.cs:9:20:9:32 | ... ? ... : ... | Assert.cs:9:16:9:32 | String s = ... | | | Assert.cs:9:24:9:27 | null | Assert.cs:9:20:9:32 | ... ? ... : ... | | | Assert.cs:9:31:9:32 | "" | Assert.cs:9:20:9:32 | ... ? ... : ... | | -| Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | Assert.cs:7:10:7:11 | exit M1 (abnormal) | exit | -| Assert.cs:10:9:10:31 | [assertion success] call to method Assert | Assert.cs:11:9:11:36 | ...; | | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:7:10:7:11 | exit M1 (abnormal) | exit | +| Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:11:9:11:36 | ...; | | | Assert.cs:10:9:10:32 | ...; | Assert.cs:10:22:10:22 | access to local variable s | | | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:27:10:30 | null | | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion failure] call to method Assert | false | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | [assertion success] call to method Assert | true | +| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:9:10:31 | call to method Assert | | | Assert.cs:10:27:10:30 | null | Assert.cs:10:22:10:30 | ... != ... | | | Assert.cs:11:9:11:35 | call to method WriteLine | Assert.cs:7:10:7:11 | exit M1 (normal) | | | Assert.cs:11:9:11:36 | ...; | Assert.cs:11:27:11:27 | access to local variable s | | @@ -372,11 +371,10 @@ | Assert.cs:16:20:16:32 | ... ? ... : ... | Assert.cs:16:16:16:32 | String s = ... | | | Assert.cs:16:24:16:27 | null | Assert.cs:16:20:16:32 | ... ? ... : ... | | | Assert.cs:16:31:16:32 | "" | Assert.cs:16:20:16:32 | ... ? ... : ... | | -| Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | exception(AssertFailedException) | -| Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | Assert.cs:18:9:18:36 | ...; | | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:14:10:14:11 | exit M2 (abnormal) | exception | +| Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:18:9:18:36 | ...; | | | Assert.cs:17:9:17:25 | ...; | Assert.cs:17:23:17:23 | access to local variable s | | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion failure] call to method IsNull | non-null | -| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | [assertion success] call to method IsNull | null | +| Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:9:17:24 | call to method IsNull | | | Assert.cs:18:9:18:35 | call to method WriteLine | Assert.cs:14:10:14:11 | exit M2 (normal) | | | Assert.cs:18:9:18:36 | ...; | Assert.cs:18:27:18:27 | access to local variable s | | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:34 | access to property Length | | @@ -392,11 +390,10 @@ | Assert.cs:23:20:23:32 | ... ? ... : ... | Assert.cs:23:16:23:32 | String s = ... | | | Assert.cs:23:24:23:27 | null | Assert.cs:23:20:23:32 | ... ? ... : ... | | | Assert.cs:23:31:23:32 | "" | Assert.cs:23:20:23:32 | ... ? ... : ... | | -| Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | exception(AssertFailedException) | -| Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:21:10:21:11 | exit M3 (abnormal) | exception | +| Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:25:9:25:36 | ...; | | | Assert.cs:24:9:24:28 | ...; | Assert.cs:24:26:24:26 | access to local variable s | | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion failure] call to method IsNotNull | null | -| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | [assertion success] call to method IsNotNull | non-null | +| Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:9:24:27 | call to method IsNotNull | | | Assert.cs:25:9:25:35 | call to method WriteLine | Assert.cs:21:10:21:11 | exit M3 (normal) | | | Assert.cs:25:9:25:36 | ...; | Assert.cs:25:27:25:27 | access to local variable s | | | Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:34 | access to property Length | | @@ -412,12 +409,11 @@ | Assert.cs:30:20:30:32 | ... ? ... : ... | Assert.cs:30:16:30:32 | String s = ... | | | Assert.cs:30:24:30:27 | null | Assert.cs:30:20:30:32 | ... ? ... : ... | | | Assert.cs:30:31:30:32 | "" | Assert.cs:30:20:30:32 | ... ? ... : ... | | -| Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | exception(AssertFailedException) | -| Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | Assert.cs:32:9:32:36 | ...; | | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:28:10:28:11 | exit M4 (abnormal) | exception | +| Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:32:9:32:36 | ...; | | | Assert.cs:31:9:31:33 | ...; | Assert.cs:31:23:31:23 | access to local variable s | | | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:28:31:31 | null | | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | [assertion success] call to method IsTrue | true | +| Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:9:31:32 | call to method IsTrue | | | Assert.cs:31:28:31:31 | null | Assert.cs:31:23:31:31 | ... == ... | | | Assert.cs:32:9:32:35 | call to method WriteLine | Assert.cs:28:10:28:11 | exit M4 (normal) | | | Assert.cs:32:9:32:36 | ...; | Assert.cs:32:27:32:27 | access to local variable s | | @@ -434,12 +430,11 @@ | Assert.cs:37:20:37:32 | ... ? ... : ... | Assert.cs:37:16:37:32 | String s = ... | | | Assert.cs:37:24:37:27 | null | Assert.cs:37:20:37:32 | ... ? ... : ... | | | Assert.cs:37:31:37:32 | "" | Assert.cs:37:20:37:32 | ... ? ... : ... | | -| Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | exception(AssertFailedException) | -| Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | Assert.cs:39:9:39:36 | ...; | | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:35:10:35:11 | exit M5 (abnormal) | exception | +| Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:39:9:39:36 | ...; | | | Assert.cs:38:9:38:33 | ...; | Assert.cs:38:23:38:23 | access to local variable s | | | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:28:38:31 | null | | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion failure] call to method IsTrue | false | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | [assertion success] call to method IsTrue | true | +| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:9:38:32 | call to method IsTrue | | | Assert.cs:38:28:38:31 | null | Assert.cs:38:23:38:31 | ... != ... | | | Assert.cs:39:9:39:35 | call to method WriteLine | Assert.cs:35:10:35:11 | exit M5 (normal) | | | Assert.cs:39:9:39:36 | ...; | Assert.cs:39:27:39:27 | access to local variable s | | @@ -456,12 +451,11 @@ | Assert.cs:44:20:44:32 | ... ? ... : ... | Assert.cs:44:16:44:32 | String s = ... | | | Assert.cs:44:24:44:27 | null | Assert.cs:44:20:44:32 | ... ? ... : ... | | | Assert.cs:44:31:44:32 | "" | Assert.cs:44:20:44:32 | ... ? ... : ... | | -| Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | exception(AssertFailedException) | -| Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | Assert.cs:46:9:46:36 | ...; | | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:42:10:42:11 | exit M6 (abnormal) | exception | +| Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:46:9:46:36 | ...; | | | Assert.cs:45:9:45:34 | ...; | Assert.cs:45:24:45:24 | access to local variable s | | | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:29:45:32 | null | | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | [assertion success] call to method IsFalse | false | +| Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:9:45:33 | call to method IsFalse | | | Assert.cs:45:29:45:32 | null | Assert.cs:45:24:45:32 | ... != ... | | | Assert.cs:46:9:46:35 | call to method WriteLine | Assert.cs:42:10:42:11 | exit M6 (normal) | | | Assert.cs:46:9:46:36 | ...; | Assert.cs:46:27:46:27 | access to local variable s | | @@ -478,12 +472,11 @@ | Assert.cs:51:20:51:32 | ... ? ... : ... | Assert.cs:51:16:51:32 | String s = ... | | | Assert.cs:51:24:51:27 | null | Assert.cs:51:20:51:32 | ... ? ... : ... | | | Assert.cs:51:31:51:32 | "" | Assert.cs:51:20:51:32 | ... ? ... : ... | | -| Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | exception(AssertFailedException) | -| Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | Assert.cs:53:9:53:36 | ...; | | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:49:10:49:11 | exit M7 (abnormal) | exception | +| Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:53:9:53:36 | ...; | | | Assert.cs:52:9:52:34 | ...; | Assert.cs:52:24:52:24 | access to local variable s | | | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:29:52:32 | null | | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion failure] call to method IsFalse | true | -| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | [assertion success] call to method IsFalse | false | +| Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:9:52:33 | call to method IsFalse | | | Assert.cs:52:29:52:32 | null | Assert.cs:52:24:52:32 | ... == ... | | | Assert.cs:53:9:53:35 | call to method WriteLine | Assert.cs:49:10:49:11 | exit M7 (normal) | | | Assert.cs:53:9:53:36 | ...; | Assert.cs:53:27:53:27 | access to local variable s | | @@ -494,30 +487,21 @@ | Assert.cs:56:10:56:11 | exit M8 (normal) | Assert.cs:56:10:56:11 | exit M8 | | | Assert.cs:57:5:61:5 | {...} | Assert.cs:58:9:58:33 | ... ...; | | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:20:58:20 | access to parameter b | | -| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): false] ...; | | -| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | Assert.cs:59:9:59:38 | [b (line 56): true] ...; | | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | [b (line 56): true] null | true | -| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | [b (line 56): false] "" | false | -| Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | | -| Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | | -| Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | exception(AssertFailedException) | -| Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | Assert.cs:60:9:60:36 | ...; | | -| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | | -| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | | -| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): false] null | | -| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | Assert.cs:59:28:59:31 | [b (line 56): true] null | | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | true | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | true | -| Assert.cs:59:23:59:36 | [false] ... && ... | Assert.cs:59:9:59:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:59:23:59:36 | [true] ... && ... | Assert.cs:59:9:59:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:59:28:59:31 | [b (line 56): false] null | Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | | -| Assert.cs:59:28:59:31 | [b (line 56): true] null | Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:59:23:59:36 | [false] ... && ... | false | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:59:23:59:36 | [true] ... && ... | true | +| Assert.cs:58:16:58:32 | String s = ... | Assert.cs:59:9:59:38 | ...; | | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:24:58:27 | null | true | +| Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:31:58:32 | "" | false | +| Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:16:58:32 | String s = ... | | +| Assert.cs:58:24:58:27 | null | Assert.cs:58:20:58:32 | ... ? ... : ... | | +| Assert.cs:58:31:58:32 | "" | Assert.cs:58:20:58:32 | ... ? ... : ... | | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:56:10:56:11 | exit M8 (abnormal) | exception | +| Assert.cs:59:9:59:37 | call to method IsTrue | Assert.cs:60:9:60:36 | ...; | | +| Assert.cs:59:9:59:38 | ...; | Assert.cs:59:23:59:23 | access to local variable s | | +| Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:28:59:31 | null | | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:36 | ... && ... | false | +| Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:36:59:36 | access to parameter b | true | +| Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:9:59:37 | call to method IsTrue | | +| Assert.cs:59:28:59:31 | null | Assert.cs:59:23:59:31 | ... != ... | | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:59:23:59:36 | ... && ... | | | Assert.cs:60:9:60:35 | call to method WriteLine | Assert.cs:56:10:56:11 | exit M8 (normal) | | | Assert.cs:60:9:60:36 | ...; | Assert.cs:60:27:60:27 | access to local variable s | | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:34 | access to property Length | | @@ -527,30 +511,21 @@ | Assert.cs:63:10:63:11 | exit M9 (normal) | Assert.cs:63:10:63:11 | exit M9 | | | Assert.cs:64:5:68:5 | {...} | Assert.cs:65:9:65:33 | ... ...; | | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:20:65:20 | access to parameter b | | -| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): false] ...; | | -| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | Assert.cs:66:9:66:39 | [b (line 63): true] ...; | | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | [b (line 63): true] null | true | -| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | [b (line 63): false] "" | false | -| Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | | -| Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | | -| Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | exception(AssertFailedException) | -| Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | Assert.cs:67:9:67:36 | ...; | | -| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | | -| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | | -| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): false] null | | -| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | Assert.cs:66:29:66:32 | [b (line 63): true] null | | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | false | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | false | -| Assert.cs:66:24:66:37 | [false] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:66:24:66:37 | [true] ... \|\| ... | Assert.cs:66:9:66:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:66:29:66:32 | [b (line 63): false] null | Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | | -| Assert.cs:66:29:66:32 | [b (line 63): true] null | Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:66:24:66:37 | [false] ... \|\| ... | false | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:66:24:66:37 | [true] ... \|\| ... | true | +| Assert.cs:65:16:65:32 | String s = ... | Assert.cs:66:9:66:39 | ...; | | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:24:65:27 | null | true | +| Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:31:65:32 | "" | false | +| Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:16:65:32 | String s = ... | | +| Assert.cs:65:24:65:27 | null | Assert.cs:65:20:65:32 | ... ? ... : ... | | +| Assert.cs:65:31:65:32 | "" | Assert.cs:65:20:65:32 | ... ? ... : ... | | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:63:10:63:11 | exit M9 (abnormal) | exception | +| Assert.cs:66:9:66:38 | call to method IsFalse | Assert.cs:67:9:67:36 | ...; | | +| Assert.cs:66:9:66:39 | ...; | Assert.cs:66:24:66:24 | access to local variable s | | +| Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:29:66:32 | null | | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:37 | ... \|\| ... | true | +| Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:37:66:37 | access to parameter b | false | +| Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:9:66:38 | call to method IsFalse | | +| Assert.cs:66:29:66:32 | null | Assert.cs:66:24:66:32 | ... == ... | | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:66:24:66:37 | ... \|\| ... | | | Assert.cs:67:9:67:35 | call to method WriteLine | Assert.cs:63:10:63:11 | exit M9 (normal) | | | Assert.cs:67:9:67:36 | ...; | Assert.cs:67:27:67:27 | access to local variable s | | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:34 | access to property Length | | @@ -560,30 +535,21 @@ | Assert.cs:70:10:70:12 | exit M10 (normal) | Assert.cs:70:10:70:12 | exit M10 | | | Assert.cs:71:5:75:5 | {...} | Assert.cs:72:9:72:33 | ... ...; | | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:20:72:20 | access to parameter b | | -| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): false] ...; | | -| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | Assert.cs:73:9:73:38 | [b (line 70): true] ...; | | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | [b (line 70): true] null | true | -| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | [b (line 70): false] "" | false | -| Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | | -| Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | | -| Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | exception(AssertFailedException) | -| Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | Assert.cs:74:9:74:36 | ...; | | -| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | | -| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | | -| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): false] null | | -| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | Assert.cs:73:28:73:31 | [b (line 70): true] null | | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | true | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | true | -| Assert.cs:73:23:73:36 | [false] ... && ... | Assert.cs:73:9:73:37 | [assertion failure] call to method IsTrue | false | -| Assert.cs:73:23:73:36 | [true] ... && ... | Assert.cs:73:9:73:37 | [assertion success] call to method IsTrue | true | -| Assert.cs:73:28:73:31 | [b (line 70): false] null | Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | | -| Assert.cs:73:28:73:31 | [b (line 70): true] null | Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:73:23:73:36 | [false] ... && ... | false | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:73:23:73:36 | [true] ... && ... | true | +| Assert.cs:72:16:72:32 | String s = ... | Assert.cs:73:9:73:38 | ...; | | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:24:72:27 | null | true | +| Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:31:72:32 | "" | false | +| Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:16:72:32 | String s = ... | | +| Assert.cs:72:24:72:27 | null | Assert.cs:72:20:72:32 | ... ? ... : ... | | +| Assert.cs:72:31:72:32 | "" | Assert.cs:72:20:72:32 | ... ? ... : ... | | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:70:10:70:12 | exit M10 (abnormal) | exception | +| Assert.cs:73:9:73:37 | call to method IsTrue | Assert.cs:74:9:74:36 | ...; | | +| Assert.cs:73:9:73:38 | ...; | Assert.cs:73:23:73:23 | access to local variable s | | +| Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:28:73:31 | null | | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:36 | ... && ... | false | +| Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:36:73:36 | access to parameter b | true | +| Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:9:73:37 | call to method IsTrue | | +| Assert.cs:73:28:73:31 | null | Assert.cs:73:23:73:31 | ... == ... | | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:73:23:73:36 | ... && ... | | | Assert.cs:74:9:74:35 | call to method WriteLine | Assert.cs:70:10:70:12 | exit M10 (normal) | | | Assert.cs:74:9:74:36 | ...; | Assert.cs:74:27:74:27 | access to local variable s | | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:34 | access to property Length | | @@ -593,30 +559,21 @@ | Assert.cs:77:10:77:12 | exit M11 (normal) | Assert.cs:77:10:77:12 | exit M11 | | | Assert.cs:78:5:82:5 | {...} | Assert.cs:79:9:79:33 | ... ...; | | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:20:79:20 | access to parameter b | | -| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): false] ...; | | -| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | Assert.cs:80:9:80:39 | [b (line 77): true] ...; | | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | [b (line 77): true] null | true | -| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | [b (line 77): false] "" | false | -| Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | | -| Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | | -| Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | exception(AssertFailedException) | -| Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | Assert.cs:81:9:81:36 | ...; | | -| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | | -| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | | -| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): false] null | | -| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | Assert.cs:80:29:80:32 | [b (line 77): true] null | | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | false | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | false | -| Assert.cs:80:24:80:37 | [false] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion success] call to method IsFalse | false | -| Assert.cs:80:24:80:37 | [true] ... \|\| ... | Assert.cs:80:9:80:38 | [assertion failure] call to method IsFalse | true | -| Assert.cs:80:29:80:32 | [b (line 77): false] null | Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | | -| Assert.cs:80:29:80:32 | [b (line 77): true] null | Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:80:24:80:37 | [false] ... \|\| ... | false | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:80:24:80:37 | [true] ... \|\| ... | true | +| Assert.cs:79:16:79:32 | String s = ... | Assert.cs:80:9:80:39 | ...; | | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:24:79:27 | null | true | +| Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:31:79:32 | "" | false | +| Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:16:79:32 | String s = ... | | +| Assert.cs:79:24:79:27 | null | Assert.cs:79:20:79:32 | ... ? ... : ... | | +| Assert.cs:79:31:79:32 | "" | Assert.cs:79:20:79:32 | ... ? ... : ... | | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:77:10:77:12 | exit M11 (abnormal) | exception | +| Assert.cs:80:9:80:38 | call to method IsFalse | Assert.cs:81:9:81:36 | ...; | | +| Assert.cs:80:9:80:39 | ...; | Assert.cs:80:24:80:24 | access to local variable s | | +| Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:29:80:32 | null | | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:37 | ... \|\| ... | true | +| Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:37:80:37 | access to parameter b | false | +| Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:9:80:38 | call to method IsFalse | | +| Assert.cs:80:29:80:32 | null | Assert.cs:80:24:80:32 | ... != ... | | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:80:24:80:37 | ... \|\| ... | | | Assert.cs:81:9:81:35 | call to method WriteLine | Assert.cs:77:10:77:12 | exit M11 (normal) | | | Assert.cs:81:9:81:36 | ...; | Assert.cs:81:27:81:27 | access to local variable s | | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:34 | access to property Length | | @@ -626,307 +583,198 @@ | Assert.cs:84:10:84:12 | exit M12 (normal) | Assert.cs:84:10:84:12 | exit M12 | | | Assert.cs:85:5:129:5 | {...} | Assert.cs:86:9:86:33 | ... ...; | | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:20:86:20 | access to parameter b | | -| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): false] ...; | | -| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | Assert.cs:87:9:87:32 | [b (line 84): true] ...; | | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | [b (line 84): true] null | true | -| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | [b (line 84): false] "" | false | -| Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | | -| Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exit | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exit | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): false] ...; | | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | Assert.cs:88:9:88:36 | [b (line 84): true] ...; | | -| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | | -| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | | -| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): false] null | | -| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | Assert.cs:87:27:87:30 | [b (line 84): true] null | | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | false | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | true | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | false | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | true | -| Assert.cs:87:27:87:30 | [b (line 84): false] null | Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | | -| Assert.cs:87:27:87:30 | [b (line 84): true] null | Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | | -| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): false] ...; | | -| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | Assert.cs:90:9:90:26 | [b (line 84): true] ...; | | -| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | | -| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | | -| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): false] ...; | | -| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | Assert.cs:91:9:91:25 | [b (line 84): true] ...; | | -| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | Assert.cs:90:24:90:25 | [b (line 84): false] "" | false | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | Assert.cs:90:17:90:20 | [b (line 84): true] null | true | -| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | | -| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): false] ...; | | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | Assert.cs:92:9:92:36 | [b (line 84): true] ...; | | -| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | | -| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | non-null | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | null | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | non-null | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | null | -| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): false] ...; | | -| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | Assert.cs:94:9:94:26 | [b (line 84): true] ...; | | -| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | | -| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | | -| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): false] ...; | | -| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | Assert.cs:95:9:95:28 | [b (line 84): true] ...; | | -| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | Assert.cs:94:24:94:25 | [b (line 84): false] "" | false | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | Assert.cs:94:17:94:20 | [b (line 84): true] null | true | -| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | | -| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): false] ...; | | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | Assert.cs:96:9:96:36 | [b (line 84): true] ...; | | -| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | | -| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | null | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | non-null | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | null | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | non-null | -| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): false] ...; | | -| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | Assert.cs:98:9:98:26 | [b (line 84): true] ...; | | -| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | | -| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | | -| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): false] ...; | | -| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | Assert.cs:99:9:99:33 | [b (line 84): true] ...; | | -| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | Assert.cs:98:24:98:25 | [b (line 84): false] "" | false | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | Assert.cs:98:17:98:20 | [b (line 84): true] null | true | -| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | | -| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): false] ...; | | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:100:9:100:36 | [b (line 84): true] ...; | | -| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | | -| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | | -| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): false] null | | -| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | Assert.cs:99:28:99:31 | [b (line 84): true] null | | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:99:28:99:31 | [b (line 84): false] null | Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | | -| Assert.cs:99:28:99:31 | [b (line 84): true] null | Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | | -| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): false] ...; | | -| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | Assert.cs:102:9:102:26 | [b (line 84): true] ...; | | -| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | | -| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | | -| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): false] ...; | | -| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | Assert.cs:103:9:103:33 | [b (line 84): true] ...; | | -| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | Assert.cs:102:24:102:25 | [b (line 84): false] "" | false | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | Assert.cs:102:17:102:20 | [b (line 84): true] null | true | -| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | | -| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): false] ...; | | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:104:9:104:36 | [b (line 84): true] ...; | | -| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | | -| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | | -| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): false] null | | -| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | Assert.cs:103:28:103:31 | [b (line 84): true] null | | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | true | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:103:28:103:31 | [b (line 84): false] null | Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | | -| Assert.cs:103:28:103:31 | [b (line 84): true] null | Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | | -| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): false] ...; | | -| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | Assert.cs:106:9:106:26 | [b (line 84): true] ...; | | -| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | | -| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | | -| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): false] ...; | | -| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | Assert.cs:107:9:107:34 | [b (line 84): true] ...; | | -| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | Assert.cs:106:24:106:25 | [b (line 84): false] "" | false | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | Assert.cs:106:17:106:20 | [b (line 84): true] null | true | -| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | | -| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): false] ...; | | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:108:9:108:36 | [b (line 84): true] ...; | | -| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | | -| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | | -| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): false] null | | -| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | Assert.cs:107:29:107:32 | [b (line 84): true] null | | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:107:29:107:32 | [b (line 84): false] null | Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | | -| Assert.cs:107:29:107:32 | [b (line 84): true] null | Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | | -| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): false] ...; | | -| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | Assert.cs:110:9:110:26 | [b (line 84): true] ...; | | -| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | | -| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | | -| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): false] ...; | | -| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | Assert.cs:111:9:111:34 | [b (line 84): true] ...; | | -| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | Assert.cs:110:24:110:25 | [b (line 84): false] "" | false | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | Assert.cs:110:17:110:20 | [b (line 84): true] null | true | -| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | | -| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): false] ...; | | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:112:9:112:36 | [b (line 84): true] ...; | | -| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | | -| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | | -| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): false] null | | -| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | Assert.cs:111:29:111:32 | [b (line 84): true] null | | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | true | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | false | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:111:29:111:32 | [b (line 84): false] null | Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | | -| Assert.cs:111:29:111:32 | [b (line 84): true] null | Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | | -| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): false] ...; | | -| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | Assert.cs:114:9:114:26 | [b (line 84): true] ...; | | -| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | | -| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | | -| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | | -| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | | -| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): false] ...; | | -| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | Assert.cs:115:9:115:38 | [b (line 84): true] ...; | | -| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | | -| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | Assert.cs:114:24:114:25 | [b (line 84): false] "" | false | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | Assert.cs:114:17:114:20 | [b (line 84): true] null | true | -| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | | -| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:116:9:116:36 | [b (line 84): true] ...; | | -| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | | -| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | | -| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): false] null | | -| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | Assert.cs:115:28:115:31 | [b (line 84): true] null | | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | true | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:115:28:115:31 | [b (line 84): false] null | Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | | -| Assert.cs:115:28:115:31 | [b (line 84): true] null | Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | false | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | Assert.cs:118:9:118:26 | [b (line 84): true] ...; | | -| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | | -| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | Assert.cs:119:9:119:40 | [b (line 84): true] ...; | | -| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | Assert.cs:118:17:118:20 | [b (line 84): true] null | true | -| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | Assert.cs:120:9:120:36 | [b (line 84): true] ...; | | -| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | | -| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | Assert.cs:119:29:119:32 | [b (line 84): true] null | | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | true | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | false | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | true | -| Assert.cs:119:29:119:32 | [b (line 84): true] null | Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | false | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | true | -| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | Assert.cs:122:9:122:26 | [b (line 84): true] ...; | | -| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | | -| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | Assert.cs:123:9:123:38 | [b (line 84): true] ...; | | -| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | Assert.cs:122:17:122:20 | [b (line 84): true] null | true | -| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | Assert.cs:124:9:124:36 | [b (line 84): true] ...; | | -| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | | -| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | Assert.cs:123:28:123:31 | [b (line 84): true] null | | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | false | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | true | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | false | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | true | -| Assert.cs:123:28:123:31 | [b (line 84): true] null | Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | true | -| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | Assert.cs:126:9:126:26 | [b (line 84): true] ...; | | -| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | | -| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | | -| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | | -| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | Assert.cs:127:9:127:40 | [b (line 84): true] ...; | | -| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | Assert.cs:126:17:126:20 | [b (line 84): true] null | true | -| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | | -| Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception(AssertFailedException) | -| Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | Assert.cs:128:9:128:36 | ...; | | -| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | | -| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | Assert.cs:127:29:127:32 | [b (line 84): true] null | | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:24:127:38 | [true] ... \|\| ... | true | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | false | -| Assert.cs:127:24:127:38 | [false] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion success] call to method IsFalse | false | -| Assert.cs:127:24:127:38 | [true] ... \|\| ... | Assert.cs:127:9:127:39 | [assertion failure] call to method IsFalse | true | -| Assert.cs:127:29:127:32 | [b (line 84): true] null | Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | | -| Assert.cs:127:37:127:38 | [false] !... | Assert.cs:127:24:127:38 | [false] ... \|\| ... | false | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | Assert.cs:127:37:127:38 | [false] !... | true | +| Assert.cs:86:16:86:32 | String s = ... | Assert.cs:87:9:87:32 | ...; | | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:24:86:27 | null | true | +| Assert.cs:86:20:86:20 | access to parameter b | Assert.cs:86:31:86:32 | "" | false | +| Assert.cs:86:20:86:32 | ... ? ... : ... | Assert.cs:86:16:86:32 | String s = ... | | +| Assert.cs:86:24:86:27 | null | Assert.cs:86:20:86:32 | ... ? ... : ... | | +| Assert.cs:86:31:86:32 | "" | Assert.cs:86:20:86:32 | ... ? ... : ... | | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exit | +| Assert.cs:87:9:87:31 | call to method Assert | Assert.cs:88:9:88:36 | ...; | | +| Assert.cs:87:9:87:32 | ...; | Assert.cs:87:22:87:22 | access to local variable s | | +| Assert.cs:87:22:87:22 | access to local variable s | Assert.cs:87:27:87:30 | null | | +| Assert.cs:87:22:87:30 | ... != ... | Assert.cs:87:9:87:31 | call to method Assert | | +| Assert.cs:87:27:87:30 | null | Assert.cs:87:22:87:30 | ... != ... | | +| Assert.cs:88:9:88:35 | call to method WriteLine | Assert.cs:90:9:90:26 | ...; | | +| Assert.cs:88:9:88:36 | ...; | Assert.cs:88:27:88:27 | access to local variable s | | +| Assert.cs:88:27:88:27 | access to local variable s | Assert.cs:88:27:88:34 | access to property Length | | +| Assert.cs:88:27:88:34 | access to property Length | Assert.cs:88:9:88:35 | call to method WriteLine | | +| Assert.cs:90:9:90:25 | ... = ... | Assert.cs:91:9:91:25 | ...; | | +| Assert.cs:90:9:90:26 | ...; | Assert.cs:90:13:90:13 | access to parameter b | | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:17:90:20 | null | true | +| Assert.cs:90:13:90:13 | access to parameter b | Assert.cs:90:24:90:25 | "" | false | +| Assert.cs:90:13:90:25 | ... ? ... : ... | Assert.cs:90:9:90:25 | ... = ... | | +| Assert.cs:90:17:90:20 | null | Assert.cs:90:13:90:25 | ... ? ... : ... | | +| Assert.cs:90:24:90:25 | "" | Assert.cs:90:13:90:25 | ... ? ... : ... | | +| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:91:9:91:24 | call to method IsNull | Assert.cs:92:9:92:36 | ...; | | +| Assert.cs:91:9:91:25 | ...; | Assert.cs:91:23:91:23 | access to local variable s | | +| Assert.cs:91:23:91:23 | access to local variable s | Assert.cs:91:9:91:24 | call to method IsNull | | +| Assert.cs:92:9:92:35 | call to method WriteLine | Assert.cs:94:9:94:26 | ...; | | +| Assert.cs:92:9:92:36 | ...; | Assert.cs:92:27:92:27 | access to local variable s | | +| Assert.cs:92:27:92:27 | access to local variable s | Assert.cs:92:27:92:34 | access to property Length | | +| Assert.cs:92:27:92:34 | access to property Length | Assert.cs:92:9:92:35 | call to method WriteLine | | +| Assert.cs:94:9:94:25 | ... = ... | Assert.cs:95:9:95:28 | ...; | | +| Assert.cs:94:9:94:26 | ...; | Assert.cs:94:13:94:13 | access to parameter b | | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:17:94:20 | null | true | +| Assert.cs:94:13:94:13 | access to parameter b | Assert.cs:94:24:94:25 | "" | false | +| Assert.cs:94:13:94:25 | ... ? ... : ... | Assert.cs:94:9:94:25 | ... = ... | | +| Assert.cs:94:17:94:20 | null | Assert.cs:94:13:94:25 | ... ? ... : ... | | +| Assert.cs:94:24:94:25 | "" | Assert.cs:94:13:94:25 | ... ? ... : ... | | +| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:95:9:95:27 | call to method IsNotNull | Assert.cs:96:9:96:36 | ...; | | +| Assert.cs:95:9:95:28 | ...; | Assert.cs:95:26:95:26 | access to local variable s | | +| Assert.cs:95:26:95:26 | access to local variable s | Assert.cs:95:9:95:27 | call to method IsNotNull | | +| Assert.cs:96:9:96:35 | call to method WriteLine | Assert.cs:98:9:98:26 | ...; | | +| Assert.cs:96:9:96:36 | ...; | Assert.cs:96:27:96:27 | access to local variable s | | +| Assert.cs:96:27:96:27 | access to local variable s | Assert.cs:96:27:96:34 | access to property Length | | +| Assert.cs:96:27:96:34 | access to property Length | Assert.cs:96:9:96:35 | call to method WriteLine | | +| Assert.cs:98:9:98:25 | ... = ... | Assert.cs:99:9:99:33 | ...; | | +| Assert.cs:98:9:98:26 | ...; | Assert.cs:98:13:98:13 | access to parameter b | | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:17:98:20 | null | true | +| Assert.cs:98:13:98:13 | access to parameter b | Assert.cs:98:24:98:25 | "" | false | +| Assert.cs:98:13:98:25 | ... ? ... : ... | Assert.cs:98:9:98:25 | ... = ... | | +| Assert.cs:98:17:98:20 | null | Assert.cs:98:13:98:25 | ... ? ... : ... | | +| Assert.cs:98:24:98:25 | "" | Assert.cs:98:13:98:25 | ... ? ... : ... | | +| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:99:9:99:32 | call to method IsTrue | Assert.cs:100:9:100:36 | ...; | | +| Assert.cs:99:9:99:33 | ...; | Assert.cs:99:23:99:23 | access to local variable s | | +| Assert.cs:99:23:99:23 | access to local variable s | Assert.cs:99:28:99:31 | null | | +| Assert.cs:99:23:99:31 | ... == ... | Assert.cs:99:9:99:32 | call to method IsTrue | | +| Assert.cs:99:28:99:31 | null | Assert.cs:99:23:99:31 | ... == ... | | +| Assert.cs:100:9:100:35 | call to method WriteLine | Assert.cs:102:9:102:26 | ...; | | +| Assert.cs:100:9:100:36 | ...; | Assert.cs:100:27:100:27 | access to local variable s | | +| Assert.cs:100:27:100:27 | access to local variable s | Assert.cs:100:27:100:34 | access to property Length | | +| Assert.cs:100:27:100:34 | access to property Length | Assert.cs:100:9:100:35 | call to method WriteLine | | +| Assert.cs:102:9:102:25 | ... = ... | Assert.cs:103:9:103:33 | ...; | | +| Assert.cs:102:9:102:26 | ...; | Assert.cs:102:13:102:13 | access to parameter b | | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:17:102:20 | null | true | +| Assert.cs:102:13:102:13 | access to parameter b | Assert.cs:102:24:102:25 | "" | false | +| Assert.cs:102:13:102:25 | ... ? ... : ... | Assert.cs:102:9:102:25 | ... = ... | | +| Assert.cs:102:17:102:20 | null | Assert.cs:102:13:102:25 | ... ? ... : ... | | +| Assert.cs:102:24:102:25 | "" | Assert.cs:102:13:102:25 | ... ? ... : ... | | +| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:103:9:103:32 | call to method IsTrue | Assert.cs:104:9:104:36 | ...; | | +| Assert.cs:103:9:103:33 | ...; | Assert.cs:103:23:103:23 | access to local variable s | | +| Assert.cs:103:23:103:23 | access to local variable s | Assert.cs:103:28:103:31 | null | | +| Assert.cs:103:23:103:31 | ... != ... | Assert.cs:103:9:103:32 | call to method IsTrue | | +| Assert.cs:103:28:103:31 | null | Assert.cs:103:23:103:31 | ... != ... | | +| Assert.cs:104:9:104:35 | call to method WriteLine | Assert.cs:106:9:106:26 | ...; | | +| Assert.cs:104:9:104:36 | ...; | Assert.cs:104:27:104:27 | access to local variable s | | +| Assert.cs:104:27:104:27 | access to local variable s | Assert.cs:104:27:104:34 | access to property Length | | +| Assert.cs:104:27:104:34 | access to property Length | Assert.cs:104:9:104:35 | call to method WriteLine | | +| Assert.cs:106:9:106:25 | ... = ... | Assert.cs:107:9:107:34 | ...; | | +| Assert.cs:106:9:106:26 | ...; | Assert.cs:106:13:106:13 | access to parameter b | | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:17:106:20 | null | true | +| Assert.cs:106:13:106:13 | access to parameter b | Assert.cs:106:24:106:25 | "" | false | +| Assert.cs:106:13:106:25 | ... ? ... : ... | Assert.cs:106:9:106:25 | ... = ... | | +| Assert.cs:106:17:106:20 | null | Assert.cs:106:13:106:25 | ... ? ... : ... | | +| Assert.cs:106:24:106:25 | "" | Assert.cs:106:13:106:25 | ... ? ... : ... | | +| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:107:9:107:33 | call to method IsFalse | Assert.cs:108:9:108:36 | ...; | | +| Assert.cs:107:9:107:34 | ...; | Assert.cs:107:24:107:24 | access to local variable s | | +| Assert.cs:107:24:107:24 | access to local variable s | Assert.cs:107:29:107:32 | null | | +| Assert.cs:107:24:107:32 | ... != ... | Assert.cs:107:9:107:33 | call to method IsFalse | | +| Assert.cs:107:29:107:32 | null | Assert.cs:107:24:107:32 | ... != ... | | +| Assert.cs:108:9:108:35 | call to method WriteLine | Assert.cs:110:9:110:26 | ...; | | +| Assert.cs:108:9:108:36 | ...; | Assert.cs:108:27:108:27 | access to local variable s | | +| Assert.cs:108:27:108:27 | access to local variable s | Assert.cs:108:27:108:34 | access to property Length | | +| Assert.cs:108:27:108:34 | access to property Length | Assert.cs:108:9:108:35 | call to method WriteLine | | +| Assert.cs:110:9:110:25 | ... = ... | Assert.cs:111:9:111:34 | ...; | | +| Assert.cs:110:9:110:26 | ...; | Assert.cs:110:13:110:13 | access to parameter b | | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:17:110:20 | null | true | +| Assert.cs:110:13:110:13 | access to parameter b | Assert.cs:110:24:110:25 | "" | false | +| Assert.cs:110:13:110:25 | ... ? ... : ... | Assert.cs:110:9:110:25 | ... = ... | | +| Assert.cs:110:17:110:20 | null | Assert.cs:110:13:110:25 | ... ? ... : ... | | +| Assert.cs:110:24:110:25 | "" | Assert.cs:110:13:110:25 | ... ? ... : ... | | +| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:111:9:111:33 | call to method IsFalse | Assert.cs:112:9:112:36 | ...; | | +| Assert.cs:111:9:111:34 | ...; | Assert.cs:111:24:111:24 | access to local variable s | | +| Assert.cs:111:24:111:24 | access to local variable s | Assert.cs:111:29:111:32 | null | | +| Assert.cs:111:24:111:32 | ... == ... | Assert.cs:111:9:111:33 | call to method IsFalse | | +| Assert.cs:111:29:111:32 | null | Assert.cs:111:24:111:32 | ... == ... | | +| Assert.cs:112:9:112:35 | call to method WriteLine | Assert.cs:114:9:114:26 | ...; | | +| Assert.cs:112:9:112:36 | ...; | Assert.cs:112:27:112:27 | access to local variable s | | +| Assert.cs:112:27:112:27 | access to local variable s | Assert.cs:112:27:112:34 | access to property Length | | +| Assert.cs:112:27:112:34 | access to property Length | Assert.cs:112:9:112:35 | call to method WriteLine | | +| Assert.cs:114:9:114:25 | ... = ... | Assert.cs:115:9:115:38 | ...; | | +| Assert.cs:114:9:114:26 | ...; | Assert.cs:114:13:114:13 | access to parameter b | | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:17:114:20 | null | true | +| Assert.cs:114:13:114:13 | access to parameter b | Assert.cs:114:24:114:25 | "" | false | +| Assert.cs:114:13:114:25 | ... ? ... : ... | Assert.cs:114:9:114:25 | ... = ... | | +| Assert.cs:114:17:114:20 | null | Assert.cs:114:13:114:25 | ... ? ... : ... | | +| Assert.cs:114:24:114:25 | "" | Assert.cs:114:13:114:25 | ... ? ... : ... | | +| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:115:9:115:37 | call to method IsTrue | Assert.cs:116:9:116:36 | ...; | | +| Assert.cs:115:9:115:38 | ...; | Assert.cs:115:23:115:23 | access to local variable s | | +| Assert.cs:115:23:115:23 | access to local variable s | Assert.cs:115:28:115:31 | null | | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:23:115:36 | ... && ... | false | +| Assert.cs:115:23:115:31 | ... != ... | Assert.cs:115:36:115:36 | access to parameter b | true | +| Assert.cs:115:23:115:36 | ... && ... | Assert.cs:115:9:115:37 | call to method IsTrue | | +| Assert.cs:115:28:115:31 | null | Assert.cs:115:23:115:31 | ... != ... | | +| Assert.cs:115:36:115:36 | access to parameter b | Assert.cs:115:23:115:36 | ... && ... | | +| Assert.cs:116:9:116:35 | call to method WriteLine | Assert.cs:118:9:118:26 | ...; | | +| Assert.cs:116:9:116:36 | ...; | Assert.cs:116:27:116:27 | access to local variable s | | +| Assert.cs:116:27:116:27 | access to local variable s | Assert.cs:116:27:116:34 | access to property Length | | +| Assert.cs:116:27:116:34 | access to property Length | Assert.cs:116:9:116:35 | call to method WriteLine | | +| Assert.cs:118:9:118:25 | ... = ... | Assert.cs:119:9:119:40 | ...; | | +| Assert.cs:118:9:118:26 | ...; | Assert.cs:118:13:118:13 | access to parameter b | | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:17:118:20 | null | true | +| Assert.cs:118:13:118:13 | access to parameter b | Assert.cs:118:24:118:25 | "" | false | +| Assert.cs:118:13:118:25 | ... ? ... : ... | Assert.cs:118:9:118:25 | ... = ... | | +| Assert.cs:118:17:118:20 | null | Assert.cs:118:13:118:25 | ... ? ... : ... | | +| Assert.cs:118:24:118:25 | "" | Assert.cs:118:13:118:25 | ... ? ... : ... | | +| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:119:9:119:39 | call to method IsFalse | Assert.cs:120:9:120:36 | ...; | | +| Assert.cs:119:9:119:40 | ...; | Assert.cs:119:24:119:24 | access to local variable s | | +| Assert.cs:119:24:119:24 | access to local variable s | Assert.cs:119:29:119:32 | null | | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:24:119:38 | ... \|\| ... | true | +| Assert.cs:119:24:119:32 | ... == ... | Assert.cs:119:38:119:38 | access to parameter b | false | +| Assert.cs:119:24:119:38 | ... \|\| ... | Assert.cs:119:9:119:39 | call to method IsFalse | | +| Assert.cs:119:29:119:32 | null | Assert.cs:119:24:119:32 | ... == ... | | +| Assert.cs:119:37:119:38 | !... | Assert.cs:119:24:119:38 | ... \|\| ... | | +| Assert.cs:119:38:119:38 | access to parameter b | Assert.cs:119:37:119:38 | !... | | +| Assert.cs:120:9:120:35 | call to method WriteLine | Assert.cs:122:9:122:26 | ...; | | +| Assert.cs:120:9:120:36 | ...; | Assert.cs:120:27:120:27 | access to local variable s | | +| Assert.cs:120:27:120:27 | access to local variable s | Assert.cs:120:27:120:34 | access to property Length | | +| Assert.cs:120:27:120:34 | access to property Length | Assert.cs:120:9:120:35 | call to method WriteLine | | +| Assert.cs:122:9:122:25 | ... = ... | Assert.cs:123:9:123:38 | ...; | | +| Assert.cs:122:9:122:26 | ...; | Assert.cs:122:13:122:13 | access to parameter b | | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:17:122:20 | null | true | +| Assert.cs:122:13:122:13 | access to parameter b | Assert.cs:122:24:122:25 | "" | false | +| Assert.cs:122:13:122:25 | ... ? ... : ... | Assert.cs:122:9:122:25 | ... = ... | | +| Assert.cs:122:17:122:20 | null | Assert.cs:122:13:122:25 | ... ? ... : ... | | +| Assert.cs:122:24:122:25 | "" | Assert.cs:122:13:122:25 | ... ? ... : ... | | +| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:123:9:123:37 | call to method IsTrue | Assert.cs:124:9:124:36 | ...; | | +| Assert.cs:123:9:123:38 | ...; | Assert.cs:123:23:123:23 | access to local variable s | | +| Assert.cs:123:23:123:23 | access to local variable s | Assert.cs:123:28:123:31 | null | | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:23:123:36 | ... && ... | false | +| Assert.cs:123:23:123:31 | ... == ... | Assert.cs:123:36:123:36 | access to parameter b | true | +| Assert.cs:123:23:123:36 | ... && ... | Assert.cs:123:9:123:37 | call to method IsTrue | | +| Assert.cs:123:28:123:31 | null | Assert.cs:123:23:123:31 | ... == ... | | +| Assert.cs:123:36:123:36 | access to parameter b | Assert.cs:123:23:123:36 | ... && ... | | +| Assert.cs:124:9:124:35 | call to method WriteLine | Assert.cs:126:9:126:26 | ...; | | +| Assert.cs:124:9:124:36 | ...; | Assert.cs:124:27:124:27 | access to local variable s | | +| Assert.cs:124:27:124:27 | access to local variable s | Assert.cs:124:27:124:34 | access to property Length | | +| Assert.cs:124:27:124:34 | access to property Length | Assert.cs:124:9:124:35 | call to method WriteLine | | +| Assert.cs:126:9:126:25 | ... = ... | Assert.cs:127:9:127:40 | ...; | | +| Assert.cs:126:9:126:26 | ...; | Assert.cs:126:13:126:13 | access to parameter b | | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:17:126:20 | null | true | +| Assert.cs:126:13:126:13 | access to parameter b | Assert.cs:126:24:126:25 | "" | false | +| Assert.cs:126:13:126:25 | ... ? ... : ... | Assert.cs:126:9:126:25 | ... = ... | | +| Assert.cs:126:17:126:20 | null | Assert.cs:126:13:126:25 | ... ? ... : ... | | +| Assert.cs:126:24:126:25 | "" | Assert.cs:126:13:126:25 | ... ? ... : ... | | +| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:84:10:84:12 | exit M12 (abnormal) | exception | +| Assert.cs:127:9:127:39 | call to method IsFalse | Assert.cs:128:9:128:36 | ...; | | +| Assert.cs:127:9:127:40 | ...; | Assert.cs:127:24:127:24 | access to local variable s | | +| Assert.cs:127:24:127:24 | access to local variable s | Assert.cs:127:29:127:32 | null | | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:24:127:38 | ... \|\| ... | true | +| Assert.cs:127:24:127:32 | ... != ... | Assert.cs:127:38:127:38 | access to parameter b | false | +| Assert.cs:127:24:127:38 | ... \|\| ... | Assert.cs:127:9:127:39 | call to method IsFalse | | +| Assert.cs:127:29:127:32 | null | Assert.cs:127:24:127:32 | ... != ... | | +| Assert.cs:127:37:127:38 | !... | Assert.cs:127:24:127:38 | ... \|\| ... | | +| Assert.cs:127:38:127:38 | access to parameter b | Assert.cs:127:37:127:38 | !... | | | Assert.cs:128:9:128:35 | call to method WriteLine | Assert.cs:84:10:84:12 | exit M12 (normal) | | | Assert.cs:128:9:128:36 | ...; | Assert.cs:128:27:128:27 | access to local variable s | | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:34 | access to property Length | | @@ -938,19 +786,13 @@ | Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 | | | Assert.cs:138:10:138:12 | exit M13 (normal) | Assert.cs:138:10:138:12 | exit M13 | | | Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:36 | ...; | | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception(Exception) | -| Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception(Exception) | -| Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | Assert.cs:141:9:141:15 | return ...; | | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:138:10:138:12 | exit M13 (abnormal) | exception | +| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:141:9:141:15 | return ...; | | | Assert.cs:140:9:140:35 | this access | Assert.cs:140:25:140:26 | access to parameter b1 | | | Assert.cs:140:9:140:36 | ...; | Assert.cs:140:9:140:35 | this access | | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | false | -| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | access to parameter b2 | true | -| Assert.cs:140:29:140:30 | [assertion failure] access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | false, true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | true | -| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | false | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | | -| Assert.cs:140:33:140:34 | [assertion failure] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion failure] call to method AssertTrueFalse | | -| Assert.cs:140:33:140:34 | [assertion success] access to parameter b3 | Assert.cs:140:9:140:35 | [assertion success] call to method AssertTrueFalse | | +| Assert.cs:140:25:140:26 | access to parameter b1 | Assert.cs:140:29:140:30 | access to parameter b2 | | +| Assert.cs:140:29:140:30 | access to parameter b2 | Assert.cs:140:33:140:34 | access to parameter b3 | | +| Assert.cs:140:33:140:34 | access to parameter b3 | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | | Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | return | | Assignments.cs:1:7:1:17 | call to constructor Object | Assignments.cs:1:7:1:17 | {...} | | | Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | call to constructor Object | | @@ -1039,21 +881,16 @@ | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:27:21:27:26 | break; | true | | BreakInTry.cs:26:21:26:31 | ... == ... | BreakInTry.cs:30:13:33:13 | {...} | false | | BreakInTry.cs:26:28:26:31 | null | BreakInTry.cs:26:21:26:31 | ... == ... | | -| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:30:13:33:13 | [finally: break] {...} | break | -| BreakInTry.cs:30:13:33:13 | [finally: break] {...} | BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | | +| BreakInTry.cs:27:21:27:26 | break; | BreakInTry.cs:30:13:33:13 | {...} | break | | BreakInTry.cs:30:13:33:13 | {...} | BreakInTry.cs:31:17:32:21 | if (...) ... | | -| BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | | | BreakInTry.cs:31:17:32:21 | if (...) ... | BreakInTry.cs:31:21:31:24 | access to parameter args | | -| BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | BreakInTry.cs:31:29:31:32 | [finally: break] null | | | BreakInTry.cs:31:21:31:24 | access to parameter args | BreakInTry.cs:31:29:31:32 | null | | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | false | | BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:32:21:32:21 | ; | true | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:32:21:32:21 | [finally: break] ; | true | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:35:7:35:7 | ; | false | -| BreakInTry.cs:31:29:31:32 | [finally: break] null | BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | | +| BreakInTry.cs:31:21:31:32 | ... == ... | BreakInTry.cs:35:7:35:7 | ; | false | | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:21:31:32 | ... == ... | | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:35:7:35:7 | ; | break | +| BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:35:7:35:7 | ; | break | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:20:10:20:11 | exit M2 (normal) | | | BreakInTry.cs:38:10:38:11 | enter M3 | BreakInTry.cs:39:5:54:5 | {...} | | | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | BreakInTry.cs:38:10:38:11 | exit M3 | | @@ -1065,30 +902,20 @@ | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:43:17:43:23 | return ...; | true | | BreakInTry.cs:42:17:42:28 | ... == ... | BreakInTry.cs:46:9:52:9 | {...} | false | | BreakInTry.cs:42:25:42:28 | null | BreakInTry.cs:42:17:42:28 | ... == ... | | -| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:46:9:52:9 | [finally: return] {...} | return | -| BreakInTry.cs:46:9:52:9 | [finally: return] {...} | BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | | +| BreakInTry.cs:43:17:43:23 | return ...; | BreakInTry.cs:46:9:52:9 | {...} | return | | BreakInTry.cs:46:9:52:9 | {...} | BreakInTry.cs:47:33:47:36 | access to parameter args | | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | return | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | [finally: return] String arg | non-empty | +| BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | return | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:47:26:47:28 | String arg | non-empty | | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | BreakInTry.cs:53:7:53:7 | ; | empty | | BreakInTry.cs:47:26:47:28 | String arg | BreakInTry.cs:48:13:51:13 | {...} | | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:48:13:51:13 | [finally: return] {...} | | -| BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | | | BreakInTry.cs:47:33:47:36 | access to parameter args | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | | -| BreakInTry.cs:48:13:51:13 | [finally: return] {...} | BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | | | BreakInTry.cs:48:13:51:13 | {...} | BreakInTry.cs:49:17:50:26 | if (...) ... | | -| BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | | | BreakInTry.cs:49:17:50:26 | if (...) ... | BreakInTry.cs:49:21:49:23 | access to local variable arg | | -| BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | BreakInTry.cs:49:28:49:31 | [finally: return] null | | | BreakInTry.cs:49:21:49:23 | access to local variable arg | BreakInTry.cs:49:28:49:31 | null | | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:47:13:51:13 | foreach (... ... in ...) ... | false | | BreakInTry.cs:49:21:49:31 | ... == ... | BreakInTry.cs:50:21:50:26 | break; | true | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | false | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:50:21:50:26 | [finally: return] break; | true | -| BreakInTry.cs:49:28:49:31 | [finally: return] null | BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | | | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:49:21:49:31 | ... == ... | | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | return | +| BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | return | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:53:7:53:7 | ; | break | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:38:10:38:11 | exit M3 (normal) | | | BreakInTry.cs:56:10:56:11 | enter M4 | BreakInTry.cs:57:5:71:5 | {...} | | @@ -1101,31 +928,19 @@ | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:61:17:61:23 | return ...; | true | | BreakInTry.cs:60:17:60:28 | ... == ... | BreakInTry.cs:64:9:70:9 | {...} | false | | BreakInTry.cs:60:25:60:28 | null | BreakInTry.cs:60:17:60:28 | ... == ... | | -| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:64:9:70:9 | [finally: return] {...} | return | -| BreakInTry.cs:64:9:70:9 | [finally: return] {...} | BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | | +| BreakInTry.cs:61:17:61:23 | return ...; | BreakInTry.cs:64:9:70:9 | {...} | return | | BreakInTry.cs:64:9:70:9 | {...} | BreakInTry.cs:65:33:65:36 | access to parameter args | | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | return | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | [finally: return] String arg | non-empty | -| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | empty | +| BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | empty, return | | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | BreakInTry.cs:65:26:65:28 | String arg | non-empty | | BreakInTry.cs:65:26:65:28 | String arg | BreakInTry.cs:66:13:69:13 | {...} | | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:66:13:69:13 | [finally: return] {...} | | -| BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | | | BreakInTry.cs:65:33:65:36 | access to parameter args | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | | -| BreakInTry.cs:66:13:69:13 | [finally: return] {...} | BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | | | BreakInTry.cs:66:13:69:13 | {...} | BreakInTry.cs:67:17:68:26 | if (...) ... | | -| BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | | | BreakInTry.cs:67:17:68:26 | if (...) ... | BreakInTry.cs:67:21:67:23 | access to local variable arg | | -| BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | BreakInTry.cs:67:28:67:31 | [finally: return] null | | | BreakInTry.cs:67:21:67:23 | access to local variable arg | BreakInTry.cs:67:28:67:31 | null | | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:65:13:69:13 | foreach (... ... in ...) ... | false | | BreakInTry.cs:67:21:67:31 | ... == ... | BreakInTry.cs:68:21:68:26 | break; | true | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | false | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:68:21:68:26 | [finally: return] break; | true | -| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | | | BreakInTry.cs:67:28:67:31 | null | BreakInTry.cs:67:21:67:31 | ... == ... | | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | return | -| BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | break | +| BreakInTry.cs:68:21:68:26 | break; | BreakInTry.cs:56:10:56:11 | exit M4 (normal) | break, return | | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | CompileTimeOperators.cs:3:7:3:26 | {...} | | | CompileTimeOperators.cs:3:7:3:26 | enter CompileTimeOperators | CompileTimeOperators.cs:3:7:3:26 | call to constructor Object | | | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators (normal) | CompileTimeOperators.cs:3:7:3:26 | exit CompileTimeOperators | | @@ -1155,15 +970,21 @@ | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally | | | CompileTimeOperators.cs:26:7:26:22 | {...} | CompileTimeOperators.cs:26:7:26:22 | exit GotoInTryFinally (normal) | | | CompileTimeOperators.cs:28:10:28:10 | enter M | CompileTimeOperators.cs:29:5:41:5 | {...} | | +| CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | CompileTimeOperators.cs:28:10:28:10 | exit M | | | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | CompileTimeOperators.cs:28:10:28:10 | exit M | | | CompileTimeOperators.cs:29:5:41:5 | {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | CompileTimeOperators.cs:31:9:34:9 | {...} | | | CompileTimeOperators.cs:31:9:34:9 | {...} | CompileTimeOperators.cs:32:13:32:21 | goto ...; | | -| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | goto(End) | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | goto(End) | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | | +| CompileTimeOperators.cs:32:13:32:21 | goto ...; | CompileTimeOperators.cs:36:9:38:9 | {...} | goto | +| CompileTimeOperators.cs:36:9:38:9 | {...} | CompileTimeOperators.cs:37:13:37:41 | ...; | | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (abnormal) | exception | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:39:9:39:34 | ...; | | +| CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | goto | +| CompileTimeOperators.cs:37:13:37:41 | ...; | CompileTimeOperators.cs:37:31:37:39 | "Finally" | | +| CompileTimeOperators.cs:37:31:37:39 | "Finally" | CompileTimeOperators.cs:37:13:37:40 | call to method WriteLine | | +| CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | CompileTimeOperators.cs:40:9:40:11 | End: | | +| CompileTimeOperators.cs:39:9:39:34 | ...; | CompileTimeOperators.cs:39:27:39:32 | "Dead" | | +| CompileTimeOperators.cs:39:27:39:32 | "Dead" | CompileTimeOperators.cs:39:9:39:33 | call to method WriteLine | | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:40:14:40:38 | ...; | | | CompileTimeOperators.cs:40:14:40:37 | call to method WriteLine | CompileTimeOperators.cs:28:10:28:10 | exit M (normal) | | | CompileTimeOperators.cs:40:14:40:38 | ...; | CompileTimeOperators.cs:40:32:40:36 | "End" | | @@ -1271,17 +1092,16 @@ | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:5:9:6:16 | if (...) ... | | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:5:13:5:15 | access to parameter inc | | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | true | -| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | false | -| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | | -| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | | -| Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:6:13:6:16 | ...; | true | +| Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:7:9:8:16 | if (...) ... | false | +| Conditions.cs:6:13:6:13 | access to parameter x | Conditions.cs:6:13:6:15 | ...++ | | +| Conditions.cs:6:13:6:15 | ...++ | Conditions.cs:7:9:8:16 | if (...) ... | | +| Conditions.cs:6:13:6:16 | ...; | Conditions.cs:6:13:6:13 | access to parameter x | | +| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:14:7:16 | access to parameter inc | | | Conditions.cs:7:13:7:16 | [false] !... | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | false | | Conditions.cs:7:13:7:16 | [true] !... | Conditions.cs:8:13:8:16 | ...; | true | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | false | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | true | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [false] !... | true | +| Conditions.cs:7:14:7:16 | access to parameter inc | Conditions.cs:7:13:7:16 | [true] !... | false | | Conditions.cs:8:13:8:13 | access to parameter x | Conditions.cs:8:13:8:15 | ...-- | | | Conditions.cs:8:13:8:15 | ...-- | Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:13 | access to parameter x | | @@ -1292,27 +1112,21 @@ | Conditions.cs:13:13:13:17 | Int32 x = ... | Conditions.cs:14:9:15:16 | if (...) ... | | | Conditions.cs:13:17:13:17 | 0 | Conditions.cs:13:13:13:17 | Int32 x = ... | | | Conditions.cs:14:9:15:16 | if (...) ... | Conditions.cs:14:13:14:13 | access to parameter b | | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | true | -| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | false | -| Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | | -| Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | | -| Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | | -| Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | | -| Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | true | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | true | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | -| Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | | -| Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:15:13:15:16 | ...; | true | +| Conditions.cs:14:13:14:13 | access to parameter b | Conditions.cs:16:9:18:20 | if (...) ... | false | +| Conditions.cs:15:13:15:13 | access to local variable x | Conditions.cs:15:13:15:15 | ...++ | | +| Conditions.cs:15:13:15:15 | ...++ | Conditions.cs:16:9:18:20 | if (...) ... | | +| Conditions.cs:15:13:15:16 | ...; | Conditions.cs:15:13:15:13 | access to local variable x | | +| Conditions.cs:16:9:18:20 | if (...) ... | Conditions.cs:16:13:16:13 | access to local variable x | | +| Conditions.cs:16:13:16:13 | access to local variable x | Conditions.cs:16:17:16:17 | 0 | | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:17:13:18:20 | if (...) ... | true | +| Conditions.cs:16:13:16:17 | ... > ... | Conditions.cs:19:16:19:16 | access to local variable x | false | +| Conditions.cs:16:17:16:17 | 0 | Conditions.cs:16:13:16:17 | ... > ... | | +| Conditions.cs:17:13:18:20 | if (...) ... | Conditions.cs:17:18:17:18 | access to parameter b | | | Conditions.cs:17:17:17:18 | [false] !... | Conditions.cs:19:16:19:16 | access to local variable x | false | | Conditions.cs:17:17:17:18 | [true] !... | Conditions.cs:18:17:18:20 | ...; | true | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | false | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [false] !... | true | +| Conditions.cs:17:18:17:18 | access to parameter b | Conditions.cs:17:17:17:18 | [true] !... | false | | Conditions.cs:18:17:18:17 | access to local variable x | Conditions.cs:18:17:18:19 | ...-- | | | Conditions.cs:18:17:18:19 | ...-- | Conditions.cs:19:16:19:16 | access to local variable x | | | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:18:17:18:17 | access to local variable x | | @@ -1328,16 +1142,12 @@ | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:26:13:27:20 | if (...) ... | true | | Conditions.cs:25:13:25:14 | access to parameter b1 | Conditions.cs:28:9:29:16 | if (...) ... | false | | Conditions.cs:26:13:27:20 | if (...) ... | Conditions.cs:26:17:26:18 | access to parameter b2 | | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | true | -| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | false | -| Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | | -| Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | | -| Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | | +| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:27:17:27:20 | ...; | true | +| Conditions.cs:26:17:26:18 | access to parameter b2 | Conditions.cs:28:9:29:16 | if (...) ... | false | +| Conditions.cs:27:17:27:17 | access to local variable x | Conditions.cs:27:17:27:19 | ...++ | | +| Conditions.cs:27:17:27:19 | ...++ | Conditions.cs:28:9:29:16 | if (...) ... | | +| Conditions.cs:27:17:27:20 | ...; | Conditions.cs:27:17:27:17 | access to local variable x | | | Conditions.cs:28:9:29:16 | if (...) ... | Conditions.cs:28:13:28:14 | access to parameter b2 | | -| Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | Conditions.cs:30:16:30:16 | access to local variable x | false | -| Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | Conditions.cs:29:13:29:16 | ...; | true | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:29:13:29:16 | ...; | true | | Conditions.cs:28:13:28:14 | access to parameter b2 | Conditions.cs:30:16:30:16 | access to local variable x | false | | Conditions.cs:29:13:29:13 | access to local variable x | Conditions.cs:29:13:29:15 | ...++ | | @@ -1361,15 +1171,14 @@ | Conditions.cs:38:13:38:20 | ...; | Conditions.cs:38:18:38:19 | access to parameter b1 | | | Conditions.cs:38:18:38:19 | access to parameter b1 | Conditions.cs:38:13:38:19 | ... = ... | | | Conditions.cs:39:9:40:16 | if (...) ... | Conditions.cs:39:13:39:14 | access to local variable b2 | | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | true | -| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | false | -| Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | | -| Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | | -| Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | | -| Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | Conditions.cs:43:16:43:16 | access to local variable x | false | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | true | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:40:13:40:16 | ...; | true | +| Conditions.cs:39:13:39:14 | access to local variable b2 | Conditions.cs:41:9:42:16 | if (...) ... | false | +| Conditions.cs:40:13:40:13 | access to local variable x | Conditions.cs:40:13:40:15 | ...++ | | +| Conditions.cs:40:13:40:15 | ...++ | Conditions.cs:41:9:42:16 | if (...) ... | | +| Conditions.cs:40:13:40:16 | ...; | Conditions.cs:40:13:40:13 | access to local variable x | | +| Conditions.cs:41:9:42:16 | if (...) ... | Conditions.cs:41:13:41:14 | access to local variable b2 | | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:42:13:42:16 | ...; | true | +| Conditions.cs:41:13:41:14 | access to local variable b2 | Conditions.cs:43:16:43:16 | access to local variable x | false | | Conditions.cs:42:13:42:13 | access to local variable x | Conditions.cs:42:13:42:15 | ...++ | | | Conditions.cs:42:13:42:15 | ...++ | Conditions.cs:43:16:43:16 | access to local variable x | | | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:13 | access to local variable x | | @@ -1382,34 +1191,18 @@ | Conditions.cs:48:13:48:17 | Int32 y = ... | Conditions.cs:49:9:53:9 | while (...) ... | | | Conditions.cs:48:17:48:17 | 0 | Conditions.cs:48:13:48:17 | Int32 y = ... | | | Conditions.cs:49:9:53:9 | while (...) ... | Conditions.cs:49:16:49:16 | access to parameter x | | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | | -| Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | | | Conditions.cs:49:16:49:16 | access to parameter x | Conditions.cs:49:16:49:18 | ...-- | | | Conditions.cs:49:16:49:18 | ...-- | Conditions.cs:49:22:49:22 | 0 | | -| Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | | -| Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:50:9:53:9 | {...} | true | | Conditions.cs:49:16:49:22 | ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | true | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | true | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | Conditions.cs:54:16:54:16 | access to local variable y | false | | Conditions.cs:49:22:49:22 | 0 | Conditions.cs:49:16:49:22 | ... > ... | | -| Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | | -| Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | | | Conditions.cs:50:9:53:9 | {...} | Conditions.cs:51:13:52:20 | if (...) ... | | -| Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | | -| Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | | | Conditions.cs:51:13:52:20 | if (...) ... | Conditions.cs:51:17:51:17 | access to parameter b | | -| Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | false | -| Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | false | -| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | true | -| Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | | -| Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | | +| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:49:16:49:16 | access to parameter x | false | +| Conditions.cs:51:17:51:17 | access to parameter b | Conditions.cs:52:17:52:20 | ...; | true | +| Conditions.cs:52:17:52:17 | access to local variable y | Conditions.cs:52:17:52:19 | ...++ | | +| Conditions.cs:52:17:52:19 | ...++ | Conditions.cs:49:16:49:16 | access to parameter x | | +| Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:17 | access to local variable y | | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:46:9:46:10 | exit M4 (normal) | return | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:9:54:17 | return ...; | | | Conditions.cs:57:9:57:10 | enter M5 | Conditions.cs:58:5:68:5 | {...} | | @@ -1419,39 +1212,19 @@ | Conditions.cs:59:13:59:17 | Int32 y = ... | Conditions.cs:60:9:64:9 | while (...) ... | | | Conditions.cs:59:17:59:17 | 0 | Conditions.cs:59:13:59:17 | Int32 y = ... | | | Conditions.cs:60:9:64:9 | while (...) ... | Conditions.cs:60:16:60:16 | access to parameter x | | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | | -| Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | | | Conditions.cs:60:16:60:16 | access to parameter x | Conditions.cs:60:16:60:18 | ...-- | | | Conditions.cs:60:16:60:18 | ...-- | Conditions.cs:60:22:60:22 | 0 | | -| Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | | -| Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:61:9:64:9 | {...} | true | | Conditions.cs:60:16:60:22 | ... > ... | Conditions.cs:65:9:66:16 | if (...) ... | false | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | true | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | false | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | true | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | false | | Conditions.cs:60:22:60:22 | 0 | Conditions.cs:60:16:60:22 | ... > ... | | -| Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | | -| Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | | | Conditions.cs:61:9:64:9 | {...} | Conditions.cs:62:13:63:20 | if (...) ... | | -| Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | | -| Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | | | Conditions.cs:62:13:63:20 | if (...) ... | Conditions.cs:62:17:62:17 | access to parameter b | | -| Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | false | -| Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | false | -| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | true | -| Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | | -| Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | | +| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:60:16:60:16 | access to parameter x | false | +| Conditions.cs:62:17:62:17 | access to parameter b | Conditions.cs:63:17:63:20 | ...; | true | +| Conditions.cs:63:17:63:17 | access to local variable y | Conditions.cs:63:17:63:19 | ...++ | | +| Conditions.cs:63:17:63:19 | ...++ | Conditions.cs:60:16:60:16 | access to parameter x | | +| Conditions.cs:63:17:63:20 | ...; | Conditions.cs:63:17:63:17 | access to local variable y | | | Conditions.cs:65:9:66:16 | if (...) ... | Conditions.cs:65:13:65:13 | access to parameter b | | -| Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | Conditions.cs:67:16:67:16 | access to local variable y | false | -| Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | Conditions.cs:66:13:66:16 | ...; | true | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:66:13:66:16 | ...; | true | | Conditions.cs:65:13:65:13 | access to parameter b | Conditions.cs:67:16:67:16 | access to local variable y | false | | Conditions.cs:66:13:66:13 | access to local variable y | Conditions.cs:66:13:66:15 | ...++ | | @@ -1545,31 +1318,24 @@ | Conditions.cs:104:17:104:17 | access to parameter b | Conditions.cs:104:17:104:28 | call to method ToString | | | Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:104:13:104:28 | String x = ... | | | Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | true | -| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | false | -| Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | Conditions.cs:106:18:106:19 | [b (line 102): true] "" | | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | | -| Conditions.cs:106:18:106:19 | [b (line 102): true] "" | Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | | -| Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | | -| Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | | -| Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | | -| Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | | -| Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | true | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | true | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | -| Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | | -| Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | true | +| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | false | +| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" | | +| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... | | +| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:107:9:109:24 | if (...) ... | | +| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x | | +| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... | | +| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x | | +| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length | | +| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 | | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:108:13:109:24 | if (...) ... | true | +| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:110:16:110:16 | access to local variable x | false | +| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:13:107:24 | ... > ... | | +| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:18:108:18 | access to parameter b | | | Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:110:16:110:16 | access to local variable x | false | | Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:109:17:109:24 | ...; | true | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true | +| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false | | Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" | | | Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... | | | Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:110:16:110:16 | access to local variable x | | @@ -1603,78 +1369,51 @@ | Conditions.cs:118:29:118:43 | ... - ... | Conditions.cs:118:24:118:43 | ... == ... | | | Conditions.cs:118:43:118:43 | 1 | Conditions.cs:118:29:118:43 | ... - ... | | | Conditions.cs:119:13:120:23 | if (...) ... | Conditions.cs:119:18:119:21 | access to local variable last | | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | false | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | true | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | true | -| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | false | -| Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | Conditions.cs:120:21:120:22 | [last (line 118): false] "" | | -| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | | -| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | | -| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | false | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | Conditions.cs:122:17:122:25 | ...; | true | +| Conditions.cs:119:17:119:21 | [false] !... | Conditions.cs:121:13:122:25 | if (...) ... | false | +| Conditions.cs:119:17:119:21 | [true] !... | Conditions.cs:120:17:120:23 | ...; | true | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [false] !... | true | +| Conditions.cs:119:18:119:21 | access to local variable last | Conditions.cs:119:17:119:21 | [true] !... | false | +| Conditions.cs:120:17:120:22 | ... = ... | Conditions.cs:121:13:122:25 | if (...) ... | | +| Conditions.cs:120:17:120:23 | ...; | Conditions.cs:120:21:120:22 | "" | | +| Conditions.cs:120:21:120:22 | "" | Conditions.cs:120:17:120:22 | ... = ... | | +| Conditions.cs:121:13:122:25 | if (...) ... | Conditions.cs:121:17:121:20 | access to local variable last | | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:116:42:116:42 | access to local variable i | false | +| Conditions.cs:121:17:121:20 | access to local variable last | Conditions.cs:122:17:122:25 | ...; | true | | Conditions.cs:122:17:122:24 | ... = ... | Conditions.cs:116:42:116:42 | access to local variable i | | | Conditions.cs:122:17:122:25 | ...; | Conditions.cs:122:21:122:24 | null | | | Conditions.cs:122:21:122:24 | null | Conditions.cs:122:17:122:24 | ... = ... | | | Conditions.cs:129:10:129:12 | enter M10 | Conditions.cs:130:5:141:5 | {...} | | | Conditions.cs:130:5:141:5 | {...} | Conditions.cs:131:9:140:9 | while (...) ... | | | Conditions.cs:131:9:140:9 | while (...) ... | Conditions.cs:131:16:131:19 | true | | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | | Conditions.cs:131:16:131:19 | true | Conditions.cs:132:9:140:9 | {...} | true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | | | Conditions.cs:132:9:140:9 | {...} | Conditions.cs:133:13:139:13 | if (...) ... | | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | | | Conditions.cs:133:13:139:13 | if (...) ... | Conditions.cs:133:17:133:22 | this access | | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | false | -| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | true | +| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:131:16:131:19 | true | false | +| Conditions.cs:133:17:133:22 | access to field Field1 | Conditions.cs:134:13:139:13 | {...} | true | | Conditions.cs:133:17:133:22 | this access | Conditions.cs:133:17:133:22 | access to field Field1 | | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | | +| Conditions.cs:134:13:139:13 | {...} | Conditions.cs:135:17:138:17 | if (...) ... | | +| Conditions.cs:135:17:138:17 | if (...) ... | Conditions.cs:135:21:135:26 | this access | | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:131:16:131:19 | true | false | +| Conditions.cs:135:21:135:26 | access to field Field2 | Conditions.cs:136:17:138:17 | {...} | true | +| Conditions.cs:135:21:135:26 | this access | Conditions.cs:135:21:135:26 | access to field Field2 | | +| Conditions.cs:136:17:138:17 | {...} | Conditions.cs:137:21:137:38 | ...; | | +| Conditions.cs:137:21:137:26 | access to field Field1 | Conditions.cs:137:21:137:37 | call to method ToString | | +| Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:26 | access to field Field1 | | +| Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:131:16:131:19 | true | | +| Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:26 | this access | | | Conditions.cs:143:10:143:12 | enter M11 | Conditions.cs:144:5:150:5 | {...} | | | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 | | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:145:9:145:30 | ... ...; | | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:17:145:17 | access to parameter b | | -| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | | -| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | true | -| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | false | -| Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | | -| Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | | -| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | | -| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | Conditions.cs:149:13:149:49 | ...; | false | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:147:13:147:49 | ...; | true | +| Conditions.cs:145:13:145:29 | String s = ... | Conditions.cs:146:9:149:49 | if (...) ... | | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:21:145:23 | "a" | true | +| Conditions.cs:145:17:145:17 | access to parameter b | Conditions.cs:145:27:145:29 | "b" | false | +| Conditions.cs:145:17:145:29 | ... ? ... : ... | Conditions.cs:145:13:145:29 | String s = ... | | +| Conditions.cs:145:21:145:23 | "a" | Conditions.cs:145:17:145:29 | ... ? ... : ... | | +| Conditions.cs:145:27:145:29 | "b" | Conditions.cs:145:17:145:29 | ... ? ... : ... | | +| Conditions.cs:146:9:149:49 | if (...) ... | Conditions.cs:146:13:146:13 | access to parameter b | | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:147:13:147:49 | ...; | true | +| Conditions.cs:146:13:146:13 | access to parameter b | Conditions.cs:149:13:149:49 | ...; | false | | Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | exit M11 (normal) | | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | | @@ -1708,7 +1447,7 @@ | ExitMethods.cs:20:10:20:11 | enter M3 | ExitMethods.cs:21:5:24:5 | {...} | | | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | ExitMethods.cs:20:10:20:11 | exit M3 | | | ExitMethods.cs:21:5:24:5 | {...} | ExitMethods.cs:22:9:22:26 | ...; | | -| ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | exception(ArgumentException), exception(Exception) | +| ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | ExitMethods.cs:20:10:20:11 | exit M3 (abnormal) | exception | | ExitMethods.cs:22:9:22:26 | ...; | ExitMethods.cs:22:21:22:24 | true | | | ExitMethods.cs:22:21:22:24 | true | ExitMethods.cs:22:9:22:25 | call to method ErrorAlways | | | ExitMethods.cs:26:10:26:11 | enter M4 | ExitMethods.cs:27:5:30:5 | {...} | | @@ -1728,27 +1467,25 @@ | ExitMethods.cs:39:5:52:5 | {...} | ExitMethods.cs:40:9:51:9 | try {...} ... | | | ExitMethods.cs:40:9:51:9 | try {...} ... | ExitMethods.cs:41:9:43:9 | {...} | | | ExitMethods.cs:41:9:43:9 | {...} | ExitMethods.cs:42:13:42:31 | ...; | | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | exception(ArgumentException) | -| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | ExitMethods.cs:44:9:47:9 | catch (...) {...} | exception | | ExitMethods.cs:42:13:42:31 | ...; | ExitMethods.cs:42:25:42:29 | false | | | ExitMethods.cs:42:25:42:29 | false | ExitMethods.cs:42:13:42:30 | call to method ErrorAlways | | -| ExitMethods.cs:44:9:47:9 | [exception: ArgumentException] catch (...) {...} | ExitMethods.cs:45:9:47:9 | {...} | match | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:45:9:47:9 | {...} | match | -| ExitMethods.cs:44:9:47:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | no-match | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:45:9:47:9 | {...} | match | +| ExitMethods.cs:44:9:47:9 | catch (...) {...} | ExitMethods.cs:48:9:51:9 | catch (...) {...} | no-match | | ExitMethods.cs:45:9:47:9 | {...} | ExitMethods.cs:46:13:46:19 | return ...; | | | ExitMethods.cs:46:13:46:19 | return ...; | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | return | -| ExitMethods.cs:48:9:51:9 | [exception: Exception] catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | match | +| ExitMethods.cs:48:9:51:9 | catch (...) {...} | ExitMethods.cs:49:9:51:9 | {...} | match | | ExitMethods.cs:49:9:51:9 | {...} | ExitMethods.cs:50:13:50:19 | return ...; | | | ExitMethods.cs:50:13:50:19 | return ...; | ExitMethods.cs:38:10:38:11 | exit M6 (normal) | return | | ExitMethods.cs:54:10:54:11 | enter M7 | ExitMethods.cs:55:5:58:5 | {...} | | | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | ExitMethods.cs:54:10:54:11 | exit M7 | | | ExitMethods.cs:55:5:58:5 | {...} | ExitMethods.cs:56:9:56:23 | ...; | | -| ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | exception(Exception) | +| ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | ExitMethods.cs:54:10:54:11 | exit M7 (abnormal) | exception | | ExitMethods.cs:56:9:56:23 | ...; | ExitMethods.cs:56:9:56:22 | call to method ErrorAlways2 | | | ExitMethods.cs:60:10:60:11 | enter M8 | ExitMethods.cs:61:5:64:5 | {...} | | | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | ExitMethods.cs:60:10:60:11 | exit M8 | | | ExitMethods.cs:61:5:64:5 | {...} | ExitMethods.cs:62:9:62:23 | ...; | | -| ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | exception(Exception) | +| ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | exit M8 (abnormal) | exception | | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | | | ExitMethods.cs:66:17:66:26 | enter ErrorMaybe | ExitMethods.cs:67:5:70:5 | {...} | | | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe | | @@ -1757,7 +1494,7 @@ | ExitMethods.cs:68:9:69:34 | if (...) ... | ExitMethods.cs:68:13:68:13 | access to parameter b | | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (normal) | false | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:69:19:69:33 | object creation of type Exception | true | -| ExitMethods.cs:69:13:69:34 | throw ...; | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | exception(Exception) | +| ExitMethods.cs:69:13:69:34 | throw ...; | ExitMethods.cs:66:17:66:26 | exit ErrorMaybe (abnormal) | exception | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:13:69:34 | throw ...; | | | ExitMethods.cs:72:17:72:27 | enter ErrorAlways | ExitMethods.cs:73:5:78:5 | {...} | | | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | ExitMethods.cs:72:17:72:27 | exit ErrorAlways | | @@ -1765,19 +1502,19 @@ | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:74:13:74:13 | access to parameter b | | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:75:19:75:33 | object creation of type Exception | true | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:77:41:77:43 | "b" | false | -| ExitMethods.cs:75:13:75:34 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception(Exception) | +| ExitMethods.cs:75:13:75:34 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception | | ExitMethods.cs:75:19:75:33 | object creation of type Exception | ExitMethods.cs:75:13:75:34 | throw ...; | | -| ExitMethods.cs:77:13:77:45 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:77:13:77:45 | throw ...; | ExitMethods.cs:72:17:72:27 | exit ErrorAlways (abnormal) | exception | | ExitMethods.cs:77:19:77:44 | object creation of type ArgumentException | ExitMethods.cs:77:13:77:45 | throw ...; | | | ExitMethods.cs:77:41:77:43 | "b" | ExitMethods.cs:77:19:77:44 | object creation of type ArgumentException | | | ExitMethods.cs:80:17:80:28 | enter ErrorAlways2 | ExitMethods.cs:81:5:83:5 | {...} | | | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 | | | ExitMethods.cs:81:5:83:5 | {...} | ExitMethods.cs:82:15:82:29 | object creation of type Exception | | -| ExitMethods.cs:82:9:82:30 | throw ...; | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | exception(Exception) | +| ExitMethods.cs:82:9:82:30 | throw ...; | ExitMethods.cs:80:17:80:28 | exit ErrorAlways2 (abnormal) | exception | | ExitMethods.cs:82:15:82:29 | object creation of type Exception | ExitMethods.cs:82:9:82:30 | throw ...; | | | ExitMethods.cs:85:17:85:28 | enter ErrorAlways3 | ExitMethods.cs:85:41:85:55 | object creation of type Exception | | | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 | | -| ExitMethods.cs:85:35:85:55 | throw ... | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | exception(Exception) | +| ExitMethods.cs:85:35:85:55 | throw ... | ExitMethods.cs:85:17:85:28 | exit ErrorAlways3 (abnormal) | exception | | ExitMethods.cs:85:41:85:55 | object creation of type Exception | ExitMethods.cs:85:35:85:55 | throw ... | | | ExitMethods.cs:87:10:87:13 | enter Exit | ExitMethods.cs:88:5:90:5 | {...} | | | ExitMethods.cs:87:10:87:13 | exit Exit (abnormal) | ExitMethods.cs:87:10:87:13 | exit Exit | | @@ -1813,7 +1550,7 @@ | ExitMethods.cs:112:29:112:29 | (...) ... | ExitMethods.cs:112:33:112:37 | access to parameter input | | | ExitMethods.cs:112:29:112:37 | ... / ... | ExitMethods.cs:112:16:112:76 | ... ? ... : ... | | | ExitMethods.cs:112:33:112:37 | access to parameter input | ExitMethods.cs:112:29:112:37 | ... / ... | | -| ExitMethods.cs:112:41:112:76 | throw ... | ExitMethods.cs:110:13:110:21 | exit ThrowExpr (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:112:41:112:76 | throw ... | ExitMethods.cs:110:13:110:21 | exit ThrowExpr (abnormal) | exception | | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | ExitMethods.cs:112:41:112:76 | throw ... | | | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | | | ExitMethods.cs:115:16:115:34 | enter ExtensionMethodCall | ExitMethods.cs:116:5:118:5 | {...} | | @@ -1830,40 +1567,39 @@ | ExitMethods.cs:120:17:120:32 | enter FailingAssertion | ExitMethods.cs:121:5:124:5 | {...} | | | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | ExitMethods.cs:120:17:120:32 | exit FailingAssertion | | | ExitMethods.cs:121:5:124:5 | {...} | ExitMethods.cs:122:9:122:29 | ...; | | -| ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:122:9:122:28 | call to method IsTrue | ExitMethods.cs:120:17:120:32 | exit FailingAssertion (abnormal) | exception | | ExitMethods.cs:122:9:122:29 | ...; | ExitMethods.cs:122:23:122:27 | false | | -| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | [assertion failure] call to method IsTrue | false | +| ExitMethods.cs:122:23:122:27 | false | ExitMethods.cs:122:9:122:28 | call to method IsTrue | | | ExitMethods.cs:126:17:126:33 | enter FailingAssertion2 | ExitMethods.cs:127:5:130:5 | {...} | | | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 | | | ExitMethods.cs:127:5:130:5 | {...} | ExitMethods.cs:128:9:128:27 | ...; | | -| ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | exit FailingAssertion2 (abnormal) | exception | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:26 | this access | | | ExitMethods.cs:132:10:132:20 | enter AssertFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse | | | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | ExitMethods.cs:132:10:132:20 | exit AssertFalse | | -| ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | exception(AssertFailedException) | -| ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion failure] call to method IsFalse | true | -| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | [assertion success] call to method IsFalse | false | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (abnormal) | exception | +| ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | exit AssertFalse (normal) | | +| ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | call to method IsFalse | | | ExitMethods.cs:134:17:134:33 | enter FailingAssertion3 | ExitMethods.cs:135:5:138:5 | {...} | | | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 | | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:136:9:136:26 | ...; | | -| ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | exception(AssertFailedException) | +| ExitMethods.cs:136:9:136:25 | call to method AssertFalse | ExitMethods.cs:134:17:134:33 | exit FailingAssertion3 (abnormal) | exception | | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:21:136:24 | true | | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | this access | | -| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | [assertion failure] call to method AssertFalse | true | +| ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | | | ExitMethods.cs:140:17:140:42 | enter ExceptionDispatchInfoThrow | ExitMethods.cs:141:5:147:5 | {...} | | | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow | | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:142:9:145:53 | if (...) ... | | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:142:13:142:13 | access to parameter b | | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:143:13:143:43 | ...; | true | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:145:13:145:53 | ...; | false | -| ExitMethods.cs:143:13:143:42 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception(ArgumentException) | +| ExitMethods.cs:143:13:143:42 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception | | ExitMethods.cs:143:13:143:43 | ...; | ExitMethods.cs:143:41:143:41 | access to parameter e | | | ExitMethods.cs:143:41:143:41 | access to parameter e | ExitMethods.cs:143:13:143:42 | call to method Throw | | | ExitMethods.cs:145:13:145:44 | call to method Capture | ExitMethods.cs:145:13:145:52 | call to method Throw | | -| ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception(Exception) | +| ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:140:17:140:42 | exit ExceptionDispatchInfoThrow (abnormal) | exception | | ExitMethods.cs:145:13:145:53 | ...; | ExitMethods.cs:145:43:145:43 | access to parameter e | | | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:13:145:44 | call to method Capture | | | Extensions.cs:5:23:5:29 | enter ToInt32 | Extensions.cs:6:5:8:5 | {...} | | @@ -1912,18 +1648,14 @@ | Finally.cs:8:5:17:5 | {...} | Finally.cs:9:9:16:9 | try {...} ... | | | Finally.cs:9:9:16:9 | try {...} ... | Finally.cs:10:9:12:9 | {...} | | | Finally.cs:10:9:12:9 | {...} | Finally.cs:11:13:11:38 | ...; | | -| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | {...} | | +| Finally.cs:11:13:11:37 | call to method WriteLine | Finally.cs:14:9:16:9 | {...} | , exception | | Finally.cs:11:13:11:38 | ...; | Finally.cs:11:31:11:36 | "Try1" | | | Finally.cs:11:31:11:36 | "Try1" | Finally.cs:11:13:11:37 | call to method WriteLine | | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | | | Finally.cs:14:9:16:9 | {...} | Finally.cs:15:13:15:41 | ...; | | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | exception(Exception) | +| Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (abnormal) | exception | | Finally.cs:15:13:15:40 | call to method WriteLine | Finally.cs:7:10:7:11 | exit M1 (normal) | | | Finally.cs:15:13:15:41 | ...; | Finally.cs:15:31:15:39 | "Finally" | | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | | | Finally.cs:15:31:15:39 | "Finally" | Finally.cs:15:13:15:40 | call to method WriteLine | | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:20:5:52:5 | {...} | | | Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 | | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 | | @@ -1931,47 +1663,40 @@ | Finally.cs:21:9:51:9 | try {...} ... | Finally.cs:22:9:25:9 | {...} | | | Finally.cs:22:9:25:9 | {...} | Finally.cs:23:13:23:38 | ...; | | | Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:24:13:24:19 | return ...; | | -| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:23:13:23:37 | call to method WriteLine | Finally.cs:26:9:29:9 | catch (...) {...} | exception | | Finally.cs:23:13:23:38 | ...; | Finally.cs:23:31:23:36 | "Try2" | | | Finally.cs:23:31:23:36 | "Try2" | Finally.cs:23:13:23:37 | call to method WriteLine | | -| Finally.cs:24:13:24:19 | return ...; | Finally.cs:49:9:51:9 | [finally: return] {...} | return | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | match | -| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | no-match | -| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | | -| Finally.cs:26:48:26:51 | [exception: Exception] true | Finally.cs:27:9:29:9 | {...} | true | +| Finally.cs:24:13:24:19 | return ...; | Finally.cs:49:9:51:9 | {...} | return | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:26:38:26:39 | IOException ex | match | +| Finally.cs:26:9:29:9 | catch (...) {...} | Finally.cs:30:9:40:9 | catch (...) {...} | no-match | +| Finally.cs:26:38:26:39 | IOException ex | Finally.cs:26:48:26:51 | true | | +| Finally.cs:26:48:26:51 | true | Finally.cs:27:9:29:9 | {...} | true | | Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | | -| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | exception(IOException) | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | match | -| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | no-match | -| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:31:9:40:9 | {...} | | +| Finally.cs:28:13:28:18 | throw ...; | Finally.cs:49:9:51:9 | {...} | exception | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:30:41:30:42 | ArgumentException ex | match | +| Finally.cs:30:9:40:9 | catch (...) {...} | Finally.cs:41:9:43:9 | catch (...) {...} | no-match | +| Finally.cs:30:41:30:42 | ArgumentException ex | Finally.cs:31:9:40:9 | {...} | | | Finally.cs:31:9:40:9 | {...} | Finally.cs:32:13:39:13 | try {...} ... | | | Finally.cs:32:13:39:13 | try {...} ... | Finally.cs:33:13:35:13 | {...} | | | Finally.cs:33:13:35:13 | {...} | Finally.cs:34:17:34:32 | if (...) ... | | | Finally.cs:34:17:34:32 | if (...) ... | Finally.cs:34:21:34:24 | true | | | Finally.cs:34:21:34:24 | true | Finally.cs:34:27:34:32 | throw ...; | true | -| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | exception(ArgumentException) | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | | -| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:42:9:43:9 | {...} | match | +| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:37:13:39:13 | {...} | exception | +| Finally.cs:37:13:39:13 | {...} | Finally.cs:38:37:38:42 | "Boo!" | | +| Finally.cs:38:17:38:44 | throw ...; | Finally.cs:49:9:51:9 | {...} | exception | +| Finally.cs:38:23:38:43 | object creation of type Exception | Finally.cs:38:17:38:44 | throw ...; | | +| Finally.cs:38:37:38:42 | "Boo!" | Finally.cs:38:23:38:43 | object creation of type Exception | | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:42:9:43:9 | {...} | match | +| Finally.cs:41:9:43:9 | catch (...) {...} | Finally.cs:44:9:47:9 | catch {...} | no-match | | Finally.cs:42:9:43:9 | {...} | Finally.cs:49:9:51:9 | {...} | | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | | -| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:50:13:50:41 | [finally: return] ...; | | +| Finally.cs:44:9:47:9 | catch {...} | Finally.cs:45:9:47:9 | {...} | | +| Finally.cs:45:9:47:9 | {...} | Finally.cs:46:13:46:19 | return ...; | | +| Finally.cs:46:13:46:19 | return ...; | Finally.cs:49:9:51:9 | {...} | return | | Finally.cs:49:9:51:9 | {...} | Finally.cs:50:13:50:41 | ...; | | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception(Exception) | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception(IOException) | -| Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | return | -| Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | | +| Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (abnormal) | exception | +| Finally.cs:50:13:50:40 | call to method WriteLine | Finally.cs:19:10:19:11 | exit M2 (normal) | , return | | Finally.cs:50:13:50:41 | ...; | Finally.cs:50:31:50:39 | "Finally" | | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | | -| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:50:31:50:39 | [finally: return] "Finally" | | | Finally.cs:50:31:50:39 | "Finally" | Finally.cs:50:13:50:40 | call to method WriteLine | | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | | -| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:55:5:72:5 | {...} | | | Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 | | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 | | @@ -1979,40 +1704,30 @@ | Finally.cs:56:9:71:9 | try {...} ... | Finally.cs:57:9:60:9 | {...} | | | Finally.cs:57:9:60:9 | {...} | Finally.cs:58:13:58:38 | ...; | | | Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:59:13:59:19 | return ...; | | -| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:58:13:58:37 | call to method WriteLine | Finally.cs:61:9:64:9 | catch (...) {...} | exception | | Finally.cs:58:13:58:38 | ...; | Finally.cs:58:31:58:36 | "Try3" | | | Finally.cs:58:31:58:36 | "Try3" | Finally.cs:58:13:58:37 | call to method WriteLine | | -| Finally.cs:59:13:59:19 | return ...; | Finally.cs:69:9:71:9 | [finally: return] {...} | return | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | match | -| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | no-match | -| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | | -| Finally.cs:61:48:61:51 | [exception: Exception] true | Finally.cs:62:9:64:9 | {...} | true | +| Finally.cs:59:13:59:19 | return ...; | Finally.cs:69:9:71:9 | {...} | return | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:61:38:61:39 | IOException ex | match | +| Finally.cs:61:9:64:9 | catch (...) {...} | Finally.cs:65:9:67:9 | catch (...) {...} | no-match | +| Finally.cs:61:38:61:39 | IOException ex | Finally.cs:61:48:61:51 | true | | +| Finally.cs:61:48:61:51 | true | Finally.cs:62:9:64:9 | {...} | true | | Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | | -| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | exception(IOException) | -| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | match | -| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | | -| Finally.cs:65:35:65:35 | [exception: Exception] access to local variable e | Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | | -| Finally.cs:65:35:65:43 | [exception: Exception] access to property Message | Finally.cs:65:48:65:51 | [exception: Exception] null | | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:66:9:67:9 | {...} | true | -| Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:65:48:65:51 | [exception: Exception] null | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | | +| Finally.cs:63:13:63:18 | throw ...; | Finally.cs:69:9:71:9 | {...} | exception | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:65:26:65:26 | Exception e | match | +| Finally.cs:65:9:67:9 | catch (...) {...} | Finally.cs:69:9:71:9 | {...} | exception | +| Finally.cs:65:26:65:26 | Exception e | Finally.cs:65:35:65:35 | access to local variable e | | +| Finally.cs:65:35:65:35 | access to local variable e | Finally.cs:65:35:65:43 | access to property Message | | +| Finally.cs:65:35:65:43 | access to property Message | Finally.cs:65:48:65:51 | null | | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:66:9:67:9 | {...} | true | +| Finally.cs:65:35:65:51 | ... != ... | Finally.cs:69:9:71:9 | {...} | exception | +| Finally.cs:65:48:65:51 | null | Finally.cs:65:35:65:51 | ... != ... | | | Finally.cs:66:9:67:9 | {...} | Finally.cs:69:9:71:9 | {...} | | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | | -| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:70:13:70:41 | [finally: return] ...; | | | Finally.cs:69:9:71:9 | {...} | Finally.cs:70:13:70:41 | ...; | | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception(Exception) | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception(IOException) | -| Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | return | -| Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | | +| Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (abnormal) | exception | +| Finally.cs:70:13:70:40 | call to method WriteLine | Finally.cs:54:10:54:11 | exit M3 (normal) | , return | | Finally.cs:70:13:70:41 | ...; | Finally.cs:70:31:70:39 | "Finally" | | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | | -| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:70:31:70:39 | [finally: return] "Finally" | | | Finally.cs:70:31:70:39 | "Finally" | Finally.cs:70:13:70:40 | call to method WriteLine | | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | | -| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:75:5:101:5 | {...} | | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 | | | Finally.cs:74:10:74:11 | exit M4 (normal) | Finally.cs:74:10:74:11 | exit M4 | | @@ -2033,95 +1748,36 @@ | Finally.cs:81:21:81:26 | ... == ... | Finally.cs:82:21:82:27 | return ...; | true | | Finally.cs:81:21:81:26 | ... == ... | Finally.cs:83:17:84:29 | if (...) ... | false | | Finally.cs:81:26:81:26 | 0 | Finally.cs:81:21:81:26 | ... == ... | | -| Finally.cs:82:21:82:27 | return ...; | Finally.cs:89:13:99:13 | [finally: return] {...} | return | +| Finally.cs:82:21:82:27 | return ...; | Finally.cs:89:13:99:13 | {...} | return | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:83:21:83:21 | access to local variable i | | | Finally.cs:83:21:83:21 | access to local variable i | Finally.cs:83:26:83:26 | 1 | | | Finally.cs:83:21:83:26 | ... == ... | Finally.cs:84:21:84:29 | continue; | true | | Finally.cs:83:21:83:26 | ... == ... | Finally.cs:85:17:86:26 | if (...) ... | false | | Finally.cs:83:26:83:26 | 1 | Finally.cs:83:21:83:26 | ... == ... | | -| Finally.cs:84:21:84:29 | continue; | Finally.cs:89:13:99:13 | [finally: continue] {...} | continue | +| Finally.cs:84:21:84:29 | continue; | Finally.cs:89:13:99:13 | {...} | continue | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:85:21:85:21 | access to local variable i | | | Finally.cs:85:21:85:21 | access to local variable i | Finally.cs:85:26:85:26 | 2 | | | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:86:21:86:26 | break; | true | | Finally.cs:85:21:85:26 | ... == ... | Finally.cs:89:13:99:13 | {...} | false | | Finally.cs:85:26:85:26 | 2 | Finally.cs:85:21:85:26 | ... == ... | | -| Finally.cs:86:21:86:26 | break; | Finally.cs:89:13:99:13 | [finally: break] {...} | break | -| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:90:17:98:17 | [finally: break] try {...} ... | | -| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | | -| Finally.cs:89:13:99:13 | [finally: return] {...} | Finally.cs:90:17:98:17 | [finally: return] try {...} ... | | +| Finally.cs:86:21:86:26 | break; | Finally.cs:89:13:99:13 | {...} | break | | Finally.cs:89:13:99:13 | {...} | Finally.cs:90:17:98:17 | try {...} ... | | -| Finally.cs:90:17:98:17 | [finally: break] try {...} ... | Finally.cs:91:17:94:17 | [finally: break] {...} | | -| Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | Finally.cs:91:17:94:17 | [finally: continue] {...} | | -| Finally.cs:90:17:98:17 | [finally: return] try {...} ... | Finally.cs:91:17:94:17 | [finally: return] {...} | | | Finally.cs:90:17:98:17 | try {...} ... | Finally.cs:91:17:94:17 | {...} | | -| Finally.cs:91:17:94:17 | [finally: break] {...} | Finally.cs:92:21:93:46 | [finally: break] if (...) ... | | -| Finally.cs:91:17:94:17 | [finally: continue] {...} | Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | | -| Finally.cs:91:17:94:17 | [finally: return] {...} | Finally.cs:92:21:93:46 | [finally: return] if (...) ... | | | Finally.cs:91:17:94:17 | {...} | Finally.cs:92:21:93:46 | if (...) ... | | -| Finally.cs:92:21:93:46 | [finally: break] if (...) ... | Finally.cs:92:25:92:25 | [finally: break] access to local variable i | | -| Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | | -| Finally.cs:92:21:93:46 | [finally: return] if (...) ... | Finally.cs:92:25:92:25 | [finally: return] access to local variable i | | | Finally.cs:92:21:93:46 | if (...) ... | Finally.cs:92:25:92:25 | access to local variable i | | -| Finally.cs:92:25:92:25 | [finally: break] access to local variable i | Finally.cs:92:30:92:30 | [finally: break] 3 | | -| Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | Finally.cs:92:30:92:30 | [finally: continue] 3 | | -| Finally.cs:92:25:92:25 | [finally: return] access to local variable i | Finally.cs:92:30:92:30 | [finally: return] 3 | | | Finally.cs:92:25:92:25 | access to local variable i | Finally.cs:92:30:92:30 | 3 | | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:93:31:93:45 | object creation of type Exception | true | | Finally.cs:92:25:92:30 | ... == ... | Finally.cs:96:17:98:17 | {...} | false | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:96:17:98:17 | [finally: return] {...} | false | | Finally.cs:92:30:92:30 | 3 | Finally.cs:92:25:92:30 | ... == ... | | -| Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:92:25:92:30 | [finally: break] ... == ... | | -| Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:92:25:92:30 | [finally: continue] ... == ... | | -| Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:92:25:92:30 | [finally: return] ... == ... | | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:25:93:46 | throw ...; | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: break] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:25:93:46 | [finally: return] throw ...; | | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:93:25:93:46 | throw ...; | Finally.cs:96:17:98:17 | {...} | exception | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:25:93:46 | throw ...; | | -| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:24 | [finally: break] ...; | | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:24 | [finally: continue] ...; | | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:24 | [finally: return] ...; | | +| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:96:17:98:17 | {...} | exception | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:24 | ...; | | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | | -| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:97:21:97:23 | [finally: break] ...-- | | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | | -| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:97:21:97:23 | [finally: continue] ...-- | | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | | -| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:97:21:97:23 | [finally: return] ...-- | | | Finally.cs:97:21:97:21 | access to local variable i | Finally.cs:97:21:97:23 | ...-- | | -| Finally.cs:97:21:97:23 | ...-- | Finally.cs:77:16:77:16 | access to local variable i | | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | -| Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:74:10:74:11 | exit M4 (normal) | break | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | -| Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:77:16:77:16 | access to local variable i | continue | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception(Exception) | -| Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:74:10:74:11 | exit M4 (normal) | return | +| Finally.cs:97:21:97:23 | ...-- | Finally.cs:74:10:74:11 | exit M4 (abnormal) | exception | +| Finally.cs:97:21:97:23 | ...-- | Finally.cs:74:10:74:11 | exit M4 (normal) | break, return | +| Finally.cs:97:21:97:23 | ...-- | Finally.cs:77:16:77:16 | access to local variable i | , continue | | Finally.cs:97:21:97:24 | ...; | Finally.cs:97:21:97:21 | access to local variable i | | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | | -| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:104:5:119:5 | {...} | | | Finally.cs:103:10:103:11 | exit M5 (abnormal) | Finally.cs:103:10:103:11 | exit M5 | | | Finally.cs:103:10:103:11 | exit M5 (normal) | Finally.cs:103:10:103:11 | exit M5 | | @@ -2130,148 +1786,52 @@ | Finally.cs:106:9:111:9 | {...} | Finally.cs:107:13:108:23 | if (...) ... | | | Finally.cs:107:13:108:23 | if (...) ... | Finally.cs:107:17:107:21 | this access | | | Finally.cs:107:17:107:21 | access to field Field | Finally.cs:107:17:107:28 | access to property Length | | -| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:107:17:107:21 | access to field Field | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:107:17:107:21 | this access | Finally.cs:107:17:107:21 | access to field Field | | | Finally.cs:107:17:107:28 | access to property Length | Finally.cs:107:33:107:33 | 0 | | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:107:17:107:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:107:17:107:33 | ... == ... | | -| Finally.cs:108:17:108:23 | return ...; | Finally.cs:113:9:118:9 | [finally: return] {...} | return | +| Finally.cs:108:17:108:23 | return ...; | Finally.cs:113:9:118:9 | {...} | return | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | this access | | | Finally.cs:109:17:109:21 | access to field Field | Finally.cs:109:17:109:28 | access to property Length | | -| Finally.cs:109:17:109:21 | access to field Field | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:109:17:109:21 | access to field Field | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:109:17:109:21 | this access | Finally.cs:109:17:109:21 | access to field Field | | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:33:109:33 | 1 | | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | exception(NullReferenceException) | +| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | | -| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | exception(OutOfMemoryException) | +| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:17:110:49 | throw ...; | | -| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | | -| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | | +| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:113:9:118:9 | {...} | exception | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:13:115:41 | if (...) ... | | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | | -| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:114:19:114:23 | [finally: return] this access | | | Finally.cs:114:13:115:41 | if (...) ... | Finally.cs:114:19:114:23 | this access | | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | | -| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:114:19:114:30 | [finally: return] access to property Length | | -| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:114:19:114:23 | [finally: return] access to field Field | | | Finally.cs:114:19:114:23 | access to field Field | Finally.cs:114:19:114:30 | access to property Length | | | Finally.cs:114:19:114:23 | this access | Finally.cs:114:19:114:23 | access to field Field | | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | | -| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:114:35:114:35 | [finally: return] 0 | | | Finally.cs:114:19:114:30 | access to property Length | Finally.cs:114:35:114:35 | 0 | | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:114:35:114:35 | 0 | Finally.cs:114:19:114:35 | ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | | -| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:114:19:114:35 | [finally: return] ... == ... | | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | | -| Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | | | Finally.cs:115:17:115:40 | call to method WriteLine | Finally.cs:116:13:117:37 | if (...) ... | | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:35:115:39 | this access | | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:35:115:39 | [finally: return] this access | | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | | -| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | | -| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:115:35:115:39 | [finally: return] access to field Field | | | Finally.cs:115:35:115:39 | access to field Field | Finally.cs:115:17:115:40 | call to method WriteLine | | | Finally.cs:115:35:115:39 | this access | Finally.cs:115:35:115:39 | access to field Field | | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:21 | [finally: return] this access | | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:21 | this access | | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | | -| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:116:17:116:28 | [finally: return] access to property Length | | -| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:116:17:116:21 | [finally: return] access to field Field | | | Finally.cs:116:17:116:21 | access to field Field | Finally.cs:116:17:116:28 | access to property Length | | | Finally.cs:116:17:116:21 | this access | Finally.cs:116:17:116:21 | access to field Field | | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | | -| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:116:32:116:32 | [finally: return] 0 | | | Finally.cs:116:17:116:28 | access to property Length | Finally.cs:116:32:116:32 | 0 | | -| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false | +| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception | +| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false, return | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(Exception) | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(NullReferenceException) | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(OutOfMemoryException) | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | return | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:32:116:32 | 0 | Finally.cs:116:17:116:32 | ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | | -| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:116:17:116:32 | [finally: return] ... > ... | | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(Exception) | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(NullReferenceException) | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception(OutOfMemoryException) | -| Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (normal) | return | -| Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (normal) | | +| Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (abnormal) | exception | +| Finally.cs:117:17:117:36 | call to method WriteLine | Finally.cs:103:10:103:11 | exit M5 (normal) | , return | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:35:117:35 | 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:35:117:35 | [finally: return] 1 | | | Finally.cs:117:35:117:35 | 1 | Finally.cs:117:17:117:36 | call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | | -| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:122:5:131:5 | {...} | | | Finally.cs:121:10:121:11 | exit M6 (normal) | Finally.cs:121:10:121:11 | exit M6 | | | Finally.cs:122:5:131:5 | {...} | Finally.cs:123:9:130:9 | try {...} ... | | @@ -2288,18 +1848,13 @@ | Finally.cs:134:5:145:5 | {...} | Finally.cs:135:9:143:9 | try {...} ... | | | Finally.cs:135:9:143:9 | try {...} ... | Finally.cs:136:9:138:9 | {...} | | | Finally.cs:136:9:138:9 | {...} | Finally.cs:137:13:137:37 | ...; | | -| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | {...} | | +| Finally.cs:137:13:137:36 | call to method WriteLine | Finally.cs:140:9:143:9 | {...} | , exception | | Finally.cs:137:13:137:37 | ...; | Finally.cs:137:31:137:35 | "Try" | | | Finally.cs:137:31:137:35 | "Try" | Finally.cs:137:13:137:36 | call to method WriteLine | | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:41:141:42 | "" | | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception(ArgumentException) | -| Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception(ArgumentException) | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | | +| Finally.cs:141:13:141:44 | throw ...; | Finally.cs:133:10:133:11 | exit M7 (abnormal) | exception | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:13:141:44 | throw ...; | | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:148:5:170:5 | {...} | | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 | | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 | | @@ -2311,129 +1866,45 @@ | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:151:25:151:28 | null | Finally.cs:151:17:151:28 | ... == ... | | -| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | exception(ArgumentNullException) | +| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:155:9:169:9 | {...} | exception | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:17:152:50 | throw ...; | | -| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | | +| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:155:9:169:9 | {...} | exception | | Finally.cs:155:9:169:9 | {...} | Finally.cs:156:13:168:13 | try {...} ... | | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | | | Finally.cs:156:13:168:13 | try {...} ... | Finally.cs:157:13:160:13 | {...} | | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | | | Finally.cs:157:13:160:13 | {...} | Finally.cs:158:17:159:45 | if (...) ... | | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | | | Finally.cs:158:17:159:45 | if (...) ... | Finally.cs:158:21:158:24 | access to parameter args | | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | | | Finally.cs:158:21:158:24 | access to parameter args | Finally.cs:158:21:158:31 | access to property Length | | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | | Finally.cs:158:21:158:31 | access to property Length | Finally.cs:158:36:158:36 | 1 | | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | exception(NullReferenceException) | +| Finally.cs:158:21:158:31 | access to property Length | Finally.cs:161:13:164:13 | catch (...) {...} | exception | +| Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:21:159:45 | throw ...; | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | exception(Exception) | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:159:21:159:45 | throw ...; | Finally.cs:161:13:164:13 | catch (...) {...} | exception | | Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:159:21:159:45 | throw ...; | | -| Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | exception(Exception) | +| Finally.cs:159:27:159:44 | object creation of type Exception | Finally.cs:161:13:164:13 | catch (...) {...} | exception | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | | -| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | match | -| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | match | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | match | -| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | | -| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | | -| Finally.cs:161:39:161:39 | [exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | | -| Finally.cs:161:39:161:39 | [exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | | -| Finally.cs:161:39:161:47 | [exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [exception: Exception] "1" | | -| Finally.cs:161:39:161:47 | [exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true | -| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true | -| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false | -| Finally.cs:161:52:161:54 | [exception: Exception] "1" | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | | -| Finally.cs:161:52:161:54 | [exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:161:30:161:30 | Exception e | match | +| Finally.cs:161:13:164:13 | catch (...) {...} | Finally.cs:165:13:168:13 | catch {...} | no-match | +| Finally.cs:161:30:161:30 | Exception e | Finally.cs:161:39:161:39 | access to local variable e | | +| Finally.cs:161:39:161:39 | access to local variable e | Finally.cs:161:39:161:47 | access to property Message | | +| Finally.cs:161:39:161:47 | access to property Message | Finally.cs:161:52:161:54 | "1" | | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:162:13:164:13 | {...} | true | +| Finally.cs:161:39:161:54 | ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | +| Finally.cs:161:52:161:54 | "1" | Finally.cs:161:39:161:54 | ... == ... | | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:43 | ...; | | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | +| Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | | Finally.cs:163:17:163:42 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (normal) | | | Finally.cs:163:17:163:43 | ...; | Finally.cs:163:35:163:38 | access to parameter args | | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | | | Finally.cs:163:35:163:38 | access to parameter args | Finally.cs:163:40:163:40 | 0 | | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | | | Finally.cs:163:35:163:41 | access to array element | Finally.cs:163:17:163:42 | call to method WriteLine | | | Finally.cs:163:40:163:40 | 0 | Finally.cs:163:35:163:41 | access to array element | | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:166:13:168:13 | {...} | | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | | | Finally.cs:166:13:168:13 | {...} | Finally.cs:167:17:167:38 | ...; | | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(ArgumentNullException) | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception(Exception) | +| Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (abnormal) | exception | | Finally.cs:167:17:167:37 | call to method WriteLine | Finally.cs:147:10:147:11 | exit M8 (normal) | | | Finally.cs:167:17:167:38 | ...; | Finally.cs:167:35:167:36 | "" | | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | | | Finally.cs:167:35:167:36 | "" | Finally.cs:167:17:167:37 | call to method WriteLine | | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | | | Finally.cs:172:11:172:20 | call to constructor Exception | Finally.cs:172:11:172:20 | {...} | | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | call to constructor Exception | | | Finally.cs:172:11:172:20 | exit ExceptionA (normal) | Finally.cs:172:11:172:20 | exit ExceptionA | | @@ -2453,66 +1924,32 @@ | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:179:9:181:9 | {...} | | | Finally.cs:179:9:181:9 | {...} | Finally.cs:180:13:180:43 | if (...) ... | | | Finally.cs:180:13:180:43 | if (...) ... | Finally.cs:180:17:180:18 | access to parameter b1 | | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | -| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | exception(ExceptionA) | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | exception(Exception) | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | | -| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | | -| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | | -| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionA) | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(ExceptionB) | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | exception(Exception) | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(Exception) | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | match | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | | -| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | | -| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionC) | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception(ExceptionC) | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | object creation of type ExceptionA | true | +| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | {...} | false | +| Finally.cs:180:21:180:43 | throw ...; | Finally.cs:183:9:192:9 | {...} | exception | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:180:21:180:43 | throw ...; | | +| Finally.cs:180:27:180:42 | object creation of type ExceptionA | Finally.cs:183:9:192:9 | {...} | exception | +| Finally.cs:183:9:192:9 | {...} | Finally.cs:184:13:191:13 | try {...} ... | | +| Finally.cs:184:13:191:13 | try {...} ... | Finally.cs:185:13:187:13 | {...} | | +| Finally.cs:185:13:187:13 | {...} | Finally.cs:186:17:186:47 | if (...) ... | | +| Finally.cs:186:17:186:47 | if (...) ... | Finally.cs:186:21:186:22 | access to parameter b2 | | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | +| Finally.cs:186:21:186:22 | access to parameter b2 | Finally.cs:186:31:186:46 | object creation of type ExceptionB | true | +| Finally.cs:186:25:186:47 | throw ...; | Finally.cs:188:13:191:13 | catch (...) {...} | exception | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:186:25:186:47 | throw ...; | | +| Finally.cs:186:31:186:46 | object creation of type ExceptionB | Finally.cs:188:13:191:13 | catch (...) {...} | exception | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:188:13:191:13 | catch (...) {...} | Finally.cs:188:38:188:39 | access to parameter b2 | match | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:188:38:188:39 | access to parameter b2 | Finally.cs:189:13:191:13 | {...} | true | +| Finally.cs:189:13:191:13 | {...} | Finally.cs:190:17:190:47 | if (...) ... | | +| Finally.cs:190:17:190:47 | if (...) ... | Finally.cs:190:21:190:22 | access to parameter b1 | | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | +| Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:190:31:190:46 | object creation of type ExceptionC | true | +| Finally.cs:190:25:190:47 | throw ...; | Finally.cs:176:10:176:11 | exit M9 (abnormal) | exception | +| Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:25:190:47 | throw ...; | | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:196:5:214:5 | {...} | | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 | | | Finally.cs:195:10:195:12 | exit M10 (normal) | Finally.cs:195:10:195:12 | exit M10 | | @@ -2522,102 +1959,30 @@ | Finally.cs:199:13:199:43 | if (...) ... | Finally.cs:199:17:199:18 | access to parameter b1 | | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false | -| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | +| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:202:9:212:9 | {...} | exception | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:21:199:43 | throw ...; | | -| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | | +| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:202:9:212:9 | {...} | exception | | Finally.cs:202:9:212:9 | {...} | Finally.cs:203:13:210:13 | try {...} ... | | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | | | Finally.cs:203:13:210:13 | try {...} ... | Finally.cs:204:13:206:13 | {...} | | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | | | Finally.cs:204:13:206:13 | {...} | Finally.cs:205:17:205:47 | if (...) ... | | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | | | Finally.cs:205:17:205:47 | if (...) ... | Finally.cs:205:21:205:22 | access to parameter b2 | | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | exception(ExceptionB) | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:208:13:210:13 | {...} | exception | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:25:205:47 | throw ...; | | -| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | | +| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:208:13:210:13 | {...} | exception | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:17:209:47 | if (...) ... | | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | | | Finally.cs:209:17:209:47 | if (...) ... | Finally.cs:209:21:209:22 | access to parameter b3 | | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionB) | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false | +| Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionC) | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | | +| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | | | Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | | +| Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception | | Finally.cs:211:13:211:28 | ... = ... | Finally.cs:213:9:213:25 | ...; | | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(Exception) | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception(ExceptionA) | | Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:16 | this access | | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | | | Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | | | Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | | | Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (normal) | | | Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | | @@ -2627,7 +1992,7 @@ | Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | | | Finally.cs:218:9:229:9 | try {...} ... | Finally.cs:219:9:221:9 | {...} | | | Finally.cs:219:9:221:9 | {...} | Finally.cs:220:13:220:37 | ...; | | -| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:222:9:225:9 | catch {...} | exception(Exception) | +| Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:222:9:225:9 | catch {...} | exception | | Finally.cs:220:13:220:36 | call to method WriteLine | Finally.cs:227:9:229:9 | {...} | | | Finally.cs:220:13:220:37 | ...; | Finally.cs:220:31:220:35 | "Try" | | | Finally.cs:220:31:220:35 | "Try" | Finally.cs:220:13:220:36 | call to method WriteLine | | @@ -2654,88 +2019,31 @@ | Finally.cs:239:17:240:43 | if (...) ... | Finally.cs:239:21:239:22 | access to parameter b1 | | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false | -| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | +| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:243:13:253:13 | {...} | exception | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:21:240:43 | throw ...; | | -| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | | +| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:243:13:253:13 | {...} | exception | | Finally.cs:243:13:253:13 | {...} | Finally.cs:244:17:252:17 | try {...} ... | | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | | | Finally.cs:244:17:252:17 | try {...} ... | Finally.cs:245:17:248:17 | {...} | | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | | | Finally.cs:245:17:248:17 | {...} | Finally.cs:246:21:247:47 | if (...) ... | | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | | | Finally.cs:246:21:247:47 | if (...) ... | Finally.cs:246:25:246:26 | access to parameter b2 | | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | exception(Exception) | +| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:250:17:252:17 | {...} | exception | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:25:247:47 | throw ...; | | -| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | exception(Exception) | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | | +| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:250:17:252:17 | {...} | exception | | Finally.cs:250:17:252:17 | {...} | Finally.cs:251:21:251:55 | ...; | | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | exception(ExceptionA) | | Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:254:13:254:45 | ...; | | +| Finally.cs:251:21:251:54 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | exception | | Finally.cs:251:21:251:55 | ...; | Finally.cs:251:39:251:53 | "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | | | Finally.cs:251:39:251:53 | "Inner finally" | Finally.cs:251:21:251:54 | call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | | -| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | | +| Finally.cs:254:13:254:44 | call to method WriteLine | Finally.cs:257:9:259:9 | {...} | , exception | | Finally.cs:254:13:254:45 | ...; | Finally.cs:254:31:254:43 | "Mid finally" | | | Finally.cs:254:31:254:43 | "Mid finally" | Finally.cs:254:13:254:44 | call to method WriteLine | | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | | | Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:47 | ...; | | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception(Exception) | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception(ExceptionA) | +| Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (abnormal) | exception | | Finally.cs:258:13:258:46 | call to method WriteLine | Finally.cs:260:9:260:34 | ...; | | | Finally.cs:258:13:258:47 | ...; | Finally.cs:258:31:258:45 | "Outer finally" | | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | | | Finally.cs:258:31:258:45 | "Outer finally" | Finally.cs:258:13:258:46 | call to method WriteLine | | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | | | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:233:10:233:12 | exit M12 (normal) | | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:27:260:32 | "Done" | | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | | @@ -2745,28 +2053,19 @@ | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:266:9:268:9 | {...} | | | Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:35 | ...; | | -| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | exception(Exception) | -| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} | | +| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:270:9:273:9 | {...} | , exception | | Finally.cs:267:13:267:35 | ...; | Finally.cs:267:31:267:33 | "1" | | | Finally.cs:267:31:267:33 | "1" | Finally.cs:267:13:267:34 | call to method WriteLine | | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | | | Finally.cs:270:9:273:9 | {...} | Finally.cs:271:13:271:35 | ...; | | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | | | Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:272:13:272:19 | ...; | | | Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | | | Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | | | Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | | | Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | | +| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception | | Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception(Exception) | | Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | | | Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | | | Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | call to constructor Object | | | Foreach.cs:4:7:4:13 | exit Foreach (normal) | Foreach.cs:4:7:4:13 | exit Foreach | | @@ -3056,11 +2355,10 @@ | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:11:29:11:32 | access to parameter args | false | | LoopUnrolling.cs:9:28:9:28 | 0 | LoopUnrolling.cs:9:13:9:28 | ... == ... | | | LoopUnrolling.cs:10:13:10:19 | return ...; | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | return | -| LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | non-empty | | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | empty | | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:11:22:11:24 | String arg | non-empty | | LoopUnrolling.cs:11:22:11:24 | String arg | LoopUnrolling.cs:12:13:12:35 | ...; | | -| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | [unroll (line 11)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:11:29:11:32 | access to parameter args | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:12:13:12:35 | ...; | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | | | LoopUnrolling.cs:12:31:12:33 | access to local variable arg | LoopUnrolling.cs:12:13:12:34 | call to method WriteLine | | @@ -3075,11 +2373,10 @@ | LoopUnrolling.cs:17:33:17:35 | "a" | LoopUnrolling.cs:17:38:17:40 | "b" | | | LoopUnrolling.cs:17:38:17:40 | "b" | LoopUnrolling.cs:17:43:17:45 | "c" | | | LoopUnrolling.cs:17:43:17:45 | "c" | LoopUnrolling.cs:17:31:17:47 | { ..., ... } | | -| LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | non-empty | | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:15:10:15:11 | exit M2 (normal) | empty | | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:18:22:18:22 | String x | non-empty | | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:19:13:19:33 | ...; | | -| LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:18:9:19:33 | [unroll (line 18)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:18:27:18:28 | access to local variable xs | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | LoopUnrolling.cs:18:9:19:33 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:19:31:19:31 | access to local variable x | | | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | | @@ -3090,11 +2387,10 @@ | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:22:24:24 | Char arg | non-empty | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:34:25:37 | access to parameter args | | | LoopUnrolling.cs:24:29:24:32 | access to parameter args | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | -| LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | non-empty | | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | empty | | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:25:26:25:29 | Char arg0 | non-empty | | LoopUnrolling.cs:25:26:25:29 | Char arg0 | LoopUnrolling.cs:26:17:26:40 | ...; | | -| LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:25:13:26:40 | [unroll (line 25)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:25:34:25:37 | access to parameter args | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | LoopUnrolling.cs:25:13:26:40 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:26:17:26:40 | ...; | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | | | LoopUnrolling.cs:26:35:26:38 | access to local variable arg0 | LoopUnrolling.cs:26:17:26:39 | call to method WriteLine | | @@ -3105,8 +2401,13 @@ | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | LoopUnrolling.cs:32:27:32:28 | access to local variable xs | | | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | LoopUnrolling.cs:31:13:31:30 | String[] xs = ... | | | LoopUnrolling.cs:31:29:31:29 | 0 | LoopUnrolling.cs:31:18:31:30 | array creation of type String[] | | -| LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | empty | -| LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:32:9:33:33 | [skip (line 32)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:29:10:29:11 | exit M4 (normal) | empty | +| LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | LoopUnrolling.cs:32:22:32:22 | String x | non-empty | +| LoopUnrolling.cs:32:22:32:22 | String x | LoopUnrolling.cs:33:13:33:33 | ...; | | +| LoopUnrolling.cs:32:27:32:28 | access to local variable xs | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | LoopUnrolling.cs:32:9:33:33 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:33:13:33:33 | ...; | LoopUnrolling.cs:33:31:33:31 | access to local variable x | | +| LoopUnrolling.cs:33:31:33:31 | access to local variable x | LoopUnrolling.cs:33:13:33:32 | call to method WriteLine | | | LoopUnrolling.cs:36:10:36:11 | enter M5 | LoopUnrolling.cs:37:5:43:5 | {...} | | | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | LoopUnrolling.cs:36:10:36:11 | exit M5 | | | LoopUnrolling.cs:37:5:43:5 | {...} | LoopUnrolling.cs:38:9:38:48 | ... ...; | | @@ -3126,22 +2427,21 @@ | LoopUnrolling.cs:39:33:39:35 | "0" | LoopUnrolling.cs:39:38:39:40 | "1" | | | LoopUnrolling.cs:39:38:39:40 | "1" | LoopUnrolling.cs:39:43:39:45 | "2" | | | LoopUnrolling.cs:39:43:39:45 | "2" | LoopUnrolling.cs:39:31:39:47 | { ..., ... } | | -| LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | non-empty | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:36:10:36:11 | exit M5 (normal) | empty | | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:22:40:22 | String x | non-empty | | LoopUnrolling.cs:40:22:40:22 | String x | LoopUnrolling.cs:41:31:41:32 | access to local variable ys | | -| LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:40:9:42:41 | [unroll (line 40)] foreach (... ... in ...) ... | | -| LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | non-empty | +| LoopUnrolling.cs:40:27:40:28 | access to local variable xs | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:40:9:42:41 | foreach (... ... in ...) ... | empty | | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | LoopUnrolling.cs:41:26:41:26 | String y | non-empty | | LoopUnrolling.cs:41:26:41:26 | String y | LoopUnrolling.cs:42:17:42:41 | ...; | | -| LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:41:13:42:41 | [unroll (line 41)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:41:31:41:32 | access to local variable ys | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | LoopUnrolling.cs:41:13:42:41 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:42:17:42:41 | ...; | LoopUnrolling.cs:42:35:42:35 | access to local variable x | | | LoopUnrolling.cs:42:35:42:35 | access to local variable x | LoopUnrolling.cs:42:39:42:39 | access to local variable y | | | LoopUnrolling.cs:42:35:42:39 | ... + ... | LoopUnrolling.cs:42:17:42:40 | call to method WriteLine | | | LoopUnrolling.cs:42:39:42:39 | access to local variable y | LoopUnrolling.cs:42:35:42:39 | ... + ... | | | LoopUnrolling.cs:45:10:45:11 | enter M6 | LoopUnrolling.cs:46:5:53:5 | {...} | | +| LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | LoopUnrolling.cs:45:10:45:11 | exit M6 | | | LoopUnrolling.cs:46:5:53:5 | {...} | LoopUnrolling.cs:47:9:47:48 | ... ...; | | | LoopUnrolling.cs:47:9:47:48 | ... ...; | LoopUnrolling.cs:47:18:47:47 | 3 | | | LoopUnrolling.cs:47:13:47:47 | String[] xs = ... | LoopUnrolling.cs:48:27:48:28 | access to local variable xs | | @@ -3151,15 +2451,16 @@ | LoopUnrolling.cs:47:33:47:35 | "a" | LoopUnrolling.cs:47:38:47:40 | "b" | | | LoopUnrolling.cs:47:38:47:40 | "b" | LoopUnrolling.cs:47:43:47:45 | "c" | | | LoopUnrolling.cs:47:43:47:45 | "c" | LoopUnrolling.cs:47:31:47:47 | { ..., ... } | | -| LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | LoopUnrolling.cs:48:22:48:22 | String x | non-empty | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:45:10:45:11 | exit M6 (normal) | empty | +| LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:48:22:48:22 | String x | non-empty | | LoopUnrolling.cs:48:22:48:22 | String x | LoopUnrolling.cs:49:9:52:9 | {...} | | -| LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:48:9:52:9 | [unroll (line 48)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:48:27:48:28 | access to local variable xs | LoopUnrolling.cs:48:9:52:9 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:49:9:52:9 | {...} | LoopUnrolling.cs:50:9:50:13 | Label: | | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:50:16:50:36 | ...; | | | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | LoopUnrolling.cs:51:13:51:23 | goto ...; | | | LoopUnrolling.cs:50:16:50:36 | ...; | LoopUnrolling.cs:50:34:50:34 | access to local variable x | | | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | | -| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | goto(Label) | +| LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | goto | | LoopUnrolling.cs:55:10:55:11 | enter M7 | LoopUnrolling.cs:56:5:65:5 | {...} | | | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | LoopUnrolling.cs:55:10:55:11 | exit M7 | | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:57:9:57:48 | ... ...; | | @@ -3171,35 +2472,23 @@ | LoopUnrolling.cs:57:33:57:35 | "a" | LoopUnrolling.cs:57:38:57:40 | "b" | | | LoopUnrolling.cs:57:38:57:40 | "b" | LoopUnrolling.cs:57:43:57:45 | "c" | | | LoopUnrolling.cs:57:43:57:45 | "c" | LoopUnrolling.cs:57:31:57:47 | { ..., ... } | | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | empty | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | non-empty | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | empty | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | non-empty | -| LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | non-empty | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | exit M7 (normal) | empty | +| LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:58:22:58:22 | String x | non-empty | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:59:9:64:9 | {...} | | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | | -| LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:58:9:64:9 | [unroll (line 58)] foreach (... ... in ...) ... | | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | | +| LoopUnrolling.cs:58:27:58:28 | access to local variable xs | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:59:9:64:9 | {...} | LoopUnrolling.cs:60:13:61:37 | if (...) ... | | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | | | LoopUnrolling.cs:60:13:61:37 | if (...) ... | LoopUnrolling.cs:60:17:60:17 | access to parameter b | | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | false | -| LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | | -| LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | false | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | true | -| LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | | -| LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:61:17:61:37 | ...; | true | +| LoopUnrolling.cs:60:17:60:17 | access to parameter b | LoopUnrolling.cs:62:13:63:37 | if (...) ... | false | +| LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | LoopUnrolling.cs:62:13:63:37 | if (...) ... | | +| LoopUnrolling.cs:61:17:61:37 | ...; | LoopUnrolling.cs:61:35:61:35 | access to local variable x | | +| LoopUnrolling.cs:61:35:61:35 | access to local variable x | LoopUnrolling.cs:61:17:61:36 | call to method WriteLine | | +| LoopUnrolling.cs:62:13:63:37 | if (...) ... | LoopUnrolling.cs:62:17:62:17 | access to parameter b | | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | false | +| LoopUnrolling.cs:62:17:62:17 | access to parameter b | LoopUnrolling.cs:63:17:63:37 | ...; | true | +| LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | LoopUnrolling.cs:58:9:64:9 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:35:63:35 | access to local variable x | | +| LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | | | LoopUnrolling.cs:67:10:67:11 | enter M8 | LoopUnrolling.cs:68:5:74:5 | {...} | | | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | LoopUnrolling.cs:67:10:67:11 | exit M8 | | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:69:9:70:19 | if (...) ... | | @@ -3213,8 +2502,13 @@ | LoopUnrolling.cs:71:9:71:12 | access to parameter args | LoopUnrolling.cs:71:9:71:20 | call to method Clear | | | LoopUnrolling.cs:71:9:71:20 | call to method Clear | LoopUnrolling.cs:72:29:72:32 | access to parameter args | | | LoopUnrolling.cs:71:9:71:21 | ...; | LoopUnrolling.cs:71:9:71:12 | access to parameter args | | -| LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | empty | -| LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:72:9:73:35 | [skip (line 72)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:67:10:67:11 | exit M8 (normal) | empty | +| LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | LoopUnrolling.cs:72:22:72:24 | String arg | non-empty | +| LoopUnrolling.cs:72:22:72:24 | String arg | LoopUnrolling.cs:73:13:73:35 | ...; | | +| LoopUnrolling.cs:72:29:72:32 | access to parameter args | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | LoopUnrolling.cs:72:9:73:35 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:73:13:73:35 | ...; | LoopUnrolling.cs:73:31:73:33 | access to local variable arg | | +| LoopUnrolling.cs:73:31:73:33 | access to local variable arg | LoopUnrolling.cs:73:13:73:34 | call to method WriteLine | | | LoopUnrolling.cs:76:10:76:11 | enter M9 | LoopUnrolling.cs:77:5:83:5 | {...} | | | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | LoopUnrolling.cs:76:10:76:11 | exit M9 | | | LoopUnrolling.cs:77:5:83:5 | {...} | LoopUnrolling.cs:78:9:78:34 | ... ...; | | @@ -3223,8 +2517,14 @@ | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | LoopUnrolling.cs:78:13:78:33 | String[,] xs = ... | | | LoopUnrolling.cs:78:29:78:29 | 2 | LoopUnrolling.cs:78:32:78:32 | 0 | | | LoopUnrolling.cs:78:32:78:32 | 0 | LoopUnrolling.cs:78:18:78:33 | array creation of type String[,] | | -| LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | empty | -| LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:79:9:82:9 | [skip (line 79)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:76:10:76:11 | exit M9 (normal) | empty | +| LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:79:22:79:22 | String x | non-empty | +| LoopUnrolling.cs:79:22:79:22 | String x | LoopUnrolling.cs:80:9:82:9 | {...} | | +| LoopUnrolling.cs:79:27:79:28 | access to local variable xs | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:80:9:82:9 | {...} | LoopUnrolling.cs:81:13:81:33 | ...; | | +| LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | LoopUnrolling.cs:79:9:82:9 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:81:13:81:33 | ...; | LoopUnrolling.cs:81:31:81:31 | access to local variable x | | +| LoopUnrolling.cs:81:31:81:31 | access to local variable x | LoopUnrolling.cs:81:13:81:32 | call to method WriteLine | | | LoopUnrolling.cs:85:10:85:12 | enter M10 | LoopUnrolling.cs:86:5:92:5 | {...} | | | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | LoopUnrolling.cs:85:10:85:12 | exit M10 | | | LoopUnrolling.cs:86:5:92:5 | {...} | LoopUnrolling.cs:87:9:87:34 | ... ...; | | @@ -3233,8 +2533,14 @@ | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | LoopUnrolling.cs:87:13:87:33 | String[,] xs = ... | | | LoopUnrolling.cs:87:29:87:29 | 0 | LoopUnrolling.cs:87:32:87:32 | 2 | | | LoopUnrolling.cs:87:32:87:32 | 2 | LoopUnrolling.cs:87:18:87:33 | array creation of type String[,] | | -| LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | empty | -| LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:88:9:91:9 | [skip (line 88)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:85:10:85:12 | exit M10 (normal) | empty | +| LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:88:22:88:22 | String x | non-empty | +| LoopUnrolling.cs:88:22:88:22 | String x | LoopUnrolling.cs:89:9:91:9 | {...} | | +| LoopUnrolling.cs:88:27:88:28 | access to local variable xs | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:89:9:91:9 | {...} | LoopUnrolling.cs:90:13:90:33 | ...; | | +| LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | LoopUnrolling.cs:88:9:91:9 | foreach (... ... in ...) ... | | +| LoopUnrolling.cs:90:13:90:33 | ...; | LoopUnrolling.cs:90:31:90:31 | access to local variable x | | +| LoopUnrolling.cs:90:31:90:31 | access to local variable x | LoopUnrolling.cs:90:13:90:32 | call to method WriteLine | | | LoopUnrolling.cs:94:10:94:12 | enter M11 | LoopUnrolling.cs:95:5:101:5 | {...} | | | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | LoopUnrolling.cs:94:10:94:12 | exit M11 | | | LoopUnrolling.cs:95:5:101:5 | {...} | LoopUnrolling.cs:96:9:96:34 | ... ...; | | @@ -3243,11 +2549,10 @@ | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | LoopUnrolling.cs:96:13:96:33 | String[,] xs = ... | | | LoopUnrolling.cs:96:29:96:29 | 2 | LoopUnrolling.cs:96:32:96:32 | 2 | | | LoopUnrolling.cs:96:32:96:32 | 2 | LoopUnrolling.cs:96:18:96:33 | array creation of type String[,] | | -| LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | non-empty | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:94:10:94:12 | exit M11 (normal) | empty | | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | LoopUnrolling.cs:97:22:97:22 | String x | non-empty | | LoopUnrolling.cs:97:22:97:22 | String x | LoopUnrolling.cs:98:9:100:9 | {...} | | -| LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:97:9:100:9 | [unroll (line 97)] foreach (... ... in ...) ... | | +| LoopUnrolling.cs:97:27:97:28 | access to local variable xs | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:98:9:100:9 | {...} | LoopUnrolling.cs:99:13:99:33 | ...; | | | LoopUnrolling.cs:99:13:99:32 | call to method WriteLine | LoopUnrolling.cs:97:9:100:9 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:99:13:99:33 | ...; | LoopUnrolling.cs:99:31:99:31 | access to local variable x | | @@ -3261,27 +2566,27 @@ | MultiImplementationA.cs:6:22:6:31 | enter get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (normal) | MultiImplementationA.cs:6:22:6:31 | exit get_P1 | | -| MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:6:22:6:31 | throw ... | MultiImplementationA.cs:6:22:6:31 | exit get_P1 (abnormal) | exception | | MultiImplementationA.cs:6:28:6:31 | null | MultiImplementationA.cs:6:22:6:31 | throw ... | | | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | MultiImplementationA.cs:7:25:7:39 | {...} | | | MultiImplementationA.cs:7:21:7:23 | enter get_P2 | MultiImplementationB.cs:4:25:4:37 | {...} | | | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | MultiImplementationA.cs:7:21:7:23 | exit get_P2 | | | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | MultiImplementationA.cs:7:21:7:23 | exit get_P2 | | | MultiImplementationA.cs:7:25:7:39 | {...} | MultiImplementationA.cs:7:33:7:36 | null | | -| MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (abnormal) | exception | | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:27:7:37 | throw ...; | | | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | MultiImplementationA.cs:7:45:7:59 | {...} | | | MultiImplementationA.cs:7:41:7:43 | enter set_P2 | MultiImplementationB.cs:4:43:4:45 | {...} | | | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | MultiImplementationA.cs:7:41:7:43 | exit set_P2 | | | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | MultiImplementationA.cs:7:41:7:43 | exit set_P2 | | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:53:7:56 | null | | -| MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (abnormal) | exception | | MultiImplementationA.cs:7:53:7:56 | null | MultiImplementationA.cs:7:47:7:57 | throw ...; | | | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationA.cs:8:29:8:32 | null | | | MultiImplementationA.cs:8:16:8:16 | enter M | MultiImplementationB.cs:5:23:5:23 | 2 | | | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | MultiImplementationA.cs:8:16:8:16 | exit M | | | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | MultiImplementationA.cs:8:16:8:16 | exit M | | -| MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:8:23:8:32 | throw ... | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | exception | | MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:23:8:32 | throw ... | | | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:20:13:20 | 0 | | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | | @@ -3347,7 +2652,7 @@ | MultiImplementationA.cs:28:7:28:8 | {...} | MultiImplementationA.cs:28:7:28:8 | exit C3 (normal) | | | MultiImplementationA.cs:30:21:30:23 | enter get_P3 | MultiImplementationA.cs:30:34:30:37 | null | | | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | MultiImplementationA.cs:30:21:30:23 | exit get_P3 | | -| MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:30:28:30:37 | throw ... | MultiImplementationA.cs:30:21:30:23 | exit get_P3 (abnormal) | exception | | MultiImplementationA.cs:30:34:30:37 | null | MultiImplementationA.cs:30:28:30:37 | throw ... | | | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | MultiImplementationA.cs:34:15:34:16 | {...} | | | MultiImplementationA.cs:34:15:34:16 | enter C4 | MultiImplementationA.cs:34:15:34:16 | call to constructor Object | | @@ -3359,12 +2664,12 @@ | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | MultiImplementationA.cs:36:9:36:10 | exit M1 | | | MultiImplementationA.cs:36:9:36:10 | exit M1 (normal) | MultiImplementationA.cs:36:9:36:10 | exit M1 | | | MultiImplementationA.cs:36:14:36:28 | {...} | MultiImplementationA.cs:36:22:36:25 | null | | -| MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:36:16:36:26 | throw ...; | MultiImplementationA.cs:36:9:36:10 | exit M1 (abnormal) | exception | | MultiImplementationA.cs:36:22:36:25 | null | MultiImplementationA.cs:36:16:36:26 | throw ...; | | | MultiImplementationA.cs:37:9:37:10 | enter M2 | MultiImplementationA.cs:37:14:37:28 | {...} | | | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | MultiImplementationA.cs:37:9:37:10 | exit M2 | | | MultiImplementationA.cs:37:14:37:28 | {...} | MultiImplementationA.cs:37:22:37:25 | null | | -| MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationA.cs:37:16:37:26 | throw ...; | MultiImplementationA.cs:37:9:37:10 | exit M2 (abnormal) | exception | | MultiImplementationA.cs:37:22:37:25 | null | MultiImplementationA.cs:37:16:37:26 | throw ...; | | | MultiImplementationB.cs:1:7:1:8 | call to constructor Object | MultiImplementationB.cs:1:7:1:8 | {...} | | | MultiImplementationB.cs:1:7:1:8 | {...} | MultiImplementationA.cs:4:7:4:8 | exit C1 (normal) | | @@ -3377,29 +2682,29 @@ | MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:11:20:11:20 | 1 | | | MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:22:16:22:16 | this access | | | MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:20 | ... = ... | | -| MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | exception | | MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationB.cs:12:31:12:40 | throw ... | | | MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationB.cs:13:48:13:51 | null | | -| MultiImplementationB.cs:13:42:13:52 | throw ...; | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:13:42:13:52 | throw ...; | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | exception | | MultiImplementationB.cs:13:48:13:51 | null | MultiImplementationB.cs:13:42:13:52 | throw ...; | | | MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationA.cs:15:54:15:56 | exit set_Item (normal) | | | MultiImplementationB.cs:15:5:17:5 | {...} | MultiImplementationB.cs:16:9:16:31 | M2(...) | | | MultiImplementationB.cs:16:9:16:31 | M2(...) | MultiImplementationA.cs:16:17:16:18 | exit M1 (normal) | | | MultiImplementationB.cs:16:9:16:31 | enter M2 | MultiImplementationB.cs:16:27:16:30 | null | | | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | MultiImplementationB.cs:16:9:16:31 | exit M2 | | -| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:16:21:16:30 | throw ... | MultiImplementationB.cs:16:9:16:31 | exit M2 (abnormal) | exception | | MultiImplementationB.cs:16:27:16:30 | null | MultiImplementationB.cs:16:21:16:30 | throw ... | | | MultiImplementationB.cs:18:12:18:13 | call to constructor Object | MultiImplementationB.cs:11:16:11:16 | this access | | | MultiImplementationB.cs:18:22:18:36 | {...} | MultiImplementationB.cs:18:30:18:33 | null | | -| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:18:24:18:34 | throw ...; | MultiImplementationA.cs:20:12:20:13 | exit C2 (abnormal) | exception | | MultiImplementationB.cs:18:30:18:33 | null | MultiImplementationB.cs:18:24:18:34 | throw ...; | | | MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | MultiImplementationB.cs:19:27:19:29 | {...} | | | MultiImplementationB.cs:19:24:19:24 | 1 | MultiImplementationB.cs:19:19:19:22 | call to constructor C2 | | | MultiImplementationB.cs:19:27:19:29 | {...} | MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | | | MultiImplementationB.cs:20:11:20:25 | {...} | MultiImplementationB.cs:20:19:20:22 | null | | -| MultiImplementationB.cs:20:13:20:23 | throw ...; | MultiImplementationA.cs:22:6:22:7 | exit ~C2 (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:20:13:20:23 | throw ...; | MultiImplementationA.cs:22:6:22:7 | exit ~C2 (abnormal) | exception | | MultiImplementationB.cs:20:19:20:22 | null | MultiImplementationB.cs:20:13:20:23 | throw ...; | | -| MultiImplementationB.cs:21:50:21:59 | throw ... | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | exception(NullReferenceException) | +| MultiImplementationB.cs:21:50:21:59 | throw ... | MultiImplementationA.cs:23:28:23:35 | exit implicit conversion (abnormal) | exception | | MultiImplementationB.cs:21:56:21:59 | null | MultiImplementationB.cs:21:50:21:59 | throw ... | | | MultiImplementationB.cs:22:16:22:16 | access to property P | MultiImplementationB.cs:22:32:22:34 | ... = ... | | | MultiImplementationB.cs:22:16:22:16 | this access | MultiImplementationB.cs:22:34:22:34 | 1 | | @@ -3772,7 +3077,7 @@ | PostDominance.cs:19:13:19:21 | [true] ... is ... | PostDominance.cs:20:45:20:53 | nameof(...) | true | | PostDominance.cs:19:18:19:21 | null | PostDominance.cs:19:13:19:21 | [false] ... is ... | no-match | | PostDominance.cs:19:18:19:21 | null | PostDominance.cs:19:13:19:21 | [true] ... is ... | match | -| PostDominance.cs:20:13:20:55 | throw ...; | PostDominance.cs:17:10:17:11 | exit M3 (abnormal) | exception(ArgumentNullException) | +| PostDominance.cs:20:13:20:55 | throw ...; | PostDominance.cs:17:10:17:11 | exit M3 (abnormal) | exception | | PostDominance.cs:20:19:20:54 | object creation of type ArgumentNullException | PostDominance.cs:20:13:20:55 | throw ...; | | | PostDominance.cs:20:45:20:53 | nameof(...) | PostDominance.cs:20:19:20:54 | object creation of type ArgumentNullException | | | PostDominance.cs:21:9:21:28 | call to method WriteLine | PostDominance.cs:17:10:17:11 | exit M3 (normal) | | @@ -3867,12 +3172,12 @@ | Switch.cs:16:13:16:19 | case ...: | Switch.cs:16:18:16:18 | 0 | | | Switch.cs:16:18:16:18 | 0 | Switch.cs:17:23:17:37 | object creation of type Exception | match | | Switch.cs:16:18:16:18 | 0 | Switch.cs:18:13:18:22 | case ...: | no-match | -| Switch.cs:17:17:17:38 | throw ...; | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception(Exception) | +| Switch.cs:17:17:17:38 | throw ...; | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception | | Switch.cs:17:23:17:37 | object creation of type Exception | Switch.cs:17:17:17:38 | throw ...; | | | Switch.cs:18:13:18:22 | case ...: | Switch.cs:18:18:18:21 | null | | | Switch.cs:18:18:18:21 | null | Switch.cs:19:17:19:29 | goto default; | match | | Switch.cs:18:18:18:21 | null | Switch.cs:20:13:20:23 | case ...: | no-match | -| Switch.cs:19:17:19:29 | goto default; | Switch.cs:30:13:30:20 | default: | goto(default) | +| Switch.cs:19:17:19:29 | goto default; | Switch.cs:30:13:30:20 | default: | goto | | Switch.cs:20:13:20:23 | case ...: | Switch.cs:20:18:20:22 | Int32 i | | | Switch.cs:20:18:20:22 | Int32 i | Switch.cs:21:17:22:27 | if (...) ... | match | | Switch.cs:20:18:20:22 | Int32 i | Switch.cs:24:13:24:56 | case ...: | no-match | @@ -3882,7 +3187,7 @@ | Switch.cs:21:21:21:29 | ... == ... | Switch.cs:23:27:23:27 | 0 | false | | Switch.cs:21:26:21:29 | null | Switch.cs:21:21:21:29 | ... == ... | | | Switch.cs:22:21:22:27 | return ...; | Switch.cs:10:10:10:11 | exit M2 (normal) | return | -| Switch.cs:23:17:23:28 | goto case ...; | Switch.cs:16:13:16:19 | case ...: | goto(0) | +| Switch.cs:23:17:23:28 | goto case ...; | Switch.cs:16:13:16:19 | case ...: | goto | | Switch.cs:23:27:23:27 | 0 | Switch.cs:23:17:23:28 | goto case ...; | | | Switch.cs:24:13:24:56 | case ...: | Switch.cs:24:18:24:25 | String s | | | Switch.cs:24:18:24:25 | String s | Switch.cs:24:32:24:32 | access to local variable s | match | @@ -3905,16 +3210,16 @@ | Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:18:27:25 | Double d | | | Switch.cs:27:18:27:25 | Double d | Switch.cs:27:32:27:38 | call to method Throw | match | | Switch.cs:27:18:27:25 | Double d | Switch.cs:30:13:30:20 | default: | no-match | -| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception(Exception) | +| Switch.cs:27:32:27:38 | call to method Throw | Switch.cs:10:10:10:11 | exit M2 (abnormal) | exception | | Switch.cs:28:13:28:17 | Label: | Switch.cs:29:17:29:23 | return ...; | | | Switch.cs:29:17:29:23 | return ...; | Switch.cs:10:10:10:11 | exit M2 (normal) | return | | Switch.cs:30:13:30:20 | default: | Switch.cs:31:17:31:27 | goto ...; | | -| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:13:28:17 | Label: | goto(Label) | +| Switch.cs:31:17:31:27 | goto ...; | Switch.cs:28:13:28:17 | Label: | goto | | Switch.cs:35:10:35:11 | enter M3 | Switch.cs:36:5:42:5 | {...} | | | Switch.cs:35:10:35:11 | exit M3 (abnormal) | Switch.cs:35:10:35:11 | exit M3 | | | Switch.cs:36:5:42:5 | {...} | Switch.cs:37:9:41:9 | switch (...) {...} | | | Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:17:37:23 | call to method Throw | | -| Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | exit M3 (abnormal) | exception(Exception) | +| Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | exit M3 (abnormal) | exception | | Switch.cs:44:10:44:11 | enter M4 | Switch.cs:45:5:53:5 | {...} | | | Switch.cs:44:10:44:11 | exit M4 (normal) | Switch.cs:44:10:44:11 | exit M4 | | | Switch.cs:45:5:53:5 | {...} | Switch.cs:46:9:52:9 | switch (...) {...} | | @@ -4013,7 +3318,7 @@ | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... | | | Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:34:111:48 | object creation of type Exception | | | Switch.cs:111:17:111:21 | exit Throw (abnormal) | Switch.cs:111:17:111:21 | exit Throw | | -| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw (abnormal) | exception(Exception) | +| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw (abnormal) | exception | | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | | | Switch.cs:113:9:113:11 | enter M10 | Switch.cs:114:5:121:5 | {...} | | | Switch.cs:113:9:113:11 | exit M10 (normal) | Switch.cs:113:9:113:11 | exit M10 | | @@ -4126,7 +3431,7 @@ | Switch.cs:156:28:156:31 | true | Switch.cs:156:41:156:45 | false | no-match | | Switch.cs:156:28:156:38 | ... => ... | Switch.cs:156:17:156:54 | ... switch { ... } | | | Switch.cs:156:36:156:38 | "a" | Switch.cs:156:28:156:38 | ... => ... | | -| Switch.cs:156:41:156:45 | false | Switch.cs:154:10:154:12 | exit M15 (abnormal) | exception(InvalidOperationException) | +| Switch.cs:156:41:156:45 | false | Switch.cs:154:10:154:12 | exit M15 (abnormal) | exception | | Switch.cs:156:41:156:45 | false | Switch.cs:156:50:156:52 | "b" | match | | Switch.cs:156:41:156:52 | ... => ... | Switch.cs:156:17:156:54 | ... switch { ... } | | | Switch.cs:156:50:156:52 | "b" | Switch.cs:156:41:156:52 | ... => ... | | @@ -4361,7 +3666,7 @@ | cflow.cs:42:17:42:38 | call to method WriteLine | cflow.cs:43:27:43:27 | 2 | | | cflow.cs:42:17:42:39 | ...; | cflow.cs:42:35:42:37 | "1" | | | cflow.cs:42:35:42:37 | "1" | cflow.cs:42:17:42:38 | call to method WriteLine | | -| cflow.cs:43:17:43:28 | goto case ...; | cflow.cs:44:13:44:19 | case ...: | goto(2) | +| cflow.cs:43:17:43:28 | goto case ...; | cflow.cs:44:13:44:19 | case ...: | goto | | cflow.cs:43:27:43:27 | 2 | cflow.cs:43:17:43:28 | goto case ...; | | | cflow.cs:44:13:44:19 | case ...: | cflow.cs:44:18:44:18 | 2 | | | cflow.cs:44:18:44:18 | 2 | cflow.cs:45:17:45:39 | ...; | match | @@ -4369,7 +3674,7 @@ | cflow.cs:45:17:45:38 | call to method WriteLine | cflow.cs:46:27:46:27 | 1 | | | cflow.cs:45:17:45:39 | ...; | cflow.cs:45:35:45:37 | "2" | | | cflow.cs:45:35:45:37 | "2" | cflow.cs:45:17:45:38 | call to method WriteLine | | -| cflow.cs:46:17:46:28 | goto case ...; | cflow.cs:41:13:41:19 | case ...: | goto(1) | +| cflow.cs:46:17:46:28 | goto case ...; | cflow.cs:41:13:41:19 | case ...: | goto | | cflow.cs:46:27:46:27 | 1 | cflow.cs:46:17:46:28 | goto case ...; | | | cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 | | | cflow.cs:47:18:47:18 | 3 | cflow.cs:48:17:48:39 | ...; | match | @@ -4407,7 +3712,7 @@ | cflow.cs:63:23:63:33 | ... == ... | cflow.cs:63:21:63:34 | [false] !... | true | | cflow.cs:63:23:63:33 | ... == ... | cflow.cs:63:21:63:34 | [true] !... | false | | cflow.cs:63:32:63:33 | "" | cflow.cs:63:23:63:33 | ... == ... | | -| cflow.cs:64:21:64:55 | throw ...; | cflow.cs:37:17:37:22 | exit Switch (abnormal) | exception(NullReferenceException) | +| cflow.cs:64:21:64:55 | throw ...; | cflow.cs:37:17:37:22 | exit Switch (abnormal) | exception | | cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:21:64:55 | throw ...; | | | cflow.cs:65:17:65:22 | break; | cflow.cs:67:16:67:16 | access to parameter a | break | | cflow.cs:67:9:67:17 | return ...; | cflow.cs:37:17:37:22 | exit Switch (normal) | return | @@ -4462,7 +3767,7 @@ | cflow.cs:92:13:92:27 | call to method Equals | cflow.cs:94:9:94:29 | ...; | false | | cflow.cs:92:20:92:20 | access to parameter s | cflow.cs:92:23:92:26 | null | | | cflow.cs:92:23:92:26 | null | cflow.cs:92:13:92:27 | call to method Equals | | -| cflow.cs:93:13:93:49 | throw ...; | cflow.cs:90:18:90:19 | exit M3 (abnormal) | exception(ArgumentNullException) | +| cflow.cs:93:13:93:49 | throw ...; | cflow.cs:90:18:90:19 | exit M3 (abnormal) | exception | | cflow.cs:93:19:93:48 | object creation of type ArgumentNullException | cflow.cs:93:13:93:49 | throw ...; | | | cflow.cs:93:45:93:47 | "s" | cflow.cs:93:19:93:48 | object creation of type ArgumentNullException | | | cflow.cs:94:9:94:28 | call to method WriteLine | cflow.cs:96:9:97:55 | if (...) ... | | @@ -4777,7 +4082,7 @@ | cflow.cs:200:61:200:61 | access to local variable b | cflow.cs:200:40:200:61 | [true] ... && ... | true | | cflow.cs:201:9:205:9 | {...} | cflow.cs:202:13:204:13 | {...} | | | cflow.cs:202:13:204:13 | {...} | cflow.cs:203:23:203:37 | object creation of type Exception | | -| cflow.cs:203:17:203:38 | throw ...; | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | exception(Exception) | +| cflow.cs:203:17:203:38 | throw ...; | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | exception | | cflow.cs:203:23:203:37 | object creation of type Exception | cflow.cs:203:17:203:38 | throw ...; | | | cflow.cs:208:10:208:11 | enter Do | cflow.cs:209:5:222:5 | {...} | | | cflow.cs:208:10:208:11 | exit Do (normal) | cflow.cs:208:10:208:11 | exit Do | | @@ -4873,7 +4178,7 @@ | cflow.cs:244:13:244:28 | ... > ... | cflow.cs:244:31:244:41 | goto ...; | true | | cflow.cs:244:13:244:28 | ... > ... | cflow.cs:246:9:258:9 | switch (...) {...} | false | | cflow.cs:244:28:244:28 | 0 | cflow.cs:244:13:244:28 | ... > ... | | -| cflow.cs:244:31:244:41 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto(Label) | +| cflow.cs:244:31:244:41 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto | | cflow.cs:246:9:258:9 | switch (...) {...} | cflow.cs:246:17:246:21 | this access | | | cflow.cs:246:17:246:21 | access to field Field | cflow.cs:246:17:246:28 | access to property Length | | | cflow.cs:246:17:246:21 | this access | cflow.cs:246:17:246:21 | access to field Field | | @@ -4883,7 +4188,7 @@ | cflow.cs:248:13:248:19 | case ...: | cflow.cs:248:18:248:18 | 0 | | | cflow.cs:248:18:248:18 | 0 | cflow.cs:249:17:249:29 | goto default; | match | | cflow.cs:248:18:248:18 | 0 | cflow.cs:250:13:250:19 | case ...: | no-match | -| cflow.cs:249:17:249:29 | goto default; | cflow.cs:255:13:255:20 | default: | goto(default) | +| cflow.cs:249:17:249:29 | goto default; | cflow.cs:255:13:255:20 | default: | goto | | cflow.cs:250:13:250:19 | case ...: | cflow.cs:250:18:250:18 | 1 | | | cflow.cs:250:18:250:18 | 1 | cflow.cs:251:17:251:37 | ...; | match | | cflow.cs:250:18:250:18 | 1 | cflow.cs:253:13:253:19 | case ...: | no-match | @@ -4894,13 +4199,14 @@ | cflow.cs:253:13:253:19 | case ...: | cflow.cs:253:18:253:18 | 2 | | | cflow.cs:253:18:253:18 | 2 | cflow.cs:254:17:254:27 | goto ...; | match | | cflow.cs:253:18:253:18 | 2 | cflow.cs:255:13:255:20 | default: | no-match | -| cflow.cs:254:17:254:27 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto(Label) | +| cflow.cs:254:17:254:27 | goto ...; | cflow.cs:242:5:242:9 | Label: | goto | | cflow.cs:255:13:255:20 | default: | cflow.cs:256:17:256:37 | ...; | | | cflow.cs:256:17:256:36 | call to method WriteLine | cflow.cs:257:17:257:22 | break; | | | cflow.cs:256:17:256:37 | ...; | cflow.cs:256:35:256:35 | 0 | | | cflow.cs:256:35:256:35 | 0 | cflow.cs:256:17:256:36 | call to method WriteLine | | | cflow.cs:257:17:257:22 | break; | cflow.cs:240:10:240:13 | exit Goto (normal) | break | | cflow.cs:261:49:261:53 | enter Yield | cflow.cs:262:5:277:5 | {...} | | +| cflow.cs:261:49:261:53 | exit Yield (abnormal) | cflow.cs:261:49:261:53 | exit Yield | | | cflow.cs:261:49:261:53 | exit Yield (normal) | cflow.cs:261:49:261:53 | exit Yield | | | cflow.cs:262:5:277:5 | {...} | cflow.cs:263:22:263:22 | 0 | | | cflow.cs:263:9:263:23 | yield return ...; | cflow.cs:264:9:267:9 | for (...;...;...) ... | | @@ -4919,11 +4225,12 @@ | cflow.cs:266:26:266:26 | access to local variable i | cflow.cs:266:13:266:27 | yield return ...; | | | cflow.cs:268:9:276:9 | try {...} ... | cflow.cs:269:9:272:9 | {...} | | | cflow.cs:269:9:272:9 | {...} | cflow.cs:270:13:270:24 | yield break; | | -| cflow.cs:270:13:270:24 | yield break; | cflow.cs:274:9:276:9 | [finally: return] {...} | return | -| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:275:13:275:42 | [finally: return] ...; | | -| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | return | -| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:275:31:275:40 | [finally: return] "not dead" | | -| cflow.cs:275:31:275:40 | [finally: return] "not dead" | cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | | +| cflow.cs:270:13:270:24 | yield break; | cflow.cs:274:9:276:9 | {...} | return | +| cflow.cs:274:9:276:9 | {...} | cflow.cs:275:13:275:42 | ...; | | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (abnormal) | exception | +| cflow.cs:275:13:275:41 | call to method WriteLine | cflow.cs:261:49:261:53 | exit Yield (normal) | , return | +| cflow.cs:275:13:275:42 | ...; | cflow.cs:275:31:275:40 | "not dead" | | +| cflow.cs:275:31:275:40 | "not dead" | cflow.cs:275:13:275:41 | call to method WriteLine | | | cflow.cs:282:5:282:18 | enter ControlFlowSub | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | | cflow.cs:282:5:282:18 | exit ControlFlowSub (normal) | cflow.cs:282:5:282:18 | exit ControlFlowSub | | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:31:282:33 | {...} | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index 7c5a64b7155..26e8d074b19 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -1,1032 +1,3 @@ -booleanNode -| Assert.cs:58:16:58:32 | [b (line 56): false] String s = ... | b (line 56): false | -| Assert.cs:58:16:58:32 | [b (line 56): true] String s = ... | b (line 56): true | -| Assert.cs:58:20:58:32 | [b (line 56): false] ... ? ... : ... | b (line 56): false | -| Assert.cs:58:20:58:32 | [b (line 56): true] ... ? ... : ... | b (line 56): true | -| Assert.cs:58:24:58:27 | [b (line 56): true] null | b (line 56): true | -| Assert.cs:58:31:58:32 | [b (line 56): false] "" | b (line 56): false | -| Assert.cs:59:9:59:38 | [b (line 56): false] ...; | b (line 56): false | -| Assert.cs:59:9:59:38 | [b (line 56): true] ...; | b (line 56): true | -| Assert.cs:59:23:59:23 | [b (line 56): false] access to local variable s | b (line 56): false | -| Assert.cs:59:23:59:23 | [b (line 56): true] access to local variable s | b (line 56): true | -| Assert.cs:59:23:59:31 | [b (line 56): false] ... != ... | b (line 56): false | -| Assert.cs:59:23:59:31 | [b (line 56): true] ... != ... | b (line 56): true | -| Assert.cs:59:28:59:31 | [b (line 56): false] null | b (line 56): false | -| Assert.cs:59:28:59:31 | [b (line 56): true] null | b (line 56): true | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | b (line 56): false | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | b (line 56): true | -| Assert.cs:65:16:65:32 | [b (line 63): false] String s = ... | b (line 63): false | -| Assert.cs:65:16:65:32 | [b (line 63): true] String s = ... | b (line 63): true | -| Assert.cs:65:20:65:32 | [b (line 63): false] ... ? ... : ... | b (line 63): false | -| Assert.cs:65:20:65:32 | [b (line 63): true] ... ? ... : ... | b (line 63): true | -| Assert.cs:65:24:65:27 | [b (line 63): true] null | b (line 63): true | -| Assert.cs:65:31:65:32 | [b (line 63): false] "" | b (line 63): false | -| Assert.cs:66:9:66:39 | [b (line 63): false] ...; | b (line 63): false | -| Assert.cs:66:9:66:39 | [b (line 63): true] ...; | b (line 63): true | -| Assert.cs:66:24:66:24 | [b (line 63): false] access to local variable s | b (line 63): false | -| Assert.cs:66:24:66:24 | [b (line 63): true] access to local variable s | b (line 63): true | -| Assert.cs:66:24:66:32 | [b (line 63): false] ... == ... | b (line 63): false | -| Assert.cs:66:24:66:32 | [b (line 63): true] ... == ... | b (line 63): true | -| Assert.cs:66:29:66:32 | [b (line 63): false] null | b (line 63): false | -| Assert.cs:66:29:66:32 | [b (line 63): true] null | b (line 63): true | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | b (line 63): false | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | b (line 63): true | -| Assert.cs:72:16:72:32 | [b (line 70): false] String s = ... | b (line 70): false | -| Assert.cs:72:16:72:32 | [b (line 70): true] String s = ... | b (line 70): true | -| Assert.cs:72:20:72:32 | [b (line 70): false] ... ? ... : ... | b (line 70): false | -| Assert.cs:72:20:72:32 | [b (line 70): true] ... ? ... : ... | b (line 70): true | -| Assert.cs:72:24:72:27 | [b (line 70): true] null | b (line 70): true | -| Assert.cs:72:31:72:32 | [b (line 70): false] "" | b (line 70): false | -| Assert.cs:73:9:73:38 | [b (line 70): false] ...; | b (line 70): false | -| Assert.cs:73:9:73:38 | [b (line 70): true] ...; | b (line 70): true | -| Assert.cs:73:23:73:23 | [b (line 70): false] access to local variable s | b (line 70): false | -| Assert.cs:73:23:73:23 | [b (line 70): true] access to local variable s | b (line 70): true | -| Assert.cs:73:23:73:31 | [b (line 70): false] ... == ... | b (line 70): false | -| Assert.cs:73:23:73:31 | [b (line 70): true] ... == ... | b (line 70): true | -| Assert.cs:73:28:73:31 | [b (line 70): false] null | b (line 70): false | -| Assert.cs:73:28:73:31 | [b (line 70): true] null | b (line 70): true | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | b (line 70): false | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | b (line 70): true | -| Assert.cs:79:16:79:32 | [b (line 77): false] String s = ... | b (line 77): false | -| Assert.cs:79:16:79:32 | [b (line 77): true] String s = ... | b (line 77): true | -| Assert.cs:79:20:79:32 | [b (line 77): false] ... ? ... : ... | b (line 77): false | -| Assert.cs:79:20:79:32 | [b (line 77): true] ... ? ... : ... | b (line 77): true | -| Assert.cs:79:24:79:27 | [b (line 77): true] null | b (line 77): true | -| Assert.cs:79:31:79:32 | [b (line 77): false] "" | b (line 77): false | -| Assert.cs:80:9:80:39 | [b (line 77): false] ...; | b (line 77): false | -| Assert.cs:80:9:80:39 | [b (line 77): true] ...; | b (line 77): true | -| Assert.cs:80:24:80:24 | [b (line 77): false] access to local variable s | b (line 77): false | -| Assert.cs:80:24:80:24 | [b (line 77): true] access to local variable s | b (line 77): true | -| Assert.cs:80:24:80:32 | [b (line 77): false] ... != ... | b (line 77): false | -| Assert.cs:80:24:80:32 | [b (line 77): true] ... != ... | b (line 77): true | -| Assert.cs:80:29:80:32 | [b (line 77): false] null | b (line 77): false | -| Assert.cs:80:29:80:32 | [b (line 77): true] null | b (line 77): true | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | b (line 77): false | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | b (line 77): true | -| Assert.cs:86:16:86:32 | [b (line 84): false] String s = ... | b (line 84): false | -| Assert.cs:86:16:86:32 | [b (line 84): true] String s = ... | b (line 84): true | -| Assert.cs:86:20:86:32 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:86:20:86:32 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:86:24:86:27 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:86:31:86:32 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): false] call to method Assert | b (line 84): false | -| Assert.cs:87:9:87:31 | [assertion failure, b (line 84): true] call to method Assert | b (line 84): true | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): false] call to method Assert | b (line 84): false | -| Assert.cs:87:9:87:31 | [assertion success, b (line 84): true] call to method Assert | b (line 84): true | -| Assert.cs:87:9:87:32 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:87:9:87:32 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:87:22:87:22 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:87:22:87:22 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:87:22:87:30 | [b (line 84): false] ... != ... | b (line 84): false | -| Assert.cs:87:22:87:30 | [b (line 84): true] ... != ... | b (line 84): true | -| Assert.cs:87:27:87:30 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:87:27:87:30 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:88:9:88:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:88:9:88:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:88:9:88:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:88:9:88:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:88:27:88:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:88:27:88:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:88:27:88:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:88:27:88:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:90:9:90:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:90:9:90:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:90:9:90:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:90:9:90:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:90:13:90:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:90:13:90:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:90:13:90:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:90:13:90:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:90:17:90:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:90:24:90:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): false] call to method IsNull | b (line 84): false | -| Assert.cs:91:9:91:24 | [assertion failure, b (line 84): true] call to method IsNull | b (line 84): true | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): false] call to method IsNull | b (line 84): false | -| Assert.cs:91:9:91:24 | [assertion success, b (line 84): true] call to method IsNull | b (line 84): true | -| Assert.cs:91:9:91:25 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:91:9:91:25 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:91:23:91:23 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:91:23:91:23 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:92:9:92:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:92:9:92:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:92:9:92:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:92:9:92:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:92:27:92:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:92:27:92:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:92:27:92:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:92:27:92:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:94:9:94:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:94:9:94:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:94:9:94:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:94:9:94:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:94:13:94:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:94:13:94:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:94:13:94:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:94:13:94:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:94:17:94:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:94:24:94:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): false] call to method IsNotNull | b (line 84): false | -| Assert.cs:95:9:95:27 | [assertion failure, b (line 84): true] call to method IsNotNull | b (line 84): true | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): false] call to method IsNotNull | b (line 84): false | -| Assert.cs:95:9:95:27 | [assertion success, b (line 84): true] call to method IsNotNull | b (line 84): true | -| Assert.cs:95:9:95:28 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:95:9:95:28 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:95:26:95:26 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:95:26:95:26 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:96:9:96:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:96:9:96:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:96:9:96:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:96:9:96:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:96:27:96:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:96:27:96:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:96:27:96:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:96:27:96:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:98:9:98:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:98:9:98:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:98:9:98:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:98:9:98:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:98:13:98:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:98:13:98:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:98:13:98:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:98:13:98:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:98:17:98:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:98:24:98:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false | -| Assert.cs:99:9:99:32 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): false] call to method IsTrue | b (line 84): false | -| Assert.cs:99:9:99:32 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:99:9:99:33 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:99:9:99:33 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:99:23:99:23 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:99:23:99:23 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:99:23:99:31 | [b (line 84): false] ... == ... | b (line 84): false | -| Assert.cs:99:23:99:31 | [b (line 84): true] ... == ... | b (line 84): true | -| Assert.cs:99:28:99:31 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:99:28:99:31 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:100:9:100:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:100:9:100:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:100:9:100:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:100:9:100:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:100:27:100:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:100:27:100:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:100:27:100:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:100:27:100:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:102:9:102:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:102:9:102:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:102:9:102:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:102:9:102:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:102:13:102:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:102:13:102:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:102:13:102:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:102:13:102:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:102:17:102:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:102:24:102:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false | -| Assert.cs:103:9:103:32 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): false] call to method IsTrue | b (line 84): false | -| Assert.cs:103:9:103:32 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:103:9:103:33 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:103:9:103:33 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:103:23:103:23 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:103:23:103:23 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:103:23:103:31 | [b (line 84): false] ... != ... | b (line 84): false | -| Assert.cs:103:23:103:31 | [b (line 84): true] ... != ... | b (line 84): true | -| Assert.cs:103:28:103:31 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:103:28:103:31 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:104:9:104:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:104:9:104:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:104:9:104:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:104:9:104:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:104:27:104:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:104:27:104:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:104:27:104:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:104:27:104:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:106:9:106:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:106:9:106:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:106:9:106:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:106:9:106:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:106:13:106:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:106:13:106:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:106:13:106:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:106:13:106:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:106:17:106:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:106:24:106:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): false] call to method IsFalse | b (line 84): false | -| Assert.cs:107:9:107:33 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): false] call to method IsFalse | b (line 84): false | -| Assert.cs:107:9:107:33 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:107:9:107:34 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:107:9:107:34 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:107:24:107:24 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:107:24:107:24 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:107:24:107:32 | [b (line 84): false] ... != ... | b (line 84): false | -| Assert.cs:107:24:107:32 | [b (line 84): true] ... != ... | b (line 84): true | -| Assert.cs:107:29:107:32 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:107:29:107:32 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:108:9:108:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:108:9:108:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:108:9:108:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:108:9:108:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:108:27:108:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:108:27:108:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:108:27:108:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:108:27:108:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:110:9:110:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:110:9:110:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:110:9:110:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:110:9:110:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:110:13:110:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:110:13:110:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:110:13:110:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:110:13:110:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:110:17:110:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:110:24:110:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): false] call to method IsFalse | b (line 84): false | -| Assert.cs:111:9:111:33 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): false] call to method IsFalse | b (line 84): false | -| Assert.cs:111:9:111:33 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:111:9:111:34 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:111:9:111:34 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:111:24:111:24 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:111:24:111:24 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:111:24:111:32 | [b (line 84): false] ... == ... | b (line 84): false | -| Assert.cs:111:24:111:32 | [b (line 84): true] ... == ... | b (line 84): true | -| Assert.cs:111:29:111:32 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:111:29:111:32 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:112:9:112:35 | [b (line 84): false] call to method WriteLine | b (line 84): false | -| Assert.cs:112:9:112:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:112:9:112:36 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:112:9:112:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:112:27:112:27 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:112:27:112:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:112:27:112:34 | [b (line 84): false] access to property Length | b (line 84): false | -| Assert.cs:112:27:112:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:114:9:114:25 | [b (line 84): false] ... = ... | b (line 84): false | -| Assert.cs:114:9:114:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:114:9:114:26 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:114:9:114:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:114:13:114:13 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:114:13:114:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:114:13:114:25 | [b (line 84): false] ... ? ... : ... | b (line 84): false | -| Assert.cs:114:13:114:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:114:17:114:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:114:24:114:25 | [b (line 84): false] "" | b (line 84): false | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): false] call to method IsTrue | b (line 84): false | -| Assert.cs:115:9:115:37 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:115:9:115:37 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:115:9:115:38 | [b (line 84): false] ...; | b (line 84): false | -| Assert.cs:115:9:115:38 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:115:23:115:23 | [b (line 84): false] access to local variable s | b (line 84): false | -| Assert.cs:115:23:115:23 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:115:23:115:31 | [b (line 84): false] ... != ... | b (line 84): false | -| Assert.cs:115:23:115:31 | [b (line 84): true] ... != ... | b (line 84): true | -| Assert.cs:115:23:115:36 | [false, b (line 84): false] ... && ... | b (line 84): false | -| Assert.cs:115:23:115:36 | [false, b (line 84): true] ... && ... | b (line 84): true | -| Assert.cs:115:23:115:36 | [true, b (line 84): true] ... && ... | b (line 84): true | -| Assert.cs:115:28:115:31 | [b (line 84): false] null | b (line 84): false | -| Assert.cs:115:28:115:31 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:115:36:115:36 | [b (line 84): false] access to parameter b | b (line 84): false | -| Assert.cs:115:36:115:36 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:116:9:116:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:116:9:116:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:116:27:116:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:116:27:116:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:118:9:118:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:118:9:118:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:118:13:118:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:118:13:118:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:118:17:118:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:119:9:119:39 | [assertion failure, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:119:9:119:39 | [assertion success, b (line 84): true] call to method IsFalse | b (line 84): true | -| Assert.cs:119:9:119:40 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:119:24:119:24 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:119:24:119:32 | [b (line 84): true] ... == ... | b (line 84): true | -| Assert.cs:119:24:119:38 | [false, b (line 84): true] ... \|\| ... | b (line 84): true | -| Assert.cs:119:24:119:38 | [true, b (line 84): true] ... \|\| ... | b (line 84): true | -| Assert.cs:119:29:119:32 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:119:37:119:38 | [false, b (line 84): true] !... | b (line 84): true | -| Assert.cs:119:38:119:38 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:120:9:120:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:120:9:120:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:120:27:120:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:120:27:120:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:122:9:122:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:122:9:122:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:122:13:122:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:122:13:122:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:122:17:122:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:123:9:123:37 | [assertion failure, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:123:9:123:37 | [assertion success, b (line 84): true] call to method IsTrue | b (line 84): true | -| Assert.cs:123:9:123:38 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:123:23:123:23 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:123:23:123:31 | [b (line 84): true] ... == ... | b (line 84): true | -| Assert.cs:123:23:123:36 | [false, b (line 84): true] ... && ... | b (line 84): true | -| Assert.cs:123:23:123:36 | [true, b (line 84): true] ... && ... | b (line 84): true | -| Assert.cs:123:28:123:31 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:123:36:123:36 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:124:9:124:35 | [b (line 84): true] call to method WriteLine | b (line 84): true | -| Assert.cs:124:9:124:36 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:124:27:124:27 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:124:27:124:34 | [b (line 84): true] access to property Length | b (line 84): true | -| Assert.cs:126:9:126:25 | [b (line 84): true] ... = ... | b (line 84): true | -| Assert.cs:126:9:126:26 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:126:13:126:13 | [b (line 84): true] access to parameter b | b (line 84): true | -| Assert.cs:126:13:126:25 | [b (line 84): true] ... ? ... : ... | b (line 84): true | -| Assert.cs:126:17:126:20 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:127:9:127:40 | [b (line 84): true] ...; | b (line 84): true | -| Assert.cs:127:24:127:24 | [b (line 84): true] access to local variable s | b (line 84): true | -| Assert.cs:127:24:127:32 | [b (line 84): true] ... != ... | b (line 84): true | -| Assert.cs:127:29:127:32 | [b (line 84): true] null | b (line 84): true | -| Assert.cs:127:38:127:38 | [b (line 84): true] access to parameter b | b (line 84): true | -| Conditions.cs:6:13:6:13 | [inc (line 3): true] access to parameter x | inc (line 3): true | -| Conditions.cs:6:13:6:15 | [inc (line 3): true] ...++ | inc (line 3): true | -| Conditions.cs:6:13:6:16 | [inc (line 3): true] ...; | inc (line 3): true | -| Conditions.cs:7:9:8:16 | [inc (line 3): false] if (...) ... | inc (line 3): false | -| Conditions.cs:7:9:8:16 | [inc (line 3): true] if (...) ... | inc (line 3): true | -| Conditions.cs:7:14:7:16 | [inc (line 3): false] access to parameter inc | inc (line 3): false | -| Conditions.cs:7:14:7:16 | [inc (line 3): true] access to parameter inc | inc (line 3): true | -| Conditions.cs:15:13:15:13 | [b (line 11): true] access to local variable x | b (line 11): true | -| Conditions.cs:15:13:15:15 | [b (line 11): true] ...++ | b (line 11): true | -| Conditions.cs:15:13:15:16 | [b (line 11): true] ...; | b (line 11): true | -| Conditions.cs:16:9:18:20 | [b (line 11): false] if (...) ... | b (line 11): false | -| Conditions.cs:16:9:18:20 | [b (line 11): true] if (...) ... | b (line 11): true | -| Conditions.cs:16:13:16:13 | [b (line 11): false] access to local variable x | b (line 11): false | -| Conditions.cs:16:13:16:13 | [b (line 11): true] access to local variable x | b (line 11): true | -| Conditions.cs:16:13:16:17 | [b (line 11): false] ... > ... | b (line 11): false | -| Conditions.cs:16:13:16:17 | [b (line 11): true] ... > ... | b (line 11): true | -| Conditions.cs:16:17:16:17 | [b (line 11): false] 0 | b (line 11): false | -| Conditions.cs:16:17:16:17 | [b (line 11): true] 0 | b (line 11): true | -| Conditions.cs:17:13:18:20 | [b (line 11): false] if (...) ... | b (line 11): false | -| Conditions.cs:17:13:18:20 | [b (line 11): true] if (...) ... | b (line 11): true | -| Conditions.cs:17:18:17:18 | [b (line 11): false] access to parameter b | b (line 11): false | -| Conditions.cs:17:18:17:18 | [b (line 11): true] access to parameter b | b (line 11): true | -| Conditions.cs:27:17:27:17 | [b2 (line 22): true] access to local variable x | b2 (line 22): true | -| Conditions.cs:27:17:27:19 | [b2 (line 22): true] ...++ | b2 (line 22): true | -| Conditions.cs:27:17:27:20 | [b2 (line 22): true] ...; | b2 (line 22): true | -| Conditions.cs:28:9:29:16 | [b2 (line 22): false] if (...) ... | b2 (line 22): false | -| Conditions.cs:28:9:29:16 | [b2 (line 22): true] if (...) ... | b2 (line 22): true | -| Conditions.cs:28:13:28:14 | [b2 (line 22): false] access to parameter b2 | b2 (line 22): false | -| Conditions.cs:28:13:28:14 | [b2 (line 22): true] access to parameter b2 | b2 (line 22): true | -| Conditions.cs:40:13:40:13 | [b2 (line 39): true] access to local variable x | b2 (line 39): true | -| Conditions.cs:40:13:40:15 | [b2 (line 39): true] ...++ | b2 (line 39): true | -| Conditions.cs:40:13:40:16 | [b2 (line 39): true] ...; | b2 (line 39): true | -| Conditions.cs:41:9:42:16 | [b2 (line 39): false] if (...) ... | b2 (line 39): false | -| Conditions.cs:41:9:42:16 | [b2 (line 39): true] if (...) ... | b2 (line 39): true | -| Conditions.cs:41:13:41:14 | [b2 (line 39): false] access to local variable b2 | b2 (line 39): false | -| Conditions.cs:41:13:41:14 | [b2 (line 39): true] access to local variable b2 | b2 (line 39): true | -| Conditions.cs:49:16:49:16 | [b (line 46): false] access to parameter x | b (line 46): false | -| Conditions.cs:49:16:49:16 | [b (line 46): true] access to parameter x | b (line 46): true | -| Conditions.cs:49:16:49:18 | [b (line 46): false] ...-- | b (line 46): false | -| Conditions.cs:49:16:49:18 | [b (line 46): true] ...-- | b (line 46): true | -| Conditions.cs:49:16:49:22 | [b (line 46): false] ... > ... | b (line 46): false | -| Conditions.cs:49:16:49:22 | [b (line 46): true] ... > ... | b (line 46): true | -| Conditions.cs:49:22:49:22 | [b (line 46): false] 0 | b (line 46): false | -| Conditions.cs:49:22:49:22 | [b (line 46): true] 0 | b (line 46): true | -| Conditions.cs:50:9:53:9 | [b (line 46): false] {...} | b (line 46): false | -| Conditions.cs:50:9:53:9 | [b (line 46): true] {...} | b (line 46): true | -| Conditions.cs:51:13:52:20 | [b (line 46): false] if (...) ... | b (line 46): false | -| Conditions.cs:51:13:52:20 | [b (line 46): true] if (...) ... | b (line 46): true | -| Conditions.cs:51:17:51:17 | [b (line 46): false] access to parameter b | b (line 46): false | -| Conditions.cs:51:17:51:17 | [b (line 46): true] access to parameter b | b (line 46): true | -| Conditions.cs:52:17:52:17 | [b (line 46): true] access to local variable y | b (line 46): true | -| Conditions.cs:52:17:52:19 | [b (line 46): true] ...++ | b (line 46): true | -| Conditions.cs:52:17:52:20 | [b (line 46): true] ...; | b (line 46): true | -| Conditions.cs:60:16:60:16 | [b (line 57): false] access to parameter x | b (line 57): false | -| Conditions.cs:60:16:60:16 | [b (line 57): true] access to parameter x | b (line 57): true | -| Conditions.cs:60:16:60:18 | [b (line 57): false] ...-- | b (line 57): false | -| Conditions.cs:60:16:60:18 | [b (line 57): true] ...-- | b (line 57): true | -| Conditions.cs:60:16:60:22 | [b (line 57): false] ... > ... | b (line 57): false | -| Conditions.cs:60:16:60:22 | [b (line 57): true] ... > ... | b (line 57): true | -| Conditions.cs:60:22:60:22 | [b (line 57): false] 0 | b (line 57): false | -| Conditions.cs:60:22:60:22 | [b (line 57): true] 0 | b (line 57): true | -| Conditions.cs:61:9:64:9 | [b (line 57): false] {...} | b (line 57): false | -| Conditions.cs:61:9:64:9 | [b (line 57): true] {...} | b (line 57): true | -| Conditions.cs:62:13:63:20 | [b (line 57): false] if (...) ... | b (line 57): false | -| Conditions.cs:62:13:63:20 | [b (line 57): true] if (...) ... | b (line 57): true | -| Conditions.cs:62:17:62:17 | [b (line 57): false] access to parameter b | b (line 57): false | -| Conditions.cs:62:17:62:17 | [b (line 57): true] access to parameter b | b (line 57): true | -| Conditions.cs:63:17:63:17 | [b (line 57): true] access to local variable y | b (line 57): true | -| Conditions.cs:63:17:63:19 | [b (line 57): true] ...++ | b (line 57): true | -| Conditions.cs:63:17:63:20 | [b (line 57): true] ...; | b (line 57): true | -| Conditions.cs:65:9:66:16 | [b (line 57): false] if (...) ... | b (line 57): false | -| Conditions.cs:65:9:66:16 | [b (line 57): true] if (...) ... | b (line 57): true | -| Conditions.cs:65:13:65:13 | [b (line 57): false] access to parameter b | b (line 57): false | -| Conditions.cs:65:13:65:13 | [b (line 57): true] access to parameter b | b (line 57): true | -| Conditions.cs:106:13:106:13 | [b (line 102): true] access to local variable x | b (line 102): true | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... + ... | b (line 102): true | -| Conditions.cs:106:13:106:19 | [b (line 102): true] ... = ... | b (line 102): true | -| Conditions.cs:106:13:106:20 | [b (line 102): true] ...; | b (line 102): true | -| Conditions.cs:106:18:106:19 | [b (line 102): true] "" | b (line 102): true | -| Conditions.cs:107:9:109:24 | [b (line 102): false] if (...) ... | b (line 102): false | -| Conditions.cs:107:9:109:24 | [b (line 102): true] if (...) ... | b (line 102): true | -| Conditions.cs:107:13:107:13 | [b (line 102): false] access to local variable x | b (line 102): false | -| Conditions.cs:107:13:107:13 | [b (line 102): true] access to local variable x | b (line 102): true | -| Conditions.cs:107:13:107:20 | [b (line 102): false] access to property Length | b (line 102): false | -| Conditions.cs:107:13:107:20 | [b (line 102): true] access to property Length | b (line 102): true | -| Conditions.cs:107:13:107:24 | [b (line 102): false] ... > ... | b (line 102): false | -| Conditions.cs:107:13:107:24 | [b (line 102): true] ... > ... | b (line 102): true | -| Conditions.cs:107:24:107:24 | [b (line 102): false] 0 | b (line 102): false | -| Conditions.cs:107:24:107:24 | [b (line 102): true] 0 | b (line 102): true | -| Conditions.cs:108:13:109:24 | [b (line 102): false] if (...) ... | b (line 102): false | -| Conditions.cs:108:13:109:24 | [b (line 102): true] if (...) ... | b (line 102): true | -| Conditions.cs:108:18:108:18 | [b (line 102): false] access to parameter b | b (line 102): false | -| Conditions.cs:108:18:108:18 | [b (line 102): true] access to parameter b | b (line 102): true | -| Conditions.cs:119:17:119:21 | [false, last (line 118): true] !... | last (line 118): true | -| Conditions.cs:119:17:119:21 | [true, last (line 118): false] !... | last (line 118): false | -| Conditions.cs:120:17:120:22 | [last (line 118): false] ... = ... | last (line 118): false | -| Conditions.cs:120:17:120:23 | [last (line 118): false] ...; | last (line 118): false | -| Conditions.cs:120:21:120:22 | [last (line 118): false] "" | last (line 118): false | -| Conditions.cs:121:13:122:25 | [last (line 118): false] if (...) ... | last (line 118): false | -| Conditions.cs:121:13:122:25 | [last (line 118): true] if (...) ... | last (line 118): true | -| Conditions.cs:121:17:121:20 | [last (line 118): false] access to local variable last | last (line 118): false | -| Conditions.cs:121:17:121:20 | [last (line 118): true] access to local variable last | last (line 118): true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): false] true | Field1 (line 129): false | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Field1 (line 129): true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): false] true | Field2 (line 129): false | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Field1 (line 129): true | -| Conditions.cs:131:16:131:19 | [Field1 (line 129): true, Field2 (line 129): true] true | Field2 (line 129): true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): false] {...} | Field1 (line 129): false | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Field1 (line 129): true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Field2 (line 129): false | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field1 (line 129): true | -| Conditions.cs:132:9:140:9 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field2 (line 129): true | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): false] if (...) ... | Field1 (line 129): false | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Field1 (line 129): true | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Field2 (line 129): false | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Field1 (line 129): true | -| Conditions.cs:133:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Field2 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] access to field Field1 | Field1 (line 129): false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): false] this access | Field1 (line 129): false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Field1 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field1 | Field2 (line 129): false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Field1 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): false] this access | Field2 (line 129): false | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Field1 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Field2 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field1 (line 129): true | -| Conditions.cs:133:17:133:22 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field2 (line 129): true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Field1 (line 129): true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): false] {...} | Field2 (line 129): false | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field1 (line 129): true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field2 (line 129): true | -| Conditions.cs:134:13:139:13 | [Field1 (line 129): true] {...} | Field1 (line 129): true | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Field1 (line 129): true | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): false] if (...) ... | Field2 (line 129): false | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Field1 (line 129): true | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] if (...) ... | Field2 (line 129): true | -| Conditions.cs:135:17:138:17 | [Field1 (line 129): true] if (...) ... | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] access to field Field2 | Field2 (line 129): false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): false] this access | Field2 (line 129): false | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field2 | Field2 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field2 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] access to field Field2 | Field1 (line 129): true | -| Conditions.cs:135:21:135:26 | [Field1 (line 129): true] this access | Field1 (line 129): true | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field1 (line 129): true | -| Conditions.cs:136:17:138:17 | [Field1 (line 129): true, Field2 (line 129): true] {...} | Field2 (line 129): true | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Field1 (line 129): true | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] access to field Field1 | Field2 (line 129): true | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field1 (line 129): true | -| Conditions.cs:137:21:137:26 | [Field1 (line 129): true, Field2 (line 129): true] this access | Field2 (line 129): true | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Field1 (line 129): true | -| Conditions.cs:137:21:137:37 | [Field1 (line 129): true, Field2 (line 129): true] call to method ToString | Field2 (line 129): true | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Field1 (line 129): true | -| Conditions.cs:137:21:137:38 | [Field1 (line 129): true, Field2 (line 129): true] ...; | Field2 (line 129): true | -| Conditions.cs:145:13:145:29 | [b (line 143): false] String s = ... | b (line 143): false | -| Conditions.cs:145:13:145:29 | [b (line 143): true] String s = ... | b (line 143): true | -| Conditions.cs:145:17:145:29 | [b (line 143): false] ... ? ... : ... | b (line 143): false | -| Conditions.cs:145:17:145:29 | [b (line 143): true] ... ? ... : ... | b (line 143): true | -| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | b (line 143): true | -| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | b (line 143): false | -| Conditions.cs:146:9:149:49 | [b (line 143): false] if (...) ... | b (line 143): false | -| Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | b (line 143): true | -| Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | b (line 143): false | -| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | b (line 143): true | -| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | b1 (line 176): true | -| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | b1 (line 176): true | -| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | b1 (line 176): false | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | b1 (line 176): true | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | b1 (line 176): true | -| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | b1 (line 176): false | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b1 (line 176): false | -| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b2 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): false | -| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | -| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | -| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | -| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | -| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | -| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | b1 (line 176): false | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true | -| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true | -| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | b1 (line 176): false | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | b1 (line 176): true | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | b1 (line 176): true | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | b (line 55): false | -| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | b (line 55): true | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | b (line 55): false | -| LoopUnrolling.cs:58:22:58:22 | [b (line 55): true] String x | b (line 55): true | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): false] {...} | b (line 55): false | -| LoopUnrolling.cs:59:9:64:9 | [b (line 55): true] {...} | b (line 55): true | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): false] if (...) ... | b (line 55): false | -| LoopUnrolling.cs:60:13:61:37 | [b (line 55): true] if (...) ... | b (line 55): true | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): false] access to parameter b | b (line 55): false | -| LoopUnrolling.cs:60:17:60:17 | [b (line 55): true] access to parameter b | b (line 55): true | -| LoopUnrolling.cs:61:17:61:36 | [b (line 55): true] call to method WriteLine | b (line 55): true | -| LoopUnrolling.cs:61:17:61:37 | [b (line 55): true] ...; | b (line 55): true | -| LoopUnrolling.cs:61:35:61:35 | [b (line 55): true] access to local variable x | b (line 55): true | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): false] if (...) ... | b (line 55): false | -| LoopUnrolling.cs:62:13:63:37 | [b (line 55): true] if (...) ... | b (line 55): true | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): false] access to parameter b | b (line 55): false | -| LoopUnrolling.cs:62:17:62:17 | [b (line 55): true] access to parameter b | b (line 55): true | -| LoopUnrolling.cs:63:17:63:36 | [b (line 55): true] call to method WriteLine | b (line 55): true | -| LoopUnrolling.cs:63:17:63:37 | [b (line 55): true] ...; | b (line 55): true | -| LoopUnrolling.cs:63:35:63:35 | [b (line 55): true] access to local variable x | b (line 55): true | -finallyNode -| BreakInTry.cs:30:13:33:13 | [finally: break] {...} | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:31:17:32:21 | [finally: break] if (...) ... | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:31:21:31:24 | [finally: break] access to parameter args | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:31:21:31:32 | [finally: break] ... == ... | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:31:29:31:32 | [finally: break] null | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:32:21:32:21 | [finally: break] ; | BreakInTry.cs:24:13:33:13 | try {...} ... | -| BreakInTry.cs:46:9:52:9 | [finally: return] {...} | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:47:13:51:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:47:26:47:28 | [finally: return] String arg | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:47:33:47:36 | [finally: return] access to parameter args | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:48:13:51:13 | [finally: return] {...} | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:49:17:50:26 | [finally: return] if (...) ... | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:49:21:49:23 | [finally: return] access to local variable arg | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:49:21:49:31 | [finally: return] ... == ... | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:49:28:49:31 | [finally: return] null | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:50:21:50:26 | [finally: return] break; | BreakInTry.cs:40:9:52:9 | try {...} ... | -| BreakInTry.cs:64:9:70:9 | [finally: return] {...} | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:65:13:69:13 | [finally: return] foreach (... ... in ...) ... | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:65:26:65:28 | [finally: return] String arg | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:65:33:65:36 | [finally: return] access to parameter args | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:66:13:69:13 | [finally: return] {...} | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:67:17:68:26 | [finally: return] if (...) ... | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:67:21:67:23 | [finally: return] access to local variable arg | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:58:9:70:9 | try {...} ... | -| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:58:9:70:9 | try {...} ... | -| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | -| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:9:9:16:9 | try {...} ... | -| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:32:13:39:13 | try {...} ... | -| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | -| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | -| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:89:13:99:13 | [finally: return] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:90:17:98:17 | [finally: break] try {...} ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:90:17:98:17 | [finally: continue] try {...} ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:90:17:98:17 | [finally: return] try {...} ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:91:17:94:17 | [finally: break] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:91:17:94:17 | [finally: continue] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:91:17:94:17 | [finally: return] {...} | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:21:93:46 | [finally: break] if (...) ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:21:93:46 | [finally: continue] if (...) ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:21:93:46 | [finally: return] if (...) ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:25 | [finally: break] access to local variable i | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:25 | [finally: continue] access to local variable i | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:25 | [finally: return] access to local variable i | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:30 | [finally: break] ... == ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:30 | [finally: continue] ... == ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:25:92:30 | [finally: return] ... == ... | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:30:92:30 | [finally: break] 3 | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:30:92:30 | [finally: continue] 3 | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:92:30:92:30 | [finally: return] 3 | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:25:93:46 | [finally: break] throw ...; | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:25:93:46 | [finally: continue] throw ...; | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:25:93:46 | [finally: return] throw ...; | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:90:17:98:17 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:105:9:118:9 | try {...} ... | -| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:135:9:143:9 | try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:149:9:169:9 | try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... | -| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:197:9:212:9 | try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... | -| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... | -| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... | -| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:265:9:273:9 | try {...} ... | -| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:268:9:276:9 | try {...} ... | -| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:268:9:276:9 | try {...} ... | -| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:268:9:276:9 | try {...} ... | -| cflow.cs:275:31:275:40 | [finally: return] "not dead" | cflow.cs:268:9:276:9 | try {...} ... | -entryPoint | AccessorCalls.cs:1:7:1:19 | AccessorCalls | AccessorCalls.cs:1:7:1:19 | call to constructor Object | | AccessorCalls.cs:5:23:5:25 | get_Item | AccessorCalls.cs:5:30:5:30 | access to parameter i | | AccessorCalls.cs:5:33:5:35 | set_Item | AccessorCalls.cs:5:37:5:39 | {...} | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql b/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql index fb937bfbd9f..1140f78de66 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.ql @@ -5,22 +5,6 @@ import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as Impl import semmle.code.csharp.controlflow.internal.Splitting as Splitting import Nodes -query predicate booleanNode(ElementNode e, BooleanSplit split) { split = e.getASplit() } - -class MyFinallySplitControlFlowNode extends ElementNode { - MyFinallySplitControlFlowNode() { - exists(Splitting::FinallySplitting::FinallySplitType type | - type = this.getASplit().(FinallySplit).getType() - | - not type instanceof SuccessorTypes::NormalSuccessor - ) - } - - Impl::Statements::TryStmtTree getTryStmt() { this.getAstNode() = result.getAFinallyDescendant() } -} - -query predicate finallyNode(MyFinallySplitControlFlowNode f, TryStmt try) { try = f.getTryStmt() } - query predicate entryPoint(Callable c, SourceControlFlowElement cfn) { c.getEntryPoint().getASuccessor().getAstNode() = cfn } diff --git a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected index fc84d28f449..a930349e930 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.expected @@ -1,4 +1,22 @@ -abstractValue +| | Assert.cs:9:31:9:32 | "" | +| | Assert.cs:16:31:16:32 | "" | +| | Assert.cs:23:31:23:32 | "" | +| | Assert.cs:30:31:30:32 | "" | +| | Assert.cs:37:31:37:32 | "" | +| | Assert.cs:44:31:44:32 | "" | +| | Assert.cs:51:31:51:32 | "" | +| | Assert.cs:58:31:58:32 | "" | +| | Assert.cs:65:31:65:32 | "" | +| | Assert.cs:72:31:72:32 | "" | +| | Assert.cs:79:31:79:32 | "" | +| | Collections.cs:73:40:73:41 | "" | +| | Guards.cs:96:18:96:19 | "" | +| | Guards.cs:97:31:97:31 | access to parameter s | +| | Guards.cs:157:18:157:19 | "" | +| | Guards.cs:158:24:158:24 | access to parameter o | +| | Guards.cs:282:13:282:14 | "" | +| | Guards.cs:283:17:283:17 | access to parameter o | +| | Guards.cs:341:31:341:32 | "" | | 0 | Collections.cs:11:32:11:32 | 0 | | 0 | Collections.cs:13:28:13:28 | 0 | | 0 | Collections.cs:15:27:15:27 | 0 | @@ -21,9 +39,13 @@ abstractValue | 0 | Collections.cs:86:17:86:32 | 0 | | 0 | Guards.cs:12:24:12:24 | 0 | | 0 | Guards.cs:78:26:78:26 | 0 | +| 0 | Guards.cs:78:26:78:26 | (...) ... | | 0 | Guards.cs:80:25:80:25 | 0 | +| 0 | Guards.cs:80:25:80:25 | (...) ... | | 0 | Guards.cs:82:26:82:26 | 0 | +| 0 | Guards.cs:82:26:82:26 | (...) ... | | 0 | Guards.cs:92:30:92:30 | 0 | +| 0 | Guards.cs:92:30:92:30 | (...) ... | | 0 | Guards.cs:241:17:241:17 | 0 | | 0 | Guards.cs:255:17:255:19 | access to constant A | | 0 | Guards.cs:298:21:298:21 | 0 | @@ -32,7 +54,6 @@ abstractValue | 0 | Guards.cs:322:18:322:18 | 0 | | 0 | Guards.cs:329:17:329:19 | access to constant A | | 0 | Guards.cs:334:20:334:20 | 0 | -| 0 | Splitting.cs:137:20:137:20 | 0 | | 1 | Collections.cs:12:28:12:28 | 1 | | 1 | Collections.cs:14:28:14:28 | 1 | | 1 | Collections.cs:17:28:17:28 | 1 | @@ -47,366 +68,827 @@ abstractValue | 1 | Collections.cs:81:36:81:36 | 1 | | 1 | Collections.cs:88:13:88:32 | 1 | | 1 | Guards.cs:92:25:92:25 | 1 | +| 1 | Guards.cs:92:25:92:25 | (...) ... | +| 1 | Guards.cs:243:13:243:17 | ... = ... | | 1 | Guards.cs:243:17:243:17 | 1 | | 1 | Guards.cs:246:18:246:18 | 1 | +| 1 | Guards.cs:257:13:257:19 | ... = ... | | 1 | Guards.cs:257:17:257:19 | access to constant B | | 1 | Guards.cs:260:18:260:20 | access to constant B | | 1 | Guards.cs:299:18:299:18 | 1 | | 1 | Guards.cs:311:18:311:18 | 1 | +| 1 | Guards.cs:319:13:319:17 | ... = ... | | 1 | Guards.cs:319:17:319:17 | 1 | | 1 | Guards.cs:322:13:322:13 | 1 | | 1 | Guards.cs:323:18:323:18 | 1 | +| 1 | Guards.cs:331:13:331:19 | ... = ... | | 1 | Guards.cs:331:17:331:19 | access to constant B | | 1 | Guards.cs:334:13:334:15 | access to constant B | | 1 | Guards.cs:335:18:335:18 | 1 | | 3 | Collections.cs:54:13:54:42 | 3 | | 3 | Collections.cs:62:17:62:46 | 3 | | 10 | Guards.cs:84:25:84:26 | 10 | +| 10 | Guards.cs:84:25:84:26 | (...) ... | | 10 | Guards.cs:86:26:86:27 | 10 | -| empty | Collections.cs:53:13:53:16 | access to parameter args | -| empty | Collections.cs:56:9:56:25 | ... = ... | -| empty | Collections.cs:56:13:56:25 | array creation of type String[] | -| empty | Collections.cs:57:9:57:13 | ... = ... | -| empty | Collections.cs:57:13:57:13 | access to local variable x | -| empty | Collections.cs:64:13:64:13 | access to local variable x | -| empty | Collections.cs:86:17:86:32 | array creation of type String[] | -| empty | Collections.cs:86:30:86:32 | { ..., ... } | -| empty | Collections.cs:87:22:87:24 | { ..., ... } | +| 10 | Guards.cs:86:26:86:27 | (...) ... | +| | Guards.cs:18:31:18:46 | "" | +| a | Collections.cs:54:28:54:30 | "a" | +| a | Collections.cs:62:32:62:34 | "a" | +| a | Collections.cs:66:19:66:21 | "a" | +| a | Collections.cs:88:28:88:30 | "a" | +| a | Collections.cs:89:24:89:26 | "a" | +| b | Collections.cs:54:33:54:35 | "b" | +| b | Collections.cs:62:37:62:39 | "b" | +| b | Collections.cs:67:19:67:21 | "b" | +| c | Collections.cs:54:38:54:40 | "c" | +| c | Collections.cs:62:42:62:44 | "c" | | false | Assert.cs:85:61:85:65 | false | +| false | Assert.cs:94:23:94:24 | access to parameter b2 | | false | Guards.cs:178:16:178:20 | false | | false | Guards.cs:181:53:181:57 | false | +| false | Guards.cs:217:13:217:22 | ... = ... | | false | Guards.cs:217:18:217:22 | false | | false | Guards.cs:228:18:228:22 | false | +| false | Guards.cs:295:13:295:22 | ... = ... | | false | Guards.cs:295:18:295:22 | false | | false | Guards.cs:305:18:305:22 | false | -| non-empty | Collections.cs:54:9:54:42 | ... = ... | -| non-empty | Collections.cs:54:13:54:42 | array creation of type String[] | -| non-empty | Collections.cs:54:26:54:42 | { ..., ... } | -| non-empty | Collections.cs:55:9:55:13 | ... = ... | -| non-empty | Collections.cs:55:13:55:13 | access to local variable x | -| non-empty | Collections.cs:62:17:62:46 | array creation of type String[] | -| non-empty | Collections.cs:62:30:62:46 | { ..., ... } | -| non-empty | Collections.cs:67:13:67:13 | access to local variable x | -| non-empty | Collections.cs:88:9:88:32 | ... = ... | -| non-empty | Collections.cs:88:13:88:32 | array creation of type String[] | -| non-empty | Collections.cs:88:26:88:32 | { ..., ... } | -| non-empty | Collections.cs:89:22:89:28 | { ..., ... } | -| non-null | Assert.cs:9:31:9:32 | "" | -| non-null | Assert.cs:10:9:10:13 | access to type Debug | -| non-null | Assert.cs:11:9:11:15 | access to type Console | -| non-null | Assert.cs:11:27:11:27 | access to local variable s | -| non-null | Assert.cs:16:31:16:32 | "" | -| non-null | Assert.cs:17:9:17:14 | access to type Assert | -| non-null | Assert.cs:18:9:18:15 | access to type Console | -| non-null | Assert.cs:23:31:23:32 | "" | -| non-null | Assert.cs:24:9:24:14 | access to type Assert | -| non-null | Assert.cs:25:9:25:15 | access to type Console | -| non-null | Assert.cs:30:31:30:32 | "" | -| non-null | Assert.cs:31:9:31:14 | access to type Assert | -| non-null | Assert.cs:32:9:32:15 | access to type Console | -| non-null | Assert.cs:37:31:37:32 | "" | -| non-null | Assert.cs:38:9:38:14 | access to type Assert | -| non-null | Assert.cs:39:9:39:15 | access to type Console | -| non-null | Assert.cs:44:31:44:32 | "" | -| non-null | Assert.cs:45:9:45:14 | access to type Assert | -| non-null | Assert.cs:46:9:46:15 | access to type Console | -| non-null | Assert.cs:51:31:51:32 | "" | -| non-null | Assert.cs:52:9:52:14 | access to type Assert | -| non-null | Assert.cs:53:9:53:15 | access to type Console | -| non-null | Assert.cs:58:31:58:32 | "" | -| non-null | Assert.cs:59:9:59:14 | access to type Assert | -| non-null | Assert.cs:60:9:60:15 | access to type Console | -| non-null | Assert.cs:65:31:65:32 | "" | -| non-null | Assert.cs:66:9:66:14 | access to type Assert | -| non-null | Assert.cs:67:9:67:15 | access to type Console | -| non-null | Assert.cs:72:31:72:32 | "" | -| non-null | Assert.cs:73:9:73:14 | access to type Assert | -| non-null | Assert.cs:74:9:74:15 | access to type Console | -| non-null | Assert.cs:79:31:79:32 | "" | -| non-null | Assert.cs:80:9:80:14 | access to type Assert | -| non-null | Assert.cs:81:9:81:15 | access to type Console | -| non-null | Assert.cs:93:9:93:35 | this access | -| non-null | Collections.cs:11:17:11:20 | access to parameter args | -| non-null | Collections.cs:12:13:12:16 | access to parameter args | -| non-null | Collections.cs:13:13:13:16 | access to parameter args | -| non-null | Collections.cs:14:13:14:16 | access to parameter args | -| non-null | Collections.cs:15:13:15:16 | access to parameter args | -| non-null | Collections.cs:16:13:16:16 | access to parameter args | -| non-null | Collections.cs:17:13:17:16 | access to parameter args | -| non-null | Collections.cs:22:17:22:20 | access to parameter args | -| non-null | Collections.cs:23:13:23:16 | access to parameter args | -| non-null | Collections.cs:24:13:24:16 | access to parameter args | -| non-null | Collections.cs:25:13:25:16 | access to parameter args | -| non-null | Collections.cs:26:13:26:16 | access to parameter args | -| non-null | Collections.cs:27:13:27:16 | access to parameter args | -| non-null | Collections.cs:28:13:28:16 | access to parameter args | -| non-null | Collections.cs:33:17:33:20 | access to parameter args | -| non-null | Collections.cs:34:13:34:16 | access to parameter args | -| non-null | Collections.cs:35:13:35:16 | access to parameter args | -| non-null | Collections.cs:36:13:36:16 | access to parameter args | -| non-null | Collections.cs:37:13:37:16 | access to parameter args | -| non-null | Collections.cs:38:13:38:16 | access to parameter args | -| non-null | Collections.cs:39:13:39:16 | access to parameter args | -| non-null | Collections.cs:44:17:44:20 | access to parameter args | -| non-null | Collections.cs:49:13:49:16 | access to parameter args | -| non-null | Collections.cs:51:17:51:20 | access to parameter args | -| non-null | Collections.cs:51:17:51:30 | call to method ToArray | -| non-null | Collections.cs:52:9:52:12 | access to parameter args | -| non-null | Collections.cs:53:9:53:9 | access to local variable x | -| non-null | Collections.cs:53:9:53:26 | ... = ... | -| non-null | Collections.cs:53:13:53:16 | access to parameter args | -| non-null | Collections.cs:53:13:53:26 | call to method ToArray | -| non-null | Collections.cs:54:9:54:9 | access to local variable x | -| non-null | Collections.cs:54:9:54:42 | ... = ... | -| non-null | Collections.cs:54:13:54:42 | array creation of type String[] | -| non-null | Collections.cs:54:28:54:30 | "a" | -| non-null | Collections.cs:54:33:54:35 | "b" | -| non-null | Collections.cs:54:38:54:40 | "c" | -| non-null | Collections.cs:55:9:55:9 | access to local variable x | -| non-null | Collections.cs:55:9:55:13 | ... = ... | -| non-null | Collections.cs:55:13:55:13 | access to local variable x | -| non-null | Collections.cs:56:9:56:9 | access to local variable x | -| non-null | Collections.cs:56:9:56:25 | ... = ... | -| non-null | Collections.cs:56:13:56:25 | array creation of type String[] | -| non-null | Collections.cs:57:9:57:9 | access to local variable x | -| non-null | Collections.cs:57:9:57:13 | ... = ... | -| non-null | Collections.cs:57:13:57:13 | access to local variable x | -| non-null | Collections.cs:62:17:62:46 | array creation of type String[] | -| non-null | Collections.cs:62:17:62:55 | call to method ToList | -| non-null | Collections.cs:62:32:62:34 | "a" | -| non-null | Collections.cs:62:37:62:39 | "b" | -| non-null | Collections.cs:62:42:62:44 | "c" | -| non-null | Collections.cs:63:9:63:9 | access to local variable x | -| non-null | Collections.cs:64:13:64:13 | access to local variable x | -| non-null | Collections.cs:66:13:66:13 | access to local variable x | -| non-null | Collections.cs:66:19:66:21 | "a" | -| non-null | Collections.cs:67:13:67:13 | access to local variable x | -| non-null | Collections.cs:67:19:67:21 | "b" | -| non-null | Collections.cs:73:35:73:35 | access to parameter s | -| non-null | Collections.cs:73:40:73:41 | "" | -| non-null | Collections.cs:74:17:74:20 | access to parameter args | -| non-null | Collections.cs:74:26:74:32 | access to local function IsEmpty | -| non-null | Collections.cs:74:26:74:32 | delegate creation of type Func | -| non-null | Collections.cs:74:26:74:32 | this access | -| non-null | Collections.cs:75:13:75:16 | access to parameter args | -| non-null | Collections.cs:75:24:75:30 | access to local function IsEmpty | -| non-null | Collections.cs:75:24:75:30 | delegate creation of type Func | -| non-null | Collections.cs:75:24:75:30 | this access | -| non-null | Collections.cs:76:13:76:16 | access to parameter args | -| non-null | Collections.cs:76:24:76:30 | access to local function IsEmpty | -| non-null | Collections.cs:76:24:76:30 | delegate creation of type Func | -| non-null | Collections.cs:76:24:76:30 | this access | -| non-null | Collections.cs:77:13:77:16 | access to parameter args | -| non-null | Collections.cs:77:24:77:30 | access to local function IsEmpty | -| non-null | Collections.cs:77:24:77:30 | delegate creation of type Func | -| non-null | Collections.cs:77:24:77:30 | this access | -| non-null | Collections.cs:78:13:78:16 | access to parameter args | -| non-null | Collections.cs:78:24:78:30 | access to local function IsEmpty | -| non-null | Collections.cs:78:24:78:30 | delegate creation of type Func | -| non-null | Collections.cs:78:24:78:30 | this access | -| non-null | Collections.cs:79:13:79:16 | access to parameter args | -| non-null | Collections.cs:79:24:79:30 | access to local function IsEmpty | -| non-null | Collections.cs:79:24:79:30 | delegate creation of type Func | -| non-null | Collections.cs:79:24:79:30 | this access | -| non-null | Collections.cs:80:13:80:16 | access to parameter args | -| non-null | Collections.cs:80:24:80:30 | access to local function IsEmpty | -| non-null | Collections.cs:80:24:80:30 | delegate creation of type Func | -| non-null | Collections.cs:80:24:80:30 | this access | -| non-null | Collections.cs:81:13:81:16 | access to parameter args | -| non-null | Collections.cs:81:24:81:30 | access to local function IsEmpty | -| non-null | Collections.cs:81:24:81:30 | delegate creation of type Func | -| non-null | Collections.cs:81:24:81:30 | this access | -| non-null | Collections.cs:86:17:86:32 | array creation of type String[] | -| non-null | Collections.cs:87:22:87:24 | array creation of type String[] | -| non-null | Collections.cs:88:9:88:9 | access to local variable x | -| non-null | Collections.cs:88:9:88:32 | ... = ... | -| non-null | Collections.cs:88:13:88:32 | array creation of type String[] | -| non-null | Collections.cs:88:28:88:30 | "a" | -| non-null | Collections.cs:89:22:89:28 | array creation of type String[] | -| non-null | Collections.cs:89:24:89:26 | "a" | -| non-null | Collections.cs:94:29:94:32 | access to parameter args | -| non-null | Collections.cs:95:13:95:19 | access to type Console | -| non-null | Collections.cs:95:31:95:34 | access to parameter args | -| non-null | Collections.cs:100:29:100:32 | access to parameter args | -| non-null | Collections.cs:102:9:102:15 | access to type Console | -| non-null | Collections.cs:102:27:102:30 | access to parameter args | -| non-null | Guards.cs:12:13:12:13 | access to parameter s | -| non-null | Guards.cs:14:13:14:19 | access to type Console | -| non-null | Guards.cs:14:31:14:31 | access to parameter s | -| non-null | Guards.cs:18:13:18:19 | access to type Console | -| non-null | Guards.cs:18:31:18:46 | "" | -| non-null | Guards.cs:26:13:26:19 | access to type Console | -| non-null | Guards.cs:26:31:26:31 | access to parameter s | -| non-null | Guards.cs:32:14:32:19 | access to type String | -| non-null | Guards.cs:33:13:33:19 | access to type Console | -| non-null | Guards.cs:33:31:33:35 | ... + ... | -| non-null | Guards.cs:36:14:36:20 | access to type Console | -| non-null | Guards.cs:36:32:36:32 | access to parameter x | -| non-null | Guards.cs:36:32:36:36 | ... + ... | -| non-null | Guards.cs:36:36:36:36 | access to parameter y | -| non-null | Guards.cs:39:13:39:19 | access to type Console | -| non-null | Guards.cs:39:31:39:31 | access to parameter x | -| non-null | Guards.cs:39:31:39:35 | ... + ... | -| non-null | Guards.cs:39:35:39:35 | access to parameter y | -| non-null | Guards.cs:42:14:42:20 | access to type Console | -| non-null | Guards.cs:42:32:42:32 | access to parameter x | -| non-null | Guards.cs:42:32:42:36 | ... + ... | -| non-null | Guards.cs:42:36:42:36 | access to parameter y | -| non-null | Guards.cs:44:13:44:17 | this access | -| non-null | Guards.cs:45:13:45:19 | access to type Console | -| non-null | Guards.cs:45:31:45:42 | object creation of type Guards | -| non-null | Guards.cs:47:13:47:17 | this access | -| non-null | Guards.cs:48:13:48:19 | access to type Console | -| non-null | Guards.cs:48:31:48:34 | this access | -| non-null | Guards.cs:48:31:48:40 | access to field Field | -| non-null | Guards.cs:53:13:53:13 | access to parameter g | -| non-null | Guards.cs:55:9:55:15 | access to type Console | -| non-null | Guards.cs:55:27:55:27 | access to parameter g | -| non-null | Guards.cs:55:27:55:33 | access to field Field | -| non-null | Guards.cs:60:13:60:13 | access to parameter g | -| non-null | Guards.cs:61:19:61:33 | object creation of type Exception | -| non-null | Guards.cs:62:9:62:15 | access to type Console | -| non-null | Guards.cs:62:27:62:27 | access to parameter g | -| non-null | Guards.cs:62:27:62:36 | access to property Property | -| non-null | Guards.cs:62:27:62:45 | access to property Property | -| non-null | Guards.cs:62:27:62:51 | access to field Field | -| non-null | Guards.cs:63:9:63:15 | access to type Console | -| non-null | Guards.cs:63:27:63:27 | access to parameter g | -| non-null | Guards.cs:63:27:63:36 | access to property Property | -| non-null | Guards.cs:70:13:70:19 | access to type Console | -| non-null | Guards.cs:70:31:70:31 | access to parameter s | -| non-null | Guards.cs:71:13:71:13 | access to parameter s | -| non-null | Guards.cs:72:13:72:19 | access to type Console | -| non-null | Guards.cs:78:26:78:26 | (...) ... | -| non-null | Guards.cs:79:13:79:19 | access to type Console | -| non-null | Guards.cs:79:31:79:31 | access to parameter s | -| non-null | Guards.cs:80:25:80:25 | (...) ... | -| non-null | Guards.cs:81:13:81:19 | access to type Console | -| non-null | Guards.cs:81:31:81:31 | access to parameter s | -| non-null | Guards.cs:82:26:82:26 | (...) ... | -| non-null | Guards.cs:83:13:83:19 | access to type Console | -| non-null | Guards.cs:83:31:83:31 | access to parameter s | -| non-null | Guards.cs:84:25:84:26 | (...) ... | -| non-null | Guards.cs:85:13:85:19 | access to type Console | -| non-null | Guards.cs:85:31:85:31 | access to parameter s | -| non-null | Guards.cs:86:26:86:27 | (...) ... | -| non-null | Guards.cs:87:13:87:19 | access to type Console | -| non-null | Guards.cs:87:31:87:31 | access to parameter s | -| non-null | Guards.cs:89:13:89:19 | access to type Console | -| non-null | Guards.cs:89:31:89:31 | access to parameter s | -| non-null | Guards.cs:91:13:91:19 | access to type Console | -| non-null | Guards.cs:92:25:92:25 | (...) ... | -| non-null | Guards.cs:92:30:92:30 | (...) ... | -| non-null | Guards.cs:93:13:93:19 | access to type Console | -| non-null | Guards.cs:95:13:95:19 | access to type Console | -| non-null | Guards.cs:96:18:96:19 | "" | -| non-null | Guards.cs:97:13:97:19 | access to type Console | -| non-null | Guards.cs:97:31:97:31 | access to parameter s | -| non-null | Guards.cs:99:13:99:19 | access to type Console | -| non-null | Guards.cs:104:13:104:13 | access to parameter g | -| non-null | Guards.cs:105:19:105:33 | object creation of type Exception | -| non-null | Guards.cs:106:9:106:9 | access to parameter g | -| non-null | Guards.cs:106:9:106:18 | access to property Property | -| non-null | Guards.cs:107:9:107:15 | access to type Console | -| non-null | Guards.cs:107:27:107:27 | access to parameter g | -| non-null | Guards.cs:108:9:108:15 | access to type Console | -| non-null | Guards.cs:108:27:108:27 | access to parameter g | -| non-null | Guards.cs:108:27:108:36 | access to property Property | -| non-null | Guards.cs:113:21:113:21 | access to parameter g | -| non-null | Guards.cs:114:14:114:14 | access to parameter g | -| non-null | Guards.cs:114:14:114:23 | access to property Property | -| non-null | Guards.cs:114:14:114:32 | access to property Property | -| non-null | Guards.cs:115:9:115:55 | ... = ... | -| non-null | Guards.cs:115:17:115:17 | access to parameter g | -| non-null | Guards.cs:115:17:115:26 | access to property Property | -| non-null | Guards.cs:115:17:115:35 | access to property Property | -| non-null | Guards.cs:115:17:115:55 | ... ?? ... | -| non-null | Guards.cs:115:46:115:55 | throw ... | -| non-null | Guards.cs:116:9:116:15 | access to type Console | -| non-null | Guards.cs:116:27:116:27 | access to parameter g | -| non-null | Guards.cs:116:27:116:36 | access to property Property | -| non-null | Guards.cs:116:27:116:45 | access to property Property | -| non-null | Guards.cs:116:27:116:51 | access to field Field | -| non-null | Guards.cs:117:9:117:9 | access to parameter g | -| non-null | Guards.cs:117:9:117:18 | access to property Property | -| non-null | Guards.cs:118:9:118:15 | access to type Console | -| non-null | Guards.cs:118:27:118:27 | access to parameter g | -| non-null | Guards.cs:119:9:119:15 | access to type Console | -| non-null | Guards.cs:119:27:119:27 | access to parameter g | -| non-null | Guards.cs:119:27:119:36 | access to property Property | -| non-null | Guards.cs:125:18:125:19 | access to parameter s1 | -| non-null | Guards.cs:125:29:125:30 | access to parameter s1 | -| non-null | Guards.cs:132:16:132:16 | access to parameter s | -| non-null | Guards.cs:138:20:138:20 | access to parameter s | -| non-null | Guards.cs:145:20:145:20 | access to local variable s | -| non-null | Guards.cs:154:24:154:24 | access to parameter o | -| non-null | Guards.cs:156:24:156:24 | access to local variable a | -| non-null | Guards.cs:158:24:158:24 | access to parameter o | -| non-null | Guards.cs:162:24:162:24 | access to parameter o | -| non-null | Guards.cs:168:14:168:19 | access to type String | -| non-null | Guards.cs:169:13:169:19 | access to type Console | -| non-null | Guards.cs:169:31:169:31 | access to parameter x | -| non-null | Guards.cs:183:38:183:49 | this access | -| non-null | Guards.cs:189:14:189:25 | this access | -| non-null | Guards.cs:190:13:190:19 | access to type Console | -| non-null | Guards.cs:191:14:191:25 | this access | -| non-null | Guards.cs:192:13:192:19 | access to type Console | -| non-null | Guards.cs:193:14:193:25 | this access | -| non-null | Guards.cs:194:13:194:19 | access to type Console | -| non-null | Guards.cs:195:13:195:27 | this access | -| non-null | Guards.cs:196:13:196:19 | access to type Console | -| non-null | Guards.cs:197:14:197:29 | this access | -| non-null | Guards.cs:198:13:198:19 | access to type Console | -| non-null | Guards.cs:205:13:205:13 | access to parameter o | -| non-null | Guards.cs:206:33:206:36 | access to parameter args | -| non-null | Guards.cs:208:17:208:17 | access to parameter o | -| non-null | Guards.cs:268:30:268:41 | call to method GetType | -| non-null | Guards.cs:269:13:269:14 | access to parameter o1 | -| non-null | Guards.cs:270:30:270:31 | access to parameter o2 | -| non-null | Guards.cs:279:17:279:17 | access to parameter o | -| non-null | Guards.cs:281:17:281:17 | access to local variable a | -| non-null | Guards.cs:283:17:283:17 | access to parameter o | -| non-null | Guards.cs:287:17:287:17 | access to parameter o | -| non-null | Guards.cs:341:31:341:32 | "" | -| non-null | Guards.cs:343:13:343:19 | access to type Console | -| non-null | Guards.cs:343:31:343:31 | access to local variable s | -| non-null | Guards.cs:349:13:349:13 | access to parameter o | -| non-null | Splitting.cs:13:17:13:17 | access to parameter o | -| non-null | Splitting.cs:23:24:23:24 | access to parameter o | -| non-null | Splitting.cs:33:24:33:25 | "" | -| non-null | Splitting.cs:44:17:44:17 | access to parameter o | -| non-null | Splitting.cs:46:17:46:17 | access to parameter o | -| non-null | Splitting.cs:55:13:55:13 | access to parameter o | -| non-null | Splitting.cs:66:20:66:20 | access to parameter o | -| non-null | Splitting.cs:78:24:78:24 | access to parameter o | -| non-null | Splitting.cs:87:13:87:17 | access to type Debug | -| non-null | Splitting.cs:90:13:90:13 | access to parameter o | -| non-null | Splitting.cs:91:9:91:9 | access to parameter o | -| non-null | Splitting.cs:97:13:97:17 | access to type Debug | -| non-null | Splitting.cs:105:9:105:13 | access to type Debug | -| non-null | Splitting.cs:107:13:107:13 | access to parameter o | -| non-null | Splitting.cs:109:13:109:13 | access to parameter o | -| non-null | Splitting.cs:116:9:116:13 | access to type Debug | -| non-null | Splitting.cs:117:9:117:9 | access to parameter o | -| non-null | Splitting.cs:119:13:119:13 | access to parameter o | -| non-null | Splitting.cs:120:16:120:16 | access to parameter o | -| non-null | Splitting.cs:129:17:129:17 | access to local variable o | -| non-null | Splitting.cs:133:17:133:17 | access to local variable o | -| non-null | Splitting.cs:133:17:133:29 | ... = ... | -| non-null | Splitting.cs:133:21:133:29 | call to method M11 | -| non-null | Splitting.cs:133:21:133:29 | this access | -| non-null | Splitting.cs:133:28:133:28 | access to local variable o | -| non-null | Splitting.cs:134:17:134:17 | access to local variable o | +| not | Guards.cs:99:31:99:31 | access to parameter s | +| not | Guards.cs:160:24:160:24 | access to parameter o | +| not | Guards.cs:162:24:162:24 | access to parameter o | +| not | Guards.cs:285:17:285:17 | access to parameter o | +| not | Guards.cs:287:17:287:17 | access to parameter o | +| not null | Assert.cs:9:20:9:20 | access to parameter b | +| not null | Assert.cs:9:31:9:32 | "" | +| not null | Assert.cs:10:9:10:13 | access to type Debug | +| not null | Assert.cs:10:9:10:31 | call to method Assert | +| not null | Assert.cs:10:22:10:30 | ... != ... | +| not null | Assert.cs:11:9:11:15 | access to type Console | +| not null | Assert.cs:11:9:11:35 | call to method WriteLine | +| not null | Assert.cs:11:27:11:27 | access to local variable s | +| not null | Assert.cs:11:27:11:34 | access to property Length | +| not null | Assert.cs:16:20:16:20 | access to parameter b | +| not null | Assert.cs:16:31:16:32 | "" | +| not null | Assert.cs:17:9:17:14 | access to type Assert | +| not null | Assert.cs:17:9:17:24 | call to method IsNull | +| not null | Assert.cs:18:9:18:15 | access to type Console | +| not null | Assert.cs:18:9:18:35 | call to method WriteLine | +| not null | Assert.cs:18:27:18:34 | access to property Length | +| not null | Assert.cs:23:20:23:20 | access to parameter b | +| not null | Assert.cs:23:31:23:32 | "" | +| not null | Assert.cs:24:9:24:14 | access to type Assert | +| not null | Assert.cs:24:9:24:27 | call to method IsNotNull | +| not null | Assert.cs:25:9:25:15 | access to type Console | +| not null | Assert.cs:25:9:25:35 | call to method WriteLine | +| not null | Assert.cs:25:27:25:27 | access to local variable s | +| not null | Assert.cs:25:27:25:34 | access to property Length | +| not null | Assert.cs:30:20:30:20 | access to parameter b | +| not null | Assert.cs:30:31:30:32 | "" | +| not null | Assert.cs:31:9:31:14 | access to type Assert | +| not null | Assert.cs:31:9:31:32 | call to method IsTrue | +| not null | Assert.cs:31:23:31:31 | ... == ... | +| not null | Assert.cs:32:9:32:15 | access to type Console | +| not null | Assert.cs:32:9:32:35 | call to method WriteLine | +| not null | Assert.cs:32:27:32:34 | access to property Length | +| not null | Assert.cs:37:20:37:20 | access to parameter b | +| not null | Assert.cs:37:31:37:32 | "" | +| not null | Assert.cs:38:9:38:14 | access to type Assert | +| not null | Assert.cs:38:9:38:32 | call to method IsTrue | +| not null | Assert.cs:38:23:38:31 | ... != ... | +| not null | Assert.cs:39:9:39:15 | access to type Console | +| not null | Assert.cs:39:9:39:35 | call to method WriteLine | +| not null | Assert.cs:39:27:39:27 | access to local variable s | +| not null | Assert.cs:39:27:39:34 | access to property Length | +| not null | Assert.cs:44:20:44:20 | access to parameter b | +| not null | Assert.cs:44:31:44:32 | "" | +| not null | Assert.cs:45:9:45:14 | access to type Assert | +| not null | Assert.cs:45:9:45:33 | call to method IsFalse | +| not null | Assert.cs:45:24:45:32 | ... != ... | +| not null | Assert.cs:46:9:46:15 | access to type Console | +| not null | Assert.cs:46:9:46:35 | call to method WriteLine | +| not null | Assert.cs:46:27:46:34 | access to property Length | +| not null | Assert.cs:51:20:51:20 | access to parameter b | +| not null | Assert.cs:51:31:51:32 | "" | +| not null | Assert.cs:52:9:52:14 | access to type Assert | +| not null | Assert.cs:52:9:52:33 | call to method IsFalse | +| not null | Assert.cs:52:24:52:32 | ... == ... | +| not null | Assert.cs:53:9:53:15 | access to type Console | +| not null | Assert.cs:53:9:53:35 | call to method WriteLine | +| not null | Assert.cs:53:27:53:27 | access to local variable s | +| not null | Assert.cs:53:27:53:34 | access to property Length | +| not null | Assert.cs:58:20:58:20 | access to parameter b | +| not null | Assert.cs:58:31:58:32 | "" | +| not null | Assert.cs:59:9:59:14 | access to type Assert | +| not null | Assert.cs:59:9:59:37 | call to method IsTrue | +| not null | Assert.cs:59:23:59:31 | ... != ... | +| not null | Assert.cs:59:23:59:36 | ... && ... | +| not null | Assert.cs:59:36:59:36 | access to parameter b | +| not null | Assert.cs:60:9:60:15 | access to type Console | +| not null | Assert.cs:60:9:60:35 | call to method WriteLine | +| not null | Assert.cs:60:27:60:27 | access to local variable s | +| not null | Assert.cs:60:27:60:34 | access to property Length | +| not null | Assert.cs:65:20:65:20 | access to parameter b | +| not null | Assert.cs:65:31:65:32 | "" | +| not null | Assert.cs:66:9:66:14 | access to type Assert | +| not null | Assert.cs:66:9:66:38 | call to method IsFalse | +| not null | Assert.cs:66:24:66:32 | ... == ... | +| not null | Assert.cs:66:24:66:37 | ... \|\| ... | +| not null | Assert.cs:66:37:66:37 | access to parameter b | +| not null | Assert.cs:67:9:67:15 | access to type Console | +| not null | Assert.cs:67:9:67:35 | call to method WriteLine | +| not null | Assert.cs:67:27:67:27 | access to local variable s | +| not null | Assert.cs:67:27:67:34 | access to property Length | +| not null | Assert.cs:72:20:72:20 | access to parameter b | +| not null | Assert.cs:72:31:72:32 | "" | +| not null | Assert.cs:73:9:73:14 | access to type Assert | +| not null | Assert.cs:73:9:73:37 | call to method IsTrue | +| not null | Assert.cs:73:23:73:31 | ... == ... | +| not null | Assert.cs:73:23:73:36 | ... && ... | +| not null | Assert.cs:73:36:73:36 | access to parameter b | +| not null | Assert.cs:74:9:74:15 | access to type Console | +| not null | Assert.cs:74:9:74:35 | call to method WriteLine | +| not null | Assert.cs:74:27:74:34 | access to property Length | +| not null | Assert.cs:79:20:79:20 | access to parameter b | +| not null | Assert.cs:79:31:79:32 | "" | +| not null | Assert.cs:80:9:80:14 | access to type Assert | +| not null | Assert.cs:80:9:80:38 | call to method IsFalse | +| not null | Assert.cs:80:24:80:32 | ... != ... | +| not null | Assert.cs:80:24:80:37 | ... \|\| ... | +| not null | Assert.cs:80:37:80:37 | access to parameter b | +| not null | Assert.cs:81:9:81:15 | access to type Console | +| not null | Assert.cs:81:9:81:35 | call to method WriteLine | +| not null | Assert.cs:81:27:81:34 | access to property Length | +| not null | Assert.cs:85:61:85:65 | false | +| not null | Assert.cs:86:61:86:64 | true | +| not null | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | +| not null | Assert.cs:93:9:93:35 | this access | +| not null | Assert.cs:93:25:93:26 | access to parameter b1 | +| not null | Assert.cs:93:29:93:30 | access to parameter b2 | +| not null | Assert.cs:93:33:93:34 | access to parameter b2 | +| not null | Assert.cs:94:16:94:17 | access to parameter b1 | +| not null | Assert.cs:94:16:94:24 | ... && ... | +| not null | Assert.cs:94:22:94:24 | !... | +| not null | Assert.cs:94:23:94:24 | access to parameter b2 | +| not null | Collections.cs:11:13:11:13 | access to local variable b | +| not null | Collections.cs:11:13:11:32 | Boolean b = ... | +| not null | Collections.cs:11:17:11:20 | access to parameter args | +| not null | Collections.cs:11:17:11:27 | access to property Length | +| not null | Collections.cs:11:17:11:32 | ... == ... | +| not null | Collections.cs:11:32:11:32 | 0 | +| not null | Collections.cs:12:9:12:9 | access to local variable b | +| not null | Collections.cs:12:9:12:28 | ... = ... | +| not null | Collections.cs:12:13:12:16 | access to parameter args | +| not null | Collections.cs:12:13:12:23 | access to property Length | +| not null | Collections.cs:12:13:12:28 | ... == ... | +| not null | Collections.cs:12:28:12:28 | 1 | +| not null | Collections.cs:13:9:13:9 | access to local variable b | +| not null | Collections.cs:13:9:13:28 | ... = ... | +| not null | Collections.cs:13:13:13:16 | access to parameter args | +| not null | Collections.cs:13:13:13:23 | access to property Length | +| not null | Collections.cs:13:13:13:28 | ... != ... | +| not null | Collections.cs:13:28:13:28 | 0 | +| not null | Collections.cs:14:9:14:9 | access to local variable b | +| not null | Collections.cs:14:9:14:28 | ... = ... | +| not null | Collections.cs:14:13:14:16 | access to parameter args | +| not null | Collections.cs:14:13:14:23 | access to property Length | +| not null | Collections.cs:14:13:14:28 | ... != ... | +| not null | Collections.cs:14:28:14:28 | 1 | +| not null | Collections.cs:15:9:15:9 | access to local variable b | +| not null | Collections.cs:15:9:15:27 | ... = ... | +| not null | Collections.cs:15:13:15:16 | access to parameter args | +| not null | Collections.cs:15:13:15:23 | access to property Length | +| not null | Collections.cs:15:13:15:27 | ... > ... | +| not null | Collections.cs:15:27:15:27 | 0 | +| not null | Collections.cs:16:9:16:9 | access to local variable b | +| not null | Collections.cs:16:9:16:28 | ... = ... | +| not null | Collections.cs:16:13:16:16 | access to parameter args | +| not null | Collections.cs:16:13:16:23 | access to property Length | +| not null | Collections.cs:16:13:16:28 | ... >= ... | +| not null | Collections.cs:16:28:16:28 | 0 | +| not null | Collections.cs:17:9:17:9 | access to local variable b | +| not null | Collections.cs:17:9:17:28 | ... = ... | +| not null | Collections.cs:17:13:17:16 | access to parameter args | +| not null | Collections.cs:17:13:17:23 | access to property Length | +| not null | Collections.cs:17:13:17:28 | ... >= ... | +| not null | Collections.cs:17:28:17:28 | 1 | +| not null | Collections.cs:22:13:22:13 | access to local variable b | +| not null | Collections.cs:22:13:22:31 | Boolean b = ... | +| not null | Collections.cs:22:17:22:20 | access to parameter args | +| not null | Collections.cs:22:17:22:26 | access to property Count | +| not null | Collections.cs:22:17:22:31 | ... == ... | +| not null | Collections.cs:22:31:22:31 | 0 | +| not null | Collections.cs:23:9:23:9 | access to local variable b | +| not null | Collections.cs:23:9:23:27 | ... = ... | +| not null | Collections.cs:23:13:23:16 | access to parameter args | +| not null | Collections.cs:23:13:23:22 | access to property Count | +| not null | Collections.cs:23:13:23:27 | ... == ... | +| not null | Collections.cs:23:27:23:27 | 1 | +| not null | Collections.cs:24:9:24:9 | access to local variable b | +| not null | Collections.cs:24:9:24:27 | ... = ... | +| not null | Collections.cs:24:13:24:16 | access to parameter args | +| not null | Collections.cs:24:13:24:22 | access to property Count | +| not null | Collections.cs:24:13:24:27 | ... != ... | +| not null | Collections.cs:24:27:24:27 | 0 | +| not null | Collections.cs:25:9:25:9 | access to local variable b | +| not null | Collections.cs:25:9:25:27 | ... = ... | +| not null | Collections.cs:25:13:25:16 | access to parameter args | +| not null | Collections.cs:25:13:25:22 | access to property Count | +| not null | Collections.cs:25:13:25:27 | ... != ... | +| not null | Collections.cs:25:27:25:27 | 1 | +| not null | Collections.cs:26:9:26:9 | access to local variable b | +| not null | Collections.cs:26:9:26:26 | ... = ... | +| not null | Collections.cs:26:13:26:16 | access to parameter args | +| not null | Collections.cs:26:13:26:22 | access to property Count | +| not null | Collections.cs:26:13:26:26 | ... > ... | +| not null | Collections.cs:26:26:26:26 | 0 | +| not null | Collections.cs:27:9:27:9 | access to local variable b | +| not null | Collections.cs:27:9:27:27 | ... = ... | +| not null | Collections.cs:27:13:27:16 | access to parameter args | +| not null | Collections.cs:27:13:27:22 | access to property Count | +| not null | Collections.cs:27:13:27:27 | ... >= ... | +| not null | Collections.cs:27:27:27:27 | 0 | +| not null | Collections.cs:28:9:28:9 | access to local variable b | +| not null | Collections.cs:28:9:28:27 | ... = ... | +| not null | Collections.cs:28:13:28:16 | access to parameter args | +| not null | Collections.cs:28:13:28:22 | access to property Count | +| not null | Collections.cs:28:13:28:27 | ... >= ... | +| not null | Collections.cs:28:27:28:27 | 1 | +| not null | Collections.cs:33:13:33:13 | access to local variable b | +| not null | Collections.cs:33:13:33:33 | Boolean b = ... | +| not null | Collections.cs:33:17:33:20 | access to parameter args | +| not null | Collections.cs:33:17:33:28 | call to method Count | +| not null | Collections.cs:33:17:33:33 | ... == ... | +| not null | Collections.cs:33:33:33:33 | 0 | +| not null | Collections.cs:34:9:34:9 | access to local variable b | +| not null | Collections.cs:34:9:34:29 | ... = ... | +| not null | Collections.cs:34:13:34:16 | access to parameter args | +| not null | Collections.cs:34:13:34:24 | call to method Count | +| not null | Collections.cs:34:13:34:29 | ... == ... | +| not null | Collections.cs:34:29:34:29 | 1 | +| not null | Collections.cs:35:9:35:9 | access to local variable b | +| not null | Collections.cs:35:9:35:29 | ... = ... | +| not null | Collections.cs:35:13:35:16 | access to parameter args | +| not null | Collections.cs:35:13:35:24 | call to method Count | +| not null | Collections.cs:35:13:35:29 | ... != ... | +| not null | Collections.cs:35:29:35:29 | 0 | +| not null | Collections.cs:36:9:36:9 | access to local variable b | +| not null | Collections.cs:36:9:36:29 | ... = ... | +| not null | Collections.cs:36:13:36:16 | access to parameter args | +| not null | Collections.cs:36:13:36:24 | call to method Count | +| not null | Collections.cs:36:13:36:29 | ... != ... | +| not null | Collections.cs:36:29:36:29 | 1 | +| not null | Collections.cs:37:9:37:9 | access to local variable b | +| not null | Collections.cs:37:9:37:28 | ... = ... | +| not null | Collections.cs:37:13:37:16 | access to parameter args | +| not null | Collections.cs:37:13:37:24 | call to method Count | +| not null | Collections.cs:37:13:37:28 | ... > ... | +| not null | Collections.cs:37:28:37:28 | 0 | +| not null | Collections.cs:38:9:38:9 | access to local variable b | +| not null | Collections.cs:38:9:38:29 | ... = ... | +| not null | Collections.cs:38:13:38:16 | access to parameter args | +| not null | Collections.cs:38:13:38:24 | call to method Count | +| not null | Collections.cs:38:13:38:29 | ... >= ... | +| not null | Collections.cs:38:29:38:29 | 0 | +| not null | Collections.cs:39:9:39:9 | access to local variable b | +| not null | Collections.cs:39:9:39:29 | ... = ... | +| not null | Collections.cs:39:13:39:16 | access to parameter args | +| not null | Collections.cs:39:13:39:24 | call to method Count | +| not null | Collections.cs:39:13:39:29 | ... >= ... | +| not null | Collections.cs:39:29:39:29 | 1 | +| not null | Collections.cs:44:13:44:13 | access to local variable b | +| not null | Collections.cs:44:13:44:26 | Boolean b = ... | +| not null | Collections.cs:44:17:44:20 | access to parameter args | +| not null | Collections.cs:44:17:44:26 | call to method Any | +| not null | Collections.cs:49:13:49:16 | access to parameter args | +| not null | Collections.cs:49:13:49:22 | access to property Count | +| not null | Collections.cs:49:13:49:27 | ... == ... | +| not null | Collections.cs:49:27:49:27 | 0 | +| not null | Collections.cs:51:17:51:20 | access to parameter args | +| not null | Collections.cs:51:17:51:30 | call to method ToArray | +| not null | Collections.cs:52:9:52:12 | access to parameter args | +| not null | Collections.cs:52:9:52:20 | call to method Clear | +| not null | Collections.cs:53:9:53:9 | access to local variable x | +| not null | Collections.cs:53:9:53:26 | ... = ... | +| not null | Collections.cs:53:13:53:16 | access to parameter args | +| not null | Collections.cs:53:13:53:26 | call to method ToArray | +| not null | Collections.cs:54:9:54:9 | access to local variable x | +| not null | Collections.cs:54:9:54:42 | ... = ... | +| not null | Collections.cs:54:13:54:42 | 3 | +| not null | Collections.cs:54:13:54:42 | array creation of type String[] | +| not null | Collections.cs:54:28:54:30 | "a" | +| not null | Collections.cs:54:33:54:35 | "b" | +| not null | Collections.cs:54:38:54:40 | "c" | +| not null | Collections.cs:55:9:55:9 | access to local variable x | +| not null | Collections.cs:55:9:55:13 | ... = ... | +| not null | Collections.cs:55:13:55:13 | access to local variable x | +| not null | Collections.cs:56:9:56:9 | access to local variable x | +| not null | Collections.cs:56:9:56:25 | ... = ... | +| not null | Collections.cs:56:13:56:25 | array creation of type String[] | +| not null | Collections.cs:56:24:56:24 | 0 | +| not null | Collections.cs:57:9:57:9 | access to local variable x | +| not null | Collections.cs:57:9:57:13 | ... = ... | +| not null | Collections.cs:57:13:57:13 | access to local variable x | +| not null | Collections.cs:62:17:62:46 | 3 | +| not null | Collections.cs:62:17:62:46 | array creation of type String[] | +| not null | Collections.cs:62:17:62:55 | call to method ToList | +| not null | Collections.cs:62:32:62:34 | "a" | +| not null | Collections.cs:62:37:62:39 | "b" | +| not null | Collections.cs:62:42:62:44 | "c" | +| not null | Collections.cs:63:9:63:9 | access to local variable x | +| not null | Collections.cs:63:9:63:17 | call to method Clear | +| not null | Collections.cs:64:13:64:13 | access to local variable x | +| not null | Collections.cs:64:13:64:19 | access to property Count | +| not null | Collections.cs:64:13:64:24 | ... == ... | +| not null | Collections.cs:64:24:64:24 | 0 | +| not null | Collections.cs:66:13:66:13 | access to local variable x | +| not null | Collections.cs:66:13:66:22 | call to method Add | +| not null | Collections.cs:66:19:66:21 | "a" | +| not null | Collections.cs:67:13:67:13 | access to local variable x | +| not null | Collections.cs:67:13:67:22 | call to method Add | +| not null | Collections.cs:67:19:67:21 | "b" | +| not null | Collections.cs:73:35:73:35 | access to parameter s | +| not null | Collections.cs:73:35:73:41 | ... == ... | +| not null | Collections.cs:73:40:73:41 | "" | +| not null | Collections.cs:74:13:74:13 | access to local variable b | +| not null | Collections.cs:74:13:74:33 | Boolean b = ... | +| not null | Collections.cs:74:17:74:20 | access to parameter args | +| not null | Collections.cs:74:17:74:33 | call to method Any | +| not null | Collections.cs:74:26:74:32 | access to local function IsEmpty | +| not null | Collections.cs:74:26:74:32 | delegate creation of type Func | +| not null | Collections.cs:74:26:74:32 | this access | +| not null | Collections.cs:75:9:75:9 | access to local variable b | +| not null | Collections.cs:75:9:75:36 | ... = ... | +| not null | Collections.cs:75:13:75:16 | access to parameter args | +| not null | Collections.cs:75:13:75:31 | call to method Count | +| not null | Collections.cs:75:13:75:36 | ... == ... | +| not null | Collections.cs:75:24:75:30 | access to local function IsEmpty | +| not null | Collections.cs:75:24:75:30 | delegate creation of type Func | +| not null | Collections.cs:75:24:75:30 | this access | +| not null | Collections.cs:75:36:75:36 | 0 | +| not null | Collections.cs:76:9:76:9 | access to local variable b | +| not null | Collections.cs:76:9:76:36 | ... = ... | +| not null | Collections.cs:76:13:76:16 | access to parameter args | +| not null | Collections.cs:76:13:76:31 | call to method Count | +| not null | Collections.cs:76:13:76:36 | ... == ... | +| not null | Collections.cs:76:24:76:30 | access to local function IsEmpty | +| not null | Collections.cs:76:24:76:30 | delegate creation of type Func | +| not null | Collections.cs:76:24:76:30 | this access | +| not null | Collections.cs:76:36:76:36 | 1 | +| not null | Collections.cs:77:9:77:9 | access to local variable b | +| not null | Collections.cs:77:9:77:36 | ... = ... | +| not null | Collections.cs:77:13:77:16 | access to parameter args | +| not null | Collections.cs:77:13:77:31 | call to method Count | +| not null | Collections.cs:77:13:77:36 | ... != ... | +| not null | Collections.cs:77:24:77:30 | access to local function IsEmpty | +| not null | Collections.cs:77:24:77:30 | delegate creation of type Func | +| not null | Collections.cs:77:24:77:30 | this access | +| not null | Collections.cs:77:36:77:36 | 0 | +| not null | Collections.cs:78:9:78:9 | access to local variable b | +| not null | Collections.cs:78:9:78:36 | ... = ... | +| not null | Collections.cs:78:13:78:16 | access to parameter args | +| not null | Collections.cs:78:13:78:31 | call to method Count | +| not null | Collections.cs:78:13:78:36 | ... != ... | +| not null | Collections.cs:78:24:78:30 | access to local function IsEmpty | +| not null | Collections.cs:78:24:78:30 | delegate creation of type Func | +| not null | Collections.cs:78:24:78:30 | this access | +| not null | Collections.cs:78:36:78:36 | 1 | +| not null | Collections.cs:79:9:79:9 | access to local variable b | +| not null | Collections.cs:79:9:79:35 | ... = ... | +| not null | Collections.cs:79:13:79:16 | access to parameter args | +| not null | Collections.cs:79:13:79:31 | call to method Count | +| not null | Collections.cs:79:13:79:35 | ... > ... | +| not null | Collections.cs:79:24:79:30 | access to local function IsEmpty | +| not null | Collections.cs:79:24:79:30 | delegate creation of type Func | +| not null | Collections.cs:79:24:79:30 | this access | +| not null | Collections.cs:79:35:79:35 | 0 | +| not null | Collections.cs:80:9:80:9 | access to local variable b | +| not null | Collections.cs:80:9:80:36 | ... = ... | +| not null | Collections.cs:80:13:80:16 | access to parameter args | +| not null | Collections.cs:80:13:80:31 | call to method Count | +| not null | Collections.cs:80:13:80:36 | ... >= ... | +| not null | Collections.cs:80:24:80:30 | access to local function IsEmpty | +| not null | Collections.cs:80:24:80:30 | delegate creation of type Func | +| not null | Collections.cs:80:24:80:30 | this access | +| not null | Collections.cs:80:36:80:36 | 0 | +| not null | Collections.cs:81:9:81:9 | access to local variable b | +| not null | Collections.cs:81:9:81:36 | ... = ... | +| not null | Collections.cs:81:13:81:16 | access to parameter args | +| not null | Collections.cs:81:13:81:31 | call to method Count | +| not null | Collections.cs:81:13:81:36 | ... >= ... | +| not null | Collections.cs:81:24:81:30 | access to local function IsEmpty | +| not null | Collections.cs:81:24:81:30 | delegate creation of type Func | +| not null | Collections.cs:81:24:81:30 | this access | +| not null | Collections.cs:81:36:81:36 | 1 | +| not null | Collections.cs:86:17:86:32 | 0 | +| not null | Collections.cs:86:17:86:32 | array creation of type String[] | +| not null | Collections.cs:87:22:87:24 | array creation of type String[] | +| not null | Collections.cs:88:9:88:9 | access to local variable x | +| not null | Collections.cs:88:9:88:32 | ... = ... | +| not null | Collections.cs:88:13:88:32 | 1 | +| not null | Collections.cs:88:13:88:32 | array creation of type String[] | +| not null | Collections.cs:88:28:88:30 | "a" | +| not null | Collections.cs:89:22:89:28 | array creation of type String[] | +| not null | Collections.cs:89:24:89:26 | "a" | +| not null | Collections.cs:94:29:94:32 | access to parameter args | +| not null | Collections.cs:95:13:95:19 | access to type Console | +| not null | Collections.cs:95:13:95:35 | call to method WriteLine | +| not null | Collections.cs:95:31:95:34 | access to parameter args | +| not null | Collections.cs:100:29:100:32 | access to parameter args | +| not null | Collections.cs:102:9:102:15 | access to type Console | +| not null | Collections.cs:102:9:102:31 | call to method WriteLine | +| not null | Collections.cs:102:27:102:30 | access to parameter args | +| not null | Guards.cs:10:13:10:25 | !... | +| not null | Guards.cs:10:14:10:25 | !... | +| not null | Guards.cs:10:16:10:24 | ... == ... | +| not null | Guards.cs:12:13:12:13 | access to parameter s | +| not null | Guards.cs:12:13:12:20 | access to property Length | +| not null | Guards.cs:12:13:12:24 | ... > ... | +| not null | Guards.cs:12:24:12:24 | 0 | +| not null | Guards.cs:14:13:14:19 | access to type Console | +| not null | Guards.cs:14:13:14:32 | call to method WriteLine | +| not null | Guards.cs:14:31:14:31 | access to parameter s | +| not null | Guards.cs:18:13:18:19 | access to type Console | +| not null | Guards.cs:18:13:18:47 | call to method WriteLine | +| not null | Guards.cs:18:31:18:46 | "" | +| not null | Guards.cs:24:13:24:21 | ... != ... | +| not null | Guards.cs:26:13:26:19 | access to type Console | +| not null | Guards.cs:26:13:26:32 | call to method WriteLine | +| not null | Guards.cs:26:31:26:31 | access to parameter s | +| not null | Guards.cs:32:13:32:36 | !... | +| not null | Guards.cs:32:13:32:51 | ... & ... | +| not null | Guards.cs:32:14:32:19 | access to type String | +| not null | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | +| not null | Guards.cs:32:40:32:51 | !... | +| not null | Guards.cs:32:42:32:50 | ... == ... | +| not null | Guards.cs:33:13:33:19 | access to type Console | +| not null | Guards.cs:33:13:33:36 | call to method WriteLine | +| not null | Guards.cs:33:31:33:31 | access to parameter x | +| not null | Guards.cs:33:31:33:35 | ... + ... | +| not null | Guards.cs:33:35:33:35 | access to parameter y | +| not null | Guards.cs:35:13:35:21 | ... == ... | +| not null | Guards.cs:35:13:35:34 | ... \|\| ... | +| not null | Guards.cs:35:26:35:34 | ... == ... | +| not null | Guards.cs:36:14:36:20 | access to type Console | +| not null | Guards.cs:36:14:36:37 | call to method WriteLine | +| not null | Guards.cs:36:32:36:32 | access to parameter x | +| not null | Guards.cs:36:32:36:36 | ... + ... | +| not null | Guards.cs:36:36:36:36 | access to parameter y | +| not null | Guards.cs:38:13:38:37 | !... | +| not null | Guards.cs:38:15:38:23 | ... == ... | +| not null | Guards.cs:38:15:38:36 | ... \|\| ... | +| not null | Guards.cs:38:28:38:36 | ... == ... | +| not null | Guards.cs:39:13:39:19 | access to type Console | +| not null | Guards.cs:39:13:39:36 | call to method WriteLine | +| not null | Guards.cs:39:31:39:31 | access to parameter x | +| not null | Guards.cs:39:31:39:35 | ... + ... | +| not null | Guards.cs:39:35:39:35 | access to parameter y | +| not null | Guards.cs:41:13:41:39 | !... | +| not null | Guards.cs:41:14:41:39 | !... | +| not null | Guards.cs:41:15:41:39 | !... | +| not null | Guards.cs:41:17:41:25 | ... != ... | +| not null | Guards.cs:41:17:41:38 | ... && ... | +| not null | Guards.cs:41:30:41:38 | ... != ... | +| not null | Guards.cs:42:14:42:20 | access to type Console | +| not null | Guards.cs:42:14:42:37 | call to method WriteLine | +| not null | Guards.cs:42:32:42:32 | access to parameter x | +| not null | Guards.cs:42:32:42:36 | ... + ... | +| not null | Guards.cs:42:36:42:36 | access to parameter y | +| not null | Guards.cs:44:13:44:17 | this access | +| not null | Guards.cs:44:13:44:25 | ... != ... | +| not null | Guards.cs:45:13:45:19 | access to type Console | +| not null | Guards.cs:45:13:45:49 | call to method WriteLine | +| not null | Guards.cs:45:31:45:42 | object creation of type Guards | +| not null | Guards.cs:47:13:47:17 | this access | +| not null | Guards.cs:47:13:47:25 | ... != ... | +| not null | Guards.cs:48:13:48:19 | access to type Console | +| not null | Guards.cs:48:13:48:41 | call to method WriteLine | +| not null | Guards.cs:48:31:48:34 | this access | +| not null | Guards.cs:48:31:48:40 | access to field Field | +| not null | Guards.cs:53:13:53:13 | access to parameter g | +| not null | Guards.cs:53:13:53:27 | ... == ... | +| not null | Guards.cs:55:9:55:15 | access to type Console | +| not null | Guards.cs:55:9:55:34 | call to method WriteLine | +| not null | Guards.cs:55:27:55:27 | access to parameter g | +| not null | Guards.cs:55:27:55:33 | access to field Field | +| not null | Guards.cs:60:13:60:13 | access to parameter g | +| not null | Guards.cs:60:13:60:45 | ... == ... | +| not null | Guards.cs:61:19:61:33 | object creation of type Exception | +| not null | Guards.cs:62:9:62:15 | access to type Console | +| not null | Guards.cs:62:9:62:52 | call to method WriteLine | +| not null | Guards.cs:62:27:62:27 | access to parameter g | +| not null | Guards.cs:62:27:62:36 | access to property Property | +| not null | Guards.cs:62:27:62:45 | access to property Property | +| not null | Guards.cs:62:27:62:51 | access to field Field | +| not null | Guards.cs:63:9:63:15 | access to type Console | +| not null | Guards.cs:63:9:63:43 | call to method WriteLine | +| not null | Guards.cs:63:27:63:27 | access to parameter g | +| not null | Guards.cs:63:27:63:36 | access to property Property | +| not null | Guards.cs:68:16:68:24 | ... != ... | +| not null | Guards.cs:70:13:70:19 | access to type Console | +| not null | Guards.cs:70:13:70:32 | call to method WriteLine | +| not null | Guards.cs:70:31:70:31 | access to parameter s | +| not null | Guards.cs:71:13:71:13 | access to parameter s | +| not null | Guards.cs:72:13:72:19 | access to type Console | +| not null | Guards.cs:72:13:72:32 | call to method WriteLine | +| not null | Guards.cs:78:13:78:26 | ... == ... | +| not null | Guards.cs:78:26:78:26 | 0 | +| not null | Guards.cs:78:26:78:26 | (...) ... | +| not null | Guards.cs:79:13:79:19 | access to type Console | +| not null | Guards.cs:79:13:79:32 | call to method WriteLine | +| not null | Guards.cs:79:31:79:31 | access to parameter s | +| not null | Guards.cs:80:13:80:25 | ... > ... | +| not null | Guards.cs:80:25:80:25 | 0 | +| not null | Guards.cs:80:25:80:25 | (...) ... | +| not null | Guards.cs:81:13:81:19 | access to type Console | +| not null | Guards.cs:81:13:81:32 | call to method WriteLine | +| not null | Guards.cs:81:31:81:31 | access to parameter s | +| not null | Guards.cs:82:13:82:26 | ... >= ... | +| not null | Guards.cs:82:26:82:26 | 0 | +| not null | Guards.cs:82:26:82:26 | (...) ... | +| not null | Guards.cs:83:13:83:19 | access to type Console | +| not null | Guards.cs:83:13:83:32 | call to method WriteLine | +| not null | Guards.cs:83:31:83:31 | access to parameter s | +| not null | Guards.cs:84:13:84:26 | ... < ... | +| not null | Guards.cs:84:25:84:26 | 10 | +| not null | Guards.cs:84:25:84:26 | (...) ... | +| not null | Guards.cs:85:13:85:19 | access to type Console | +| not null | Guards.cs:85:13:85:32 | call to method WriteLine | +| not null | Guards.cs:85:31:85:31 | access to parameter s | +| not null | Guards.cs:86:13:86:27 | ... <= ... | +| not null | Guards.cs:86:26:86:27 | 10 | +| not null | Guards.cs:86:26:86:27 | (...) ... | +| not null | Guards.cs:87:13:87:19 | access to type Console | +| not null | Guards.cs:87:13:87:32 | call to method WriteLine | +| not null | Guards.cs:87:31:87:31 | access to parameter s | +| not null | Guards.cs:88:13:88:29 | ... != ... | +| not null | Guards.cs:89:13:89:19 | access to type Console | +| not null | Guards.cs:89:13:89:32 | call to method WriteLine | +| not null | Guards.cs:89:31:89:31 | access to parameter s | +| not null | Guards.cs:91:13:91:19 | access to type Console | +| not null | Guards.cs:91:13:91:32 | call to method WriteLine | +| not null | Guards.cs:92:13:92:30 | ... != ... | +| not null | Guards.cs:92:25:92:25 | 1 | +| not null | Guards.cs:92:25:92:25 | (...) ... | +| not null | Guards.cs:92:30:92:30 | 0 | +| not null | Guards.cs:92:30:92:30 | (...) ... | +| not null | Guards.cs:93:13:93:19 | access to type Console | +| not null | Guards.cs:93:13:93:32 | call to method WriteLine | +| not null | Guards.cs:95:13:95:19 | access to type Console | +| not null | Guards.cs:95:13:95:32 | call to method WriteLine | +| not null | Guards.cs:95:31:95:31 | access to parameter s | +| not null | Guards.cs:96:13:96:19 | ... == ... | +| not null | Guards.cs:96:18:96:19 | "" | +| not null | Guards.cs:97:13:97:19 | access to type Console | +| not null | Guards.cs:97:13:97:32 | call to method WriteLine | +| not null | Guards.cs:97:31:97:31 | access to parameter s | +| not null | Guards.cs:99:13:99:19 | access to type Console | +| not null | Guards.cs:99:13:99:32 | call to method WriteLine | +| not null | Guards.cs:104:13:104:13 | access to parameter g | +| not null | Guards.cs:104:13:104:45 | ... == ... | +| not null | Guards.cs:105:19:105:33 | object creation of type Exception | +| not null | Guards.cs:106:9:106:9 | access to parameter g | +| not null | Guards.cs:106:9:106:18 | access to property Property | +| not null | Guards.cs:107:9:107:15 | access to type Console | +| not null | Guards.cs:107:9:107:52 | call to method WriteLine | +| not null | Guards.cs:107:27:107:27 | access to parameter g | +| not null | Guards.cs:108:9:108:15 | access to type Console | +| not null | Guards.cs:108:9:108:43 | call to method WriteLine | +| not null | Guards.cs:108:27:108:27 | access to parameter g | +| not null | Guards.cs:108:27:108:36 | access to property Property | +| not null | Guards.cs:113:21:113:21 | access to parameter g | +| not null | Guards.cs:114:14:114:14 | access to parameter g | +| not null | Guards.cs:114:14:114:23 | access to property Property | +| not null | Guards.cs:114:14:114:32 | access to property Property | +| not null | Guards.cs:115:9:115:55 | ... = ... | +| not null | Guards.cs:115:17:115:17 | access to parameter g | +| not null | Guards.cs:115:17:115:26 | access to property Property | +| not null | Guards.cs:115:17:115:35 | access to property Property | +| not null | Guards.cs:115:17:115:55 | ... ?? ... | +| not null | Guards.cs:115:46:115:55 | throw ... | +| not null | Guards.cs:116:9:116:15 | access to type Console | +| not null | Guards.cs:116:9:116:52 | call to method WriteLine | +| not null | Guards.cs:116:27:116:27 | access to parameter g | +| not null | Guards.cs:116:27:116:36 | access to property Property | +| not null | Guards.cs:116:27:116:45 | access to property Property | +| not null | Guards.cs:116:27:116:51 | access to field Field | +| not null | Guards.cs:117:9:117:9 | access to parameter g | +| not null | Guards.cs:117:9:117:18 | access to property Property | +| not null | Guards.cs:118:9:118:15 | access to type Console | +| not null | Guards.cs:118:9:118:52 | call to method WriteLine | +| not null | Guards.cs:118:27:118:27 | access to parameter g | +| not null | Guards.cs:119:9:119:15 | access to type Console | +| not null | Guards.cs:119:9:119:43 | call to method WriteLine | +| not null | Guards.cs:119:27:119:27 | access to parameter g | +| not null | Guards.cs:119:27:119:36 | access to property Property | +| not null | Guards.cs:124:13:124:14 | access to local variable b1 | +| not null | Guards.cs:124:13:124:30 | Boolean b1 = ... | +| not null | Guards.cs:124:18:124:30 | call to method Equals | +| not null | Guards.cs:125:18:125:19 | access to parameter s1 | +| not null | Guards.cs:125:29:125:30 | access to parameter s1 | +| not null | Guards.cs:130:13:130:21 | ... is ... | +| not null | Guards.cs:131:20:131:27 | access to property Length | +| not null | Guards.cs:132:16:132:16 | access to parameter s | +| not null | Guards.cs:132:16:132:23 | access to property Length | +| not null | Guards.cs:137:13:137:25 | ... is ... | +| not null | Guards.cs:137:18:137:23 | access to type String | +| not null | Guards.cs:138:20:138:20 | access to parameter s | +| not null | Guards.cs:138:20:138:27 | access to property Length | +| not null | Guards.cs:139:16:139:23 | access to property Length | +| not null | Guards.cs:144:13:144:25 | ... is ... | +| not null | Guards.cs:145:20:145:20 | access to local variable s | +| not null | Guards.cs:153:18:153:31 | access to type Action | +| not null | Guards.cs:154:24:154:24 | access to parameter o | +| not null | Guards.cs:156:24:156:24 | access to local variable a | +| not null | Guards.cs:157:18:157:19 | "" | +| not null | Guards.cs:158:24:158:24 | access to parameter o | +| not null | Guards.cs:159:18:159:21 | null | +| not null | Guards.cs:162:24:162:24 | access to parameter o | +| not null | Guards.cs:168:13:168:41 | !... | +| not null | Guards.cs:168:14:168:19 | access to type String | +| not null | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | +| not null | Guards.cs:169:13:169:19 | access to type Console | +| not null | Guards.cs:169:13:169:32 | call to method WriteLine | +| not null | Guards.cs:169:31:169:31 | access to parameter x | +| not null | Guards.cs:172:34:172:42 | ... == ... | +| not null | Guards.cs:176:13:176:21 | ... is ... | +| not null | Guards.cs:177:20:177:23 | true | +| not null | Guards.cs:178:16:178:20 | false | +| not null | Guards.cs:181:34:181:42 | ... == ... | +| not null | Guards.cs:181:34:181:57 | ... ? ... : ... | +| not null | Guards.cs:181:46:181:49 | true | +| not null | Guards.cs:181:53:181:57 | false | +| not null | Guards.cs:183:37:183:49 | !... | +| not null | Guards.cs:183:38:183:49 | call to method NullTest3 | +| not null | Guards.cs:183:38:183:49 | this access | +| not null | Guards.cs:185:38:185:46 | ... == ... | +| not null | Guards.cs:185:38:185:60 | ... ? ... : ... | +| not null | Guards.cs:185:50:185:53 | true | +| not null | Guards.cs:185:57:185:60 | true | +| not null | Guards.cs:189:13:189:25 | !... | +| not null | Guards.cs:189:14:189:25 | call to method NullTest1 | +| not null | Guards.cs:189:14:189:25 | this access | +| not null | Guards.cs:190:13:190:19 | access to type Console | +| not null | Guards.cs:190:13:190:32 | call to method WriteLine | +| not null | Guards.cs:191:13:191:25 | !... | +| not null | Guards.cs:191:14:191:25 | call to method NullTest2 | +| not null | Guards.cs:191:14:191:25 | this access | +| not null | Guards.cs:192:13:192:19 | access to type Console | +| not null | Guards.cs:192:13:192:32 | call to method WriteLine | +| not null | Guards.cs:193:13:193:25 | !... | +| not null | Guards.cs:193:14:193:25 | call to method NullTest3 | +| not null | Guards.cs:193:14:193:25 | this access | +| not null | Guards.cs:194:13:194:19 | access to type Console | +| not null | Guards.cs:194:13:194:32 | call to method WriteLine | +| not null | Guards.cs:195:13:195:27 | call to method NotNullTest4 | +| not null | Guards.cs:195:13:195:27 | this access | +| not null | Guards.cs:196:13:196:19 | access to type Console | +| not null | Guards.cs:196:13:196:32 | call to method WriteLine | +| not null | Guards.cs:197:13:197:29 | !... | +| not null | Guards.cs:197:14:197:29 | call to method NullTestWrong | +| not null | Guards.cs:197:14:197:29 | this access | +| not null | Guards.cs:198:13:198:19 | access to type Console | +| not null | Guards.cs:198:13:198:32 | call to method WriteLine | +| not null | Guards.cs:203:13:203:21 | ... != ... | +| not null | Guards.cs:205:13:205:13 | access to parameter o | +| not null | Guards.cs:206:33:206:36 | access to parameter args | +| not null | Guards.cs:208:17:208:17 | access to parameter o | +| not null | Guards.cs:215:13:215:14 | access to local variable b2 | +| not null | Guards.cs:215:13:215:21 | Boolean b2 = ... | +| not null | Guards.cs:215:18:215:21 | true | +| not null | Guards.cs:216:13:216:14 | access to parameter b1 | +| not null | Guards.cs:217:13:217:14 | access to local variable b2 | +| not null | Guards.cs:217:13:217:22 | ... = ... | +| not null | Guards.cs:217:18:217:22 | false | +| not null | Guards.cs:218:17:218:18 | access to local variable b2 | +| not null | Guards.cs:220:18:220:21 | true | +| not null | Guards.cs:228:13:228:14 | access to local variable b2 | +| not null | Guards.cs:228:13:228:22 | Boolean b2 = ... | +| not null | Guards.cs:228:18:228:22 | false | +| not null | Guards.cs:229:13:229:14 | access to parameter b1 | +| not null | Guards.cs:230:13:230:14 | access to local variable b2 | +| not null | Guards.cs:230:13:230:21 | ... = ... | +| not null | Guards.cs:230:18:230:21 | true | +| not null | Guards.cs:231:17:231:18 | access to local variable b2 | +| not null | Guards.cs:233:18:233:21 | true | +| not null | Guards.cs:241:13:241:13 | access to local variable i | +| not null | Guards.cs:241:13:241:17 | Int32 i = ... | +| not null | Guards.cs:241:17:241:17 | 0 | +| not null | Guards.cs:242:13:242:13 | access to parameter b | +| not null | Guards.cs:243:13:243:13 | access to local variable i | +| not null | Guards.cs:243:13:243:17 | ... = ... | +| not null | Guards.cs:243:17:243:17 | 1 | +| not null | Guards.cs:244:17:244:17 | access to local variable i | +| not null | Guards.cs:246:18:246:18 | 1 | +| not null | Guards.cs:255:13:255:13 | access to local variable e | +| not null | Guards.cs:255:13:255:19 | E e = ... | +| not null | Guards.cs:255:17:255:17 | access to type E | +| not null | Guards.cs:255:17:255:19 | access to constant A | +| not null | Guards.cs:256:13:256:13 | access to parameter b | +| not null | Guards.cs:257:13:257:13 | access to local variable e | +| not null | Guards.cs:257:13:257:19 | ... = ... | +| not null | Guards.cs:257:17:257:17 | access to type E | +| not null | Guards.cs:257:17:257:19 | access to constant B | +| not null | Guards.cs:258:17:258:17 | access to local variable e | +| not null | Guards.cs:260:18:260:18 | access to type E | +| not null | Guards.cs:260:18:260:20 | access to constant B | +| not null | Guards.cs:268:13:268:41 | call to operator == | +| not null | Guards.cs:268:30:268:41 | call to method GetType | +| not null | Guards.cs:269:13:269:14 | access to parameter o1 | +| not null | Guards.cs:270:13:270:42 | call to operator == | +| not null | Guards.cs:270:30:270:31 | access to parameter o2 | +| not null | Guards.cs:278:13:278:26 | access to type Action | +| not null | Guards.cs:279:17:279:17 | access to parameter o | +| not null | Guards.cs:281:17:281:17 | access to local variable a | +| not null | Guards.cs:282:13:282:14 | "" | +| not null | Guards.cs:283:17:283:17 | access to parameter o | +| not null | Guards.cs:287:17:287:17 | access to parameter o | +| not null | Guards.cs:293:13:293:14 | access to local variable b2 | +| not null | Guards.cs:293:13:293:21 | Boolean b2 = ... | +| not null | Guards.cs:293:18:293:21 | true | +| not null | Guards.cs:294:13:294:14 | access to parameter b1 | +| not null | Guards.cs:295:13:295:14 | access to local variable b2 | +| not null | Guards.cs:295:13:295:22 | ... = ... | +| not null | Guards.cs:295:18:295:22 | false | +| not null | Guards.cs:296:16:296:17 | access to local variable b2 | +| not null | Guards.cs:296:16:300:9 | ... switch { ... } | +| not null | Guards.cs:298:13:298:16 | true | +| not null | Guards.cs:298:13:298:21 | ... => ... | +| not null | Guards.cs:298:21:298:21 | 0 | +| not null | Guards.cs:299:13:299:13 | _ | +| not null | Guards.cs:299:13:299:18 | ... => ... | +| not null | Guards.cs:299:18:299:18 | 1 | +| not null | Guards.cs:305:13:305:14 | access to local variable b2 | +| not null | Guards.cs:305:13:305:22 | Boolean b2 = ... | +| not null | Guards.cs:305:18:305:22 | false | +| not null | Guards.cs:306:13:306:14 | access to parameter b1 | +| not null | Guards.cs:307:13:307:14 | access to local variable b2 | +| not null | Guards.cs:307:13:307:21 | ... = ... | +| not null | Guards.cs:307:18:307:21 | true | +| not null | Guards.cs:308:16:308:17 | access to local variable b2 | +| not null | Guards.cs:308:16:312:9 | ... switch { ... } | +| not null | Guards.cs:310:13:310:16 | true | +| not null | Guards.cs:310:13:310:21 | ... => ... | +| not null | Guards.cs:310:21:310:21 | 0 | +| not null | Guards.cs:311:13:311:13 | _ | +| not null | Guards.cs:311:13:311:18 | ... => ... | +| not null | Guards.cs:311:18:311:18 | 1 | +| not null | Guards.cs:317:13:317:13 | access to local variable i | +| not null | Guards.cs:317:13:317:17 | Int32 i = ... | +| not null | Guards.cs:317:17:317:17 | 0 | +| not null | Guards.cs:318:13:318:13 | access to parameter b | +| not null | Guards.cs:319:13:319:13 | access to local variable i | +| not null | Guards.cs:319:13:319:17 | ... = ... | +| not null | Guards.cs:319:17:319:17 | 1 | +| not null | Guards.cs:320:16:320:16 | access to local variable i | +| not null | Guards.cs:320:16:324:9 | ... switch { ... } | +| not null | Guards.cs:322:13:322:13 | 1 | +| not null | Guards.cs:322:13:322:18 | ... => ... | +| not null | Guards.cs:322:18:322:18 | 0 | +| not null | Guards.cs:323:13:323:13 | _ | +| not null | Guards.cs:323:13:323:18 | ... => ... | +| not null | Guards.cs:323:18:323:18 | 1 | +| not null | Guards.cs:329:13:329:13 | access to local variable e | +| not null | Guards.cs:329:13:329:19 | E e = ... | +| not null | Guards.cs:329:17:329:17 | access to type E | +| not null | Guards.cs:329:17:329:19 | access to constant A | +| not null | Guards.cs:330:13:330:13 | access to parameter b | +| not null | Guards.cs:331:13:331:13 | access to local variable e | +| not null | Guards.cs:331:13:331:19 | ... = ... | +| not null | Guards.cs:331:17:331:17 | access to type E | +| not null | Guards.cs:331:17:331:19 | access to constant B | +| not null | Guards.cs:332:16:332:16 | access to local variable e | +| not null | Guards.cs:332:16:336:9 | ... switch { ... } | +| not null | Guards.cs:334:13:334:13 | access to type E | +| not null | Guards.cs:334:13:334:15 | access to constant B | +| not null | Guards.cs:334:13:334:20 | ... => ... | +| not null | Guards.cs:334:20:334:20 | 0 | +| not null | Guards.cs:335:13:335:13 | _ | +| not null | Guards.cs:335:13:335:18 | ... => ... | +| not null | Guards.cs:335:18:335:18 | 1 | +| not null | Guards.cs:341:20:341:20 | access to parameter b | +| not null | Guards.cs:341:31:341:32 | "" | +| not null | Guards.cs:342:13:342:21 | ... != ... | +| not null | Guards.cs:342:13:342:27 | ... && ... | +| not null | Guards.cs:342:26:342:27 | !... | +| not null | Guards.cs:342:27:342:27 | access to parameter b | +| not null | Guards.cs:343:13:343:19 | access to type Console | +| not null | Guards.cs:343:13:343:39 | call to method WriteLine | +| not null | Guards.cs:343:31:343:31 | access to local variable s | +| not null | Guards.cs:343:31:343:38 | access to property Length | +| not null | Guards.cs:348:13:348:25 | ... is ... | +| not null | Guards.cs:349:13:349:13 | access to parameter o | | null | Assert.cs:9:24:9:27 | null | | null | Assert.cs:10:27:10:30 | null | | null | Assert.cs:16:24:16:27 | null | +| null | Assert.cs:18:27:18:27 | access to local variable s | | null | Assert.cs:23:24:23:27 | null | | null | Assert.cs:30:24:30:27 | null | | null | Assert.cs:31:28:31:31 | null | +| null | Assert.cs:32:27:32:27 | access to local variable s | | null | Assert.cs:37:24:37:27 | null | | null | Assert.cs:38:28:38:31 | null | | null | Assert.cs:44:24:44:27 | null | | null | Assert.cs:45:29:45:32 | null | +| null | Assert.cs:46:27:46:27 | access to local variable s | | null | Assert.cs:51:24:51:27 | null | | null | Assert.cs:52:29:52:32 | null | | null | Assert.cs:58:24:58:27 | null | @@ -415,8 +897,10 @@ abstractValue | null | Assert.cs:66:29:66:32 | null | | null | Assert.cs:72:24:72:27 | null | | null | Assert.cs:73:28:73:31 | null | +| null | Assert.cs:74:27:74:27 | access to local variable s | | null | Assert.cs:79:24:79:27 | null | | null | Assert.cs:80:29:80:32 | null | +| null | Assert.cs:81:27:81:27 | access to local variable s | | null | Guards.cs:10:21:10:24 | null | | null | Guards.cs:24:18:24:21 | null | | null | Guards.cs:32:47:32:50 | null | @@ -435,98 +919,48 @@ abstractValue | null | Guards.cs:71:17:71:20 | null | | null | Guards.cs:72:31:72:31 | access to parameter s | | null | Guards.cs:88:26:88:29 | null | +| null | Guards.cs:91:31:91:31 | access to parameter s | | null | Guards.cs:104:42:104:45 | null | | null | Guards.cs:106:9:106:25 | ... = ... | | null | Guards.cs:106:22:106:25 | null | +| null | Guards.cs:107:27:107:36 | access to property Property | +| null | Guards.cs:108:27:108:36 | access to property Property | | null | Guards.cs:115:52:115:55 | null | | null | Guards.cs:117:9:117:25 | ... = ... | | null | Guards.cs:117:22:117:25 | null | +| null | Guards.cs:118:27:118:36 | access to property Property | +| null | Guards.cs:119:27:119:36 | access to property Property | +| null | Guards.cs:130:18:130:21 | null | +| null | Guards.cs:131:20:131:20 | access to parameter s | +| null | Guards.cs:139:16:139:16 | access to parameter s | +| null | Guards.cs:159:18:159:21 | null | +| null | Guards.cs:160:24:160:24 | access to parameter o | | null | Guards.cs:172:39:172:42 | null | +| null | Guards.cs:176:18:176:21 | null | | null | Guards.cs:181:39:181:42 | null | | null | Guards.cs:185:43:185:46 | null | | null | Guards.cs:203:18:203:21 | null | +| null | Guards.cs:284:13:284:16 | null | +| null | Guards.cs:285:17:285:17 | access to parameter o | | null | Guards.cs:341:24:341:27 | null | | null | Guards.cs:342:18:342:21 | null | -| null | Splitting.cs:12:22:12:25 | null | -| null | Splitting.cs:22:22:22:25 | null | -| null | Splitting.cs:32:22:32:25 | null | -| null | Splitting.cs:41:18:41:21 | null | -| null | Splitting.cs:54:18:54:21 | null | -| null | Splitting.cs:65:18:65:21 | null | -| null | Splitting.cs:76:18:76:21 | null | -| null | Splitting.cs:87:31:87:34 | null | -| null | Splitting.cs:97:31:97:34 | null | -| null | Splitting.cs:105:27:105:30 | null | -| null | Splitting.cs:116:27:116:30 | null | -| null | Splitting.cs:125:21:125:24 | null | -| null | Splitting.cs:129:22:129:25 | null | +| null | Guards.cs:348:22:348:25 | null | +| true | Assert.cs:73:36:73:36 | access to parameter b | +| true | Assert.cs:80:37:80:37 | access to parameter b | | true | Assert.cs:86:61:86:64 | true | +| true | Assert.cs:94:16:94:17 | access to parameter b1 | | true | Guards.cs:177:20:177:23 | true | | true | Guards.cs:181:46:181:49 | true | +| true | Guards.cs:185:38:185:60 | ... ? ... : ... | | true | Guards.cs:185:50:185:53 | true | | true | Guards.cs:185:57:185:60 | true | | true | Guards.cs:215:18:215:21 | true | | true | Guards.cs:220:18:220:21 | true | +| true | Guards.cs:230:13:230:21 | ... = ... | | true | Guards.cs:230:18:230:21 | true | | true | Guards.cs:233:18:233:21 | true | | true | Guards.cs:293:18:293:21 | true | | true | Guards.cs:298:13:298:16 | true | +| true | Guards.cs:307:13:307:21 | ... = ... | | true | Guards.cs:307:18:307:21 | true | | true | Guards.cs:310:13:310:16 | true | -dualValue -| empty | non-empty | -| false | true | -| match 1 | non-match 1 | -| match 1 | non-match 1 | -| match "" | non-match "" | -| match "" | non-match "" | -| match Action a | non-match Action a | -| match Action a | non-match Action a | -| match _ | non-match _ | -| match _ | non-match _ | -| match _ | non-match _ | -| match _ | non-match _ | -| match _ | non-match _ | -| match access to constant B | non-match access to constant B | -| match access to constant B | non-match access to constant B | -| match access to type Action | non-match access to type Action | -| match access to type Action | non-match access to type Action | -| match null | non-match null | -| match null | non-match null | -| match true | non-match true | -| match true | non-match true | -| match true | non-match true | -| match true | non-match true | -| non-empty | empty | -| non-match 1 | match 1 | -| non-match 1 | match 1 | -| non-match "" | match "" | -| non-match "" | match "" | -| non-match Action a | match Action a | -| non-match Action a | match Action a | -| non-match _ | match _ | -| non-match _ | match _ | -| non-match _ | match _ | -| non-match _ | match _ | -| non-match _ | match _ | -| non-match access to constant B | match access to constant B | -| non-match access to constant B | match access to constant B | -| non-match access to type Action | match access to type Action | -| non-match access to type Action | match access to type Action | -| non-match null | match null | -| non-match null | match null | -| non-match true | match true | -| non-match true | match true | -| non-match true | match true | -| non-match true | match true | -| non-null | null | -| null | non-null | -| true | false | -singletonValue -| 0 | -| 1 | -| 3 | -| 10 | -| false | -| null | -| true | diff --git a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.ql b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.ql index e433004e3d5..8d86e312cb4 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.ql +++ b/csharp/ql/test/library-tests/controlflow/guards/AbstractValue.ql @@ -1,12 +1,6 @@ import csharp private import semmle.code.csharp.controlflow.Guards -query predicate abstractValue(AbstractValue value, Expr e) { - e = value.getAnExpr() and e.fromSource() -} - -query predicate dualValue(AbstractValue value, AbstractValue dual) { dual = value.getDualValue() } - -query predicate singletonValue(AbstractValue value) { - value.isSingleton() and value.getAnExpr().fromSource() +query predicate abstractValue(GuardValue value, Expr e) { + Guards::InternalUtil::exprHasValue(e, value) and e.fromSource() } diff --git a/csharp/ql/test/library-tests/controlflow/guards/BooleanGuardedExpr.expected b/csharp/ql/test/library-tests/controlflow/guards/BooleanGuardedExpr.expected index 67150b178dc..649e8362370 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/BooleanGuardedExpr.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/BooleanGuardedExpr.expected @@ -69,25 +69,17 @@ | Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true | | Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:41 | call to operator == | Guards.cs:268:13:268:14 | access to parameter o1 | true | | Guards.cs:271:13:271:14 | access to parameter o1 | Guards.cs:270:13:270:42 | call to operator == | Guards.cs:270:13:270:14 | access to parameter o1 | true | +| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | true | +| Guards.cs:281:17:281:17 | access to local variable a | Guards.cs:280:13:281:28 | ... => ... | Guards.cs:281:17:281:17 | access to local variable a | true | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | true | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | true | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:286:13:287:28 | ... => ... | Guards.cs:287:17:287:17 | access to parameter o | true | | Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false | | Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true | | Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true | -| Splitting.cs:13:17:13:17 | access to parameter o | Splitting.cs:12:17:12:25 | ... != ... | Splitting.cs:12:17:12:17 | access to parameter o | true | -| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | true | -| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | false | -| Splitting.cs:35:13:35:13 | access to parameter o | Splitting.cs:32:17:32:25 | ... == ... | Splitting.cs:32:17:32:17 | access to parameter o | false | -| Splitting.cs:44:17:44:17 | access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:46:17:46:17 | access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:55:13:55:13 | access to parameter o | Splitting.cs:54:13:54:21 | ... != ... | Splitting.cs:54:13:54:13 | access to parameter o | true | -| Splitting.cs:66:20:66:20 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | true | -| Splitting.cs:68:13:68:13 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:69:16:69:16 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:78:24:78:24 | access to parameter o | Splitting.cs:76:13:76:21 | ... != ... | Splitting.cs:76:13:76:13 | access to parameter o | true | -| Splitting.cs:90:13:90:13 | access to parameter o | Splitting.cs:87:26:87:34 | ... != ... | Splitting.cs:87:26:87:26 | access to parameter o | true | -| Splitting.cs:99:13:99:13 | access to parameter o | Splitting.cs:97:26:97:34 | ... == ... | Splitting.cs:97:26:97:26 | access to parameter o | true | -| Splitting.cs:107:13:107:13 | access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:109:13:109:13 | access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:117:9:117:9 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:133:25:133:25 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false | diff --git a/csharp/ql/test/library-tests/controlflow/guards/Collections.ql b/csharp/ql/test/library-tests/controlflow/guards/Collections.ql index 1d5d3ad5a6e..578a08de307 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/Collections.ql +++ b/csharp/ql/test/library-tests/controlflow/guards/Collections.ql @@ -2,7 +2,7 @@ import csharp private import semmle.code.csharp.controlflow.Guards query predicate emptinessCheck( - Expr check, EnumerableCollectionExpr collection, AbstractValue v, boolean isEmpty + Expr check, EnumerableCollectionExpr collection, GuardValue v, boolean isEmpty ) { check = collection.getAnEmptinessCheck(v, isEmpty) } diff --git a/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.expected b/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.expected index 506f9e1f04c..b34cae88b80 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.expected @@ -1,280 +1,212 @@ -| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | non-null | +| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:22:10:22 | access to local variable s | no exception | +| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | not null | | Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | true | +| Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:23:17:23 | access to local variable s | no exception | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | null | -| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | non-null | +| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:26:24:26 | access to local variable s | no exception | +| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | not null | +| Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:23:31:23 | access to local variable s | no exception | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | null | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:23 | access to local variable s | true | -| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | non-null | +| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:23:38:23 | access to local variable s | no exception | +| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | not null | | Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | true | +| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:24:45:24 | access to local variable s | no exception | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | null | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s | false | -| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | non-null | +| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:24:52:24 | access to local variable s | no exception | +| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | not null | | Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s | false | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false | -| Assert.cs:59:36:59:36 | [b (line 56): false] access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | true | -| Assert.cs:59:36:59:36 | [b (line 56): true] access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null | -| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | non-null | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | not null | +| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | not null | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false | -| Assert.cs:66:37:66:37 | [b (line 63): false] access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | true | -| Assert.cs:66:37:66:37 | [b (line 63): true] access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null | -| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | non-null | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | not null | +| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | not null | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | false | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true | -| Assert.cs:73:36:73:36 | [b (line 70): false] access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true | -| Assert.cs:73:36:73:36 | [b (line 70): true] access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true | +| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | null | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | false | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true | -| Assert.cs:80:37:80:37 | [b (line 77): false] access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true | -| Assert.cs:80:37:80:37 | [b (line 77): true] access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true | +| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | null | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false | -| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): false] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false | -| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): false] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | true | -| Assert.cs:93:33:93:34 | [assertion failure, b1 (line 91): true] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | true | -| Assert.cs:93:33:93:34 | [assertion success, b1 (line 91): true] access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false | -| Assert.cs:94:16:94:17 | [b1 (line 91): true] access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | true | +| Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:25:93:26 | access to parameter b1 | no exception | +| Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | true | +| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:29:93:30 | access to parameter b2 | no exception | +| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:33:93:34 | access to parameter b2 | no exception | | Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false | -| Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:16 | access to parameter args | Collections.cs:49:13:49:16 | access to parameter args | non-empty | +| Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | +| Collections.cs:52:9:52:12 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:52:9:52:12 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | +| Collections.cs:53:13:53:16 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:53:13:53:16 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | -| Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:13 | access to local variable x | Collections.cs:64:13:64:13 | access to local variable x | empty | +| Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:19 | access to property Count | Collections.cs:64:13:64:13 | access to local variable x | 0 | | Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:24 | ... == ... | Collections.cs:64:13:64:13 | access to local variable x | true | +| Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:64:13:64:19 | access to property Count | Collections.cs:64:13:64:13 | access to local variable x | 0 | | Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:64:13:64:24 | ... == ... | Collections.cs:64:13:64:13 | access to local variable x | true | -| Collections.cs:95:31:95:34 | access to parameter args | Collections.cs:94:29:94:32 | access to parameter args | Collections.cs:94:29:94:32 | access to parameter args | non-empty | -| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null | +| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | not null | | Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false | -| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null | +| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | not null | | Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false | | Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:12:13:12:24 | ... > ... | Guards.cs:12:13:12:13 | access to parameter s | true | -| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | non-null | +| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | not null | | Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:21 | ... != ... | Guards.cs:24:13:24:13 | access to parameter s | true | | Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | Guards.cs:32:35:32:35 | access to parameter x | false | -| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | non-null | -| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | non-null | +| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | not null | +| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | not null | | Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:50 | ... == ... | Guards.cs:32:42:32:42 | access to parameter y | false | -| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | non-null | +| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | not null | | Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:21 | ... == ... | Guards.cs:35:13:35:13 | access to parameter x | false | -| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | non-null | +| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | not null | | Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:34 | ... == ... | Guards.cs:35:26:35:26 | access to parameter y | false | -| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | non-null | +| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | not null | | Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:23 | ... == ... | Guards.cs:38:15:38:15 | access to parameter x | false | -| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | non-null | +| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | not null | | Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:36 | ... == ... | Guards.cs:38:28:38:28 | access to parameter y | false | -| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | non-null | +| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | not null | | Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:25 | ... != ... | Guards.cs:41:17:41:17 | access to parameter x | true | -| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | non-null | +| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | not null | | Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:38 | ... != ... | Guards.cs:41:30:41:30 | access to parameter y | true | -| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | non-null | +| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | not null | | Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:25 | ... != ... | Guards.cs:47:13:47:17 | access to field Field | true | -| Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:13 | access to parameter g | non-null | +| Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:13 | access to parameter g | not null | | Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:27 | ... == ... | Guards.cs:53:13:53:13 | access to parameter g | false | -| Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | non-null | +| Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | not null | | Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:27 | ... == ... | Guards.cs:53:13:53:19 | access to field Field | false | -| Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | non-null | +| Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | not null | | Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:13 | access to parameter g | false | -| Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | non-null | +| Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | not null | | Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:22 | access to property Property | false | -| Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:31 | access to property Property | non-null | +| Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:31 | access to property Property | not null | | Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:31 | access to property Property | false | -| Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | non-null | +| Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | not null | | Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:37 | access to field Field | false | -| Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | non-null | +| Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | not null | | Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:13 | access to parameter g | false | -| Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | non-null | +| Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | not null | | Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:22 | access to property Property | false | -| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | non-null | +| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | not null | | Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:24 | ... != ... | Guards.cs:68:16:68:16 | access to parameter s | true | -| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | non-null | -| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null | +| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | not null | +| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | not null | | Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:26 | ... == ... | Guards.cs:78:13:78:13 | access to parameter s | true | -| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | non-null | -| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null | +| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | not null | +| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | not null | | Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:25 | ... > ... | Guards.cs:80:13:80:13 | access to parameter s | true | -| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | non-null | -| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null | +| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | not null | +| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | not null | | Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:26 | ... >= ... | Guards.cs:82:13:82:13 | access to parameter s | true | -| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | non-null | -| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null | +| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | not null | +| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | not null | | Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:26 | ... < ... | Guards.cs:84:13:84:13 | access to parameter s | true | -| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | non-null | -| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null | +| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | not null | +| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | not null | | Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:27 | ... <= ... | Guards.cs:86:13:86:13 | access to parameter s | true | -| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | non-null | -| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null | +| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | not null | +| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | not null | | Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | true | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | null | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | false | | Guards.cs:93:31:93:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | true | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | non-null | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | non-null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | not null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | not null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | not null | | Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | false | -| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | non-null | +| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | | +| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | not null | | Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | true | +| Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | not | | Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | false | -| Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | -| Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | -| Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | | Guards.cs:114:14:114:14 | access to parameter g | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:21 | access to parameter g | null | | Guards.cs:114:14:114:23 | access to property Property | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:30 | access to property Property | null | | Guards.cs:114:14:114:32 | access to property Property | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:39 | access to property Property | null | | Guards.cs:114:14:114:38 | access to field Field | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:45 | access to field Field | null | -| Guards.cs:116:27:116:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:116:27:116:36 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:26 | access to property Property | non-null | -| Guards.cs:116:27:116:45 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:35 | access to property Property | non-null | -| Guards.cs:116:27:116:51 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | non-null | -| Guards.cs:117:9:117:9 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:118:27:118:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:119:27:119:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:125:29:125:30 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | non-null | +| Guards.cs:116:27:116:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:116:27:116:36 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:26 | access to property Property | not null | +| Guards.cs:116:27:116:45 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:35 | access to property Property | not null | +| Guards.cs:116:27:116:51 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | not null | +| Guards.cs:117:9:117:9 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:118:27:118:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:119:27:119:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:125:29:125:30 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | not null | | Guards.cs:131:20:131:20 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | null | | Guards.cs:131:20:131:20 | access to parameter s | Guards.cs:130:13:130:21 | ... is ... | Guards.cs:130:13:130:13 | access to parameter s | true | -| Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | non-null | +| Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | not null | | Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:21 | ... is ... | Guards.cs:130:13:130:13 | access to parameter s | false | -| Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | non-null | +| Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | not null | | Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | true | | Guards.cs:139:16:139:16 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | null | | Guards.cs:139:16:139:16 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | false | | Guards.cs:146:16:146:16 | access to parameter o | Guards.cs:144:13:144:25 | ... is ... | Guards.cs:144:13:144:13 | access to parameter o | false | -| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match access to type Action | -| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match "" | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match null | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match "" | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | +| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | +| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | | +| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | +| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not | | Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | null | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match "" | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match null | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | +| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not | +| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | | Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | Guards.cs:168:40:168:40 | access to parameter x | false | -| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | non-null | +| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | not null | | Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:14:189:25 | call to method NullTest1 | Guards.cs:189:24:189:24 | access to parameter s | false | -| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | non-null | +| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | not null | | Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:14:191:25 | call to method NullTest2 | Guards.cs:191:24:191:24 | access to parameter s | false | -| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | non-null | +| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | not null | | Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:14:193:25 | call to method NullTest3 | Guards.cs:193:24:193:24 | access to parameter s | false | -| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | non-null | +| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | not null | | Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:13:195:27 | call to method NotNullTest4 | Guards.cs:195:26:195:26 | access to parameter s | true | -| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | non-null | +| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | not null | | Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:14:197:29 | call to method NullTestWrong | Guards.cs:197:28:197:28 | access to parameter s | false | -| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null | +| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | not null | | Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true | -| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null | +| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | not null | | Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true | -| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | non-null | -| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null | +| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | not null | +| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | not null | | Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:41 | call to operator == | Guards.cs:268:13:268:14 | access to parameter o1 | true | | Guards.cs:271:13:271:14 | access to parameter o1 | Guards.cs:270:13:270:42 | call to operator == | Guards.cs:270:13:270:14 | access to parameter o1 | true | -| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match access to type Action | -| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match "" | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match null | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match "" | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | +| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | true | +| Guards.cs:279:17:279:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | true | +| Guards.cs:281:17:281:17 | access to local variable a | Guards.cs:280:13:281:28 | ... => ... | Guards.cs:281:17:281:17 | access to local variable a | true | +| Guards.cs:281:17:281:28 | call to method ToString | Guards.cs:280:13:281:28 | ... => ... | Guards.cs:281:17:281:28 | call to method ToString | true | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | true | +| Guards.cs:283:17:283:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:283:17:283:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | true | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not | | Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | null | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match _ | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match "" | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match null | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:342:27:342:27 | [b (line 339): false] access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false | -| Guards.cs:342:27:342:27 | [b (line 339): false] access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null | -| Guards.cs:342:27:342:27 | [b (line 339): true] access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false | -| Guards.cs:342:27:342:27 | [b (line 339): true] access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | true | -| Guards.cs:342:27:342:27 | [b (line 339): true] access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null | -| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | non-null | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | true | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | false | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:28 | call to method ToString | true | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:286:13:287:28 | ... => ... | Guards.cs:287:17:287:17 | access to parameter o | true | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:286:13:287:28 | ... => ... | Guards.cs:287:17:287:28 | call to method ToString | true | +| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false | +| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | not null | +| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | not null | | Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true | -| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | non-null | +| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | not null | | Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true | -| Splitting.cs:13:17:13:17 | [b (line 9): true] access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | non-null | -| Splitting.cs:13:17:13:17 | [b (line 9): true] access to parameter o | Splitting.cs:12:17:12:25 | ... != ... | Splitting.cs:12:17:12:17 | access to parameter o | true | -| Splitting.cs:14:13:14:13 | [b (line 9): false] access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | false | -| Splitting.cs:14:13:14:13 | [b (line 9): true] access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | Splitting.cs:11:13:11:13 | access to parameter b | true | -| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | non-null | -| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | true | -| Splitting.cs:24:13:24:13 | [b (line 19): false] access to parameter b | Splitting.cs:21:13:21:13 | access to parameter b | Splitting.cs:21:13:21:13 | access to parameter b | false | -| Splitting.cs:24:13:24:13 | [b (line 19): true] access to parameter b | Splitting.cs:21:13:21:13 | access to parameter b | Splitting.cs:21:13:21:13 | access to parameter b | true | -| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | null | -| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | false | -| Splitting.cs:34:13:34:13 | [b (line 29): false] access to parameter b | Splitting.cs:31:13:31:13 | access to parameter b | Splitting.cs:31:13:31:13 | access to parameter b | false | -| Splitting.cs:34:13:34:13 | [b (line 29): true] access to parameter b | Splitting.cs:31:13:31:13 | access to parameter b | Splitting.cs:31:13:31:13 | access to parameter b | true | -| Splitting.cs:35:13:35:13 | access to parameter o | Splitting.cs:32:17:32:17 | access to parameter o | Splitting.cs:32:17:32:17 | access to parameter o | non-null | -| Splitting.cs:35:13:35:13 | access to parameter o | Splitting.cs:32:17:32:25 | ... == ... | Splitting.cs:32:17:32:17 | access to parameter o | false | -| Splitting.cs:44:17:44:17 | [b (line 39): true] access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | non-null | -| Splitting.cs:44:17:44:17 | [b (line 39): true] access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:45:17:45:17 | [b (line 39): false] access to parameter b | Splitting.cs:43:17:43:17 | access to parameter b | Splitting.cs:43:17:43:17 | access to parameter b | false | -| Splitting.cs:45:17:45:17 | [b (line 39): true] access to parameter b | Splitting.cs:43:17:43:17 | access to parameter b | Splitting.cs:43:17:43:17 | access to parameter b | true | -| Splitting.cs:46:17:46:17 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | non-null | -| Splitting.cs:46:17:46:17 | access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:55:13:55:13 | [b (line 50): false] access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | non-null | -| Splitting.cs:55:13:55:13 | [b (line 50): false] access to parameter o | Splitting.cs:54:13:54:21 | ... != ... | Splitting.cs:54:13:54:13 | access to parameter o | true | -| Splitting.cs:55:13:55:13 | [b (line 50): true] access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | non-null | -| Splitting.cs:55:13:55:13 | [b (line 50): true] access to parameter o | Splitting.cs:54:13:54:21 | ... != ... | Splitting.cs:54:13:54:13 | access to parameter o | true | -| Splitting.cs:56:13:56:13 | [b (line 50): false] access to parameter b | Splitting.cs:52:13:52:13 | access to parameter b | Splitting.cs:52:13:52:13 | access to parameter b | false | -| Splitting.cs:56:13:56:13 | [b (line 50): true] access to parameter b | Splitting.cs:52:13:52:13 | access to parameter b | Splitting.cs:52:13:52:13 | access to parameter b | true | -| Splitting.cs:66:20:66:20 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | non-null | -| Splitting.cs:66:20:66:20 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | true | -| Splitting.cs:67:13:67:13 | [b (line 61): false] access to parameter b | Splitting.cs:63:13:63:13 | access to parameter b | Splitting.cs:63:13:63:13 | access to parameter b | false | -| Splitting.cs:67:13:67:13 | [b (line 61): true] access to parameter b | Splitting.cs:63:13:63:13 | access to parameter b | Splitting.cs:63:13:63:13 | access to parameter b | true | -| Splitting.cs:68:13:68:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | null | -| Splitting.cs:68:13:68:13 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:69:16:69:16 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | null | -| Splitting.cs:69:16:69:16 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:78:24:78:24 | access to parameter o | Splitting.cs:76:13:76:13 | access to parameter o | Splitting.cs:76:13:76:13 | access to parameter o | non-null | -| Splitting.cs:78:24:78:24 | access to parameter o | Splitting.cs:76:13:76:21 | ... != ... | Splitting.cs:76:13:76:13 | access to parameter o | true | -| Splitting.cs:79:13:79:13 | [b (line 72): false] access to parameter b | Splitting.cs:74:13:74:13 | access to parameter b | Splitting.cs:74:13:74:13 | access to parameter b | false | -| Splitting.cs:79:13:79:13 | [b (line 72): true] access to parameter b | Splitting.cs:74:13:74:13 | access to parameter b | Splitting.cs:74:13:74:13 | access to parameter b | true | -| Splitting.cs:88:9:88:9 | [b (line 84): true] access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | non-null | -| Splitting.cs:88:9:88:9 | [b (line 84): true] access to parameter o | Splitting.cs:87:26:87:34 | ... != ... | Splitting.cs:87:26:87:26 | access to parameter o | true | -| Splitting.cs:89:13:89:13 | [b (line 84): false] access to parameter b | Splitting.cs:86:13:86:13 | access to parameter b | Splitting.cs:86:13:86:13 | access to parameter b | false | -| Splitting.cs:89:13:89:13 | [b (line 84): true] access to parameter b | Splitting.cs:86:13:86:13 | access to parameter b | Splitting.cs:86:13:86:13 | access to parameter b | true | -| Splitting.cs:90:13:90:13 | access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | non-null | -| Splitting.cs:90:13:90:13 | access to parameter o | Splitting.cs:87:26:87:34 | ... != ... | Splitting.cs:87:26:87:26 | access to parameter o | true | -| Splitting.cs:98:13:98:13 | [b (line 94): false] access to parameter b | Splitting.cs:96:13:96:13 | access to parameter b | Splitting.cs:96:13:96:13 | access to parameter b | false | -| Splitting.cs:98:13:98:13 | [b (line 94): true] access to parameter b | Splitting.cs:96:13:96:13 | access to parameter b | Splitting.cs:96:13:96:13 | access to parameter b | true | -| Splitting.cs:99:13:99:13 | access to parameter o | Splitting.cs:97:26:97:26 | access to parameter o | Splitting.cs:97:26:97:26 | access to parameter o | null | -| Splitting.cs:99:13:99:13 | access to parameter o | Splitting.cs:97:26:97:34 | ... == ... | Splitting.cs:97:26:97:26 | access to parameter o | true | -| Splitting.cs:107:13:107:13 | [b (line 103): true] access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | non-null | -| Splitting.cs:107:13:107:13 | [b (line 103): true] access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:108:13:108:13 | [b (line 103): false] access to parameter b | Splitting.cs:106:13:106:13 | access to parameter b | Splitting.cs:106:13:106:13 | access to parameter b | false | -| Splitting.cs:108:13:108:13 | [b (line 103): true] access to parameter b | Splitting.cs:106:13:106:13 | access to parameter b | Splitting.cs:106:13:106:13 | access to parameter b | true | -| Splitting.cs:109:13:109:13 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | non-null | -| Splitting.cs:109:13:109:13 | access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:117:9:117:9 | [b (line 112): false] access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:117:9:117:9 | [b (line 112): false] access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:117:9:117:9 | [b (line 112): true] access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:117:9:117:9 | [b (line 112): true] access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:118:13:118:13 | [b (line 112): false] access to parameter b | Splitting.cs:114:13:114:13 | access to parameter b | Splitting.cs:114:13:114:13 | access to parameter b | false | -| Splitting.cs:118:13:118:13 | [b (line 112): true] access to parameter b | Splitting.cs:114:13:114:13 | access to parameter b | Splitting.cs:114:13:114:13 | access to parameter b | true | -| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:131:21:131:21 | [b (line 123): false] access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false | -| Splitting.cs:133:25:133:25 | [b (line 123): false] access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false | diff --git a/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.ql b/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.ql index 82d843a2a41..183a097c27e 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.ql +++ b/csharp/ql/test/library-tests/controlflow/guards/GuardedControlFlowNode.ql @@ -1,5 +1,5 @@ import csharp import semmle.code.csharp.controlflow.Guards -from GuardedControlFlowNode gcfn, Expr sub, AbstractValue v +from GuardedControlFlowNode gcfn, Expr sub, GuardValue v select gcfn, gcfn.getAGuard(sub, v), sub, v diff --git a/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.expected b/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.expected index c61f41519ad..b34cae88b80 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.expected @@ -1,22 +1,29 @@ -| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | non-null | +| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:9:10:31 | call to method Assert | Assert.cs:10:22:10:22 | access to local variable s | no exception | +| Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:22:10:22 | access to local variable s | not null | | Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | true | +| Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:17:9:17:24 | call to method IsNull | Assert.cs:17:23:17:23 | access to local variable s | no exception | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | Assert.cs:17:23:17:23 | access to local variable s | null | -| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | non-null | +| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:9:24:27 | call to method IsNotNull | Assert.cs:24:26:24:26 | access to local variable s | no exception | +| Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | Assert.cs:24:26:24:26 | access to local variable s | not null | +| Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:9:31:32 | call to method IsTrue | Assert.cs:31:23:31:23 | access to local variable s | no exception | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | Assert.cs:31:23:31:23 | access to local variable s | null | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:31:23:31:31 | ... == ... | Assert.cs:31:23:31:23 | access to local variable s | true | -| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | non-null | +| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:9:38:32 | call to method IsTrue | Assert.cs:38:23:38:23 | access to local variable s | no exception | +| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:23:38:23 | access to local variable s | not null | | Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | true | +| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:9:45:33 | call to method IsFalse | Assert.cs:45:24:45:24 | access to local variable s | no exception | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | Assert.cs:45:24:45:24 | access to local variable s | null | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s | false | -| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | non-null | +| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:9:52:33 | call to method IsFalse | Assert.cs:52:24:52:24 | access to local variable s | no exception | +| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | not null | | Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s | false | | Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false | -| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null | -| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | non-null | +| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | not null | +| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | not null | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true | | Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false | -| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null | -| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | non-null | +| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | not null | +| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | not null | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false | | Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true | | Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null | @@ -26,207 +33,180 @@ | Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | null | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false | +| Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:25:93:26 | access to parameter b1 | no exception | | Assert.cs:94:16:94:17 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | Assert.cs:93:25:93:26 | access to parameter b1 | true | +| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:29:93:30 | access to parameter b2 | no exception | +| Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:9:93:35 | call to method AssertTrueFalse | Assert.cs:93:33:93:34 | access to parameter b2 | no exception | | Assert.cs:94:23:94:24 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | Assert.cs:93:29:93:30 | access to parameter b2 | false | -| Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:16 | access to parameter args | Collections.cs:49:13:49:16 | access to parameter args | non-empty | +| Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:51:17:51:20 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | +| Collections.cs:52:9:52:12 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:52:9:52:12 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | +| Collections.cs:53:13:53:16 | access to parameter args | Collections.cs:49:13:49:22 | access to property Count | Collections.cs:49:13:49:16 | access to parameter args | not 0 | | Collections.cs:53:13:53:16 | access to parameter args | Collections.cs:49:13:49:27 | ... == ... | Collections.cs:49:13:49:16 | access to parameter args | false | -| Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:13 | access to local variable x | Collections.cs:64:13:64:13 | access to local variable x | empty | +| Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:19 | access to property Count | Collections.cs:64:13:64:13 | access to local variable x | 0 | | Collections.cs:66:13:66:13 | access to local variable x | Collections.cs:64:13:64:24 | ... == ... | Collections.cs:64:13:64:13 | access to local variable x | true | +| Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:64:13:64:19 | access to property Count | Collections.cs:64:13:64:13 | access to local variable x | 0 | | Collections.cs:67:13:67:13 | access to local variable x | Collections.cs:64:13:64:24 | ... == ... | Collections.cs:64:13:64:13 | access to local variable x | true | -| Collections.cs:95:31:95:34 | access to parameter args | Collections.cs:94:29:94:32 | access to parameter args | Collections.cs:94:29:94:32 | access to parameter args | non-empty | -| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null | +| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | not null | | Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false | -| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | non-null | +| Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | Guards.cs:10:16:10:16 | access to parameter s | not null | | Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false | | Guards.cs:14:31:14:31 | access to parameter s | Guards.cs:12:13:12:24 | ... > ... | Guards.cs:12:13:12:13 | access to parameter s | true | -| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | non-null | +| Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | Guards.cs:24:13:24:13 | access to parameter s | not null | | Guards.cs:26:31:26:31 | access to parameter s | Guards.cs:24:13:24:21 | ... != ... | Guards.cs:24:13:24:13 | access to parameter s | true | | Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | Guards.cs:32:35:32:35 | access to parameter x | false | -| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | non-null | -| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | non-null | +| Guards.cs:33:31:33:31 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | Guards.cs:32:35:32:35 | access to parameter x | not null | +| Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | Guards.cs:32:42:32:42 | access to parameter y | not null | | Guards.cs:33:35:33:35 | access to parameter y | Guards.cs:32:42:32:50 | ... == ... | Guards.cs:32:42:32:42 | access to parameter y | false | -| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | non-null | +| Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | Guards.cs:35:13:35:13 | access to parameter x | not null | | Guards.cs:36:32:36:32 | access to parameter x | Guards.cs:35:13:35:21 | ... == ... | Guards.cs:35:13:35:13 | access to parameter x | false | -| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | non-null | +| Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | Guards.cs:35:26:35:26 | access to parameter y | not null | | Guards.cs:36:36:36:36 | access to parameter y | Guards.cs:35:26:35:34 | ... == ... | Guards.cs:35:26:35:26 | access to parameter y | false | -| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | non-null | +| Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | Guards.cs:38:15:38:15 | access to parameter x | not null | | Guards.cs:39:31:39:31 | access to parameter x | Guards.cs:38:15:38:23 | ... == ... | Guards.cs:38:15:38:15 | access to parameter x | false | -| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | non-null | +| Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | Guards.cs:38:28:38:28 | access to parameter y | not null | | Guards.cs:39:35:39:35 | access to parameter y | Guards.cs:38:28:38:36 | ... == ... | Guards.cs:38:28:38:28 | access to parameter y | false | -| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | non-null | +| Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | Guards.cs:41:17:41:17 | access to parameter x | not null | | Guards.cs:42:32:42:32 | access to parameter x | Guards.cs:41:17:41:25 | ... != ... | Guards.cs:41:17:41:17 | access to parameter x | true | -| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | non-null | +| Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | Guards.cs:41:30:41:30 | access to parameter y | not null | | Guards.cs:42:36:42:36 | access to parameter y | Guards.cs:41:30:41:38 | ... != ... | Guards.cs:41:30:41:30 | access to parameter y | true | -| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | non-null | +| Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | Guards.cs:47:13:47:17 | access to field Field | not null | | Guards.cs:48:31:48:40 | access to field Field | Guards.cs:47:13:47:25 | ... != ... | Guards.cs:47:13:47:17 | access to field Field | true | -| Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:13 | access to parameter g | non-null | +| Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:13 | access to parameter g | not null | | Guards.cs:55:27:55:27 | access to parameter g | Guards.cs:53:13:53:27 | ... == ... | Guards.cs:53:13:53:13 | access to parameter g | false | -| Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | non-null | +| Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | Guards.cs:53:13:53:19 | access to field Field | not null | | Guards.cs:55:27:55:33 | access to field Field | Guards.cs:53:13:53:27 | ... == ... | Guards.cs:53:13:53:19 | access to field Field | false | -| Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | non-null | +| Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | not null | | Guards.cs:62:27:62:27 | access to parameter g | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:13 | access to parameter g | false | -| Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | non-null | +| Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | not null | | Guards.cs:62:27:62:36 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:22 | access to property Property | false | -| Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:31 | access to property Property | non-null | +| Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:31 | access to property Property | not null | | Guards.cs:62:27:62:45 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:31 | access to property Property | false | -| Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | non-null | +| Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:37 | access to field Field | not null | | Guards.cs:62:27:62:51 | access to field Field | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:37 | access to field Field | false | -| Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | non-null | +| Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:13 | access to parameter g | not null | | Guards.cs:63:27:63:27 | access to parameter g | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:13 | access to parameter g | false | -| Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | non-null | +| Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:37 | access to field Field | Guards.cs:60:13:60:22 | access to property Property | not null | | Guards.cs:63:27:63:36 | access to property Property | Guards.cs:60:13:60:45 | ... == ... | Guards.cs:60:13:60:22 | access to property Property | false | -| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | non-null | +| Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | Guards.cs:68:16:68:16 | access to parameter s | not null | | Guards.cs:70:31:70:31 | access to parameter s | Guards.cs:68:16:68:24 | ... != ... | Guards.cs:68:16:68:16 | access to parameter s | true | -| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | non-null | -| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | non-null | +| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | Guards.cs:78:13:78:13 | access to parameter s | not null | +| Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:21 | access to property Length | Guards.cs:78:13:78:13 | access to parameter s | not null | | Guards.cs:79:31:79:31 | access to parameter s | Guards.cs:78:13:78:26 | ... == ... | Guards.cs:78:13:78:13 | access to parameter s | true | -| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | non-null | -| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | non-null | +| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | Guards.cs:80:13:80:13 | access to parameter s | not null | +| Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:21 | access to property Length | Guards.cs:80:13:80:13 | access to parameter s | not null | | Guards.cs:81:31:81:31 | access to parameter s | Guards.cs:80:13:80:25 | ... > ... | Guards.cs:80:13:80:13 | access to parameter s | true | -| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | non-null | -| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | non-null | +| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | Guards.cs:82:13:82:13 | access to parameter s | not null | +| Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:21 | access to property Length | Guards.cs:82:13:82:13 | access to parameter s | not null | | Guards.cs:83:31:83:31 | access to parameter s | Guards.cs:82:13:82:26 | ... >= ... | Guards.cs:82:13:82:13 | access to parameter s | true | -| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | non-null | -| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | non-null | +| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | Guards.cs:84:13:84:13 | access to parameter s | not null | +| Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:21 | access to property Length | Guards.cs:84:13:84:13 | access to parameter s | not null | | Guards.cs:85:31:85:31 | access to parameter s | Guards.cs:84:13:84:26 | ... < ... | Guards.cs:84:13:84:13 | access to parameter s | true | -| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | non-null | -| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | non-null | +| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | Guards.cs:86:13:86:13 | access to parameter s | not null | +| Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:21 | access to property Length | Guards.cs:86:13:86:13 | access to parameter s | not null | | Guards.cs:87:31:87:31 | access to parameter s | Guards.cs:86:13:86:27 | ... <= ... | Guards.cs:86:13:86:13 | access to parameter s | true | -| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | non-null | -| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | non-null | +| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | not null | +| Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | not null | | Guards.cs:89:31:89:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | true | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | Guards.cs:88:13:88:13 | access to parameter s | null | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:21 | access to property Length | Guards.cs:88:13:88:13 | access to parameter s | null | | Guards.cs:91:31:91:31 | access to parameter s | Guards.cs:88:13:88:29 | ... != ... | Guards.cs:88:13:88:13 | access to parameter s | false | | Guards.cs:93:31:93:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | true | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | non-null | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | non-null | -| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | non-null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | Guards.cs:92:13:92:13 | access to parameter s | not null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:21 | access to property Length | Guards.cs:92:13:92:13 | access to parameter s | not null | +| Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:25 | ... - ... | Guards.cs:92:13:92:13 | access to parameter s | not null | | Guards.cs:95:31:95:31 | access to parameter s | Guards.cs:92:13:92:30 | ... != ... | Guards.cs:92:13:92:13 | access to parameter s | false | -| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | non-null | +| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | | +| Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | not null | | Guards.cs:97:31:97:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | true | +| Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | Guards.cs:96:13:96:13 | access to parameter s | not | | Guards.cs:99:31:99:31 | access to parameter s | Guards.cs:96:13:96:19 | ... == ... | Guards.cs:96:13:96:13 | access to parameter s | false | -| Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:106:9:106:9 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | -| Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:107:27:107:27 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | -| Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | non-null | +| Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:37 | access to field Field | Guards.cs:104:13:104:13 | access to parameter g | not null | | Guards.cs:108:27:108:27 | access to parameter g | Guards.cs:104:13:104:45 | ... == ... | Guards.cs:104:13:104:13 | access to parameter g | false | | Guards.cs:114:14:114:14 | access to parameter g | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:21 | access to parameter g | null | | Guards.cs:114:14:114:23 | access to property Property | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:30 | access to property Property | null | | Guards.cs:114:14:114:32 | access to property Property | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:39 | access to property Property | null | | Guards.cs:114:14:114:38 | access to field Field | Guards.cs:113:21:113:45 | access to field Field | Guards.cs:113:21:113:45 | access to field Field | null | -| Guards.cs:116:27:116:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:116:27:116:36 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:26 | access to property Property | non-null | -| Guards.cs:116:27:116:45 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:35 | access to property Property | non-null | -| Guards.cs:116:27:116:51 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | non-null | -| Guards.cs:117:9:117:9 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:118:27:118:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:119:27:119:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | non-null | -| Guards.cs:125:29:125:30 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | non-null | +| Guards.cs:116:27:116:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:116:27:116:36 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:26 | access to property Property | not null | +| Guards.cs:116:27:116:45 | access to property Property | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:35 | access to property Property | not null | +| Guards.cs:116:27:116:51 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:41 | access to field Field | not null | +| Guards.cs:117:9:117:9 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:118:27:118:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:119:27:119:27 | access to parameter g | Guards.cs:115:17:115:41 | access to field Field | Guards.cs:115:17:115:17 | access to parameter g | not null | +| Guards.cs:125:29:125:30 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | Guards.cs:125:18:125:19 | access to parameter s1 | not null | | Guards.cs:131:20:131:20 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | null | | Guards.cs:131:20:131:20 | access to parameter s | Guards.cs:130:13:130:21 | ... is ... | Guards.cs:130:13:130:13 | access to parameter s | true | -| Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | non-null | +| Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | Guards.cs:130:13:130:13 | access to parameter s | not null | | Guards.cs:132:16:132:16 | access to parameter s | Guards.cs:130:13:130:21 | ... is ... | Guards.cs:130:13:130:13 | access to parameter s | false | -| Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | non-null | +| Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | not null | | Guards.cs:138:20:138:20 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | true | | Guards.cs:139:16:139:16 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | Guards.cs:137:13:137:13 | access to parameter s | null | | Guards.cs:139:16:139:16 | access to parameter s | Guards.cs:137:13:137:25 | ... is ... | Guards.cs:137:13:137:13 | access to parameter s | false | | Guards.cs:146:16:146:16 | access to parameter o | Guards.cs:144:13:144:25 | ... is ... | Guards.cs:144:13:144:13 | access to parameter o | false | -| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match access to type Action | -| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match "" | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | match null | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match "" | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | +| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | +| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | | +| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | +| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not | | Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | null | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match "" | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match Action a | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match access to type Action | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-match null | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | non-null | +| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not | +| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | not null | | Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | Guards.cs:168:40:168:40 | access to parameter x | false | -| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | non-null | +| Guards.cs:169:31:169:31 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | Guards.cs:168:40:168:40 | access to parameter x | not null | | Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:14:189:25 | call to method NullTest1 | Guards.cs:189:24:189:24 | access to parameter s | false | -| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | non-null | +| Guards.cs:190:31:190:31 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | Guards.cs:189:24:189:24 | access to parameter s | not null | | Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:14:191:25 | call to method NullTest2 | Guards.cs:191:24:191:24 | access to parameter s | false | -| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | non-null | +| Guards.cs:192:31:192:31 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | Guards.cs:191:24:191:24 | access to parameter s | not null | | Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:14:193:25 | call to method NullTest3 | Guards.cs:193:24:193:24 | access to parameter s | false | -| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | non-null | +| Guards.cs:194:31:194:31 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | Guards.cs:193:24:193:24 | access to parameter s | not null | | Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:13:195:27 | call to method NotNullTest4 | Guards.cs:195:26:195:26 | access to parameter s | true | -| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | non-null | +| Guards.cs:196:31:196:31 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | Guards.cs:195:26:195:26 | access to parameter s | not null | | Guards.cs:198:31:198:31 | access to parameter s | Guards.cs:197:14:197:29 | call to method NullTestWrong | Guards.cs:197:28:197:28 | access to parameter s | false | -| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null | +| Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | not null | | Guards.cs:205:13:205:13 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true | -| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | non-null | +| Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | Guards.cs:203:13:203:13 | access to parameter o | not null | | Guards.cs:208:17:208:17 | access to parameter o | Guards.cs:203:13:203:21 | ... != ... | Guards.cs:203:13:203:13 | access to parameter o | true | -| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | non-null | -| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | non-null | +| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | Guards.cs:268:13:268:14 | access to parameter o1 | not null | +| Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:25 | call to method GetType | Guards.cs:268:13:268:14 | access to parameter o1 | not null | | Guards.cs:269:13:269:14 | access to parameter o1 | Guards.cs:268:13:268:41 | call to operator == | Guards.cs:268:13:268:14 | access to parameter o1 | true | | Guards.cs:271:13:271:14 | access to parameter o1 | Guards.cs:270:13:270:42 | call to operator == | Guards.cs:270:13:270:14 | access to parameter o1 | true | -| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match access to type Action | -| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match "" | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match null | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match "" | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | +| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | true | +| Guards.cs:279:17:279:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | true | +| Guards.cs:281:17:281:17 | access to local variable a | Guards.cs:280:13:281:28 | ... => ... | Guards.cs:281:17:281:17 | access to local variable a | true | +| Guards.cs:281:17:281:28 | call to method ToString | Guards.cs:280:13:281:28 | ... => ... | Guards.cs:281:17:281:28 | call to method ToString | true | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | true | +| Guards.cs:283:17:283:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:283:17:283:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | true | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not | | Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | null | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | match _ | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match "" | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match Action a | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match access to type Action | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-match null | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | non-null | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | true | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | false | +| Guards.cs:285:17:285:28 | call to method ToString | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:28 | call to method ToString | true | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | not null | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:17 | access to parameter o | false | +| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:286:13:287:28 | ... => ... | Guards.cs:287:17:287:17 | access to parameter o | true | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:278:13:279:28 | ... => ... | Guards.cs:279:17:279:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:282:13:283:28 | ... => ... | Guards.cs:283:17:283:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:284:13:285:28 | ... => ... | Guards.cs:285:17:285:28 | call to method ToString | false | +| Guards.cs:287:17:287:28 | call to method ToString | Guards.cs:286:13:287:28 | ... => ... | Guards.cs:287:17:287:28 | call to method ToString | true | | Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | Guards.cs:341:20:341:20 | access to parameter b | false | -| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | non-null | -| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | non-null | +| Guards.cs:342:27:342:27 | access to parameter b | Guards.cs:341:20:341:32 | ... ? ... : ... | Guards.cs:341:20:341:20 | access to parameter b | not null | +| Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | Guards.cs:342:13:342:13 | access to local variable s | not null | | Guards.cs:343:31:343:31 | access to local variable s | Guards.cs:342:13:342:21 | ... != ... | Guards.cs:342:13:342:13 | access to local variable s | true | -| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | non-null | +| Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | Guards.cs:348:13:348:13 | access to parameter o | not null | | Guards.cs:349:13:349:13 | access to parameter o | Guards.cs:348:13:348:25 | ... is ... | Guards.cs:348:13:348:13 | access to parameter o | true | -| Splitting.cs:13:17:13:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | Splitting.cs:12:17:12:17 | access to parameter o | non-null | -| Splitting.cs:13:17:13:17 | access to parameter o | Splitting.cs:12:17:12:25 | ... != ... | Splitting.cs:12:17:12:17 | access to parameter o | true | -| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | non-null | -| Splitting.cs:23:24:23:24 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | true | -| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | Splitting.cs:22:17:22:17 | access to parameter o | null | -| Splitting.cs:25:13:25:13 | access to parameter o | Splitting.cs:22:17:22:25 | ... != ... | Splitting.cs:22:17:22:17 | access to parameter o | false | -| Splitting.cs:35:13:35:13 | access to parameter o | Splitting.cs:32:17:32:17 | access to parameter o | Splitting.cs:32:17:32:17 | access to parameter o | non-null | -| Splitting.cs:35:13:35:13 | access to parameter o | Splitting.cs:32:17:32:25 | ... == ... | Splitting.cs:32:17:32:17 | access to parameter o | false | -| Splitting.cs:44:17:44:17 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | non-null | -| Splitting.cs:44:17:44:17 | access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:46:17:46:17 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | Splitting.cs:41:13:41:13 | access to parameter o | non-null | -| Splitting.cs:46:17:46:17 | access to parameter o | Splitting.cs:41:13:41:21 | ... != ... | Splitting.cs:41:13:41:13 | access to parameter o | true | -| Splitting.cs:55:13:55:13 | access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | Splitting.cs:54:13:54:13 | access to parameter o | non-null | -| Splitting.cs:55:13:55:13 | access to parameter o | Splitting.cs:54:13:54:21 | ... != ... | Splitting.cs:54:13:54:13 | access to parameter o | true | -| Splitting.cs:66:20:66:20 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | non-null | -| Splitting.cs:66:20:66:20 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | true | -| Splitting.cs:68:13:68:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | null | -| Splitting.cs:68:13:68:13 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:69:16:69:16 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | Splitting.cs:65:13:65:13 | access to parameter o | null | -| Splitting.cs:69:16:69:16 | access to parameter o | Splitting.cs:65:13:65:21 | ... != ... | Splitting.cs:65:13:65:13 | access to parameter o | false | -| Splitting.cs:78:24:78:24 | access to parameter o | Splitting.cs:76:13:76:13 | access to parameter o | Splitting.cs:76:13:76:13 | access to parameter o | non-null | -| Splitting.cs:78:24:78:24 | access to parameter o | Splitting.cs:76:13:76:21 | ... != ... | Splitting.cs:76:13:76:13 | access to parameter o | true | -| Splitting.cs:90:13:90:13 | access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | Splitting.cs:87:26:87:26 | access to parameter o | non-null | -| Splitting.cs:90:13:90:13 | access to parameter o | Splitting.cs:87:26:87:34 | ... != ... | Splitting.cs:87:26:87:26 | access to parameter o | true | -| Splitting.cs:99:13:99:13 | access to parameter o | Splitting.cs:97:26:97:26 | access to parameter o | Splitting.cs:97:26:97:26 | access to parameter o | null | -| Splitting.cs:99:13:99:13 | access to parameter o | Splitting.cs:97:26:97:34 | ... == ... | Splitting.cs:97:26:97:26 | access to parameter o | true | -| Splitting.cs:107:13:107:13 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | non-null | -| Splitting.cs:107:13:107:13 | access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:109:13:109:13 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | Splitting.cs:105:22:105:22 | access to parameter o | non-null | -| Splitting.cs:109:13:109:13 | access to parameter o | Splitting.cs:105:22:105:30 | ... != ... | Splitting.cs:105:22:105:22 | access to parameter o | true | -| Splitting.cs:117:9:117:9 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:117:9:117:9 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:119:13:119:13 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:120:16:120:16 | access to parameter o | Splitting.cs:116:22:116:30 | ... != ... | Splitting.cs:116:22:116:22 | access to parameter o | true | -| Splitting.cs:133:25:133:25 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | Splitting.cs:131:21:131:21 | access to parameter b | false | diff --git a/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.ql b/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.ql index 4cdb4606dac..c825873677a 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.ql +++ b/csharp/ql/test/library-tests/controlflow/guards/GuardedExpr.ql @@ -1,5 +1,5 @@ import csharp import semmle.code.csharp.controlflow.Guards -from GuardedExpr ge, Expr sub, AbstractValue v +from GuardedExpr ge, Expr sub, GuardValue v select ge, ge.getAGuard(sub, v), sub, v diff --git a/csharp/ql/test/library-tests/controlflow/guards/Implications.expected b/csharp/ql/test/library-tests/controlflow/guards/Implications.expected deleted file mode 100644 index b346e653ec7..00000000000 --- a/csharp/ql/test/library-tests/controlflow/guards/Implications.expected +++ /dev/null @@ -1,472 +0,0 @@ -| Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | Assert.cs:9:20:9:20 | access to parameter b | false | -| Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | Assert.cs:9:31:9:32 | "" | non-null | -| Assert.cs:9:20:9:32 | ... ? ... : ... | null | Assert.cs:9:20:9:20 | access to parameter b | true | -| Assert.cs:9:20:9:32 | ... ? ... : ... | null | Assert.cs:9:24:9:27 | null | null | -| Assert.cs:10:22:10:22 | access to local variable s | empty | Assert.cs:9:20:9:32 | ... ? ... : ... | empty | -| Assert.cs:10:22:10:22 | access to local variable s | non-empty | Assert.cs:9:20:9:32 | ... ? ... : ... | non-empty | -| Assert.cs:10:22:10:22 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | -| Assert.cs:10:22:10:22 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null | -| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:9:20:9:20 | access to parameter b | true | -| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:22:10:22 | access to local variable s | null | -| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:9:20:9:20 | access to parameter b | false | -| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:10:22:10:22 | access to local variable s | non-null | -| Assert.cs:11:27:11:27 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | -| Assert.cs:11:27:11:27 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null | -| Assert.cs:16:20:16:32 | ... ? ... : ... | non-null | Assert.cs:16:20:16:20 | access to parameter b | false | -| Assert.cs:16:20:16:32 | ... ? ... : ... | non-null | Assert.cs:16:31:16:32 | "" | non-null | -| Assert.cs:16:20:16:32 | ... ? ... : ... | null | Assert.cs:16:20:16:20 | access to parameter b | true | -| Assert.cs:16:20:16:32 | ... ? ... : ... | null | Assert.cs:16:24:16:27 | null | null | -| Assert.cs:17:23:17:23 | access to local variable s | empty | Assert.cs:16:20:16:32 | ... ? ... : ... | empty | -| Assert.cs:17:23:17:23 | access to local variable s | non-empty | Assert.cs:16:20:16:32 | ... ? ... : ... | non-empty | -| Assert.cs:17:23:17:23 | access to local variable s | non-null | Assert.cs:16:20:16:20 | access to parameter b | false | -| Assert.cs:17:23:17:23 | access to local variable s | non-null | Assert.cs:16:20:16:32 | ... ? ... : ... | non-null | -| Assert.cs:17:23:17:23 | access to local variable s | null | Assert.cs:16:20:16:20 | access to parameter b | true | -| Assert.cs:17:23:17:23 | access to local variable s | null | Assert.cs:16:20:16:32 | ... ? ... : ... | null | -| Assert.cs:18:27:18:27 | access to local variable s | non-null | Assert.cs:16:20:16:32 | ... ? ... : ... | non-null | -| Assert.cs:18:27:18:27 | access to local variable s | null | Assert.cs:16:20:16:32 | ... ? ... : ... | null | -| Assert.cs:23:20:23:32 | ... ? ... : ... | non-null | Assert.cs:23:20:23:20 | access to parameter b | false | -| Assert.cs:23:20:23:32 | ... ? ... : ... | non-null | Assert.cs:23:31:23:32 | "" | non-null | -| Assert.cs:23:20:23:32 | ... ? ... : ... | null | Assert.cs:23:20:23:20 | access to parameter b | true | -| Assert.cs:23:20:23:32 | ... ? ... : ... | null | Assert.cs:23:24:23:27 | null | null | -| Assert.cs:24:26:24:26 | access to local variable s | empty | Assert.cs:23:20:23:32 | ... ? ... : ... | empty | -| Assert.cs:24:26:24:26 | access to local variable s | non-empty | Assert.cs:23:20:23:32 | ... ? ... : ... | non-empty | -| Assert.cs:24:26:24:26 | access to local variable s | non-null | Assert.cs:23:20:23:20 | access to parameter b | false | -| Assert.cs:24:26:24:26 | access to local variable s | non-null | Assert.cs:23:20:23:32 | ... ? ... : ... | non-null | -| Assert.cs:24:26:24:26 | access to local variable s | null | Assert.cs:23:20:23:20 | access to parameter b | true | -| Assert.cs:24:26:24:26 | access to local variable s | null | Assert.cs:23:20:23:32 | ... ? ... : ... | null | -| Assert.cs:25:27:25:27 | access to local variable s | non-null | Assert.cs:23:20:23:32 | ... ? ... : ... | non-null | -| Assert.cs:25:27:25:27 | access to local variable s | null | Assert.cs:23:20:23:32 | ... ? ... : ... | null | -| Assert.cs:30:20:30:32 | ... ? ... : ... | non-null | Assert.cs:30:20:30:20 | access to parameter b | false | -| Assert.cs:30:20:30:32 | ... ? ... : ... | non-null | Assert.cs:30:31:30:32 | "" | non-null | -| Assert.cs:30:20:30:32 | ... ? ... : ... | null | Assert.cs:30:20:30:20 | access to parameter b | true | -| Assert.cs:30:20:30:32 | ... ? ... : ... | null | Assert.cs:30:24:30:27 | null | null | -| Assert.cs:31:23:31:23 | access to local variable s | empty | Assert.cs:30:20:30:32 | ... ? ... : ... | empty | -| Assert.cs:31:23:31:23 | access to local variable s | non-empty | Assert.cs:30:20:30:32 | ... ? ... : ... | non-empty | -| Assert.cs:31:23:31:23 | access to local variable s | non-null | Assert.cs:30:20:30:32 | ... ? ... : ... | non-null | -| Assert.cs:31:23:31:23 | access to local variable s | null | Assert.cs:30:20:30:32 | ... ? ... : ... | null | -| Assert.cs:31:23:31:31 | ... == ... | false | Assert.cs:30:20:30:20 | access to parameter b | false | -| Assert.cs:31:23:31:31 | ... == ... | false | Assert.cs:31:23:31:23 | access to local variable s | non-null | -| Assert.cs:31:23:31:31 | ... == ... | true | Assert.cs:30:20:30:20 | access to parameter b | true | -| Assert.cs:31:23:31:31 | ... == ... | true | Assert.cs:31:23:31:23 | access to local variable s | null | -| Assert.cs:32:27:32:27 | access to local variable s | non-null | Assert.cs:30:20:30:32 | ... ? ... : ... | non-null | -| Assert.cs:32:27:32:27 | access to local variable s | null | Assert.cs:30:20:30:32 | ... ? ... : ... | null | -| Assert.cs:37:20:37:32 | ... ? ... : ... | non-null | Assert.cs:37:20:37:20 | access to parameter b | false | -| Assert.cs:37:20:37:32 | ... ? ... : ... | non-null | Assert.cs:37:31:37:32 | "" | non-null | -| Assert.cs:37:20:37:32 | ... ? ... : ... | null | Assert.cs:37:20:37:20 | access to parameter b | true | -| Assert.cs:37:20:37:32 | ... ? ... : ... | null | Assert.cs:37:24:37:27 | null | null | -| Assert.cs:38:23:38:23 | access to local variable s | empty | Assert.cs:37:20:37:32 | ... ? ... : ... | empty | -| Assert.cs:38:23:38:23 | access to local variable s | non-empty | Assert.cs:37:20:37:32 | ... ? ... : ... | non-empty | -| Assert.cs:38:23:38:23 | access to local variable s | non-null | Assert.cs:37:20:37:32 | ... ? ... : ... | non-null | -| Assert.cs:38:23:38:23 | access to local variable s | null | Assert.cs:37:20:37:32 | ... ? ... : ... | null | -| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:37:20:37:20 | access to parameter b | true | -| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:23:38:23 | access to local variable s | null | -| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:37:20:37:20 | access to parameter b | false | -| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:38:23:38:23 | access to local variable s | non-null | -| Assert.cs:39:27:39:27 | access to local variable s | non-null | Assert.cs:37:20:37:32 | ... ? ... : ... | non-null | -| Assert.cs:39:27:39:27 | access to local variable s | null | Assert.cs:37:20:37:32 | ... ? ... : ... | null | -| Assert.cs:44:20:44:32 | ... ? ... : ... | non-null | Assert.cs:44:20:44:20 | access to parameter b | false | -| Assert.cs:44:20:44:32 | ... ? ... : ... | non-null | Assert.cs:44:31:44:32 | "" | non-null | -| Assert.cs:44:20:44:32 | ... ? ... : ... | null | Assert.cs:44:20:44:20 | access to parameter b | true | -| Assert.cs:44:20:44:32 | ... ? ... : ... | null | Assert.cs:44:24:44:27 | null | null | -| Assert.cs:45:24:45:24 | access to local variable s | empty | Assert.cs:44:20:44:32 | ... ? ... : ... | empty | -| Assert.cs:45:24:45:24 | access to local variable s | non-empty | Assert.cs:44:20:44:32 | ... ? ... : ... | non-empty | -| Assert.cs:45:24:45:24 | access to local variable s | non-null | Assert.cs:44:20:44:32 | ... ? ... : ... | non-null | -| Assert.cs:45:24:45:24 | access to local variable s | null | Assert.cs:44:20:44:32 | ... ? ... : ... | null | -| Assert.cs:45:24:45:32 | ... != ... | false | Assert.cs:44:20:44:20 | access to parameter b | true | -| Assert.cs:45:24:45:32 | ... != ... | false | Assert.cs:45:24:45:24 | access to local variable s | null | -| Assert.cs:45:24:45:32 | ... != ... | true | Assert.cs:44:20:44:20 | access to parameter b | false | -| Assert.cs:45:24:45:32 | ... != ... | true | Assert.cs:45:24:45:24 | access to local variable s | non-null | -| Assert.cs:46:27:46:27 | access to local variable s | non-null | Assert.cs:44:20:44:32 | ... ? ... : ... | non-null | -| Assert.cs:46:27:46:27 | access to local variable s | null | Assert.cs:44:20:44:32 | ... ? ... : ... | null | -| Assert.cs:51:20:51:32 | ... ? ... : ... | non-null | Assert.cs:51:20:51:20 | access to parameter b | false | -| Assert.cs:51:20:51:32 | ... ? ... : ... | non-null | Assert.cs:51:31:51:32 | "" | non-null | -| Assert.cs:51:20:51:32 | ... ? ... : ... | null | Assert.cs:51:20:51:20 | access to parameter b | true | -| Assert.cs:51:20:51:32 | ... ? ... : ... | null | Assert.cs:51:24:51:27 | null | null | -| Assert.cs:52:24:52:24 | access to local variable s | empty | Assert.cs:51:20:51:32 | ... ? ... : ... | empty | -| Assert.cs:52:24:52:24 | access to local variable s | non-empty | Assert.cs:51:20:51:32 | ... ? ... : ... | non-empty | -| Assert.cs:52:24:52:24 | access to local variable s | non-null | Assert.cs:51:20:51:32 | ... ? ... : ... | non-null | -| Assert.cs:52:24:52:24 | access to local variable s | null | Assert.cs:51:20:51:32 | ... ? ... : ... | null | -| Assert.cs:52:24:52:32 | ... == ... | false | Assert.cs:51:20:51:20 | access to parameter b | false | -| Assert.cs:52:24:52:32 | ... == ... | false | Assert.cs:52:24:52:24 | access to local variable s | non-null | -| Assert.cs:52:24:52:32 | ... == ... | true | Assert.cs:51:20:51:20 | access to parameter b | true | -| Assert.cs:52:24:52:32 | ... == ... | true | Assert.cs:52:24:52:24 | access to local variable s | null | -| Assert.cs:53:27:53:27 | access to local variable s | non-null | Assert.cs:51:20:51:32 | ... ? ... : ... | non-null | -| Assert.cs:53:27:53:27 | access to local variable s | null | Assert.cs:51:20:51:32 | ... ? ... : ... | null | -| Assert.cs:58:20:58:32 | ... ? ... : ... | non-null | Assert.cs:58:20:58:20 | access to parameter b | false | -| Assert.cs:58:20:58:32 | ... ? ... : ... | non-null | Assert.cs:58:31:58:32 | "" | non-null | -| Assert.cs:58:20:58:32 | ... ? ... : ... | null | Assert.cs:58:20:58:20 | access to parameter b | true | -| Assert.cs:58:20:58:32 | ... ? ... : ... | null | Assert.cs:58:24:58:27 | null | null | -| Assert.cs:59:23:59:23 | access to local variable s | empty | Assert.cs:58:20:58:32 | ... ? ... : ... | empty | -| Assert.cs:59:23:59:23 | access to local variable s | non-empty | Assert.cs:58:20:58:32 | ... ? ... : ... | non-empty | -| Assert.cs:59:23:59:23 | access to local variable s | non-null | Assert.cs:58:20:58:32 | ... ? ... : ... | non-null | -| Assert.cs:59:23:59:23 | access to local variable s | null | Assert.cs:58:20:58:32 | ... ? ... : ... | null | -| Assert.cs:59:23:59:31 | ... != ... | false | Assert.cs:58:20:58:20 | access to parameter b | true | -| Assert.cs:59:23:59:31 | ... != ... | false | Assert.cs:59:23:59:23 | access to local variable s | null | -| Assert.cs:59:23:59:31 | ... != ... | true | Assert.cs:58:20:58:20 | access to parameter b | false | -| Assert.cs:59:23:59:31 | ... != ... | true | Assert.cs:59:23:59:23 | access to local variable s | non-null | -| Assert.cs:59:23:59:36 | ... && ... | true | Assert.cs:59:23:59:31 | ... != ... | true | -| Assert.cs:59:23:59:36 | ... && ... | true | Assert.cs:59:36:59:36 | access to parameter b | true | -| Assert.cs:60:27:60:27 | access to local variable s | non-null | Assert.cs:58:20:58:32 | ... ? ... : ... | non-null | -| Assert.cs:60:27:60:27 | access to local variable s | null | Assert.cs:58:20:58:32 | ... ? ... : ... | null | -| Assert.cs:65:20:65:32 | ... ? ... : ... | non-null | Assert.cs:65:20:65:20 | access to parameter b | false | -| Assert.cs:65:20:65:32 | ... ? ... : ... | non-null | Assert.cs:65:31:65:32 | "" | non-null | -| Assert.cs:65:20:65:32 | ... ? ... : ... | null | Assert.cs:65:20:65:20 | access to parameter b | true | -| Assert.cs:65:20:65:32 | ... ? ... : ... | null | Assert.cs:65:24:65:27 | null | null | -| Assert.cs:66:24:66:24 | access to local variable s | empty | Assert.cs:65:20:65:32 | ... ? ... : ... | empty | -| Assert.cs:66:24:66:24 | access to local variable s | non-empty | Assert.cs:65:20:65:32 | ... ? ... : ... | non-empty | -| Assert.cs:66:24:66:24 | access to local variable s | non-null | Assert.cs:65:20:65:32 | ... ? ... : ... | non-null | -| Assert.cs:66:24:66:24 | access to local variable s | null | Assert.cs:65:20:65:32 | ... ? ... : ... | null | -| Assert.cs:66:24:66:32 | ... == ... | false | Assert.cs:65:20:65:20 | access to parameter b | false | -| Assert.cs:66:24:66:32 | ... == ... | false | Assert.cs:66:24:66:24 | access to local variable s | non-null | -| Assert.cs:66:24:66:32 | ... == ... | true | Assert.cs:65:20:65:20 | access to parameter b | true | -| Assert.cs:66:24:66:32 | ... == ... | true | Assert.cs:66:24:66:24 | access to local variable s | null | -| Assert.cs:66:24:66:37 | ... \|\| ... | false | Assert.cs:66:24:66:32 | ... == ... | false | -| Assert.cs:66:24:66:37 | ... \|\| ... | false | Assert.cs:66:37:66:37 | access to parameter b | false | -| Assert.cs:67:27:67:27 | access to local variable s | non-null | Assert.cs:65:20:65:32 | ... ? ... : ... | non-null | -| Assert.cs:67:27:67:27 | access to local variable s | null | Assert.cs:65:20:65:32 | ... ? ... : ... | null | -| Assert.cs:72:20:72:32 | ... ? ... : ... | non-null | Assert.cs:72:20:72:20 | access to parameter b | false | -| Assert.cs:72:20:72:32 | ... ? ... : ... | non-null | Assert.cs:72:31:72:32 | "" | non-null | -| Assert.cs:72:20:72:32 | ... ? ... : ... | null | Assert.cs:72:20:72:20 | access to parameter b | true | -| Assert.cs:72:20:72:32 | ... ? ... : ... | null | Assert.cs:72:24:72:27 | null | null | -| Assert.cs:73:23:73:23 | access to local variable s | empty | Assert.cs:72:20:72:32 | ... ? ... : ... | empty | -| Assert.cs:73:23:73:23 | access to local variable s | non-empty | Assert.cs:72:20:72:32 | ... ? ... : ... | non-empty | -| Assert.cs:73:23:73:23 | access to local variable s | non-null | Assert.cs:72:20:72:32 | ... ? ... : ... | non-null | -| Assert.cs:73:23:73:23 | access to local variable s | null | Assert.cs:72:20:72:32 | ... ? ... : ... | null | -| Assert.cs:73:23:73:31 | ... == ... | false | Assert.cs:72:20:72:20 | access to parameter b | false | -| Assert.cs:73:23:73:31 | ... == ... | false | Assert.cs:73:23:73:23 | access to local variable s | non-null | -| Assert.cs:73:23:73:31 | ... == ... | true | Assert.cs:72:20:72:20 | access to parameter b | true | -| Assert.cs:73:23:73:31 | ... == ... | true | Assert.cs:73:23:73:23 | access to local variable s | null | -| Assert.cs:73:23:73:36 | ... && ... | true | Assert.cs:73:23:73:31 | ... == ... | true | -| Assert.cs:73:23:73:36 | ... && ... | true | Assert.cs:73:36:73:36 | access to parameter b | true | -| Assert.cs:74:27:74:27 | access to local variable s | non-null | Assert.cs:72:20:72:32 | ... ? ... : ... | non-null | -| Assert.cs:74:27:74:27 | access to local variable s | null | Assert.cs:72:20:72:32 | ... ? ... : ... | null | -| Assert.cs:79:20:79:32 | ... ? ... : ... | non-null | Assert.cs:79:20:79:20 | access to parameter b | false | -| Assert.cs:79:20:79:32 | ... ? ... : ... | non-null | Assert.cs:79:31:79:32 | "" | non-null | -| Assert.cs:79:20:79:32 | ... ? ... : ... | null | Assert.cs:79:20:79:20 | access to parameter b | true | -| Assert.cs:79:20:79:32 | ... ? ... : ... | null | Assert.cs:79:24:79:27 | null | null | -| Assert.cs:80:24:80:24 | access to local variable s | empty | Assert.cs:79:20:79:32 | ... ? ... : ... | empty | -| Assert.cs:80:24:80:24 | access to local variable s | non-empty | Assert.cs:79:20:79:32 | ... ? ... : ... | non-empty | -| Assert.cs:80:24:80:24 | access to local variable s | non-null | Assert.cs:79:20:79:32 | ... ? ... : ... | non-null | -| Assert.cs:80:24:80:24 | access to local variable s | null | Assert.cs:79:20:79:32 | ... ? ... : ... | null | -| Assert.cs:80:24:80:32 | ... != ... | false | Assert.cs:79:20:79:20 | access to parameter b | true | -| Assert.cs:80:24:80:32 | ... != ... | false | Assert.cs:80:24:80:24 | access to local variable s | null | -| Assert.cs:80:24:80:32 | ... != ... | true | Assert.cs:79:20:79:20 | access to parameter b | false | -| Assert.cs:80:24:80:32 | ... != ... | true | Assert.cs:80:24:80:24 | access to local variable s | non-null | -| Assert.cs:80:24:80:37 | ... \|\| ... | false | Assert.cs:80:24:80:32 | ... != ... | false | -| Assert.cs:80:24:80:37 | ... \|\| ... | false | Assert.cs:80:37:80:37 | access to parameter b | false | -| Assert.cs:81:27:81:27 | access to local variable s | non-null | Assert.cs:79:20:79:32 | ... ? ... : ... | non-null | -| Assert.cs:81:27:81:27 | access to local variable s | null | Assert.cs:79:20:79:32 | ... ? ... : ... | null | -| Assert.cs:94:16:94:24 | ... && ... | true | Assert.cs:94:16:94:17 | access to parameter b1 | true | -| Assert.cs:94:16:94:24 | ... && ... | true | Assert.cs:94:22:94:24 | !... | true | -| Assert.cs:94:22:94:24 | !... | false | Assert.cs:94:23:94:24 | access to parameter b2 | true | -| Assert.cs:94:22:94:24 | !... | true | Assert.cs:94:23:94:24 | access to parameter b2 | false | -| Collections.cs:11:17:11:32 | ... == ... | false | Collections.cs:11:17:11:20 | access to parameter args | non-empty | -| Collections.cs:11:17:11:32 | ... == ... | true | Collections.cs:11:17:11:20 | access to parameter args | empty | -| Collections.cs:12:13:12:28 | ... == ... | true | Collections.cs:12:13:12:16 | access to parameter args | non-empty | -| Collections.cs:13:13:13:28 | ... != ... | false | Collections.cs:13:13:13:16 | access to parameter args | empty | -| Collections.cs:13:13:13:28 | ... != ... | true | Collections.cs:13:13:13:16 | access to parameter args | non-empty | -| Collections.cs:14:13:14:28 | ... != ... | false | Collections.cs:14:13:14:16 | access to parameter args | non-empty | -| Collections.cs:15:13:15:27 | ... > ... | true | Collections.cs:15:13:15:16 | access to parameter args | non-empty | -| Collections.cs:17:13:17:28 | ... >= ... | true | Collections.cs:17:13:17:16 | access to parameter args | non-empty | -| Collections.cs:22:17:22:31 | ... == ... | false | Collections.cs:22:17:22:20 | access to parameter args | non-empty | -| Collections.cs:22:17:22:31 | ... == ... | true | Collections.cs:22:17:22:20 | access to parameter args | empty | -| Collections.cs:23:13:23:27 | ... == ... | true | Collections.cs:23:13:23:16 | access to parameter args | non-empty | -| Collections.cs:24:13:24:27 | ... != ... | false | Collections.cs:24:13:24:16 | access to parameter args | empty | -| Collections.cs:24:13:24:27 | ... != ... | true | Collections.cs:24:13:24:16 | access to parameter args | non-empty | -| Collections.cs:25:13:25:27 | ... != ... | false | Collections.cs:25:13:25:16 | access to parameter args | non-empty | -| Collections.cs:26:13:26:26 | ... > ... | true | Collections.cs:26:13:26:16 | access to parameter args | non-empty | -| Collections.cs:28:13:28:27 | ... >= ... | true | Collections.cs:28:13:28:16 | access to parameter args | non-empty | -| Collections.cs:33:17:33:33 | ... == ... | false | Collections.cs:33:17:33:20 | access to parameter args | non-empty | -| Collections.cs:33:17:33:33 | ... == ... | true | Collections.cs:33:17:33:20 | access to parameter args | empty | -| Collections.cs:34:13:34:29 | ... == ... | true | Collections.cs:34:13:34:16 | access to parameter args | non-empty | -| Collections.cs:35:13:35:29 | ... != ... | false | Collections.cs:35:13:35:16 | access to parameter args | empty | -| Collections.cs:35:13:35:29 | ... != ... | true | Collections.cs:35:13:35:16 | access to parameter args | non-empty | -| Collections.cs:36:13:36:29 | ... != ... | false | Collections.cs:36:13:36:16 | access to parameter args | non-empty | -| Collections.cs:37:13:37:28 | ... > ... | true | Collections.cs:37:13:37:16 | access to parameter args | non-empty | -| Collections.cs:39:13:39:29 | ... >= ... | true | Collections.cs:39:13:39:16 | access to parameter args | non-empty | -| Collections.cs:44:17:44:26 | call to method Any | false | Collections.cs:44:17:44:20 | access to parameter args | empty | -| Collections.cs:44:17:44:26 | call to method Any | true | Collections.cs:44:17:44:20 | access to parameter args | non-empty | -| Collections.cs:49:13:49:27 | ... == ... | false | Collections.cs:49:13:49:16 | access to parameter args | non-empty | -| Collections.cs:49:13:49:27 | ... == ... | true | Collections.cs:49:13:49:16 | access to parameter args | empty | -| Collections.cs:55:13:55:13 | access to local variable x | empty | Collections.cs:54:13:54:42 | array creation of type String[] | empty | -| Collections.cs:55:13:55:13 | access to local variable x | non-empty | Collections.cs:54:13:54:42 | array creation of type String[] | non-empty | -| Collections.cs:55:13:55:13 | access to local variable x | non-null | Collections.cs:54:13:54:42 | array creation of type String[] | non-null | -| Collections.cs:55:13:55:13 | access to local variable x | null | Collections.cs:54:13:54:42 | array creation of type String[] | null | -| Collections.cs:57:13:57:13 | access to local variable x | empty | Collections.cs:56:13:56:25 | array creation of type String[] | empty | -| Collections.cs:57:13:57:13 | access to local variable x | non-empty | Collections.cs:56:13:56:25 | array creation of type String[] | non-empty | -| Collections.cs:57:13:57:13 | access to local variable x | non-null | Collections.cs:56:13:56:25 | array creation of type String[] | non-null | -| Collections.cs:57:13:57:13 | access to local variable x | null | Collections.cs:56:13:56:25 | array creation of type String[] | null | -| Collections.cs:63:9:63:9 | access to local variable x | empty | Collections.cs:62:17:62:55 | call to method ToList | empty | -| Collections.cs:63:9:63:9 | access to local variable x | non-empty | Collections.cs:62:17:62:55 | call to method ToList | non-empty | -| Collections.cs:63:9:63:9 | access to local variable x | non-null | Collections.cs:62:17:62:55 | call to method ToList | non-null | -| Collections.cs:63:9:63:9 | access to local variable x | null | Collections.cs:62:17:62:55 | call to method ToList | null | -| Collections.cs:64:13:64:13 | access to local variable x | non-null | Collections.cs:62:17:62:55 | call to method ToList | non-null | -| Collections.cs:64:13:64:13 | access to local variable x | null | Collections.cs:62:17:62:55 | call to method ToList | null | -| Collections.cs:64:13:64:24 | ... == ... | false | Collections.cs:64:13:64:13 | access to local variable x | non-empty | -| Collections.cs:64:13:64:24 | ... == ... | true | Collections.cs:64:13:64:13 | access to local variable x | empty | -| Collections.cs:66:13:66:13 | access to local variable x | non-null | Collections.cs:62:17:62:55 | call to method ToList | non-null | -| Collections.cs:66:13:66:13 | access to local variable x | null | Collections.cs:62:17:62:55 | call to method ToList | null | -| Collections.cs:67:13:67:13 | access to local variable x | non-null | Collections.cs:62:17:62:55 | call to method ToList | non-null | -| Collections.cs:67:13:67:13 | access to local variable x | null | Collections.cs:62:17:62:55 | call to method ToList | null | -| Collections.cs:73:35:73:41 | ... == ... | true | Collections.cs:73:35:73:35 | access to parameter s | non-null | -| Collections.cs:73:35:73:41 | ... == ... | true | Collections.cs:73:40:73:41 | "" | non-null | -| Collections.cs:74:17:74:33 | call to method Any | true | Collections.cs:74:17:74:20 | access to parameter args | non-empty | -| Collections.cs:75:13:75:36 | ... == ... | false | Collections.cs:75:13:75:16 | access to parameter args | non-empty | -| Collections.cs:76:13:76:36 | ... == ... | true | Collections.cs:76:13:76:16 | access to parameter args | non-empty | -| Collections.cs:77:13:77:36 | ... != ... | true | Collections.cs:77:13:77:16 | access to parameter args | non-empty | -| Collections.cs:78:13:78:36 | ... != ... | false | Collections.cs:78:13:78:16 | access to parameter args | non-empty | -| Collections.cs:79:13:79:35 | ... > ... | true | Collections.cs:79:13:79:16 | access to parameter args | non-empty | -| Collections.cs:81:13:81:36 | ... >= ... | true | Collections.cs:81:13:81:16 | access to parameter args | non-empty | -| Guards.cs:10:13:10:25 | !... | false | Guards.cs:10:14:10:25 | !... | true | -| Guards.cs:10:13:10:25 | !... | true | Guards.cs:10:14:10:25 | !... | false | -| Guards.cs:10:14:10:25 | !... | false | Guards.cs:10:16:10:24 | ... == ... | true | -| Guards.cs:10:14:10:25 | !... | true | Guards.cs:10:16:10:24 | ... == ... | false | -| Guards.cs:10:16:10:24 | ... == ... | false | Guards.cs:10:16:10:16 | access to parameter s | non-null | -| Guards.cs:10:16:10:24 | ... == ... | true | Guards.cs:10:16:10:16 | access to parameter s | null | -| Guards.cs:24:13:24:21 | ... != ... | false | Guards.cs:24:13:24:13 | access to parameter s | null | -| Guards.cs:24:13:24:21 | ... != ... | true | Guards.cs:24:13:24:13 | access to parameter s | non-null | -| Guards.cs:32:13:32:36 | !... | false | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | true | -| Guards.cs:32:13:32:36 | !... | true | Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | false | -| Guards.cs:32:13:32:51 | ... & ... | true | Guards.cs:32:13:32:36 | !... | true | -| Guards.cs:32:13:32:51 | ... & ... | true | Guards.cs:32:40:32:51 | !... | true | -| Guards.cs:32:14:32:36 | call to method IsNullOrEmpty | false | Guards.cs:32:35:32:35 | access to parameter x | non-null | -| Guards.cs:32:40:32:51 | !... | false | Guards.cs:32:42:32:50 | ... == ... | true | -| Guards.cs:32:40:32:51 | !... | true | Guards.cs:32:42:32:50 | ... == ... | false | -| Guards.cs:32:42:32:50 | ... == ... | false | Guards.cs:32:42:32:42 | access to parameter y | non-null | -| Guards.cs:32:42:32:50 | ... == ... | true | Guards.cs:32:42:32:42 | access to parameter y | null | -| Guards.cs:33:31:33:35 | ... + ... | non-null | Guards.cs:33:31:33:31 | access to parameter x | non-null | -| Guards.cs:33:31:33:35 | ... + ... | non-null | Guards.cs:33:35:33:35 | access to parameter y | non-null | -| Guards.cs:35:13:35:21 | ... == ... | false | Guards.cs:35:13:35:13 | access to parameter x | non-null | -| Guards.cs:35:13:35:21 | ... == ... | true | Guards.cs:35:13:35:13 | access to parameter x | null | -| Guards.cs:35:13:35:34 | ... \|\| ... | false | Guards.cs:35:13:35:21 | ... == ... | false | -| Guards.cs:35:13:35:34 | ... \|\| ... | false | Guards.cs:35:26:35:34 | ... == ... | false | -| Guards.cs:35:26:35:34 | ... == ... | false | Guards.cs:35:26:35:26 | access to parameter y | non-null | -| Guards.cs:35:26:35:34 | ... == ... | true | Guards.cs:35:26:35:26 | access to parameter y | null | -| Guards.cs:36:32:36:36 | ... + ... | non-null | Guards.cs:36:32:36:32 | access to parameter x | non-null | -| Guards.cs:36:32:36:36 | ... + ... | non-null | Guards.cs:36:36:36:36 | access to parameter y | non-null | -| Guards.cs:36:32:36:36 | ... + ... | null | Guards.cs:36:32:36:32 | access to parameter x | null | -| Guards.cs:36:32:36:36 | ... + ... | null | Guards.cs:36:36:36:36 | access to parameter y | null | -| Guards.cs:38:13:38:37 | !... | false | Guards.cs:38:15:38:36 | ... \|\| ... | true | -| Guards.cs:38:13:38:37 | !... | true | Guards.cs:38:15:38:36 | ... \|\| ... | false | -| Guards.cs:38:15:38:23 | ... == ... | false | Guards.cs:38:15:38:15 | access to parameter x | non-null | -| Guards.cs:38:15:38:23 | ... == ... | true | Guards.cs:38:15:38:15 | access to parameter x | null | -| Guards.cs:38:15:38:36 | ... \|\| ... | false | Guards.cs:38:15:38:23 | ... == ... | false | -| Guards.cs:38:15:38:36 | ... \|\| ... | false | Guards.cs:38:28:38:36 | ... == ... | false | -| Guards.cs:38:28:38:36 | ... == ... | false | Guards.cs:38:28:38:28 | access to parameter y | non-null | -| Guards.cs:38:28:38:36 | ... == ... | true | Guards.cs:38:28:38:28 | access to parameter y | null | -| Guards.cs:39:31:39:35 | ... + ... | non-null | Guards.cs:39:31:39:31 | access to parameter x | non-null | -| Guards.cs:39:31:39:35 | ... + ... | non-null | Guards.cs:39:35:39:35 | access to parameter y | non-null | -| Guards.cs:39:31:39:35 | ... + ... | null | Guards.cs:39:31:39:31 | access to parameter x | null | -| Guards.cs:39:31:39:35 | ... + ... | null | Guards.cs:39:35:39:35 | access to parameter y | null | -| Guards.cs:41:13:41:39 | !... | false | Guards.cs:41:14:41:39 | !... | true | -| Guards.cs:41:13:41:39 | !... | true | Guards.cs:41:14:41:39 | !... | false | -| Guards.cs:41:14:41:39 | !... | false | Guards.cs:41:15:41:39 | !... | true | -| Guards.cs:41:14:41:39 | !... | true | Guards.cs:41:15:41:39 | !... | false | -| Guards.cs:41:15:41:39 | !... | false | Guards.cs:41:17:41:38 | ... && ... | true | -| Guards.cs:41:15:41:39 | !... | true | Guards.cs:41:17:41:38 | ... && ... | false | -| Guards.cs:41:17:41:25 | ... != ... | false | Guards.cs:41:17:41:17 | access to parameter x | null | -| Guards.cs:41:17:41:25 | ... != ... | true | Guards.cs:41:17:41:17 | access to parameter x | non-null | -| Guards.cs:41:17:41:38 | ... && ... | true | Guards.cs:41:17:41:25 | ... != ... | true | -| Guards.cs:41:17:41:38 | ... && ... | true | Guards.cs:41:30:41:38 | ... != ... | true | -| Guards.cs:41:30:41:38 | ... != ... | false | Guards.cs:41:30:41:30 | access to parameter y | null | -| Guards.cs:41:30:41:38 | ... != ... | true | Guards.cs:41:30:41:30 | access to parameter y | non-null | -| Guards.cs:42:32:42:36 | ... + ... | non-null | Guards.cs:42:32:42:32 | access to parameter x | non-null | -| Guards.cs:42:32:42:36 | ... + ... | non-null | Guards.cs:42:36:42:36 | access to parameter y | non-null | -| Guards.cs:42:32:42:36 | ... + ... | null | Guards.cs:42:32:42:32 | access to parameter x | null | -| Guards.cs:42:32:42:36 | ... + ... | null | Guards.cs:42:36:42:36 | access to parameter y | null | -| Guards.cs:44:13:44:25 | ... != ... | false | Guards.cs:44:13:44:17 | access to field Field | null | -| Guards.cs:44:13:44:25 | ... != ... | true | Guards.cs:44:13:44:17 | access to field Field | non-null | -| Guards.cs:47:13:47:25 | ... != ... | false | Guards.cs:47:13:47:17 | access to field Field | null | -| Guards.cs:47:13:47:25 | ... != ... | true | Guards.cs:47:13:47:17 | access to field Field | non-null | -| Guards.cs:53:13:53:27 | ... == ... | false | Guards.cs:53:13:53:19 | access to field Field | non-null | -| Guards.cs:53:13:53:27 | ... == ... | true | Guards.cs:53:13:53:19 | access to field Field | null | -| Guards.cs:60:13:60:45 | ... == ... | false | Guards.cs:60:13:60:37 | access to field Field | non-null | -| Guards.cs:60:13:60:45 | ... == ... | true | Guards.cs:60:13:60:37 | access to field Field | null | -| Guards.cs:68:16:68:24 | ... != ... | false | Guards.cs:68:16:68:16 | access to parameter s | null | -| Guards.cs:68:16:68:24 | ... != ... | true | Guards.cs:68:16:68:16 | access to parameter s | non-null | -| Guards.cs:72:31:72:31 | access to parameter s | empty | Guards.cs:71:17:71:20 | null | empty | -| Guards.cs:72:31:72:31 | access to parameter s | non-empty | Guards.cs:71:17:71:20 | null | non-empty | -| Guards.cs:72:31:72:31 | access to parameter s | non-null | Guards.cs:71:17:71:20 | null | non-null | -| Guards.cs:72:31:72:31 | access to parameter s | null | Guards.cs:71:17:71:20 | null | null | -| Guards.cs:78:13:78:21 | access to property Length | non-null | Guards.cs:78:13:78:13 | access to parameter s | non-null | -| Guards.cs:78:13:78:21 | access to property Length | null | Guards.cs:78:13:78:13 | access to parameter s | null | -| Guards.cs:78:13:78:26 | ... == ... | true | Guards.cs:78:13:78:21 | access to property Length | non-null | -| Guards.cs:80:13:80:21 | access to property Length | non-null | Guards.cs:80:13:80:13 | access to parameter s | non-null | -| Guards.cs:80:13:80:21 | access to property Length | null | Guards.cs:80:13:80:13 | access to parameter s | null | -| Guards.cs:80:13:80:25 | ... > ... | true | Guards.cs:80:13:80:21 | access to property Length | non-null | -| Guards.cs:82:13:82:21 | access to property Length | non-null | Guards.cs:82:13:82:13 | access to parameter s | non-null | -| Guards.cs:82:13:82:21 | access to property Length | null | Guards.cs:82:13:82:13 | access to parameter s | null | -| Guards.cs:82:13:82:26 | ... >= ... | true | Guards.cs:82:13:82:21 | access to property Length | non-null | -| Guards.cs:84:13:84:21 | access to property Length | non-null | Guards.cs:84:13:84:13 | access to parameter s | non-null | -| Guards.cs:84:13:84:21 | access to property Length | null | Guards.cs:84:13:84:13 | access to parameter s | null | -| Guards.cs:84:13:84:26 | ... < ... | true | Guards.cs:84:13:84:21 | access to property Length | non-null | -| Guards.cs:86:13:86:21 | access to property Length | non-null | Guards.cs:86:13:86:13 | access to parameter s | non-null | -| Guards.cs:86:13:86:21 | access to property Length | null | Guards.cs:86:13:86:13 | access to parameter s | null | -| Guards.cs:86:13:86:27 | ... <= ... | true | Guards.cs:86:13:86:21 | access to property Length | non-null | -| Guards.cs:88:13:88:21 | access to property Length | non-null | Guards.cs:88:13:88:13 | access to parameter s | non-null | -| Guards.cs:88:13:88:21 | access to property Length | null | Guards.cs:88:13:88:13 | access to parameter s | null | -| Guards.cs:88:13:88:29 | ... != ... | false | Guards.cs:88:13:88:21 | access to property Length | null | -| Guards.cs:88:13:88:29 | ... != ... | true | Guards.cs:88:13:88:21 | access to property Length | non-null | -| Guards.cs:92:13:92:21 | access to property Length | non-null | Guards.cs:92:13:92:13 | access to parameter s | non-null | -| Guards.cs:92:13:92:21 | access to property Length | null | Guards.cs:92:13:92:13 | access to parameter s | null | -| Guards.cs:92:13:92:25 | ... - ... | non-null | Guards.cs:92:13:92:21 | access to property Length | non-null | -| Guards.cs:92:13:92:25 | ... - ... | non-null | Guards.cs:92:25:92:25 | (...) ... | non-null | -| Guards.cs:92:13:92:25 | ... - ... | null | Guards.cs:92:13:92:21 | access to property Length | null | -| Guards.cs:92:13:92:30 | ... != ... | false | Guards.cs:92:13:92:25 | ... - ... | non-null | -| Guards.cs:96:13:96:19 | ... == ... | true | Guards.cs:96:13:96:13 | access to parameter s | non-null | -| Guards.cs:104:13:104:45 | ... == ... | false | Guards.cs:104:13:104:37 | access to field Field | non-null | -| Guards.cs:104:13:104:45 | ... == ... | true | Guards.cs:104:13:104:37 | access to field Field | null | -| Guards.cs:107:27:107:36 | access to property Property | non-null | Guards.cs:106:22:106:25 | null | non-null | -| Guards.cs:107:27:107:36 | access to property Property | null | Guards.cs:106:22:106:25 | null | null | -| Guards.cs:108:27:108:36 | access to property Property | non-null | Guards.cs:106:22:106:25 | null | non-null | -| Guards.cs:108:27:108:36 | access to property Property | null | Guards.cs:106:22:106:25 | null | null | -| Guards.cs:113:21:114:38 | ... ?? ... | null | Guards.cs:113:21:113:45 | access to field Field | null | -| Guards.cs:113:21:114:38 | ... ?? ... | null | Guards.cs:114:14:114:38 | access to field Field | null | -| Guards.cs:115:17:115:55 | ... ?? ... | null | Guards.cs:115:17:115:41 | access to field Field | null | -| Guards.cs:115:17:115:55 | ... ?? ... | null | Guards.cs:115:46:115:55 | throw ... | null | -| Guards.cs:118:27:118:36 | access to property Property | non-null | Guards.cs:117:22:117:25 | null | non-null | -| Guards.cs:118:27:118:36 | access to property Property | null | Guards.cs:117:22:117:25 | null | null | -| Guards.cs:119:27:119:36 | access to property Property | non-null | Guards.cs:117:22:117:25 | null | non-null | -| Guards.cs:119:27:119:36 | access to property Property | null | Guards.cs:117:22:117:25 | null | null | -| Guards.cs:125:18:125:31 | call to method Equals | non-null | Guards.cs:125:18:125:19 | access to parameter s1 | non-null | -| Guards.cs:125:18:125:31 | call to method Equals | null | Guards.cs:125:18:125:19 | access to parameter s1 | null | -| Guards.cs:125:18:125:31 | call to method Equals | true | Guards.cs:125:18:125:19 | access to parameter s1 | non-null | -| Guards.cs:125:18:125:31 | call to method Equals | true | Guards.cs:125:29:125:30 | access to parameter s1 | non-null | -| Guards.cs:130:13:130:21 | ... is ... | false | Guards.cs:130:13:130:13 | access to parameter s | non-null | -| Guards.cs:130:13:130:21 | ... is ... | true | Guards.cs:130:13:130:13 | access to parameter s | null | -| Guards.cs:137:13:137:25 | ... is ... | false | Guards.cs:137:13:137:13 | access to parameter s | null | -| Guards.cs:137:13:137:25 | ... is ... | true | Guards.cs:137:13:137:13 | access to parameter s | non-null | -| Guards.cs:144:13:144:25 | ... is ... | true | Guards.cs:144:13:144:13 | access to parameter o | non-null | -| Guards.cs:145:20:145:20 | access to local variable s | empty | Guards.cs:144:13:144:13 | access to parameter o | empty | -| Guards.cs:145:20:145:20 | access to local variable s | non-empty | Guards.cs:144:13:144:13 | access to parameter o | non-empty | -| Guards.cs:145:20:145:20 | access to local variable s | non-null | Guards.cs:144:13:144:13 | access to parameter o | non-null | -| Guards.cs:145:20:145:20 | access to local variable s | null | Guards.cs:144:13:144:13 | access to parameter o | null | -| Guards.cs:151:17:151:17 | access to parameter o | match "" | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:151:17:151:17 | access to parameter o | match Action a | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:151:17:151:17 | access to parameter o | match access to type Action | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:151:17:151:17 | access to parameter o | match null | Guards.cs:151:17:151:17 | access to parameter o | null | -| Guards.cs:151:17:151:17 | access to parameter o | non-match null | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:156:24:156:24 | access to local variable a | non-null | Guards.cs:151:17:151:17 | access to parameter o | non-null | -| Guards.cs:156:24:156:24 | access to local variable a | null | Guards.cs:151:17:151:17 | access to parameter o | null | -| Guards.cs:168:13:168:41 | !... | false | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | true | -| Guards.cs:168:13:168:41 | !... | true | Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | false | -| Guards.cs:168:14:168:41 | call to method IsNullOrWhiteSpace | false | Guards.cs:168:40:168:40 | access to parameter x | non-null | -| Guards.cs:172:34:172:42 | ... == ... | false | Guards.cs:172:34:172:34 | access to parameter o | non-null | -| Guards.cs:172:34:172:42 | ... == ... | true | Guards.cs:172:34:172:34 | access to parameter o | null | -| Guards.cs:176:13:176:21 | ... is ... | false | Guards.cs:176:13:176:13 | access to parameter o | non-null | -| Guards.cs:176:13:176:21 | ... is ... | true | Guards.cs:176:13:176:13 | access to parameter o | null | -| Guards.cs:181:34:181:42 | ... == ... | false | Guards.cs:181:34:181:34 | access to parameter o | non-null | -| Guards.cs:181:34:181:42 | ... == ... | true | Guards.cs:181:34:181:34 | access to parameter o | null | -| Guards.cs:181:34:181:57 | ... ? ... : ... | false | Guards.cs:181:34:181:42 | ... == ... | false | -| Guards.cs:181:34:181:57 | ... ? ... : ... | true | Guards.cs:181:34:181:42 | ... == ... | true | -| Guards.cs:183:37:183:49 | !... | false | Guards.cs:183:38:183:49 | call to method NullTest3 | true | -| Guards.cs:183:37:183:49 | !... | true | Guards.cs:183:38:183:49 | call to method NullTest3 | false | -| Guards.cs:183:38:183:49 | call to method NullTest3 | false | Guards.cs:183:48:183:48 | access to parameter o | non-null | -| Guards.cs:183:38:183:49 | call to method NullTest3 | true | Guards.cs:183:48:183:48 | access to parameter o | null | -| Guards.cs:185:38:185:46 | ... == ... | false | Guards.cs:185:38:185:38 | access to parameter o | non-null | -| Guards.cs:185:38:185:46 | ... == ... | true | Guards.cs:185:38:185:38 | access to parameter o | null | -| Guards.cs:185:38:185:60 | ... ? ... : ... | false | Guards.cs:185:38:185:46 | ... == ... | false | -| Guards.cs:185:38:185:60 | ... ? ... : ... | false | Guards.cs:185:38:185:46 | ... == ... | true | -| Guards.cs:189:13:189:25 | !... | false | Guards.cs:189:14:189:25 | call to method NullTest1 | true | -| Guards.cs:189:13:189:25 | !... | true | Guards.cs:189:14:189:25 | call to method NullTest1 | false | -| Guards.cs:189:14:189:25 | call to method NullTest1 | false | Guards.cs:189:24:189:24 | access to parameter s | non-null | -| Guards.cs:189:14:189:25 | call to method NullTest1 | true | Guards.cs:189:24:189:24 | access to parameter s | null | -| Guards.cs:191:13:191:25 | !... | false | Guards.cs:191:14:191:25 | call to method NullTest2 | true | -| Guards.cs:191:13:191:25 | !... | true | Guards.cs:191:14:191:25 | call to method NullTest2 | false | -| Guards.cs:191:14:191:25 | call to method NullTest2 | false | Guards.cs:191:24:191:24 | access to parameter s | non-null | -| Guards.cs:191:14:191:25 | call to method NullTest2 | true | Guards.cs:191:24:191:24 | access to parameter s | null | -| Guards.cs:193:13:193:25 | !... | false | Guards.cs:193:14:193:25 | call to method NullTest3 | true | -| Guards.cs:193:13:193:25 | !... | true | Guards.cs:193:14:193:25 | call to method NullTest3 | false | -| Guards.cs:193:14:193:25 | call to method NullTest3 | false | Guards.cs:193:24:193:24 | access to parameter s | non-null | -| Guards.cs:193:14:193:25 | call to method NullTest3 | true | Guards.cs:193:24:193:24 | access to parameter s | null | -| Guards.cs:195:13:195:27 | call to method NotNullTest4 | false | Guards.cs:195:26:195:26 | access to parameter s | null | -| Guards.cs:195:13:195:27 | call to method NotNullTest4 | true | Guards.cs:195:26:195:26 | access to parameter s | non-null | -| Guards.cs:197:13:197:29 | !... | false | Guards.cs:197:14:197:29 | call to method NullTestWrong | true | -| Guards.cs:197:13:197:29 | !... | true | Guards.cs:197:14:197:29 | call to method NullTestWrong | false | -| Guards.cs:203:13:203:21 | ... != ... | false | Guards.cs:203:13:203:13 | access to parameter o | null | -| Guards.cs:203:13:203:21 | ... != ... | true | Guards.cs:203:13:203:13 | access to parameter o | non-null | -| Guards.cs:218:17:218:18 | access to local variable b2 | match true | Guards.cs:216:13:216:14 | access to parameter b1 | false | -| Guards.cs:218:17:218:18 | access to local variable b2 | match true | Guards.cs:218:17:218:18 | access to local variable b2 | true | -| Guards.cs:231:17:231:18 | access to local variable b2 | match true | Guards.cs:229:13:229:14 | access to parameter b1 | true | -| Guards.cs:231:17:231:18 | access to local variable b2 | match true | Guards.cs:231:17:231:18 | access to local variable b2 | true | -| Guards.cs:231:17:231:18 | access to local variable b2 | non-match true | Guards.cs:229:13:229:14 | access to parameter b1 | false | -| Guards.cs:244:17:244:17 | access to local variable i | match 1 | Guards.cs:242:13:242:13 | access to parameter b | true | -| Guards.cs:244:17:244:17 | access to local variable i | match 1 | Guards.cs:244:17:244:17 | access to local variable i | 1 | -| Guards.cs:244:17:244:17 | access to local variable i | non-match 1 | Guards.cs:242:13:242:13 | access to parameter b | false | -| Guards.cs:258:17:258:17 | access to local variable e | match access to constant B | Guards.cs:256:13:256:13 | access to parameter b | true | -| Guards.cs:258:17:258:17 | access to local variable e | match access to constant B | Guards.cs:258:17:258:17 | access to local variable e | 1 | -| Guards.cs:258:17:258:17 | access to local variable e | non-match access to constant B | Guards.cs:256:13:256:13 | access to parameter b | false | -| Guards.cs:268:13:268:25 | call to method GetType | non-null | Guards.cs:268:13:268:14 | access to parameter o1 | non-null | -| Guards.cs:268:13:268:41 | call to operator == | true | Guards.cs:268:13:268:25 | call to method GetType | non-null | -| Guards.cs:270:13:270:25 | call to method GetType | non-null | Guards.cs:270:13:270:14 | access to parameter o1 | non-null | -| Guards.cs:270:30:270:42 | call to method GetType | non-null | Guards.cs:270:30:270:31 | access to parameter o2 | non-null | -| Guards.cs:276:16:276:16 | access to parameter o | match "" | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:276:16:276:16 | access to parameter o | match Action a | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:276:16:276:16 | access to parameter o | match access to type Action | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:276:16:276:16 | access to parameter o | match null | Guards.cs:276:16:276:16 | access to parameter o | null | -| Guards.cs:276:16:276:16 | access to parameter o | non-match null | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:278:13:279:28 | ... => ... | true | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:280:13:281:28 | ... => ... | true | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:281:17:281:17 | access to local variable a | non-null | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:281:17:281:17 | access to local variable a | null | Guards.cs:276:16:276:16 | access to parameter o | null | -| Guards.cs:282:13:283:28 | ... => ... | true | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:284:13:285:28 | ... => ... | false | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:284:13:285:28 | ... => ... | true | Guards.cs:276:16:276:16 | access to parameter o | null | -| Guards.cs:286:13:287:28 | ... => ... | true | Guards.cs:276:16:276:16 | access to parameter o | non-null | -| Guards.cs:296:16:296:17 | access to local variable b2 | match true | Guards.cs:294:13:294:14 | access to parameter b1 | false | -| Guards.cs:296:16:296:17 | access to local variable b2 | match true | Guards.cs:296:16:296:17 | access to local variable b2 | true | -| Guards.cs:308:16:308:17 | access to local variable b2 | match true | Guards.cs:306:13:306:14 | access to parameter b1 | true | -| Guards.cs:308:16:308:17 | access to local variable b2 | match true | Guards.cs:308:16:308:17 | access to local variable b2 | true | -| Guards.cs:308:16:308:17 | access to local variable b2 | non-match true | Guards.cs:306:13:306:14 | access to parameter b1 | false | -| Guards.cs:320:16:320:16 | access to local variable i | match 1 | Guards.cs:318:13:318:13 | access to parameter b | true | -| Guards.cs:320:16:320:16 | access to local variable i | match 1 | Guards.cs:320:16:320:16 | access to local variable i | 1 | -| Guards.cs:320:16:320:16 | access to local variable i | non-match 1 | Guards.cs:318:13:318:13 | access to parameter b | false | -| Guards.cs:332:16:332:16 | access to local variable e | match access to constant B | Guards.cs:330:13:330:13 | access to parameter b | true | -| Guards.cs:332:16:332:16 | access to local variable e | match access to constant B | Guards.cs:332:16:332:16 | access to local variable e | 1 | -| Guards.cs:332:16:332:16 | access to local variable e | non-match access to constant B | Guards.cs:330:13:330:13 | access to parameter b | false | -| Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | Guards.cs:341:20:341:20 | access to parameter b | false | -| Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | Guards.cs:341:31:341:32 | "" | non-null | -| Guards.cs:341:20:341:32 | ... ? ... : ... | null | Guards.cs:341:20:341:20 | access to parameter b | true | -| Guards.cs:341:20:341:32 | ... ? ... : ... | null | Guards.cs:341:24:341:27 | null | null | -| Guards.cs:342:13:342:13 | access to local variable s | empty | Guards.cs:341:20:341:32 | ... ? ... : ... | empty | -| Guards.cs:342:13:342:13 | access to local variable s | non-empty | Guards.cs:341:20:341:32 | ... ? ... : ... | non-empty | -| Guards.cs:342:13:342:13 | access to local variable s | non-null | Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | -| Guards.cs:342:13:342:13 | access to local variable s | null | Guards.cs:341:20:341:32 | ... ? ... : ... | null | -| Guards.cs:342:13:342:21 | ... != ... | false | Guards.cs:341:20:341:20 | access to parameter b | true | -| Guards.cs:342:13:342:21 | ... != ... | false | Guards.cs:342:13:342:13 | access to local variable s | null | -| Guards.cs:342:13:342:21 | ... != ... | true | Guards.cs:341:20:341:20 | access to parameter b | false | -| Guards.cs:342:13:342:21 | ... != ... | true | Guards.cs:342:13:342:13 | access to local variable s | non-null | -| Guards.cs:342:13:342:27 | ... && ... | true | Guards.cs:342:13:342:21 | ... != ... | true | -| Guards.cs:342:13:342:27 | ... && ... | true | Guards.cs:342:26:342:27 | !... | true | -| Guards.cs:342:26:342:27 | !... | false | Guards.cs:342:27:342:27 | access to parameter b | true | -| Guards.cs:342:26:342:27 | !... | true | Guards.cs:342:27:342:27 | access to parameter b | false | -| Guards.cs:343:31:343:31 | access to local variable s | non-null | Guards.cs:341:20:341:32 | ... ? ... : ... | non-null | -| Guards.cs:343:31:343:31 | access to local variable s | null | Guards.cs:341:20:341:32 | ... ? ... : ... | null | -| Guards.cs:348:13:348:25 | ... is ... | true | Guards.cs:348:13:348:13 | access to parameter o | non-null | -| Splitting.cs:12:17:12:25 | ... != ... | false | Splitting.cs:12:17:12:17 | access to parameter o | null | -| Splitting.cs:12:17:12:25 | ... != ... | true | Splitting.cs:12:17:12:17 | access to parameter o | non-null | -| Splitting.cs:22:17:22:25 | ... != ... | false | Splitting.cs:22:17:22:17 | access to parameter o | null | -| Splitting.cs:22:17:22:25 | ... != ... | true | Splitting.cs:22:17:22:17 | access to parameter o | non-null | -| Splitting.cs:32:17:32:25 | ... == ... | false | Splitting.cs:32:17:32:17 | access to parameter o | non-null | -| Splitting.cs:32:17:32:25 | ... == ... | true | Splitting.cs:32:17:32:17 | access to parameter o | null | -| Splitting.cs:41:13:41:21 | ... != ... | false | Splitting.cs:41:13:41:13 | access to parameter o | null | -| Splitting.cs:41:13:41:21 | ... != ... | true | Splitting.cs:41:13:41:13 | access to parameter o | non-null | -| Splitting.cs:54:13:54:21 | ... != ... | false | Splitting.cs:54:13:54:13 | access to parameter o | null | -| Splitting.cs:54:13:54:21 | ... != ... | true | Splitting.cs:54:13:54:13 | access to parameter o | non-null | -| Splitting.cs:65:13:65:21 | ... != ... | false | Splitting.cs:65:13:65:13 | access to parameter o | null | -| Splitting.cs:65:13:65:21 | ... != ... | true | Splitting.cs:65:13:65:13 | access to parameter o | non-null | -| Splitting.cs:76:13:76:21 | ... != ... | false | Splitting.cs:76:13:76:13 | access to parameter o | null | -| Splitting.cs:76:13:76:21 | ... != ... | true | Splitting.cs:76:13:76:13 | access to parameter o | non-null | -| Splitting.cs:87:26:87:34 | ... != ... | false | Splitting.cs:87:26:87:26 | access to parameter o | null | -| Splitting.cs:87:26:87:34 | ... != ... | true | Splitting.cs:87:26:87:26 | access to parameter o | non-null | -| Splitting.cs:97:26:97:34 | ... == ... | false | Splitting.cs:97:26:97:26 | access to parameter o | non-null | -| Splitting.cs:97:26:97:34 | ... == ... | true | Splitting.cs:97:26:97:26 | access to parameter o | null | -| Splitting.cs:105:22:105:30 | ... != ... | false | Splitting.cs:105:22:105:22 | access to parameter o | null | -| Splitting.cs:105:22:105:30 | ... != ... | true | Splitting.cs:105:22:105:22 | access to parameter o | non-null | -| Splitting.cs:116:22:116:30 | ... != ... | false | Splitting.cs:116:22:116:22 | access to parameter o | null | -| Splitting.cs:116:22:116:30 | ... != ... | true | Splitting.cs:116:22:116:22 | access to parameter o | non-null | -| Splitting.cs:129:17:129:25 | ... != ... | false | Splitting.cs:129:17:129:17 | access to local variable o | null | -| Splitting.cs:129:17:129:25 | ... != ... | false | Splitting.cs:129:22:129:25 | null | non-null | -| Splitting.cs:129:17:129:25 | ... != ... | true | Splitting.cs:129:17:129:17 | access to local variable o | non-null | -| Splitting.cs:134:17:134:17 | access to local variable o | non-null | Splitting.cs:133:21:133:29 | call to method M11 | non-null | -| Splitting.cs:134:17:134:17 | access to local variable o | null | Splitting.cs:133:21:133:29 | call to method M11 | null | diff --git a/csharp/ql/test/library-tests/controlflow/guards/Implications.ql b/csharp/ql/test/library-tests/controlflow/guards/Implications.ql deleted file mode 100644 index 0c185b1a2dc..00000000000 --- a/csharp/ql/test/library-tests/controlflow/guards/Implications.ql +++ /dev/null @@ -1,6 +0,0 @@ -import csharp -import semmle.code.csharp.controlflow.Guards - -query predicate impliesStep(Expr e1, AbstractValue v1, Expr e2, AbstractValue v2) { - Internal::impliesStep(e1, v1, e2, v2) -} diff --git a/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.expected b/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.expected deleted file mode 100644 index 7087e3d5493..00000000000 --- a/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.expected +++ /dev/null @@ -1,25 +0,0 @@ -| Guards.cs:154:24:154:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:153:13:153:34 | case ...: | match access to type Action | true | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:153:13:153:34 | case ...: | non-match access to type Action | false | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:155:13:155:34 | case ...: | non-match Action a | false | -| Guards.cs:158:24:158:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:157:13:157:20 | case ...: | match "" | true | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:153:13:153:34 | case ...: | non-match access to type Action | false | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:155:13:155:34 | case ...: | non-match Action a | false | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:157:13:157:20 | case ...: | non-match "" | false | -| Guards.cs:160:24:160:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:159:13:159:22 | case ...: | match null | true | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:153:13:153:34 | case ...: | non-match access to type Action | false | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:155:13:155:34 | case ...: | non-match Action a | false | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:157:13:157:20 | case ...: | non-match "" | false | -| Guards.cs:162:24:162:24 | access to parameter o | Guards.cs:151:17:151:17 | access to parameter o | Guards.cs:159:13:159:22 | case ...: | non-match null | false | -| Guards.cs:279:17:279:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | match access to type Action | true | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | non-match access to type Action | false | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:280:13:281:28 | ... => ... | non-match Action a | false | -| Guards.cs:283:17:283:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | match "" | true | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | non-match access to type Action | false | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:280:13:281:28 | ... => ... | non-match Action a | false | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | non-match "" | false | -| Guards.cs:285:17:285:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | match null | true | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:278:13:279:28 | ... => ... | non-match access to type Action | false | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:280:13:281:28 | ... => ... | non-match Action a | false | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:282:13:283:28 | ... => ... | non-match "" | false | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:284:13:285:28 | ... => ... | non-match null | false | -| Guards.cs:287:17:287:17 | access to parameter o | Guards.cs:276:16:276:16 | access to parameter o | Guards.cs:286:13:287:28 | ... => ... | match _ | true | diff --git a/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.ql b/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.ql deleted file mode 100644 index 93b8d565834..00000000000 --- a/csharp/ql/test/library-tests/controlflow/guards/MatchingGuardedExpr.ql +++ /dev/null @@ -1,8 +0,0 @@ -import csharp -import semmle.code.csharp.controlflow.Guards - -from GuardedExpr ge, Expr e, AbstractValues::MatchValue v, boolean match -where - e = ge.getAGuard(e, v) and - if v.isMatch() then match = true else match = false -select ge, e, v.getCase(), v, match diff --git a/csharp/ql/test/library-tests/controlflow/guards/NullGuardedExpr.expected b/csharp/ql/test/library-tests/controlflow/guards/NullGuardedExpr.expected index fa21b5cb312..81607656b30 100644 --- a/csharp/ql/test/library-tests/controlflow/guards/NullGuardedExpr.expected +++ b/csharp/ql/test/library-tests/controlflow/guards/NullGuardedExpr.expected @@ -47,17 +47,3 @@ | Guards.cs:287:17:287:17 | access to parameter o | | Guards.cs:343:31:343:31 | access to local variable s | | Guards.cs:349:13:349:13 | access to parameter o | -| Splitting.cs:13:17:13:17 | access to parameter o | -| Splitting.cs:23:24:23:24 | access to parameter o | -| Splitting.cs:35:13:35:13 | access to parameter o | -| Splitting.cs:44:17:44:17 | access to parameter o | -| Splitting.cs:46:17:46:17 | access to parameter o | -| Splitting.cs:55:13:55:13 | access to parameter o | -| Splitting.cs:66:20:66:20 | access to parameter o | -| Splitting.cs:78:24:78:24 | access to parameter o | -| Splitting.cs:90:13:90:13 | access to parameter o | -| Splitting.cs:107:13:107:13 | access to parameter o | -| Splitting.cs:109:13:109:13 | access to parameter o | -| Splitting.cs:117:9:117:9 | access to parameter o | -| Splitting.cs:119:13:119:13 | access to parameter o | -| Splitting.cs:120:16:120:16 | access to parameter o | diff --git a/csharp/ql/test/library-tests/controlflow/guards/Splitting.cs b/csharp/ql/test/library-tests/controlflow/guards/Splitting.cs deleted file mode 100644 index 7f42c5a87df..00000000000 --- a/csharp/ql/test/library-tests/controlflow/guards/Splitting.cs +++ /dev/null @@ -1,139 +0,0 @@ -using System; -using System.Diagnostics; -#nullable enable -/// -/// Tests related to CFG splitting. -/// -public class Splitting -{ - void M1(bool b, object? o) - { - if (b) - if (o != null) - o.ToString(); // null guarded - if (b) - o.ToString(); // not null guarded - o.ToString(); // not null guarded - } - - string M2(bool b, object? o) - { - if (b) - if (o != null) - return o.ToString(); // null guarded - if (b) - o.ToString(); // anti-null guarded - return o.ToString(); // not null guarded - } - - string M3(bool b, object? o) - { - if (b) - if (o == null) - return ""; - if (b) - o.ToString(); // null guarded - return o.ToString(); // not null guarded - } - - void M4(bool b, object? o) - { - if (o != null) - { - if (b) - o.ToString(); // null guarded - if (b) - o.ToString(); // null guarded - } - } - - string M5(bool b, object? o) - { - if (b) - o.ToString(); // not null guarded - if (o != null) - o.ToString(); // null guarded - if (b) - o.ToString(); // not null guarded - return o.ToString(); // not null guarded - } - - string M6(bool b, object? o) - { - if (b) - o.ToString(); // not null guarded - if (o != null) - return o.ToString(); // null guarded - if (b) - o.ToString(); // anti-null guarded - return o.ToString(); // anti-null guarded - } - - string M7(bool b, object? o, bool b2) - { - if (b) - o.ToString(); // not null guarded - if (o != null) - if (b2) - return o.ToString(); // null guarded - if (b) - o.ToString(); // not null guarded - return o.ToString(); // not null guarded - } - - void M8(bool b, object? o) - { - if (b) - Debug.Assert(o != null); - o.ToString(); // not null guarded - if (b) - o.ToString(); // null guarded - o.ToString(); // not null guarded - } - - string M9(bool b, object? o) - { - if (b) - Debug.Assert(o == null); - if (b) - o.ToString(); // anti-null guarded - return o.ToString(); // not null guarded - } - - void M10(bool b, object? o) - { - Debug.Assert(o != null); - if (b) - o.ToString(); // null guarded - if (b) - o.ToString(); // null guarded - } - - string M11(bool b, object? o) - { - if (b) - o.ToString(); // not null guarded - Debug.Assert(o != null); - o.ToString(); // null guarded - if (b) - o.ToString(); // null guarded - return o.ToString(); // null guarded - } - - public void M12(int i, bool b) - { - object? o = null; - do - { - o.GetHashCode(); // not null guarded - if (o != null) - { - if (b) - return; - o = M11(b, o); - o.GetHashCode(); // not null guarded - } - } - while (i > 0); - } -} diff --git a/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected b/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected deleted file mode 100644 index 04f7ae1f7d6..00000000000 --- a/csharp/ql/test/library-tests/controlflow/splits/CONSISTENCY/CfgConsistency.expected +++ /dev/null @@ -1,3 +0,0 @@ -deadEnd -| SplittingStressTest.cs:95:13:95:14 | [b5 (line 3): false] access to parameter b5 | -| SplittingStressTest.cs:95:13:95:14 | [b5 (line 3): true] access to parameter b5 | diff --git a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.cs b/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.cs deleted file mode 100644 index 14644f973d0..00000000000 --- a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.cs +++ /dev/null @@ -1,321 +0,0 @@ -class SplittingStressTest -{ - void M1(bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7, bool b8, bool b9, bool b10, bool b11, bool b12, bool b13, bool b14, bool b15, bool b16, bool b17, bool b18, bool b19, bool b20, bool b21, bool b22, bool b23, bool b24, bool b25, bool b26, bool b27, bool b28, bool b29, bool b30, bool b31, bool b32, bool b33, bool b34, bool b35, bool b36, bool b37, bool b38, bool b39, bool b40) - { - if (b1) - ; - if (b2) - ; - if (b3) - ; - if (b4) - ; - if (b5) - ; - if (b6) - ; - if (b7) - ; - if (b8) - ; - if (b9) - ; - if (b10) - ; - if (b11) - ; - if (b12) - ; - if (b13) - ; - if (b14) - ; - if (b15) - ; - if (b16) - ; - if (b17) - ; - if (b18) - ; - if (b19) - ; - if (b20) - ; - if (b21) - ; - if (b22) - ; - if (b23) - ; - if (b24) - ; - if (b25) - ; - if (b26) - ; - if (b27) - ; - if (b28) - ; - if (b29) - ; - if (b30) - ; - if (b31) - ; - if (b32) - ; - if (b33) - ; - if (b34) - ; - if (b35) - ; - if (b36) - ; - if (b37) - ; - if (b38) - ; - if (b39) - ; - if (b40) - ; - ; // 2^40 splits - - if (b1) - ; - if (b2) - ; - if (b3) - ; - if (b4) - ; - if (b5) - ; - if (b6) - ; - if (b7) - ; - if (b8) - ; - if (b9) - ; - if (b10) - ; - if (b11) - ; - if (b12) - ; - if (b13) - ; - if (b14) - ; - if (b15) - ; - if (b16) - ; - if (b17) - ; - if (b18) - ; - if (b19) - ; - if (b20) - ; - if (b21) - ; - if (b22) - ; - if (b23) - ; - if (b24) - ; - if (b25) - ; - if (b26) - ; - if (b27) - ; - if (b28) - ; - if (b29) - ; - if (b30) - ; - if (b31) - ; - if (b32) - ; - if (b33) - ; - if (b34) - ; - if (b35) - ; - if (b36) - ; - if (b37) - ; - if (b38) - ; - if (b39) - ; - if (b40) - ; - ; - } - - void M2(int i, bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7, bool b8, bool b9, bool b10, bool b11, bool b12, bool b13, bool b14, bool b15, bool b16, bool b17, bool b18, bool b19, bool b20, bool b21, bool b22, bool b23, bool b24, bool b25, bool b26, bool b27, bool b28, bool b29) - { - while (i-- > 0) - { - if (i == 1) - { - if (b1) - ; - } - if (i == 2) - { - if (b2) - ; - } - if (i == 3) - { - if (b3) - ; - } - if (i == 4) - { - if (b4) - ; - } - if (i == 5) - { - if (b5) - ; - } - if (i == 6) - { - if (b6) - ; - } - if (i == 7) - { - if (b7) - ; - } - if (i == 8) - { - if (b8) - ; - } - if (i == 9) - { - if (b9) - ; - } - if (i == 10) - { - if (b10) - ; - } - if (i == 11) - { - if (b11) - ; - } - if (i == 12) - { - if (b12) - ; - } - if (i == 13) - { - if (b13) - ; - } - if (i == 14) - { - if (b14) - ; - } - if (i == 15) - { - if (b15) - ; - } - if (i == 16) - { - if (b16) - ; - } - if (i == 17) - { - if (b17) - ; - } - if (i == 18) - { - if (b18) - ; - } - if (i == 19) - { - if (b19) - ; - } - if (i == 20) - { - if (b20) - ; - } - if (i == 21) - { - if (b21) - ; - } - if (i == 22) - { - if (b22) - ; - } - if (i == 23) - { - if (b23) - ; - } - if (i == 24) - { - if (b24) - ; - } - if (i == 25) - { - if (b25) - ; - } - if (i == 26) - { - if (b26) - ; - } - if (i == 27) - { - if (b27) - ; - } - if (i == 28) - { - if (b28) - ; - } - if (i == 29) - { - if (b29) - ; - } - } - } -} diff --git a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.expected b/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.expected deleted file mode 100644 index 8ba5f8687b4..00000000000 --- a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.expected +++ /dev/null @@ -1,1908 +0,0 @@ -countSplits -| SplittingStressTest.cs:1:7:1:25 | call to constructor Object | 1 | -| SplittingStressTest.cs:1:7:1:25 | {...} | 1 | -| SplittingStressTest.cs:4:5:168:5 | {...} | 1 | -| SplittingStressTest.cs:5:9:6:13 | if (...) ... | 1 | -| SplittingStressTest.cs:5:13:5:14 | access to parameter b1 | 1 | -| SplittingStressTest.cs:6:13:6:13 | ; | 1 | -| SplittingStressTest.cs:7:9:8:13 | if (...) ... | 2 | -| SplittingStressTest.cs:7:13:7:14 | access to parameter b2 | 2 | -| SplittingStressTest.cs:8:13:8:13 | ; | 2 | -| SplittingStressTest.cs:9:9:10:13 | if (...) ... | 4 | -| SplittingStressTest.cs:9:13:9:14 | access to parameter b3 | 4 | -| SplittingStressTest.cs:10:13:10:13 | ; | 4 | -| SplittingStressTest.cs:11:9:12:13 | if (...) ... | 8 | -| SplittingStressTest.cs:11:13:11:14 | access to parameter b4 | 8 | -| SplittingStressTest.cs:12:13:12:13 | ; | 8 | -| SplittingStressTest.cs:13:9:14:13 | if (...) ... | 16 | -| SplittingStressTest.cs:13:13:13:14 | access to parameter b5 | 16 | -| SplittingStressTest.cs:14:13:14:13 | ; | 16 | -| SplittingStressTest.cs:15:9:16:13 | if (...) ... | 32 | -| SplittingStressTest.cs:15:13:15:14 | access to parameter b6 | 32 | -| SplittingStressTest.cs:16:13:16:13 | ; | 32 | -| SplittingStressTest.cs:17:9:18:13 | if (...) ... | 32 | -| SplittingStressTest.cs:17:13:17:14 | access to parameter b7 | 32 | -| SplittingStressTest.cs:18:13:18:13 | ; | 32 | -| SplittingStressTest.cs:19:9:20:13 | if (...) ... | 32 | -| SplittingStressTest.cs:19:13:19:14 | access to parameter b8 | 32 | -| SplittingStressTest.cs:20:13:20:13 | ; | 32 | -| SplittingStressTest.cs:21:9:22:13 | if (...) ... | 32 | -| SplittingStressTest.cs:21:13:21:14 | access to parameter b9 | 32 | -| SplittingStressTest.cs:22:13:22:13 | ; | 32 | -| SplittingStressTest.cs:23:9:24:13 | if (...) ... | 32 | -| SplittingStressTest.cs:23:13:23:15 | access to parameter b10 | 32 | -| SplittingStressTest.cs:24:13:24:13 | ; | 32 | -| SplittingStressTest.cs:25:9:26:13 | if (...) ... | 32 | -| SplittingStressTest.cs:25:13:25:15 | access to parameter b11 | 32 | -| SplittingStressTest.cs:26:13:26:13 | ; | 32 | -| SplittingStressTest.cs:27:9:28:13 | if (...) ... | 32 | -| SplittingStressTest.cs:27:13:27:15 | access to parameter b12 | 32 | -| SplittingStressTest.cs:28:13:28:13 | ; | 32 | -| SplittingStressTest.cs:29:9:30:13 | if (...) ... | 32 | -| SplittingStressTest.cs:29:13:29:15 | access to parameter b13 | 32 | -| SplittingStressTest.cs:30:13:30:13 | ; | 32 | -| SplittingStressTest.cs:31:9:32:13 | if (...) ... | 32 | -| SplittingStressTest.cs:31:13:31:15 | access to parameter b14 | 32 | -| SplittingStressTest.cs:32:13:32:13 | ; | 32 | -| SplittingStressTest.cs:33:9:34:13 | if (...) ... | 32 | -| SplittingStressTest.cs:33:13:33:15 | access to parameter b15 | 32 | -| SplittingStressTest.cs:34:13:34:13 | ; | 32 | -| SplittingStressTest.cs:35:9:36:13 | if (...) ... | 32 | -| SplittingStressTest.cs:35:13:35:15 | access to parameter b16 | 32 | -| SplittingStressTest.cs:36:13:36:13 | ; | 32 | -| SplittingStressTest.cs:37:9:38:13 | if (...) ... | 32 | -| SplittingStressTest.cs:37:13:37:15 | access to parameter b17 | 32 | -| SplittingStressTest.cs:38:13:38:13 | ; | 32 | -| SplittingStressTest.cs:39:9:40:13 | if (...) ... | 32 | -| SplittingStressTest.cs:39:13:39:15 | access to parameter b18 | 32 | -| SplittingStressTest.cs:40:13:40:13 | ; | 32 | -| SplittingStressTest.cs:41:9:42:13 | if (...) ... | 32 | -| SplittingStressTest.cs:41:13:41:15 | access to parameter b19 | 32 | -| SplittingStressTest.cs:42:13:42:13 | ; | 32 | -| SplittingStressTest.cs:43:9:44:13 | if (...) ... | 32 | -| SplittingStressTest.cs:43:13:43:15 | access to parameter b20 | 32 | -| SplittingStressTest.cs:44:13:44:13 | ; | 32 | -| SplittingStressTest.cs:45:9:46:13 | if (...) ... | 32 | -| SplittingStressTest.cs:45:13:45:15 | access to parameter b21 | 32 | -| SplittingStressTest.cs:46:13:46:13 | ; | 32 | -| SplittingStressTest.cs:47:9:48:13 | if (...) ... | 32 | -| SplittingStressTest.cs:47:13:47:15 | access to parameter b22 | 32 | -| SplittingStressTest.cs:48:13:48:13 | ; | 32 | -| SplittingStressTest.cs:49:9:50:13 | if (...) ... | 32 | -| SplittingStressTest.cs:49:13:49:15 | access to parameter b23 | 32 | -| SplittingStressTest.cs:50:13:50:13 | ; | 32 | -| SplittingStressTest.cs:51:9:52:13 | if (...) ... | 32 | -| SplittingStressTest.cs:51:13:51:15 | access to parameter b24 | 32 | -| SplittingStressTest.cs:52:13:52:13 | ; | 32 | -| SplittingStressTest.cs:53:9:54:13 | if (...) ... | 32 | -| SplittingStressTest.cs:53:13:53:15 | access to parameter b25 | 32 | -| SplittingStressTest.cs:54:13:54:13 | ; | 32 | -| SplittingStressTest.cs:55:9:56:13 | if (...) ... | 32 | -| SplittingStressTest.cs:55:13:55:15 | access to parameter b26 | 32 | -| SplittingStressTest.cs:56:13:56:13 | ; | 32 | -| SplittingStressTest.cs:57:9:58:13 | if (...) ... | 32 | -| SplittingStressTest.cs:57:13:57:15 | access to parameter b27 | 32 | -| SplittingStressTest.cs:58:13:58:13 | ; | 32 | -| SplittingStressTest.cs:59:9:60:13 | if (...) ... | 32 | -| SplittingStressTest.cs:59:13:59:15 | access to parameter b28 | 32 | -| SplittingStressTest.cs:60:13:60:13 | ; | 32 | -| SplittingStressTest.cs:61:9:62:13 | if (...) ... | 32 | -| SplittingStressTest.cs:61:13:61:15 | access to parameter b29 | 32 | -| SplittingStressTest.cs:62:13:62:13 | ; | 32 | -| SplittingStressTest.cs:63:9:64:13 | if (...) ... | 32 | -| SplittingStressTest.cs:63:13:63:15 | access to parameter b30 | 32 | -| SplittingStressTest.cs:64:13:64:13 | ; | 32 | -| SplittingStressTest.cs:65:9:66:13 | if (...) ... | 32 | -| SplittingStressTest.cs:65:13:65:15 | access to parameter b31 | 32 | -| SplittingStressTest.cs:66:13:66:13 | ; | 32 | -| SplittingStressTest.cs:67:9:68:13 | if (...) ... | 32 | -| SplittingStressTest.cs:67:13:67:15 | access to parameter b32 | 32 | -| SplittingStressTest.cs:68:13:68:13 | ; | 32 | -| SplittingStressTest.cs:69:9:70:13 | if (...) ... | 32 | -| SplittingStressTest.cs:69:13:69:15 | access to parameter b33 | 32 | -| SplittingStressTest.cs:70:13:70:13 | ; | 32 | -| SplittingStressTest.cs:71:9:72:13 | if (...) ... | 32 | -| SplittingStressTest.cs:71:13:71:15 | access to parameter b34 | 32 | -| SplittingStressTest.cs:72:13:72:13 | ; | 32 | -| SplittingStressTest.cs:73:9:74:13 | if (...) ... | 32 | -| SplittingStressTest.cs:73:13:73:15 | access to parameter b35 | 32 | -| SplittingStressTest.cs:74:13:74:13 | ; | 32 | -| SplittingStressTest.cs:75:9:76:13 | if (...) ... | 32 | -| SplittingStressTest.cs:75:13:75:15 | access to parameter b36 | 32 | -| SplittingStressTest.cs:76:13:76:13 | ; | 32 | -| SplittingStressTest.cs:77:9:78:13 | if (...) ... | 32 | -| SplittingStressTest.cs:77:13:77:15 | access to parameter b37 | 32 | -| SplittingStressTest.cs:78:13:78:13 | ; | 32 | -| SplittingStressTest.cs:79:9:80:13 | if (...) ... | 32 | -| SplittingStressTest.cs:79:13:79:15 | access to parameter b38 | 32 | -| SplittingStressTest.cs:80:13:80:13 | ; | 32 | -| SplittingStressTest.cs:81:9:82:13 | if (...) ... | 32 | -| SplittingStressTest.cs:81:13:81:15 | access to parameter b39 | 32 | -| SplittingStressTest.cs:82:13:82:13 | ; | 32 | -| SplittingStressTest.cs:83:9:84:13 | if (...) ... | 32 | -| SplittingStressTest.cs:83:13:83:15 | access to parameter b40 | 32 | -| SplittingStressTest.cs:84:13:84:13 | ; | 32 | -| SplittingStressTest.cs:85:9:85:9 | ; | 32 | -| SplittingStressTest.cs:87:9:88:13 | if (...) ... | 32 | -| SplittingStressTest.cs:87:13:87:14 | access to parameter b1 | 32 | -| SplittingStressTest.cs:88:13:88:13 | ; | 16 | -| SplittingStressTest.cs:89:9:90:13 | if (...) ... | 16 | -| SplittingStressTest.cs:89:13:89:14 | access to parameter b2 | 16 | -| SplittingStressTest.cs:90:13:90:13 | ; | 8 | -| SplittingStressTest.cs:91:9:92:13 | if (...) ... | 8 | -| SplittingStressTest.cs:91:13:91:14 | access to parameter b3 | 8 | -| SplittingStressTest.cs:92:13:92:13 | ; | 4 | -| SplittingStressTest.cs:93:9:94:13 | if (...) ... | 4 | -| SplittingStressTest.cs:93:13:93:14 | access to parameter b4 | 4 | -| SplittingStressTest.cs:94:13:94:13 | ; | 2 | -| SplittingStressTest.cs:95:9:96:13 | if (...) ... | 2 | -| SplittingStressTest.cs:95:13:95:14 | access to parameter b5 | 2 | -| SplittingStressTest.cs:171:5:320:5 | {...} | 1 | -| SplittingStressTest.cs:172:9:319:9 | while (...) ... | 1 | -| SplittingStressTest.cs:172:16:172:16 | access to parameter i | 243 | -| SplittingStressTest.cs:172:16:172:18 | ...-- | 243 | -| SplittingStressTest.cs:172:16:172:22 | ... > ... | 243 | -| SplittingStressTest.cs:172:22:172:22 | 0 | 243 | -| SplittingStressTest.cs:173:9:319:9 | {...} | 243 | -| SplittingStressTest.cs:174:13:178:13 | if (...) ... | 243 | -| SplittingStressTest.cs:174:17:174:17 | access to parameter i | 243 | -| SplittingStressTest.cs:174:17:174:22 | ... == ... | 243 | -| SplittingStressTest.cs:174:22:174:22 | 1 | 243 | -| SplittingStressTest.cs:175:13:178:13 | {...} | 243 | -| SplittingStressTest.cs:176:17:177:21 | if (...) ... | 243 | -| SplittingStressTest.cs:176:21:176:22 | access to parameter b1 | 243 | -| SplittingStressTest.cs:177:21:177:21 | ; | 81 | -| SplittingStressTest.cs:179:13:183:13 | if (...) ... | 243 | -| SplittingStressTest.cs:179:17:179:17 | access to parameter i | 243 | -| SplittingStressTest.cs:179:17:179:22 | ... == ... | 243 | -| SplittingStressTest.cs:179:22:179:22 | 2 | 243 | -| SplittingStressTest.cs:180:13:183:13 | {...} | 243 | -| SplittingStressTest.cs:181:17:182:21 | if (...) ... | 243 | -| SplittingStressTest.cs:181:21:181:22 | access to parameter b2 | 243 | -| SplittingStressTest.cs:182:21:182:21 | ; | 81 | -| SplittingStressTest.cs:184:13:188:13 | if (...) ... | 243 | -| SplittingStressTest.cs:184:17:184:17 | access to parameter i | 243 | -| SplittingStressTest.cs:184:17:184:22 | ... == ... | 243 | -| SplittingStressTest.cs:184:22:184:22 | 3 | 243 | -| SplittingStressTest.cs:185:13:188:13 | {...} | 243 | -| SplittingStressTest.cs:186:17:187:21 | if (...) ... | 243 | -| SplittingStressTest.cs:186:21:186:22 | access to parameter b3 | 243 | -| SplittingStressTest.cs:187:21:187:21 | ; | 81 | -| SplittingStressTest.cs:189:13:193:13 | if (...) ... | 243 | -| SplittingStressTest.cs:189:17:189:17 | access to parameter i | 243 | -| SplittingStressTest.cs:189:17:189:22 | ... == ... | 243 | -| SplittingStressTest.cs:189:22:189:22 | 4 | 243 | -| SplittingStressTest.cs:190:13:193:13 | {...} | 243 | -| SplittingStressTest.cs:191:17:192:21 | if (...) ... | 243 | -| SplittingStressTest.cs:191:21:191:22 | access to parameter b4 | 243 | -| SplittingStressTest.cs:192:21:192:21 | ; | 81 | -| SplittingStressTest.cs:194:13:198:13 | if (...) ... | 243 | -| SplittingStressTest.cs:194:17:194:17 | access to parameter i | 243 | -| SplittingStressTest.cs:194:17:194:22 | ... == ... | 243 | -| SplittingStressTest.cs:194:22:194:22 | 5 | 243 | -| SplittingStressTest.cs:195:13:198:13 | {...} | 243 | -| SplittingStressTest.cs:196:17:197:21 | if (...) ... | 243 | -| SplittingStressTest.cs:196:21:196:22 | access to parameter b5 | 243 | -| SplittingStressTest.cs:197:21:197:21 | ; | 81 | -| SplittingStressTest.cs:199:13:203:13 | if (...) ... | 243 | -| SplittingStressTest.cs:199:17:199:17 | access to parameter i | 243 | -| SplittingStressTest.cs:199:17:199:22 | ... == ... | 243 | -| SplittingStressTest.cs:199:22:199:22 | 6 | 243 | -| SplittingStressTest.cs:200:13:203:13 | {...} | 243 | -| SplittingStressTest.cs:201:17:202:21 | if (...) ... | 243 | -| SplittingStressTest.cs:201:21:201:22 | access to parameter b6 | 243 | -| SplittingStressTest.cs:202:21:202:21 | ; | 243 | -| SplittingStressTest.cs:204:13:208:13 | if (...) ... | 243 | -| SplittingStressTest.cs:204:17:204:17 | access to parameter i | 243 | -| SplittingStressTest.cs:204:17:204:22 | ... == ... | 243 | -| SplittingStressTest.cs:204:22:204:22 | 7 | 243 | -| SplittingStressTest.cs:205:13:208:13 | {...} | 243 | -| SplittingStressTest.cs:206:17:207:21 | if (...) ... | 243 | -| SplittingStressTest.cs:206:21:206:22 | access to parameter b7 | 243 | -| SplittingStressTest.cs:207:21:207:21 | ; | 243 | -| SplittingStressTest.cs:209:13:213:13 | if (...) ... | 243 | -| SplittingStressTest.cs:209:17:209:17 | access to parameter i | 243 | -| SplittingStressTest.cs:209:17:209:22 | ... == ... | 243 | -| SplittingStressTest.cs:209:22:209:22 | 8 | 243 | -| SplittingStressTest.cs:210:13:213:13 | {...} | 243 | -| SplittingStressTest.cs:211:17:212:21 | if (...) ... | 243 | -| SplittingStressTest.cs:211:21:211:22 | access to parameter b8 | 243 | -| SplittingStressTest.cs:212:21:212:21 | ; | 243 | -| SplittingStressTest.cs:214:13:218:13 | if (...) ... | 243 | -| SplittingStressTest.cs:214:17:214:17 | access to parameter i | 243 | -| SplittingStressTest.cs:214:17:214:22 | ... == ... | 243 | -| SplittingStressTest.cs:214:22:214:22 | 9 | 243 | -| SplittingStressTest.cs:215:13:218:13 | {...} | 243 | -| SplittingStressTest.cs:216:17:217:21 | if (...) ... | 243 | -| SplittingStressTest.cs:216:21:216:22 | access to parameter b9 | 243 | -| SplittingStressTest.cs:217:21:217:21 | ; | 243 | -| SplittingStressTest.cs:219:13:223:13 | if (...) ... | 243 | -| SplittingStressTest.cs:219:17:219:17 | access to parameter i | 243 | -| SplittingStressTest.cs:219:17:219:23 | ... == ... | 243 | -| SplittingStressTest.cs:219:22:219:23 | 10 | 243 | -| SplittingStressTest.cs:220:13:223:13 | {...} | 243 | -| SplittingStressTest.cs:221:17:222:21 | if (...) ... | 243 | -| SplittingStressTest.cs:221:21:221:23 | access to parameter b10 | 243 | -| SplittingStressTest.cs:222:21:222:21 | ; | 243 | -| SplittingStressTest.cs:224:13:228:13 | if (...) ... | 243 | -| SplittingStressTest.cs:224:17:224:17 | access to parameter i | 243 | -| SplittingStressTest.cs:224:17:224:23 | ... == ... | 243 | -| SplittingStressTest.cs:224:22:224:23 | 11 | 243 | -| SplittingStressTest.cs:225:13:228:13 | {...} | 243 | -| SplittingStressTest.cs:226:17:227:21 | if (...) ... | 243 | -| SplittingStressTest.cs:226:21:226:23 | access to parameter b11 | 243 | -| SplittingStressTest.cs:227:21:227:21 | ; | 243 | -| SplittingStressTest.cs:229:13:233:13 | if (...) ... | 243 | -| SplittingStressTest.cs:229:17:229:17 | access to parameter i | 243 | -| SplittingStressTest.cs:229:17:229:23 | ... == ... | 243 | -| SplittingStressTest.cs:229:22:229:23 | 12 | 243 | -| SplittingStressTest.cs:230:13:233:13 | {...} | 243 | -| SplittingStressTest.cs:231:17:232:21 | if (...) ... | 243 | -| SplittingStressTest.cs:231:21:231:23 | access to parameter b12 | 243 | -| SplittingStressTest.cs:232:21:232:21 | ; | 243 | -| SplittingStressTest.cs:234:13:238:13 | if (...) ... | 243 | -| SplittingStressTest.cs:234:17:234:17 | access to parameter i | 243 | -| SplittingStressTest.cs:234:17:234:23 | ... == ... | 243 | -| SplittingStressTest.cs:234:22:234:23 | 13 | 243 | -| SplittingStressTest.cs:235:13:238:13 | {...} | 243 | -| SplittingStressTest.cs:236:17:237:21 | if (...) ... | 243 | -| SplittingStressTest.cs:236:21:236:23 | access to parameter b13 | 243 | -| SplittingStressTest.cs:237:21:237:21 | ; | 243 | -| SplittingStressTest.cs:239:13:243:13 | if (...) ... | 243 | -| SplittingStressTest.cs:239:17:239:17 | access to parameter i | 243 | -| SplittingStressTest.cs:239:17:239:23 | ... == ... | 243 | -| SplittingStressTest.cs:239:22:239:23 | 14 | 243 | -| SplittingStressTest.cs:240:13:243:13 | {...} | 243 | -| SplittingStressTest.cs:241:17:242:21 | if (...) ... | 243 | -| SplittingStressTest.cs:241:21:241:23 | access to parameter b14 | 243 | -| SplittingStressTest.cs:242:21:242:21 | ; | 243 | -| SplittingStressTest.cs:244:13:248:13 | if (...) ... | 243 | -| SplittingStressTest.cs:244:17:244:17 | access to parameter i | 243 | -| SplittingStressTest.cs:244:17:244:23 | ... == ... | 243 | -| SplittingStressTest.cs:244:22:244:23 | 15 | 243 | -| SplittingStressTest.cs:245:13:248:13 | {...} | 243 | -| SplittingStressTest.cs:246:17:247:21 | if (...) ... | 243 | -| SplittingStressTest.cs:246:21:246:23 | access to parameter b15 | 243 | -| SplittingStressTest.cs:247:21:247:21 | ; | 243 | -| SplittingStressTest.cs:249:13:253:13 | if (...) ... | 243 | -| SplittingStressTest.cs:249:17:249:17 | access to parameter i | 243 | -| SplittingStressTest.cs:249:17:249:23 | ... == ... | 243 | -| SplittingStressTest.cs:249:22:249:23 | 16 | 243 | -| SplittingStressTest.cs:250:13:253:13 | {...} | 243 | -| SplittingStressTest.cs:251:17:252:21 | if (...) ... | 243 | -| SplittingStressTest.cs:251:21:251:23 | access to parameter b16 | 243 | -| SplittingStressTest.cs:252:21:252:21 | ; | 243 | -| SplittingStressTest.cs:254:13:258:13 | if (...) ... | 243 | -| SplittingStressTest.cs:254:17:254:17 | access to parameter i | 243 | -| SplittingStressTest.cs:254:17:254:23 | ... == ... | 243 | -| SplittingStressTest.cs:254:22:254:23 | 17 | 243 | -| SplittingStressTest.cs:255:13:258:13 | {...} | 243 | -| SplittingStressTest.cs:256:17:257:21 | if (...) ... | 243 | -| SplittingStressTest.cs:256:21:256:23 | access to parameter b17 | 243 | -| SplittingStressTest.cs:257:21:257:21 | ; | 243 | -| SplittingStressTest.cs:259:13:263:13 | if (...) ... | 243 | -| SplittingStressTest.cs:259:17:259:17 | access to parameter i | 243 | -| SplittingStressTest.cs:259:17:259:23 | ... == ... | 243 | -| SplittingStressTest.cs:259:22:259:23 | 18 | 243 | -| SplittingStressTest.cs:260:13:263:13 | {...} | 243 | -| SplittingStressTest.cs:261:17:262:21 | if (...) ... | 243 | -| SplittingStressTest.cs:261:21:261:23 | access to parameter b18 | 243 | -| SplittingStressTest.cs:262:21:262:21 | ; | 243 | -| SplittingStressTest.cs:264:13:268:13 | if (...) ... | 243 | -| SplittingStressTest.cs:264:17:264:17 | access to parameter i | 243 | -| SplittingStressTest.cs:264:17:264:23 | ... == ... | 243 | -| SplittingStressTest.cs:264:22:264:23 | 19 | 243 | -| SplittingStressTest.cs:265:13:268:13 | {...} | 243 | -| SplittingStressTest.cs:266:17:267:21 | if (...) ... | 243 | -| SplittingStressTest.cs:266:21:266:23 | access to parameter b19 | 243 | -| SplittingStressTest.cs:267:21:267:21 | ; | 243 | -| SplittingStressTest.cs:269:13:273:13 | if (...) ... | 243 | -| SplittingStressTest.cs:269:17:269:17 | access to parameter i | 243 | -| SplittingStressTest.cs:269:17:269:23 | ... == ... | 243 | -| SplittingStressTest.cs:269:22:269:23 | 20 | 243 | -| SplittingStressTest.cs:270:13:273:13 | {...} | 243 | -| SplittingStressTest.cs:271:17:272:21 | if (...) ... | 243 | -| SplittingStressTest.cs:271:21:271:23 | access to parameter b20 | 243 | -| SplittingStressTest.cs:272:21:272:21 | ; | 243 | -| SplittingStressTest.cs:274:13:278:13 | if (...) ... | 243 | -| SplittingStressTest.cs:274:17:274:17 | access to parameter i | 243 | -| SplittingStressTest.cs:274:17:274:23 | ... == ... | 243 | -| SplittingStressTest.cs:274:22:274:23 | 21 | 243 | -| SplittingStressTest.cs:275:13:278:13 | {...} | 243 | -| SplittingStressTest.cs:276:17:277:21 | if (...) ... | 243 | -| SplittingStressTest.cs:276:21:276:23 | access to parameter b21 | 243 | -| SplittingStressTest.cs:277:21:277:21 | ; | 243 | -| SplittingStressTest.cs:279:13:283:13 | if (...) ... | 243 | -| SplittingStressTest.cs:279:17:279:17 | access to parameter i | 243 | -| SplittingStressTest.cs:279:17:279:23 | ... == ... | 243 | -| SplittingStressTest.cs:279:22:279:23 | 22 | 243 | -| SplittingStressTest.cs:280:13:283:13 | {...} | 243 | -| SplittingStressTest.cs:281:17:282:21 | if (...) ... | 243 | -| SplittingStressTest.cs:281:21:281:23 | access to parameter b22 | 243 | -| SplittingStressTest.cs:282:21:282:21 | ; | 243 | -| SplittingStressTest.cs:284:13:288:13 | if (...) ... | 243 | -| SplittingStressTest.cs:284:17:284:17 | access to parameter i | 243 | -| SplittingStressTest.cs:284:17:284:23 | ... == ... | 243 | -| SplittingStressTest.cs:284:22:284:23 | 23 | 243 | -| SplittingStressTest.cs:285:13:288:13 | {...} | 243 | -| SplittingStressTest.cs:286:17:287:21 | if (...) ... | 243 | -| SplittingStressTest.cs:286:21:286:23 | access to parameter b23 | 243 | -| SplittingStressTest.cs:287:21:287:21 | ; | 243 | -| SplittingStressTest.cs:289:13:293:13 | if (...) ... | 243 | -| SplittingStressTest.cs:289:17:289:17 | access to parameter i | 243 | -| SplittingStressTest.cs:289:17:289:23 | ... == ... | 243 | -| SplittingStressTest.cs:289:22:289:23 | 24 | 243 | -| SplittingStressTest.cs:290:13:293:13 | {...} | 243 | -| SplittingStressTest.cs:291:17:292:21 | if (...) ... | 243 | -| SplittingStressTest.cs:291:21:291:23 | access to parameter b24 | 243 | -| SplittingStressTest.cs:292:21:292:21 | ; | 243 | -| SplittingStressTest.cs:294:13:298:13 | if (...) ... | 243 | -| SplittingStressTest.cs:294:17:294:17 | access to parameter i | 243 | -| SplittingStressTest.cs:294:17:294:23 | ... == ... | 243 | -| SplittingStressTest.cs:294:22:294:23 | 25 | 243 | -| SplittingStressTest.cs:295:13:298:13 | {...} | 243 | -| SplittingStressTest.cs:296:17:297:21 | if (...) ... | 243 | -| SplittingStressTest.cs:296:21:296:23 | access to parameter b25 | 243 | -| SplittingStressTest.cs:297:21:297:21 | ; | 243 | -| SplittingStressTest.cs:299:13:303:13 | if (...) ... | 243 | -| SplittingStressTest.cs:299:17:299:17 | access to parameter i | 243 | -| SplittingStressTest.cs:299:17:299:23 | ... == ... | 243 | -| SplittingStressTest.cs:299:22:299:23 | 26 | 243 | -| SplittingStressTest.cs:300:13:303:13 | {...} | 243 | -| SplittingStressTest.cs:301:17:302:21 | if (...) ... | 243 | -| SplittingStressTest.cs:301:21:301:23 | access to parameter b26 | 243 | -| SplittingStressTest.cs:302:21:302:21 | ; | 243 | -| SplittingStressTest.cs:304:13:308:13 | if (...) ... | 243 | -| SplittingStressTest.cs:304:17:304:17 | access to parameter i | 243 | -| SplittingStressTest.cs:304:17:304:23 | ... == ... | 243 | -| SplittingStressTest.cs:304:22:304:23 | 27 | 243 | -| SplittingStressTest.cs:305:13:308:13 | {...} | 243 | -| SplittingStressTest.cs:306:17:307:21 | if (...) ... | 243 | -| SplittingStressTest.cs:306:21:306:23 | access to parameter b27 | 243 | -| SplittingStressTest.cs:307:21:307:21 | ; | 243 | -| SplittingStressTest.cs:309:13:313:13 | if (...) ... | 243 | -| SplittingStressTest.cs:309:17:309:17 | access to parameter i | 243 | -| SplittingStressTest.cs:309:17:309:23 | ... == ... | 243 | -| SplittingStressTest.cs:309:22:309:23 | 28 | 243 | -| SplittingStressTest.cs:310:13:313:13 | {...} | 243 | -| SplittingStressTest.cs:311:17:312:21 | if (...) ... | 243 | -| SplittingStressTest.cs:311:21:311:23 | access to parameter b28 | 243 | -| SplittingStressTest.cs:312:21:312:21 | ; | 243 | -| SplittingStressTest.cs:314:13:318:13 | if (...) ... | 243 | -| SplittingStressTest.cs:314:17:314:17 | access to parameter i | 243 | -| SplittingStressTest.cs:314:17:314:23 | ... == ... | 243 | -| SplittingStressTest.cs:314:22:314:23 | 29 | 243 | -| SplittingStressTest.cs:315:13:318:13 | {...} | 243 | -| SplittingStressTest.cs:316:17:317:21 | if (...) ... | 243 | -| SplittingStressTest.cs:316:21:316:23 | access to parameter b29 | 243 | -| SplittingStressTest.cs:317:21:317:21 | ; | 243 | -ssaDef -| SplittingStressTest.cs:3:18:3:19 | SSA param(b1) | -| SplittingStressTest.cs:3:27:3:28 | SSA param(b2) | -| SplittingStressTest.cs:3:36:3:37 | SSA param(b3) | -| SplittingStressTest.cs:3:45:3:46 | SSA param(b4) | -| SplittingStressTest.cs:3:54:3:55 | SSA param(b5) | -| SplittingStressTest.cs:3:63:3:64 | SSA param(b6) | -| SplittingStressTest.cs:3:72:3:73 | SSA param(b7) | -| SplittingStressTest.cs:3:81:3:82 | SSA param(b8) | -| SplittingStressTest.cs:3:90:3:91 | SSA param(b9) | -| SplittingStressTest.cs:3:99:3:101 | SSA param(b10) | -| SplittingStressTest.cs:3:109:3:111 | SSA param(b11) | -| SplittingStressTest.cs:3:119:3:121 | SSA param(b12) | -| SplittingStressTest.cs:3:129:3:131 | SSA param(b13) | -| SplittingStressTest.cs:3:139:3:141 | SSA param(b14) | -| SplittingStressTest.cs:3:149:3:151 | SSA param(b15) | -| SplittingStressTest.cs:3:159:3:161 | SSA param(b16) | -| SplittingStressTest.cs:3:169:3:171 | SSA param(b17) | -| SplittingStressTest.cs:3:179:3:181 | SSA param(b18) | -| SplittingStressTest.cs:3:189:3:191 | SSA param(b19) | -| SplittingStressTest.cs:3:199:3:201 | SSA param(b20) | -| SplittingStressTest.cs:3:209:3:211 | SSA param(b21) | -| SplittingStressTest.cs:3:219:3:221 | SSA param(b22) | -| SplittingStressTest.cs:3:229:3:231 | SSA param(b23) | -| SplittingStressTest.cs:3:239:3:241 | SSA param(b24) | -| SplittingStressTest.cs:3:249:3:251 | SSA param(b25) | -| SplittingStressTest.cs:3:259:3:261 | SSA param(b26) | -| SplittingStressTest.cs:3:269:3:271 | SSA param(b27) | -| SplittingStressTest.cs:3:279:3:281 | SSA param(b28) | -| SplittingStressTest.cs:3:289:3:291 | SSA param(b29) | -| SplittingStressTest.cs:3:299:3:301 | SSA param(b30) | -| SplittingStressTest.cs:3:309:3:311 | SSA param(b31) | -| SplittingStressTest.cs:3:319:3:321 | SSA param(b32) | -| SplittingStressTest.cs:3:329:3:331 | SSA param(b33) | -| SplittingStressTest.cs:3:339:3:341 | SSA param(b34) | -| SplittingStressTest.cs:3:349:3:351 | SSA param(b35) | -| SplittingStressTest.cs:3:359:3:361 | SSA param(b36) | -| SplittingStressTest.cs:3:369:3:371 | SSA param(b37) | -| SplittingStressTest.cs:3:379:3:381 | SSA param(b38) | -| SplittingStressTest.cs:3:389:3:391 | SSA param(b39) | -| SplittingStressTest.cs:3:399:3:401 | SSA param(b40) | -| SplittingStressTest.cs:170:17:170:17 | SSA param(i) | -| SplittingStressTest.cs:170:25:170:26 | SSA param(b1) | -| SplittingStressTest.cs:170:34:170:35 | SSA param(b2) | -| SplittingStressTest.cs:170:43:170:44 | SSA param(b3) | -| SplittingStressTest.cs:170:52:170:53 | SSA param(b4) | -| SplittingStressTest.cs:170:61:170:62 | SSA param(b5) | -| SplittingStressTest.cs:170:70:170:71 | SSA param(b6) | -| SplittingStressTest.cs:170:79:170:80 | SSA param(b7) | -| SplittingStressTest.cs:170:88:170:89 | SSA param(b8) | -| SplittingStressTest.cs:170:97:170:98 | SSA param(b9) | -| SplittingStressTest.cs:170:106:170:108 | SSA param(b10) | -| SplittingStressTest.cs:170:116:170:118 | SSA param(b11) | -| SplittingStressTest.cs:170:126:170:128 | SSA param(b12) | -| SplittingStressTest.cs:170:136:170:138 | SSA param(b13) | -| SplittingStressTest.cs:170:146:170:148 | SSA param(b14) | -| SplittingStressTest.cs:170:156:170:158 | SSA param(b15) | -| SplittingStressTest.cs:170:166:170:168 | SSA param(b16) | -| SplittingStressTest.cs:170:176:170:178 | SSA param(b17) | -| SplittingStressTest.cs:170:186:170:188 | SSA param(b18) | -| SplittingStressTest.cs:170:196:170:198 | SSA param(b19) | -| SplittingStressTest.cs:170:206:170:208 | SSA param(b20) | -| SplittingStressTest.cs:170:216:170:218 | SSA param(b21) | -| SplittingStressTest.cs:170:226:170:228 | SSA param(b22) | -| SplittingStressTest.cs:170:236:170:238 | SSA param(b23) | -| SplittingStressTest.cs:170:246:170:248 | SSA param(b24) | -| SplittingStressTest.cs:170:256:170:258 | SSA param(b25) | -| SplittingStressTest.cs:170:266:170:268 | SSA param(b26) | -| SplittingStressTest.cs:170:276:170:278 | SSA param(b27) | -| SplittingStressTest.cs:170:286:170:288 | SSA param(b28) | -| SplittingStressTest.cs:170:296:170:298 | SSA param(b29) | -| SplittingStressTest.cs:172:16:172:16 | SSA phi(i) | -| SplittingStressTest.cs:172:16:172:18 | SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b2 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b2 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b1 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b2 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b3 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): false, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): false, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): true, b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): true, b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b4 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b5 (line 170): false] SSA def(i) | -| SplittingStressTest.cs:172:16:172:18 | [b5 (line 170): true] SSA def(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:177:21:177:21 | [b1 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:179:13:183:13 | [b1 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): false, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b1 (line 170): true, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:182:21:182:21 | [b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): false, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b1 (line 170): true, b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:184:13:188:13 | [b2 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b1 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:187:21:187:21 | [b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b1 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): false, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b2 (line 170): true, b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:189:13:193:13 | [b3 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b1 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:192:21:192:21 | [b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b1 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b2 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): false, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b3 (line 170): true, b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:194:13:198:13 | [b4 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b1 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:197:21:197:21 | [b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b1 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b2 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b3 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b4 (line 170): false, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b4 (line 170): false, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b4 (line 170): true, b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b4 (line 170): true, b5 (line 170): true] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b5 (line 170): false] SSA phi(i) | -| SplittingStressTest.cs:199:13:203:13 | [b5 (line 170): true] SSA phi(i) | diff --git a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.ql b/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.ql deleted file mode 100644 index c1b5633912d..00000000000 --- a/csharp/ql/test/library-tests/controlflow/splits/SplittingStressTest.ql +++ /dev/null @@ -1,8 +0,0 @@ -import csharp - -query predicate countSplits(ControlFlowElement cfe, int i) { - not cfe.fromLibrary() and - i = strictcount(ControlFlow::Nodes::ElementNode n | n.getAstNode() = cfe) -} - -query predicate ssaDef(Ssa::Definition def) { any() } diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index 3a3f4497423..1de7ff42928 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1234,9 +1234,9 @@ StaticInterfaceMembers.cs: # 49| 1: [PropertyCall] access to property Real # 49| -1: [ParameterAccess] access to parameter n # 51| 14: [Method] Inc -# 51| -1: [TypeMention] Complex # 51| -1: [TypeMention] INumber # 51| 1: [TypeMention] Complex +# 51| -1: [TypeMention] Complex #-----| 2: (Parameters) # 51| 0: [Parameter] other # 51| -1: [TypeMention] Complex @@ -1254,9 +1254,9 @@ StaticInterfaceMembers.cs: # 52| 1: [PropertyCall] access to property Imaginary # 52| -1: [ParameterAccess] access to parameter other # 54| 15: [Method] Dec -# 54| -1: [TypeMention] Complex # 54| -1: [TypeMention] INumber # 54| 1: [TypeMention] Complex +# 54| -1: [TypeMention] Complex #-----| 2: (Parameters) # 54| 0: [Parameter] other # 54| -1: [TypeMention] Complex diff --git a/csharp/ql/test/library-tests/csharp7/TupleTypes.expected b/csharp/ql/test/library-tests/csharp7/TupleTypes.expected index 9d7f3330151..86bd4d542b9 100644 --- a/csharp/ql/test/library-tests/csharp7/TupleTypes.expected +++ b/csharp/ql/test/library-tests/csharp7/TupleTypes.expected @@ -1,12 +1,8 @@ -| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple | 2 | 0 | CSharp7.cs:96:19:96:19 | Item1 | -| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple | 2 | 1 | CSharp7.cs:102:22:102:46 | Item2 | -| (Int32,Double) | (int, double) | ValueTuple | 2 | 0 | CSharp7.cs:213:6:213:8 | Item1 | -| (Int32,Double) | (int, double) | ValueTuple | 2 | 1 | CSharp7.cs:213:11:213:16 | Item2 | -| (Int32,Int32) | (int, int) | ValueTuple | 2 | 0 | CSharp7.cs:62:10:62:10 | Item1 | -| (Int32,Int32) | (int, int) | ValueTuple | 2 | 1 | CSharp7.cs:62:17:62:17 | Item2 | -| (Int32,String) | (int, string) | ValueTuple | 2 | 0 | CSharp7.cs:95:19:95:19 | Item1 | -| (Int32,String) | (int, string) | ValueTuple | 2 | 1 | CSharp7.cs:95:22:95:37 | Item2 | -| (String,Int32) | (string, int) | ValueTuple | 2 | 0 | CSharp7.cs:82:17:82:17 | Item1 | -| (String,Int32) | (string, int) | ValueTuple | 2 | 1 | CSharp7.cs:82:23:82:23 | Item2 | -| (String,String) | (string, string) | ValueTuple | 2 | 0 | CSharp7.cs:87:19:87:27 | Item1 | -| (String,String) | (string, string) | ValueTuple | 2 | 1 | CSharp7.cs:87:30:87:33 | Item2 | +| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple | 2 | 0 | Item1 | +| (Int32,(String,Int32)) | (int, (string, int)) | ValueTuple | 2 | 1 | Item2 | +| (Int32,Double) | (int, double) | ValueTuple | 2 | 0 | Item1 | +| (Int32,Double) | (int, double) | ValueTuple | 2 | 1 | Item2 | +| (Int32,String) | (int, string) | ValueTuple | 2 | 0 | Item1 | +| (Int32,String) | (int, string) | ValueTuple | 2 | 1 | Item2 | +| (String,String) | (string, string) | ValueTuple | 2 | 0 | Item1 | +| (String,String) | (string, string) | ValueTuple | 2 | 1 | Item2 | diff --git a/csharp/ql/test/library-tests/csharp7/TupleTypes.ql b/csharp/ql/test/library-tests/csharp7/TupleTypes.ql index 288fe1bfe98..c8fd4ac9ab0 100644 --- a/csharp/ql/test/library-tests/csharp7/TupleTypes.ql +++ b/csharp/ql/test/library-tests/csharp7/TupleTypes.ql @@ -1,6 +1,6 @@ import csharp from TupleType tt, int i -where tt.getAnElement().fromSource() +where tt.fromSource() select tt.getName(), tt.toStringWithTypes(), tt.getUnderlyingType().toStringWithTypes(), - tt.getArity(), i, tt.getElement(i) + tt.getArity(), i, tt.getElement(i).getName() diff --git a/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected b/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected index 56f2f7e3d60..6ad47e73d01 100644 --- a/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected +++ b/csharp/ql/test/library-tests/csharp8/NullableRefTypes.expected @@ -178,8 +178,8 @@ returnTypes | NullableRefTypes.cs:51:12:51:15 | Q | object | | NullableRefTypes.cs:51:12:51:15 | Q | object! | | NullableRefTypes.cs:51:12:51:15 | Q`1 | object! | -| NullableRefTypes.cs:54:11:54:33 | Generic | Void! | -| NullableRefTypes.cs:58:11:58:26 | Generic2 | Void! | +| NullableRefTypes.cs:54:11:54:17 | Generic | Void! | +| NullableRefTypes.cs:58:11:58:18 | Generic2 | Void! | | NullableRefTypes.cs:67:10:67:21 | GenericFn | Void | | NullableRefTypes.cs:67:10:67:21 | GenericFn | Void! | | NullableRefTypes.cs:67:10:67:21 | GenericFn`1 | Void! | @@ -271,8 +271,8 @@ expressionTypes | NullableRefTypes.cs:40:26:40:30 | ref ... | MyClass | | NullableRefTypes.cs:40:30:40:30 | access to local variable b | MyClass? | | NullableRefTypes.cs:51:44:51:47 | null | null | -| NullableRefTypes.cs:54:11:54:33 | call to constructor Object | object | -| NullableRefTypes.cs:58:11:58:26 | call to constructor Object | object | +| NullableRefTypes.cs:54:11:54:17 | call to constructor Object | object | +| NullableRefTypes.cs:58:11:58:18 | call to constructor Object | object | | NullableRefTypes.cs:73:18:73:18 | access to local variable x | MyClass! | | NullableRefTypes.cs:73:18:73:25 | MyClass x = ... | MyClass! | | NullableRefTypes.cs:73:22:73:25 | null | null | diff --git a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected index b8a976a78a6..83438c26f6e 100644 --- a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected +++ b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected @@ -45,9 +45,9 @@ | patterns.cs:110:25:110:25 | 0 | patterns.cs:110:22:110:26 | (..., ...) | semmle.label | successor | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:14:111:14 | 1 | semmle.label | match | -| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:111:23:111:23 | 0 | semmle.label | match | -| patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:111:13:111:26 | ... => ... | patterns.cs:108:24:112:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:16:111:16 | 0 | semmle.label | match | @@ -89,9 +89,9 @@ | patterns.cs:118:32:118:33 | access to local variable x2 | patterns.cs:118:28:118:34 | (..., ...) | semmle.label | successor | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:14:119:19 | Int32 x2 | semmle.label | match | -| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:119:34:119:34 | 0 | semmle.label | match | -| patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception | | patterns.cs:119:13:119:38 | ... => ... | patterns.cs:115:20:120:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:22:119:27 | Int32 y2 | semmle.label | match | @@ -148,7 +148,7 @@ | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [match] { ... } | semmle.label | match | | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:130:23:130:23 | 2 | patterns.cs:130:13:130:23 | ... => ... | semmle.label | successor | -| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(InvalidOperationException) | +| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception | | patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:131:27:131:27 | 3 | semmle.label | match | | patterns.cs:131:13:131:27 | ... => ... | patterns.cs:126:17:132:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:131:18:131:18 | Int32 x | patterns.cs:131:21:131:21 | _ | semmle.label | successor | @@ -162,9 +162,9 @@ | patterns.cs:136:17:143:13 | ... switch { ... } | patterns.cs:136:13:143:13 | ... = ... | semmle.label | successor | | patterns.cs:138:17:138:17 | 1 | patterns.cs:138:28:138:50 | object creation of type ArgumentException | semmle.label | match | | patterns.cs:138:17:138:17 | 1 | patterns.cs:139:17:139:17 | 2 | semmle.label | no-match | -| patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception(ArgumentException) | +| patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | catch (...) {...} | semmle.label | exception | | patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:138:22:138:50 | throw ... | semmle.label | successor | -| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | semmle.label | exception(Exception) | +| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | catch (...) {...} | semmle.label | exception | | patterns.cs:139:17:139:17 | 2 | patterns.cs:139:22:139:22 | 3 | semmle.label | match | | patterns.cs:139:17:139:17 | 2 | patterns.cs:140:17:140:24 | Object y | semmle.label | no-match | | patterns.cs:139:17:139:22 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | @@ -187,20 +187,17 @@ | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:31:142:32 | 10 | semmle.label | match | | patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:142:41:142:41 | 6 | semmle.label | match | -| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | -| patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | +| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | catch (...) {...} | semmle.label | exception | +| patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | catch (...) {...} | semmle.label | exception | | patterns.cs:142:17:142:41 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | | patterns.cs:142:26:142:34 | [match] { ... } | patterns.cs:142:17:142:36 | [match] { ... } | semmle.label | match | | patterns.cs:142:26:142:34 | [no-match] { ... } | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [match] { ... } | semmle.label | match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:41:142:41 | 6 | patterns.cs:142:17:142:41 | ... => ... | semmle.label | successor | -| patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(ArgumentException) | -| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(Exception) | -| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | semmle.label | match | -| patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: InvalidOperationException] InvalidOperationException ex | semmle.label | match | -| patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor | -| patterns.cs:145:41:145:42 | [exception: InvalidOperationException] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor | +| patterns.cs:145:9:148:9 | catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception | +| patterns.cs:145:9:148:9 | catch (...) {...} | patterns.cs:145:41:145:42 | InvalidOperationException ex | semmle.label | match | +| patterns.cs:145:41:145:42 | InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor | | patterns.cs:146:9:148:9 | {...} | patterns.cs:147:13:147:51 | ...; | semmle.label | successor | | patterns.cs:147:13:147:50 | call to method WriteLine | patterns.cs:123:10:123:21 | exit Expressions2 (normal) | semmle.label | successor | | patterns.cs:147:13:147:51 | ...; | patterns.cs:147:31:147:49 | "Invalid operation" | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/csharp9/withExpr.expected b/csharp/ql/test/library-tests/csharp9/withExpr.expected index 2d32e7c8bfd..cf3b9f5eb00 100644 --- a/csharp/ql/test/library-tests/csharp9/withExpr.expected +++ b/csharp/ql/test/library-tests/csharp9/withExpr.expected @@ -4,10 +4,10 @@ withExpr | Record.cs:77:21:77:31 | ... with { ... } | Person1 | Record.cs:77:21:77:22 | access to local variable p1 | Record.cs:77:29:77:31 | { ..., ... } | Person1.$() | | Record.cs:84:16:84:33 | ... with { ... } | R1 | Record.cs:84:16:84:16 | access to local variable b | Record.cs:84:23:84:33 | { ..., ... } | R1.$() | withTarget -| Record.cs:75:18:75:47 | ... with { ... } | Record.cs:27:1:27:57 | $ | Record.cs:27:1:27:57 | Person1 | -| Record.cs:76:18:76:81 | ... with { ... } | Record.cs:29:1:30:35 | $ | Record.cs:29:1:30:35 | Teacher1 | -| Record.cs:77:21:77:31 | ... with { ... } | Record.cs:27:1:27:57 | $ | Record.cs:27:1:27:57 | Person1 | -| Record.cs:84:16:84:33 | ... with { ... } | Record.cs:54:1:54:39 | $ | Record.cs:54:1:54:39 | R1 | +| Record.cs:75:18:75:47 | ... with { ... } | Record.cs:27:1:27:57 | $ | Record.cs:27:15:27:21 | Person1 | +| Record.cs:76:18:76:81 | ... with { ... } | Record.cs:29:1:30:35 | $ | Record.cs:29:15:29:22 | Teacher1 | +| Record.cs:77:21:77:31 | ... with { ... } | Record.cs:27:1:27:57 | $ | Record.cs:27:15:27:21 | Person1 | +| Record.cs:84:16:84:33 | ... with { ... } | Record.cs:54:1:54:39 | $ | Record.cs:54:24:54:25 | R1 | cloneOverrides | Person1.$() | Student1.$() | | Person1.$() | Teacher1.$() | diff --git a/csharp/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql b/csharp/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql index 5d63ff124ca..08579f1528f 100644 --- a/csharp/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql +++ b/csharp/ql/test/library-tests/dataflow/barrier-guards/barrier-flow.ql @@ -5,10 +5,8 @@ import csharp import semmle.code.csharp.controlflow.Guards -private predicate stringConstCompare(Guard guard, Expr testedNode, AbstractValue value) { - guard - .isEquality(any(StringLiteral lit), testedNode, - value.(AbstractValues::BooleanValue).getValue()) +private predicate stringConstCompare(Guard guard, Expr testedNode, GuardValue value) { + guard.isEquality(any(StringLiteral lit), testedNode, value.asBooleanValue()) } class StringConstCompareBarrier extends DataFlow::Node { diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs index 9470b4536dc..109be4aa995 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.cs @@ -233,3 +233,33 @@ public interface InterfaceB { void Foo(A2 a, object o, bool cond); } + +public class A3 +{ + public virtual void M1(object o) + { + this.M2(o); + } + + public virtual void M2(object o) + { + Sink(o); // should not have flow + } + + public static void Sink(object o) + { + } +} + +public class A4 : A3 +{ + public override void M2(object o) + { + Sink(o); // should have flow + } + + private void CallM1() + { + base.M1(new object()); + } +} diff --git a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected index dfe1a951b27..bcd15ee7831 100644 --- a/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/call-sensitivity/CallSensitivityFlow.expected @@ -2,7 +2,7 @@ edges | CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | provenance | | | CallSensitivityFlow.cs:19:39:19:39 | o : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | provenance | | | CallSensitivityFlow.cs:27:40:27:40 | o : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | provenance | | -| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | provenance | | +| CallSensitivityFlow.cs:35:41:35:41 | o : Object | CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | provenance | | | CallSensitivityFlow.cs:43:45:43:45 | o : Object | CallSensitivityFlow.cs:45:16:45:17 | access to local variable o1 : Object | provenance | | | CallSensitivityFlow.cs:45:16:45:17 | access to local variable o1 : Object | CallSensitivityFlow.cs:49:20:49:22 | access to local variable tmp : Object | provenance | | | CallSensitivityFlow.cs:49:20:49:22 | access to local variable tmp : Object | CallSensitivityFlow.cs:50:13:50:14 | access to local variable o2 : Object | provenance | | @@ -59,6 +59,10 @@ edges | CallSensitivityFlow.cs:187:13:187:13 | access to local variable o : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | provenance | | | CallSensitivityFlow.cs:187:17:187:30 | call to method CallMOut : Object | CallSensitivityFlow.cs:187:13:187:13 | access to local variable o : Object | provenance | | | CallSensitivityFlow.cs:205:40:205:40 | o : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:239:35:239:35 | o : Object | CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | provenance | | +| CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | CallSensitivityFlow.cs:256:36:256:36 | o : Object | provenance | | +| CallSensitivityFlow.cs:256:36:256:36 | o : Object | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | provenance | | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:239:35:239:35 | o : Object | provenance | | nodes | CallSensitivityFlow.cs:7:38:7:38 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | @@ -67,7 +71,7 @@ nodes | CallSensitivityFlow.cs:27:40:27:40 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | semmle.label | access to parameter o | | CallSensitivityFlow.cs:35:41:35:41 | o : Object | semmle.label | o : Object | -| CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | semmle.label | [cond (line 35): true] access to parameter o | +| CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | semmle.label | access to parameter o | | CallSensitivityFlow.cs:43:45:43:45 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:45:16:45:17 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | | CallSensitivityFlow.cs:49:20:49:22 | access to local variable tmp : Object | semmle.label | access to local variable tmp : Object | @@ -132,13 +136,18 @@ nodes | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | semmle.label | access to local variable o | | CallSensitivityFlow.cs:205:40:205:40 | o : Object | semmle.label | o : Object | | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | semmle.label | access to parameter o | +| CallSensitivityFlow.cs:239:35:239:35 | o : Object | semmle.label | o : Object | +| CallSensitivityFlow.cs:241:17:241:17 | access to parameter o : Object | semmle.label | access to parameter o : Object | +| CallSensitivityFlow.cs:256:36:256:36 | o : Object | semmle.label | o : Object | +| CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | semmle.label | access to parameter o | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | semmle.label | object creation of type Object : Object | subpaths | CallSensitivityFlow.cs:85:26:85:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | CallSensitivityFlow.cs:85:14:85:44 | call to method FlowThrough | | CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:7:38:7:38 | o : Object | CallSensitivityFlow.cs:11:20:11:20 | access to parameter o : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | #select | CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:78:24:78:35 | object creation of type Object : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | $@ | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:79:25:79:36 | object creation of type Object : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | $@ | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | access to parameter o | -| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | $@ | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | [cond (line 35): true] access to parameter o | +| CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:80:26:80:37 | object creation of type Object : Object | CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | $@ | CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:81:30:81:41 | object creation of type Object : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | $@ | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | access to local variable o3 | | CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:82:31:82:42 | object creation of type Object : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | $@ | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | access to local variable o3 | | CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:83:31:83:42 | object creation of type Object : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | $@ | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | access to local variable o3 | @@ -147,7 +156,7 @@ subpaths | CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:87:31:87:42 | object creation of type Object : Object | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | $@ | CallSensitivityFlow.cs:66:14:66:15 | access to local variable o3 | access to local variable o3 | | CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:101:24:101:35 | object creation of type Object : Object | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | $@ | CallSensitivityFlow.cs:23:18:23:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:102:25:102:36 | object creation of type Object : Object | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | $@ | CallSensitivityFlow.cs:31:18:31:18 | access to parameter o | access to parameter o | -| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | $@ | CallSensitivityFlow.cs:39:18:39:18 | [cond (line 35): true] access to parameter o | [cond (line 35): true] access to parameter o | +| CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:103:26:103:37 | object creation of type Object : Object | CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | $@ | CallSensitivityFlow.cs:39:18:39:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:104:30:104:41 | object creation of type Object : Object | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | $@ | CallSensitivityFlow.cs:53:14:53:15 | access to local variable o3 | access to local variable o3 | | CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:26:105:37 | object creation of type Object : Object | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | $@ | CallSensitivityFlow.cs:105:14:105:41 | call to method FlowThrough | call to method FlowThrough | | CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:117:26:117:37 | object creation of type Object : Object | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | $@ | CallSensitivityFlow.cs:128:22:128:22 | access to parameter o | access to parameter o | @@ -156,3 +165,4 @@ subpaths | CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:172:37:172:48 | object creation of type Object : Object | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | $@ | CallSensitivityFlow.cs:188:14:188:14 | access to local variable o | access to local variable o | | CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:182:21:182:32 | object creation of type Object : Object | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | $@ | CallSensitivityFlow.cs:208:18:208:18 | access to parameter o | access to parameter o | | CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:185:21:185:32 | object creation of type Object : Object | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | $@ | CallSensitivityFlow.cs:164:14:164:14 | access to parameter o | access to parameter o | +| CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:263:17:263:28 | object creation of type Object : Object | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | $@ | CallSensitivityFlow.cs:258:14:258:14 | access to parameter o | access to parameter o | diff --git a/csharp/ql/test/library-tests/dataflow/callablereturnsarg/Common.qll b/csharp/ql/test/library-tests/dataflow/callablereturnsarg/Common.qll index ae9b56cd038..3a3a55e42cc 100644 --- a/csharp/ql/test/library-tests/dataflow/callablereturnsarg/Common.qll +++ b/csharp/ql/test/library-tests/dataflow/callablereturnsarg/Common.qll @@ -18,9 +18,7 @@ module Config implements DataFlow::ConfigSig { } predicate isBarrier(DataFlow::Node node) { - exists(AbstractValues::NullValue nv | node.(GuardedDataFlowNode).mustHaveValue(nv) | - nv.isNull() - ) + exists(GuardValue nv | node.(GuardedDataFlowNode).mustHaveValue(nv) | nv.isNullValue()) } } diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs index 705efd35e38..d7552376c0f 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs @@ -116,7 +116,7 @@ namespace My.Qltest { var a = new object[] { new object() }; var b = Reverse(a); - Sink(b); // No flow + Sink(b); // Flow Sink(b[0]); // Flow } diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected index 7254208be18..3099a3fec7e 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected @@ -104,6 +104,7 @@ edges | ExternalFlow.cs:117:17:117:17 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | provenance | | | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:117:17:117:17 | access to local variable a : null [element] : Object | provenance | | | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | provenance | | +| ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | ExternalFlow.cs:119:18:119:18 | access to local variable b | provenance | | | ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | provenance | | | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | provenance | | | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | provenance | MaD:7 | @@ -240,6 +241,7 @@ nodes | ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | semmle.label | access to local variable b : null [element] : Object | | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | semmle.label | call to method Reverse : null [element] : Object | | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | semmle.label | access to local variable a : null [element] : Object | +| ExternalFlow.cs:119:18:119:18 | access to local variable b | semmle.label | access to local variable b | | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | semmle.label | access to local variable b : null [element] : Object | | ExternalFlow.cs:120:18:120:21 | access to array element | semmle.label | access to array element | | ExternalFlow.cs:205:17:205:18 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | @@ -315,6 +317,7 @@ invalidModelRow | ExternalFlow.cs:102:22:102:22 | access to parameter d | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | $@ | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:104:18:104:25 | access to field Field | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | $@ | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:112:18:112:25 | access to property MyProp | ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | $@ | ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | object creation of type Object : Object | +| ExternalFlow.cs:119:18:119:18 | access to local variable b | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:119:18:119:18 | access to local variable b | $@ | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:120:18:120:21 | access to array element | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:120:18:120:21 | access to array element | $@ | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:206:18:206:48 | call to method MixedFlowArgs | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:18:206:48 | call to method MixedFlowArgs | $@ | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | object creation of type Object : Object | | ExternalFlow.cs:212:18:212:62 | call to method GeneratedFlowWithGeneratedNeutral | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:18:212:62 | call to method GeneratedFlowWithGeneratedNeutral | $@ | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | object creation of type Object : Object | diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected index 3180b00f205..743b754a97b 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlow.expected @@ -84,13 +84,12 @@ | GlobalDataFlow.cs:547:15:547:21 | access to field field | | MultiImplementationA.cs:7:39:7:39 | access to parameter x | | MultiImplementationB.cs:5:39:5:39 | access to parameter x | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | +| Splitting.cs:9:15:9:15 | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | +| Splitting.cs:32:15:32:15 | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | | Splitting.cs:41:19:41:19 | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | | Splitting.cs:50:19:50:19 | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index 7333890f68f..81f76ca4dc0 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -464,17 +464,12 @@ edges | MultiImplementationA.cs:7:27:7:27 | x : String | MultiImplementationA.cs:7:39:7:39 | access to parameter x | provenance | | | MultiImplementationB.cs:3:28:3:41 | "taint source" : String | MultiImplementationB.cs:5:27:5:27 | x : String | provenance | | | MultiImplementationB.cs:5:27:5:27 | x : String | MultiImplementationB.cs:5:39:5:39 | access to parameter x | provenance | | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | -| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | -| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | access to parameter tainted : String | provenance | | +| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | access to local variable x | provenance | | | Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:17:8:31 | call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:8:17:8:31 | call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | | Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | @@ -482,23 +477,17 @@ edges | Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | -| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | -| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | access to local variable x | provenance | | | Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:31:17:31:26 | dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:31:17:31:26 | dynamic access to element : String | provenance | | | Splitting.cs:39:13:39:13 | access to local variable s : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:39:13:39:13 | access to local variable s : String | provenance | | +| Splitting.cs:39:13:39:13 | access to local variable s : String | Splitting.cs:43:19:43:19 | access to local variable s | provenance | | +| Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:39:13:39:13 | access to local variable s : String | provenance | | | Splitting.cs:48:13:48:13 | access to local variable s : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | | Splitting.cs:48:13:48:13 | access to local variable s : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:48:13:48:13 | access to local variable s : String | provenance | | @@ -919,13 +908,9 @@ nodes | MultiImplementationB.cs:5:39:5:39 | access to parameter x | semmle.label | access to parameter x | | Splitting.cs:3:28:3:34 | tainted : String | semmle.label | tainted : String | | Splitting.cs:8:13:8:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:8:13:8:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | semmle.label | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | semmle.label | [b (line 3): true] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | semmle.label | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | semmle.label | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | semmle.label | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | semmle.label | [b (line 3): true] access to local variable x | +| Splitting.cs:8:17:8:31 | call to method Return : String | semmle.label | call to method Return : String | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Splitting.cs:9:15:9:15 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:16:26:16:26 | x : String | semmle.label | x : String | | Splitting.cs:16:32:16:32 | access to parameter x : String | semmle.label | access to parameter x : String | @@ -936,20 +921,16 @@ nodes | Splitting.cs:21:21:21:33 | call to method Return | semmle.label | call to method Return | | Splitting.cs:21:28:21:32 | access to parameter value : String | semmle.label | access to parameter value : String | | Splitting.cs:24:28:24:34 | tainted : String | semmle.label | tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | semmle.label | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | semmle.label | [b (line 24): true] access to parameter tainted : String | +| Splitting.cs:30:17:30:23 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Splitting.cs:31:13:31:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:31:13:31:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | semmle.label | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | semmle.label | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | semmle.label | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | semmle.label | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | semmle.label | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | semmle.label | [b (line 24): true] access to local variable x | +| Splitting.cs:31:17:31:26 | dynamic access to element : String | semmle.label | dynamic access to element : String | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Splitting.cs:32:15:32:15 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:39:13:39:13 | access to local variable s : String | semmle.label | access to local variable s : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | semmle.label | [b (line 37): true] "taint source" : String | +| Splitting.cs:39:21:39:34 | "taint source" : String | semmle.label | "taint source" : String | | Splitting.cs:41:19:41:19 | access to local variable s | semmle.label | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | semmle.label | access to local variable s | | Splitting.cs:48:13:48:13 | access to local variable s : String | semmle.label | access to local variable s : String | | Splitting.cs:48:36:48:49 | "taint source" : String | semmle.label | "taint source" : String | | Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s | @@ -984,17 +965,11 @@ subpaths | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | call to method Return : String | | Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:20:22:20:30 | call to method Return : String | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | dynamic access to element : String | #select -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | [b (line 24): true] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | [b (line 3): true] access to local variable x | | Capture.cs:246:19:246:25 | access to field Field | Capture.cs:242:19:242:32 | "taint source" : String | Capture.cs:246:19:246:25 | access to field Field | access to field Field | | Capture.cs:251:15:251:21 | access to field Field | Capture.cs:242:19:242:32 | "taint source" : String | Capture.cs:251:15:251:21 | access to field Field | access to field Field | | Capture.cs:251:15:251:21 | access to field Field | Capture.cs:247:23:247:36 | "taint source" : String | Capture.cs:251:15:251:21 | access to field Field | access to field Field | @@ -1016,7 +991,8 @@ subpaths | GlobalDataFlow.cs:533:15:533:21 | access to field field | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:533:15:533:21 | access to field field | access to field field | | GlobalDataFlow.cs:539:15:539:22 | access to field field | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:539:15:539:22 | access to field field | access to field field | | GlobalDataFlow.cs:547:15:547:21 | access to field field | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:547:15:547:21 | access to field field | access to field field | -| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s | +| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s | access to local variable s | | Splitting.cs:50:19:50:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | access to local variable s | | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | GlobalDataFlow.cs:18:27:18:40 | "taint source" : String | GlobalDataFlow.cs:72:15:72:19 | access to local variable sink0 | access to local variable sink0 | @@ -1068,7 +1044,9 @@ subpaths | Capture.cs:319:19:319:19 | access to local variable x | Capture.cs:318:17:318:30 | "taint source" : String | Capture.cs:319:19:319:19 | access to local variable x | access to local variable x | | Capture.cs:330:47:330:47 | access to local variable x | Capture.cs:328:17:328:30 | "taint source" : String | Capture.cs:330:47:330:47 | access to local variable x | access to local variable x | | Capture.cs:341:45:341:45 | access to local variable x | Capture.cs:339:17:339:30 | "taint source" : String | Capture.cs:341:45:341:45 | access to local variable x | access to local variable x | +| Splitting.cs:9:15:9:15 | access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | access to local variable x | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:11:19:11:19 | access to local variable x | access to local variable x | +| Splitting.cs:32:15:32:15 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | access to local variable x | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:34:19:34:19 | access to local variable x | access to local variable x | | Capture.cs:206:19:206:19 | access to parameter s | Capture.cs:211:21:211:34 | "taint source" : String | Capture.cs:206:19:206:19 | access to parameter s | access to parameter s | | Capture.cs:217:19:217:19 | access to parameter s | Capture.cs:221:21:221:34 | "taint source" : String | Capture.cs:217:19:217:19 | access to parameter s | access to parameter s | diff --git a/csharp/ql/test/library-tests/dataflow/global/GetAnOutNode.expected b/csharp/ql/test/library-tests/dataflow/global/GetAnOutNode.expected index 643b3e81350..db91ca3e73f 100644 --- a/csharp/ql/test/library-tests/dataflow/global/GetAnOutNode.expected +++ b/csharp/ql/test/library-tests/dataflow/global/GetAnOutNode.expected @@ -184,16 +184,12 @@ | MultiImplementationA.cs:3:7:3:15 | call to constructor Object | normal | MultiImplementationA.cs:3:7:3:15 | call to constructor Object | | MultiImplementationB.cs:1:7:1:15 | call to constructor Object | normal | MultiImplementationB.cs:1:7:1:15 | call to constructor Object | | Splitting.cs:1:7:1:15 | call to constructor Object | normal | Splitting.cs:1:7:1:15 | call to constructor Object | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return | normal | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return | normal | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return | +| Splitting.cs:8:17:8:31 | call to method Return | normal | Splitting.cs:8:17:8:31 | call to method Return | | Splitting.cs:20:22:20:30 | call to method Return | normal | Splitting.cs:20:22:20:30 | call to method Return | | Splitting.cs:21:21:21:33 | call to method Return | normal | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:30:9:30:13 | [b (line 24): false] dynamic access to element | normal | Splitting.cs:30:9:30:13 | [b (line 24): false] dynamic access to element | -| Splitting.cs:30:9:30:13 | [b (line 24): true] dynamic access to element | normal | Splitting.cs:30:9:30:13 | [b (line 24): true] dynamic access to element | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element | normal | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element | normal | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element | -| Splitting.cs:32:9:32:16 | [b (line 24): false] dynamic call to method Check | normal | Splitting.cs:32:9:32:16 | [b (line 24): false] dynamic call to method Check | -| Splitting.cs:32:9:32:16 | [b (line 24): true] dynamic call to method Check | normal | Splitting.cs:32:9:32:16 | [b (line 24): true] dynamic call to method Check | +| Splitting.cs:30:9:30:13 | dynamic access to element | normal | Splitting.cs:30:9:30:13 | dynamic access to element | +| Splitting.cs:31:17:31:26 | dynamic access to element | normal | Splitting.cs:31:17:31:26 | dynamic access to element | +| Splitting.cs:32:9:32:16 | dynamic call to method Check | normal | Splitting.cs:32:9:32:16 | dynamic call to method Check | | Splitting.cs:34:13:34:20 | dynamic call to method Check | normal | Splitting.cs:34:13:34:20 | dynamic call to method Check | | This.cs:7:5:7:8 | call to constructor Object | normal | This.cs:7:5:7:8 | call to constructor Object | | This.cs:17:9:17:18 | object creation of type This | normal | This.cs:17:9:17:18 | object creation of type This | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected index 8a68b204e02..aa37485069a 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTracking.expected @@ -94,13 +94,12 @@ | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | | MultiImplementationA.cs:7:39:7:39 | access to parameter x | | MultiImplementationB.cs:5:39:5:39 | access to parameter x | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | +| Splitting.cs:9:15:9:15 | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | +| Splitting.cs:32:15:32:15 | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | | Splitting.cs:41:19:41:19 | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | | Splitting.cs:50:19:50:19 | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index 8fcf385a4f5..7a6f90e961d 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -536,17 +536,12 @@ edges | MultiImplementationA.cs:7:27:7:27 | x : String | MultiImplementationA.cs:7:39:7:39 | access to parameter x | provenance | | | MultiImplementationB.cs:3:28:3:41 | "taint source" : String | MultiImplementationB.cs:5:27:5:27 | x : String | provenance | | | MultiImplementationB.cs:5:27:5:27 | x : String | MultiImplementationB.cs:5:39:5:39 | access to parameter x | provenance | | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | provenance | | -| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | provenance | | -| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | provenance | | -| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | provenance | | +| Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:8:24:8:30 | access to parameter tainted : String | provenance | | +| Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:9:15:9:15 | access to local variable x | provenance | | | Splitting.cs:8:13:8:13 | access to local variable x : String | Splitting.cs:11:19:11:19 | access to local variable x | provenance | | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | provenance | | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | +| Splitting.cs:8:17:8:31 | call to method Return : String | Splitting.cs:8:13:8:13 | access to local variable x : String | provenance | | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:8:17:8:31 | call to method Return : String | provenance | | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | provenance | | | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | provenance | | | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:29:20:29 | access to parameter s : String | provenance | | | Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | provenance | | @@ -554,23 +549,17 @@ edges | Splitting.cs:21:9:21:11 | value : String | Splitting.cs:21:28:21:32 | access to parameter value : String | provenance | | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | provenance | | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:21:21:21:33 | call to method Return | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | provenance | | -| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | provenance | | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | -| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | provenance | | -| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:30:17:30:23 | access to parameter tainted : String | provenance | | +| Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:31:19:31:25 | access to parameter tainted : String | provenance | | +| Splitting.cs:30:17:30:23 | access to parameter tainted : String | Splitting.cs:21:9:21:11 | value : String | provenance | | +| Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:32:15:32:15 | access to local variable x | provenance | | | Splitting.cs:31:13:31:13 | access to local variable x : String | Splitting.cs:34:19:34:19 | access to local variable x | provenance | | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | provenance | | +| Splitting.cs:31:17:31:26 | dynamic access to element : String | Splitting.cs:31:13:31:13 | access to local variable x : String | provenance | | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | provenance | | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:31:17:31:26 | dynamic access to element : String | provenance | | | Splitting.cs:39:13:39:13 | access to local variable s : String | Splitting.cs:41:19:41:19 | access to local variable s | provenance | | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:39:13:39:13 | access to local variable s : String | provenance | | +| Splitting.cs:39:13:39:13 | access to local variable s : String | Splitting.cs:43:19:43:19 | access to local variable s | provenance | | +| Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:39:13:39:13 | access to local variable s : String | provenance | | | Splitting.cs:48:13:48:13 | access to local variable s : String | Splitting.cs:50:19:50:19 | access to local variable s | provenance | | | Splitting.cs:48:13:48:13 | access to local variable s : String | Splitting.cs:52:19:52:19 | access to local variable s | provenance | | | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:48:13:48:13 | access to local variable s : String | provenance | | @@ -1056,13 +1045,9 @@ nodes | MultiImplementationB.cs:5:39:5:39 | access to parameter x | semmle.label | access to parameter x | | Splitting.cs:3:28:3:34 | tainted : String | semmle.label | tainted : String | | Splitting.cs:8:13:8:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:8:13:8:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | semmle.label | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | semmle.label | [b (line 3): true] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | semmle.label | [b (line 3): false] access to parameter tainted : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | semmle.label | [b (line 3): true] access to parameter tainted : String | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | semmle.label | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | semmle.label | [b (line 3): true] access to local variable x | +| Splitting.cs:8:17:8:31 | call to method Return : String | semmle.label | call to method Return : String | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Splitting.cs:9:15:9:15 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:16:26:16:26 | x : String | semmle.label | x : String | | Splitting.cs:16:32:16:32 | access to parameter x : String | semmle.label | access to parameter x : String | @@ -1073,20 +1058,16 @@ nodes | Splitting.cs:21:21:21:33 | call to method Return | semmle.label | call to method Return | | Splitting.cs:21:28:21:32 | access to parameter value : String | semmle.label | access to parameter value : String | | Splitting.cs:24:28:24:34 | tainted : String | semmle.label | tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): false] access to parameter tainted : String | semmle.label | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:30:17:30:23 | [b (line 24): true] access to parameter tainted : String | semmle.label | [b (line 24): true] access to parameter tainted : String | +| Splitting.cs:30:17:30:23 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | | Splitting.cs:31:13:31:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:31:13:31:13 | access to local variable x : String | semmle.label | access to local variable x : String | -| Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | semmle.label | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | semmle.label | [b (line 24): true] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | semmle.label | [b (line 24): false] access to parameter tainted : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | semmle.label | [b (line 24): true] access to parameter tainted : String | -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | semmle.label | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | semmle.label | [b (line 24): true] access to local variable x | +| Splitting.cs:31:17:31:26 | dynamic access to element : String | semmle.label | dynamic access to element : String | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | semmle.label | access to parameter tainted : String | +| Splitting.cs:32:15:32:15 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | semmle.label | access to local variable x | | Splitting.cs:39:13:39:13 | access to local variable s : String | semmle.label | access to local variable s : String | -| Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | semmle.label | [b (line 37): true] "taint source" : String | +| Splitting.cs:39:21:39:34 | "taint source" : String | semmle.label | "taint source" : String | | Splitting.cs:41:19:41:19 | access to local variable s | semmle.label | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | semmle.label | access to local variable s | | Splitting.cs:48:13:48:13 | access to local variable s : String | semmle.label | access to local variable s : String | | Splitting.cs:48:36:48:49 | "taint source" : String | semmle.label | "taint source" : String | | Splitting.cs:50:19:50:19 | access to local variable s | semmle.label | access to local variable s | @@ -1127,12 +1108,10 @@ subpaths | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | | GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Return] : StringBuilder | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | | GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Return] : StringBuilder | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | -| Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | -| Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | +| Splitting.cs:8:24:8:30 | access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | call to method Return : String | | Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:20:22:20:30 | call to method Return : String | | Splitting.cs:21:28:21:32 | access to parameter value : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:21:21:21:33 | call to method Return | -| Splitting.cs:31:19:31:25 | [b (line 24): false] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | [b (line 24): false] dynamic access to element : String | -| Splitting.cs:31:19:31:25 | [b (line 24): true] access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | [b (line 24): true] dynamic access to element : String | +| Splitting.cs:31:19:31:25 | access to parameter tainted : String | Splitting.cs:18:24:18:24 | s : String | Splitting.cs:20:22:20:30 | call to method Return : String | Splitting.cs:31:17:31:26 | dynamic access to element : String | #select | Capture.cs:12:19:12:24 | access to local variable sink27 | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:12:19:12:24 | access to local variable sink27 | access to local variable sink27 | | Capture.cs:21:23:21:28 | access to local variable sink28 | Capture.cs:7:20:7:26 | tainted : String | Capture.cs:21:23:21:28 | access to local variable sink28 | access to local variable sink28 | @@ -1235,13 +1214,12 @@ subpaths | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:50:15:50:19 | access to local variable sink3 | access to local variable sink3 | | MultiImplementationA.cs:7:39:7:39 | access to parameter x | MultiImplementationA.cs:5:28:5:41 | "taint source" : String | MultiImplementationA.cs:7:39:7:39 | access to parameter x | access to parameter x | | MultiImplementationB.cs:5:39:5:39 | access to parameter x | MultiImplementationB.cs:3:28:3:41 | "taint source" : String | MultiImplementationB.cs:5:39:5:39 | access to parameter x | access to parameter x | -| Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): false] access to local variable x | [b (line 3): false] access to local variable x | -| Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | [b (line 3): true] access to local variable x | [b (line 3): true] access to local variable x | +| Splitting.cs:9:15:9:15 | access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:9:15:9:15 | access to local variable x | access to local variable x | | Splitting.cs:11:19:11:19 | access to local variable x | Splitting.cs:3:28:3:34 | tainted : String | Splitting.cs:11:19:11:19 | access to local variable x | access to local variable x | | Splitting.cs:21:21:21:33 | call to method Return | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:21:21:21:33 | call to method Return | call to method Return | -| Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): false] access to local variable x | [b (line 24): false] access to local variable x | -| Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | [b (line 24): true] access to local variable x | [b (line 24): true] access to local variable x | +| Splitting.cs:32:15:32:15 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:32:15:32:15 | access to local variable x | access to local variable x | | Splitting.cs:34:19:34:19 | access to local variable x | Splitting.cs:24:28:24:34 | tainted : String | Splitting.cs:34:19:34:19 | access to local variable x | access to local variable x | -| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | [b (line 37): true] "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s | +| Splitting.cs:41:19:41:19 | access to local variable s | Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:41:19:41:19 | access to local variable s | access to local variable s | +| Splitting.cs:43:19:43:19 | access to local variable s | Splitting.cs:39:21:39:34 | "taint source" : String | Splitting.cs:43:19:43:19 | access to local variable s | access to local variable s | | Splitting.cs:50:19:50:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:50:19:50:19 | access to local variable s | access to local variable s | | Splitting.cs:52:19:52:19 | access to local variable s | Splitting.cs:48:36:48:49 | "taint source" : String | Splitting.cs:52:19:52:19 | access to local variable s | access to local variable s | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index ff615d53115..8ffcd84e54b 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1683,9 +1683,9 @@ summary | Microsoft.AspNetCore.WebSockets;WebSocketMiddleware;WebSocketMiddleware;(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Logging.ILoggerFactory);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebSockets;WebSocketsDependencyInjectionExtensions;AddWebSockets;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;BufferedReadStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated | @@ -1696,10 +1696,10 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func,System.Buffers.ArrayPool);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated | @@ -1709,9 +1709,9 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;FileBufferingWriteStream;(System.Int32,System.Nullable,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated | @@ -1719,10 +1719,10 @@ summary | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[1];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;();Argument[this];ReturnValue;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadLine;();Argument[this];ReturnValue;taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual | | Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadToEndAsync;();Argument[this];ReturnValue;taint;manual | @@ -3715,7 +3715,6 @@ summary | Newtonsoft.Json.Linq;JObject;set_Item;(System.String,Newtonsoft.Json.Linq.JToken);Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | Newtonsoft.Json.Linq;JObject;set_Item;(System.String,Newtonsoft.Json.Linq.JToken);Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | Newtonsoft.Json.Linq;JObject;set_Item;(System.String,Newtonsoft.Json.Linq.JToken);Argument[1];Argument[this].Element;value;manual | -| Newtonsoft.Json.Linq;JPropertyDescriptor;GetValue;(System.Object);Argument[0];ReturnValue;taint;dfc-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;ResetValue;(System.Object);Argument[this];Argument[0];taint;df-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;SetValue;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;SetValue;(System.Object,System.Object);Argument[1];Argument[0];taint;df-generated | @@ -5278,8 +5277,8 @@ summary | ServiceStack.Text;NetCoreMemory;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;NetCoreMemory;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStream;GetBuffer;();Argument[this];ReturnValue;taint;df-generated | -| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | +| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | | ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | ServiceStack.Text;RecyclableMemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | @@ -9085,7 +9084,6 @@ summary | System.ComponentModel;PropertyDescriptor;FillAttributes;(System.Collections.IList);Argument[this];Argument[0].Element;taint;df-generated | | System.ComponentModel;PropertyDescriptor;GetEditor;(System.Type);Argument[this];ReturnValue;taint;df-generated | | System.ComponentModel;PropertyDescriptor;GetInvocationTarget;(System.Type,System.Object);Argument[1];ReturnValue;value;dfc-generated | -| System.ComponentModel;PropertyDescriptor;GetValue;(System.Object);Argument[0];ReturnValue;taint;dfc-generated | | System.ComponentModel;PropertyDescriptor;RemoveValueChanged;(System.Object,System.EventHandler);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.ComponentModel;PropertyDescriptor;ResetValue;(System.Object);Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;PropertyDescriptor;SetValue;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | @@ -10659,7 +10657,7 @@ summary | System.Data.SqlTypes;SqlDecimal;op_UnaryNegation;(System.Data.SqlTypes.SqlDecimal);Argument[0];ReturnValue;value;dfc-generated | | System.Data.SqlTypes;SqlDouble;ReadXml;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated | | System.Data.SqlTypes;SqlDouble;WriteXml;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated | -| System.Data.SqlTypes;SqlFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | +| System.Data.SqlTypes;SqlFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | | System.Data.SqlTypes;SqlFileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.Data.SqlTypes;SqlGuid;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | System.Data.SqlTypes;SqlGuid;ReadXml;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated | @@ -11970,16 +11968,16 @@ summary | System.Globalization;TextInfo;ToUpper;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System.Globalization;TextInfo;get_CultureName;();Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.Compression;BrotliStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.Compression;BrotliStream;BrotliStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.BrotliStream._stream];value;dfc-generated | | System.IO.Compression;BrotliStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO.Compression;BrotliStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;BrotliStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;BrotliStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;BrotliStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;BrotliStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;BrotliStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Compression;BrotliStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;BrotliStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -11989,7 +11987,7 @@ summary | System.IO.Compression;BrotliStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;BrotliStream;get_BaseStream;();Argument[this].SyntheticField[System.IO.Compression.BrotliStream._stream];ReturnValue;value;dfc-generated | | System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.Compression;DeflateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.Compression;DeflateStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | @@ -12000,10 +11998,10 @@ summary | System.IO.Compression;DeflateStream;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this];taint;manual | | System.IO.Compression;DeflateStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO.Compression;DeflateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;DeflateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;DeflateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;DeflateStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;DeflateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;DeflateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Compression;DeflateStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;DeflateStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12013,7 +12011,7 @@ summary | System.IO.Compression;DeflateStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;DeflateStream;get_BaseStream;();Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.Compression;GZipStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.Compression;GZipStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | @@ -12023,10 +12021,10 @@ summary | System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated | | System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated | | System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.ZLibCompressionOptions,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated | -| System.IO.Compression;GZipStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;GZipStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;GZipStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;GZipStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;GZipStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;GZipStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Compression;GZipStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;GZipStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12036,17 +12034,17 @@ summary | System.IO.Compression;GZipStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;GZipStream;get_BaseStream;();Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];ReturnValue;value;dfc-generated | | System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.Compression;ZLibStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.Compression;ZLibStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | | System.IO.Compression;ZLibStream;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Compression;ZLibStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO.Compression;ZLibStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO.Compression;ZLibStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Compression;ZLibStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Compression;ZLibStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;ZLibStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;ZLibStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.Compression;ZLibStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Compression;ZLibStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.Compression;ZLibStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12090,16 +12088,16 @@ summary | System.IO.IsolatedStorage;IsolatedStorage;get_AssemblyIdentity;();Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorage;get_DomainIdentity;();Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.IO.IsolatedStorage;IsolatedStorageFileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.IsolatedStorage;IsolatedStorageFileStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12150,15 +12148,15 @@ summary | System.IO.Pipes;NamedPipeServerStream;NamedPipeServerStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);Argument[3];Argument[this];taint;df-generated | | System.IO.Pipes;NamedPipeServerStream;RunAsClient;(System.IO.Pipes.PipeStreamImpersonationWorker);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO.Pipes;PipeStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO.Pipes;PipeStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.IO.Pipes;PipeStream;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Pipes.PipeStream._handle];value;dfc-generated | -| System.IO.Pipes;PipeStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO.Pipes;PipeStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO.Pipes;PipeStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO.Pipes;PipeStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO.Pipes;PipeStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO.Pipes;PipeStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO.Pipes;PipeStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO.Pipes;PipeStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12180,7 +12178,7 @@ summary | System.IO;BinaryWriter;Write;(System.ReadOnlySpan);Argument[0];Argument[this];taint;df-generated | | System.IO;BinaryWriter;get_BaseStream;();Argument[this].Field[System.IO.BinaryWriter.OutStream];ReturnValue;value;dfc-generated | | System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO;BufferedStream;BufferedStream;(System.IO.Stream);Argument[0];Argument[this];taint;manual | @@ -12189,10 +12187,10 @@ summary | System.IO;BufferedStream;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO;BufferedStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO;BufferedStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;BufferedStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;BufferedStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;BufferedStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;BufferedStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;BufferedStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;BufferedStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO;BufferedStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12302,7 +12300,7 @@ summary | System.IO;FileNotFoundException;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | System.IO;FileNotFoundException;get_Message;();Argument[this].SyntheticField[System.Exception._message];ReturnValue;value;dfc-generated | | System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO;FileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO;FileStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | @@ -12320,10 +12318,10 @@ summary | System.IO;FileStream;FileStream;(System.String,System.IO.FileStreamOptions);Argument[this];Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];value;dfc-generated | | System.IO;FileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.IO;FileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO;FileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;FileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;FileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;FileStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;FileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;FileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;FileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO;FileStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12364,7 +12362,7 @@ summary | System.IO;FileSystemWatcher;remove_Error;(System.IO.ErrorEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.IO;FileSystemWatcher;remove_Renamed;(System.IO.RenamedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO;MemoryStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO;MemoryStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | @@ -12376,10 +12374,10 @@ summary | System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);Argument[0].Element;Argument[this];taint;manual | -| System.IO;MemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;MemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;MemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;MemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;MemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;MemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;MemoryStream;ToArray;();Argument[this];ReturnValue;taint;manual | | System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | System.IO;MemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | @@ -12463,7 +12461,7 @@ summary | System.IO;RenamedEventArgs;get_OldName;();Argument[this].SyntheticField[System.IO.RenamedEventArgs._oldName];ReturnValue;value;dfc-generated | | System.IO;RenamedEventHandler;BeginInvoke;(System.Object,System.IO.RenamedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO;Stream;CopyTo;(System.IO.Stream);Argument[this];Argument[0];taint;manual | @@ -12475,15 +12473,15 @@ summary | System.IO;Stream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;FlushAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0];taint;manual | | System.IO;Stream;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | -| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0];taint;manual | | System.IO;Stream;Synchronized;(System.IO.Stream);Argument[0];ReturnValue;value;dfc-generated | | System.IO;Stream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | @@ -12494,14 +12492,14 @@ summary | System.IO;Stream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[1];ReturnValue;taint;df-generated | | System.IO;Stream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.IO;StreamReader;Read;();Argument[this];ReturnValue;taint;manual | -| System.IO;StreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StreamReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;StreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StreamReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;StreamReader;ReadLine;();Argument[this];ReturnValue;taint;manual | | System.IO;StreamReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual | | System.IO;StreamReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | @@ -12577,13 +12575,13 @@ summary | System.IO;StreamWriter;get_BaseStream;();Argument[this].SyntheticField[System.IO.StreamWriter._stream];ReturnValue;value;dfc-generated | | System.IO;StreamWriter;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | | System.IO;StringReader;Read;();Argument[this];ReturnValue;taint;manual | -| System.IO;StringReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;StringReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;StringReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;StringReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;StringReader;ReadLine;();Argument[this];ReturnValue;taint;manual | | System.IO;StringReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual | | System.IO;StringReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | @@ -12615,14 +12613,14 @@ summary | System.IO;StringWriter;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);Argument[0];Argument[this];taint;manual | | System.IO;StringWriter;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | | System.IO;TextReader;Read;();Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;TextReader;ReadLine;();Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | @@ -12707,10 +12705,10 @@ summary | System.IO;UnmanagedMemoryStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | -| System.IO;UnmanagedMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;UnmanagedMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;UnmanagedMemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Byte*,System.Int64);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);Argument[0];Argument[this];taint;df-generated | @@ -15118,15 +15116,15 @@ summary | System.Net.Quic;QuicListener;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicListenerOptions;set_ConnectionOptionsCallback;(System.Func>);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.Net.Quic;QuicStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Quic;QuicStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Quic;QuicStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.Net.Quic;QuicStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Quic;QuicStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Quic;QuicStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Net.Quic;QuicStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.Net.Quic;QuicStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.Net.Quic;QuicStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.Net.Quic;QuicStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.Net.Quic;QuicStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -15159,14 +15157,14 @@ summary | System.Net.Security;NegotiateStream;BeginAuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;BeginAuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.Net.Security;NegotiateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Security;NegotiateStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;NegotiateStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.Net.Security;NegotiateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;NegotiateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;NegotiateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Security;NegotiateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Net.Security;NegotiateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.Net.Security;NegotiateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.Net.Security;NegotiateStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;NegotiateStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated | @@ -15212,14 +15210,14 @@ summary | System.Net.Security;SslStream;BeginAuthenticateAsServer;(System.Security.Cryptography.X509Certificates.X509Certificate,System.Boolean,System.Boolean,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;BeginAuthenticateAsServer;(System.Security.Cryptography.X509Certificates.X509Certificate,System.Boolean,System.Security.Authentication.SslProtocols,System.Boolean,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.Net.Security;SslStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.Net.Security;SslStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Security;SslStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Security;SslStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.Net.Security;SslStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;SslStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Security;SslStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Security;SslStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Net.Security;SslStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.Net.Security;SslStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -15247,15 +15245,15 @@ summary | System.Net.Sockets;MulticastOption;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;MulticastOption;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);Argument[1];Argument[this];taint;df-generated | | System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.Net.Sockets;NetworkStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Net.Sockets;NetworkStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.Net.Sockets;NetworkStream;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);Argument[0];Argument[this].SyntheticField[System.Net.Sockets.NetworkStream._streamSocket];value;dfc-generated | -| System.Net.Sockets;NetworkStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.Net.Sockets;NetworkStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.Net.Sockets;NetworkStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Net.Sockets;NetworkStream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.Net.Sockets;NetworkStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.Net.Sockets;NetworkStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.Net.Sockets;NetworkStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.Net.Sockets;NetworkStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -17765,7 +17763,7 @@ summary | System.Security.Cryptography;CngUIPolicy;CngUIPolicy;(System.Security.Cryptography.CngUIProtectionLevels,System.String,System.String,System.String,System.String);Argument[3];Argument[this].Property[System.Security.Cryptography.CngUIPolicy.UseContext];value;dfc-generated | | System.Security.Cryptography;CngUIPolicy;CngUIPolicy;(System.Security.Cryptography.CngUIProtectionLevels,System.String,System.String,System.String,System.String);Argument[4];Argument[this].Property[System.Security.Cryptography.CngUIPolicy.CreationTitle];value;dfc-generated | | System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.Security.Cryptography;CryptoStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.Security.Cryptography;CryptoStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual | @@ -17774,9 +17772,9 @@ summary | System.Security.Cryptography;CryptoStream;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);Argument[1];Argument[this];taint;df-generated | | System.Security.Cryptography;CryptoStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography;CryptoStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.Security.Cryptography;CryptoStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.Security.Cryptography;CryptoStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.Security.Cryptography;CryptoStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | | System.Security.Cryptography;CryptoStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated | @@ -20882,24 +20880,33 @@ summary | System.Xml;XmlDictionaryReader;CreateDictionaryReader;(System.Xml.XmlReader);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.IO.Stream,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;(System.Int32);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadElementContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlDictionaryReader;ReadString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;get_Quotas;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryString;ToString;();Argument[this].SyntheticField[System.Xml.XmlDictionaryString._value];ReturnValue;value;dfc-generated | @@ -21261,30 +21268,28 @@ summary | System.Xml;XmlNodeList;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Xml;XmlNodeList;Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeList;get_ItemOf;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlNodeReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlNodeReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlNodeReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlNodeReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlNodeReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;XmlNodeReader;(System.Xml.XmlNode);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlNodeReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | -| System.Xml;XmlNodeReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlNodeReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlNodeReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | +| System.Xml;XmlNodeReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlNodeReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;CloneNode;(System.Boolean);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;WriteContentTo;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated | @@ -21337,60 +21342,58 @@ summary | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | -| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsObjectAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadOuterXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadValueChunk;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadValueChunkAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;get_Settings;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlReaderSettings;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlReaderSettings;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -21430,43 +21433,44 @@ summary | System.Xml;XmlText;get_ParentNode;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlText;get_PreviousText;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlText;get_Value;();Argument[this];ReturnValue;taint;manual | -| System.Xml;XmlTextReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlTextReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlTextReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlTextReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlTextReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlTextReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlTextReader;ReadBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlTextReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;dfc-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlTextReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlTextReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlTextReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlTextReader;set_XmlResolver;(System.Xml.XmlResolver);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlTextWriter;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -21541,37 +21545,35 @@ summary | System.Xml;XmlUrlResolver;ResolveUri;(System.Uri,System.String);Argument[1];ReturnValue;taint;dfc-generated | | System.Xml;XmlUrlResolver;set_Credentials;(System.Net.ICredentials);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlUrlResolver;set_Proxy;(System.Net.IWebProxy);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlValidatingReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlValidatingReader;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;dfc-generated | +| System.Xml;XmlValidatingReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlValidatingReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;ReadTypedValue;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlValidatingReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlValidatingReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_Reader;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;get_SchemaType;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;get_Schemas;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlValidatingReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlValidatingReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlWhitespace;CloneNode;(System.Boolean);Argument[this];ReturnValue;taint;df-generated | @@ -21887,15 +21889,15 @@ summary | System;Convert;ChangeType;(System.Object,System.Type,System.IFormatProvider);Argument[0];ReturnValue;taint;manual | | System;Convert;ChangeType;(System.Object,System.TypeCode);Argument[0];ReturnValue;taint;manual | | System;Convert;ChangeType;(System.Object,System.TypeCode,System.IFormatProvider);Argument[0];ReturnValue;taint;manual | -| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;taint;manual | -| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue.Element;taint;manual | -| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;taint;manual | -| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue.Element;taint;manual | +| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;manual | +| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue;taint;manual | +| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;manual | +| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue;taint;manual | | System;Convert;GetTypeCode;(System.Object);Argument[0];ReturnValue;taint;manual | | System;Convert;IsDBNull;(System.Object);Argument[0];ReturnValue;taint;manual | -| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3].Element;taint;manual | +| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3];taint;manual | | System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;ReturnValue;taint;manual | -| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3].Element;taint;manual | +| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3];taint;manual | | System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | | System;Convert;ToBase64String;(System.Byte[]);Argument[0].Element;ReturnValue;taint;manual | | System;Convert;ToBase64String;(System.Byte[],System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | @@ -22201,13 +22203,13 @@ summary | System;Convert;ToUInt64;(System.UInt16);Argument[0];ReturnValue;taint;manual | | System;Convert;ToUInt64;(System.UInt32);Argument[0];ReturnValue;taint;manual | | System;Convert;ToUInt64;(System.UInt64);Argument[0];ReturnValue;taint;manual | -| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;taint;manual | +| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1];taint;manual | | System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[2];taint;manual | | System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;ReturnValue;taint;manual | -| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1].Element;taint;manual | +| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1];taint;manual | | System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[2];taint;manual | | System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];ReturnValue;taint;manual | -| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1].Element;taint;manual | +| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1];taint;manual | | System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[2];taint;manual | | System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | | System;Converter;BeginInvoke;(TInput,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -25711,6 +25713,7 @@ neutral | Newtonsoft.Json.Linq;JObject;remove_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);summary;df-generated | | Newtonsoft.Json.Linq;JObject;remove_PropertyChanging;(System.ComponentModel.PropertyChangingEventHandler);summary;df-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;CanResetValue;(System.Object);summary;df-generated | +| Newtonsoft.Json.Linq;JPropertyDescriptor;GetValue;(System.Object);summary;manual | | Newtonsoft.Json.Linq;JPropertyDescriptor;ShouldSerializeValue;(System.Object);summary;df-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;get_ComponentType;();summary;df-generated | | Newtonsoft.Json.Linq;JPropertyDescriptor;get_IsReadOnly;();summary;df-generated | @@ -28808,6 +28811,7 @@ neutral | System.ComponentModel;PropertyDescriptor;GetChildProperties;(System.Object,System.Attribute[]);summary;df-generated | | System.ComponentModel;PropertyDescriptor;GetHashCode;();summary;df-generated | | System.ComponentModel;PropertyDescriptor;GetTypeFromName;(System.String);summary;df-generated | +| System.ComponentModel;PropertyDescriptor;GetValue;(System.Object);summary;manual | | System.ComponentModel;PropertyDescriptor;GetValueChangedHandler;(System.Object);summary;df-generated | | System.ComponentModel;PropertyDescriptor;OnValueChanged;(System.Object,System.EventArgs);summary;df-generated | | System.ComponentModel;PropertyDescriptor;PropertyDescriptor;(System.ComponentModel.MemberDescriptor);summary;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index faf716f4d7b..c885864a31e 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -6727,7 +6727,6 @@ | System.ComponentModel;PropertyChangingEventHandler;BeginInvoke;(System.Object,System.ComponentModel.PropertyChangingEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.ComponentModel;PropertyDescriptor;AddValueChanged;(System.Object,System.EventHandler);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.ComponentModel;PropertyDescriptor;GetEditor;(System.Type);Argument[this];ReturnValue;taint;df-generated | -| System.ComponentModel;PropertyDescriptor;GetValue;(System.Object);Argument[0];ReturnValue;taint;dfc-generated | | System.ComponentModel;PropertyDescriptor;RemoveValueChanged;(System.Object,System.EventHandler);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.ComponentModel;PropertyDescriptor;ResetValue;(System.Object);Argument[this];Argument[0];taint;df-generated | | System.ComponentModel;PropertyDescriptor;SetValue;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | @@ -9285,7 +9284,7 @@ | System.IO;RenamedEventArgs;get_OldName;();Argument[this].SyntheticField[System.IO.RenamedEventArgs._oldName];ReturnValue;value;dfc-generated | | System.IO;RenamedEventHandler;BeginInvoke;(System.Object,System.IO.RenamedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | -| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual | | System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual | | System.IO;Stream;CopyTo;(System.IO.Stream);Argument[this];Argument[0];taint;manual | @@ -9296,15 +9295,15 @@ | System.IO;Stream;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;Stream;FlushAsync;();Argument[this];ReturnValue;taint;df-generated | | System.IO;Stream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | -| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0];taint;manual | | System.IO;Stream;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | -| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0].Element;taint;manual | +| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0];taint;manual | | System.IO;Stream;Synchronized;(System.IO.Stream);Argument[0];ReturnValue;value;dfc-generated | | System.IO;Stream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;Stream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | @@ -9336,14 +9335,14 @@ | System.IO;StringWriter;StringWriter;(System.Text.StringBuilder,System.IFormatProvider);Argument[0];Argument[this];taint;manual | | System.IO;StringWriter;ToString;();Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;Read;();Argument[this];ReturnValue;taint;manual | -| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | -| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | +| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual | | System.IO;TextReader;ReadLine;();Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual | | System.IO;TextReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | @@ -16210,17 +16209,28 @@ | System.Xml;XmlDictionaryReader;CreateDictionaryReader;(System.Xml.XmlReader);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[7];Argument[7].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateMtomReader;(System.IO.Stream,System.Text.Encoding[],System.String,System.Xml.XmlDictionaryReaderQuotas,System.Int32,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[0];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;manual | +| System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Xml.XmlDictionaryReaderQuotas);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsBinHex;(System.Int32);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadContentAsChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value];ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBase64;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlDictionaryReader;ReadElementContentAsBinHex;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlDictionaryReader;ReadElementContentAsUniqueId;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;get_Quotas;();Argument[this];ReturnValue;taint;df-generated | @@ -16503,8 +16513,6 @@ | System.Xml;XmlNodeChangedEventHandler;BeginInvoke;(System.Object,System.Xml.XmlNodeChangedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlNodeList;Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNodeList;get_ItemOf;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlNodeReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | | System.Xml;XmlNodeReader;XmlNodeReader;(System.Xml.XmlNode);Argument[0].Element;Argument[this];taint;df-generated | | System.Xml;XmlNotation;get_PublicId;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlNotation;get_SystemId;();Argument[this];ReturnValue;taint;df-generated | @@ -16539,60 +16547,58 @@ | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.String,System.Xml.XmlReaderSettings,System.Xml.XmlParserContext);Argument[0];ReturnValue;taint;manual | | System.Xml;XmlReader;Create;(System.Xml.XmlReader,System.Xml.XmlReaderSettings);Argument[0];ReturnValue;taint;manual | -| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;GetAttribute;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetAttribute;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;GetValueAsync;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;MoveToAttribute;(System.String);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsObjectAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadContentAsStringAsync;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];Argument[1];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-generated | +| System.Xml;XmlReader;ReadElementContentAs;(System.Type,System.Xml.IXmlNamespaceResolver,System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsAsync;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBase64Async;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsBinHexAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadElementContentAsObject;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsObject;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementContentAsString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadElementString;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadInnerXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadOuterXml;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadOuterXmlAsync;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlReader;ReadString;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadSubtree;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;ReadValueChunk;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;ReadValueChunkAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlReader;get_BaseURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Item;(System.String,System.String);Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_LocalName;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Name;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NameTable;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_NamespaceURI;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_Prefix;();Argument[this];ReturnValue;taint;df-manual | +| System.Xml;XmlReader;get_SchemaInfo;();Argument[this];ReturnValue;value;dfc-manual | | System.Xml;XmlReader;get_Settings;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlReader;get_Value;();Argument[this];ReturnValue;taint;df-manual | | System.Xml;XmlReader;get_XmlLang;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlReaderSettings;add_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlReaderSettings;remove_ValidationEventHandler;(System.Xml.Schema.ValidationEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -16608,21 +16614,25 @@ | System.Xml;XmlSecureResolver;GetEntityAsync;(System.Uri,System.String,System.Type);Argument[0];ReturnValue.Property[System.Threading.Tasks.Task`1.Result];taint;df-generated | | System.Xml;XmlSecureResolver;GetEntityAsync;(System.Uri,System.String,System.Type);Argument[0];ReturnValue.Property[System.Threading.Tasks.Task`1.Result];taint;dfc-generated | | System.Xml;XmlText;SplitText;(System.Int32);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];value;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];taint;dfc-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | -| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];value;dfc-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_BaseURI;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._reportedBaseUri];ReturnValue;value;dfc-generated | +| System.Xml;XmlTextReader;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;GetRemainder;();Argument[this];ReturnValue;taint;manual | +| System.Xml;XmlTextReader;ReadBase64;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadBinHex;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;ReadChars;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.Stream,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.IO.TextReader,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[0];Argument[this];taint;manual | +| System.Xml;XmlTextReader;XmlTextReader;(System.Xml.XmlNameTable);Argument[0];Argument[this];taint;manual | | System.Xml;XmlTextReader;get_Encoding;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;df-generated | -| System.Xml;XmlTextReader;get_NameTable;();Argument[this].SyntheticField[System.Xml.XmlTextReader._impl].SyntheticField[System.Xml.XmlTextReaderImpl._nameTable];ReturnValue;value;dfc-generated | | System.Xml;XmlTextReader;set_XmlResolver;(System.Xml.XmlResolver);Argument[0];Argument[this];taint;df-generated | | System.Xml;XmlTextWriter;WriteDocType;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter];taint;df-generated | | System.Xml;XmlTextWriter;WriteDocType;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter];taint;dfc-generated | @@ -16653,8 +16663,6 @@ | System.Xml;XmlTextWriter;get_BaseStream;();Argument[this].SyntheticField[System.Xml.XmlTextWriter._textWriter].Property[System.IO.StreamWriter.BaseStream];ReturnValue;value;dfc-generated | | System.Xml;XmlUrlResolver;GetEntity;(System.Uri,System.String,System.Type);Argument[0].Property[System.Uri.LocalPath];ReturnValue;taint;dfc-generated | | System.Xml;XmlUrlResolver;set_Proxy;(System.Net.IWebProxy);Argument[0];Argument[this];taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;df-generated | -| System.Xml;XmlValidatingReader;ReadString;();Argument[this].Property[System.Xml.XmlReader.Value];ReturnValue;taint;dfc-generated | | System.Xml;XmlValidatingReader;ReadTypedValue;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.IO.Stream,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | | System.Xml;XmlValidatingReader;XmlValidatingReader;(System.String,System.Xml.XmlNodeType,System.Xml.XmlParserContext);Argument[2];Argument[this];taint;df-generated | @@ -16908,15 +16916,15 @@ | System;Convert;ChangeType;(System.Object,System.Type,System.IFormatProvider);Argument[0];ReturnValue;taint;manual | | System;Convert;ChangeType;(System.Object,System.TypeCode);Argument[0];ReturnValue;taint;manual | | System;Convert;ChangeType;(System.Object,System.TypeCode,System.IFormatProvider);Argument[0];ReturnValue;taint;manual | -| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;taint;manual | -| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue.Element;taint;manual | -| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;taint;manual | -| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue.Element;taint;manual | +| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;manual | +| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue;taint;manual | +| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;manual | +| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue;taint;manual | | System;Convert;GetTypeCode;(System.Object);Argument[0];ReturnValue;taint;manual | | System;Convert;IsDBNull;(System.Object);Argument[0];ReturnValue;taint;manual | -| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3].Element;taint;manual | +| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3];taint;manual | | System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;ReturnValue;taint;manual | -| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3].Element;taint;manual | +| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3];taint;manual | | System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | | System;Convert;ToBase64String;(System.Byte[]);Argument[0].Element;ReturnValue;taint;manual | | System;Convert;ToBase64String;(System.Byte[],System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | @@ -17222,13 +17230,13 @@ | System;Convert;ToUInt64;(System.UInt16);Argument[0];ReturnValue;taint;manual | | System;Convert;ToUInt64;(System.UInt32);Argument[0];ReturnValue;taint;manual | | System;Convert;ToUInt64;(System.UInt64);Argument[0];ReturnValue;taint;manual | -| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;taint;manual | +| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1];taint;manual | | System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[2];taint;manual | | System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;ReturnValue;taint;manual | -| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1].Element;taint;manual | +| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1];taint;manual | | System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[2];taint;manual | | System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];ReturnValue;taint;manual | -| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1].Element;taint;manual | +| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1];taint;manual | | System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[2];taint;manual | | System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | | System;Converter;BeginInvoke;(TInput,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected index 005d84b1c97..ed80fa1e8b3 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected @@ -13,7 +13,9 @@ | SSA.cs:98:15:98:22 | access to local variable ssaSink4 | | SSA.cs:124:15:124:34 | access to field SsaFieldSink1 | | SSA.cs:180:15:180:22 | access to local variable ssaSink5 | -| Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | -| Splitting.cs:12:15:12:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | +| Splitting.cs:8:19:8:19 | access to local variable x | +| Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:29:19:29:19 | access to local variable x | diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 7dc5e3e4636..6bf236135a2 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -50,32 +50,24 @@ | LocalDataFlow.cs:76:13:76:17 | access to local variable sink6 | LocalDataFlow.cs:76:13:76:27 | SSA def(sink6) | | LocalDataFlow.cs:76:13:76:27 | SSA def(sink6) | LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | | LocalDataFlow.cs:76:22:76:26 | access to local variable sink5 | LocalDataFlow.cs:76:13:76:17 | access to local variable sink6 | -| LocalDataFlow.cs:77:15:77:19 | [post] access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | -| LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | +| LocalDataFlow.cs:77:15:77:19 | [post] access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | +| LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | | LocalDataFlow.cs:80:9:80:16 | access to local variable nonSink0 | LocalDataFlow.cs:80:9:80:29 | SSA def(nonSink0) | | LocalDataFlow.cs:80:9:80:29 | SSA def(nonSink0) | LocalDataFlow.cs:81:15:81:22 | access to local variable nonSink0 | | LocalDataFlow.cs:80:21:80:28 | access to local variable nonSink0 | LocalDataFlow.cs:80:9:80:16 | access to local variable nonSink0 | -| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | [b (line 48): false] SSA def(sink7) | -| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | [b (line 48): true] SSA def(sink7) | -| LocalDataFlow.cs:84:13:84:35 | [b (line 48): false] SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | [b (line 48): false] access to local variable sink7 | -| LocalDataFlow.cs:84:13:84:35 | [b (line 48): true] SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | [b (line 48): true] access to local variable sink7 | -| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | [b (line 48): false] access to parameter b | -| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | [b (line 48): true] access to parameter b | -| LocalDataFlow.cs:84:21:84:35 | [b (line 48): false] ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | -| LocalDataFlow.cs:84:21:84:35 | [b (line 48): true] ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | -| LocalDataFlow.cs:84:25:84:27 | [b (line 48): true] "a" | LocalDataFlow.cs:84:21:84:35 | [b (line 48): true] ... ? ... : ... | -| LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | LocalDataFlow.cs:84:21:84:35 | [b (line 48): false] ... ? ... : ... | -| LocalDataFlow.cs:85:15:85:19 | [b (line 48): false] access to local variable sink7 | LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [b (line 48): true] access to local variable sink7 | LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [post] [b (line 48): false] access to local variable sink7 | LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [post] [b (line 48): true] access to local variable sink7 | LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | +| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | SSA def(sink7) | +| LocalDataFlow.cs:84:13:84:35 | SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | access to local variable sink7 | +| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | access to parameter b | +| LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | +| LocalDataFlow.cs:84:25:84:27 | "a" | LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | +| LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | +| LocalDataFlow.cs:85:15:85:19 | [post] access to local variable sink7 | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | +| LocalDataFlow.cs:85:15:85:19 | access to local variable sink7 | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:88:9:88:16 | access to local variable nonSink0 | LocalDataFlow.cs:88:9:88:36 | SSA def(nonSink0) | | LocalDataFlow.cs:88:9:88:36 | SSA def(nonSink0) | LocalDataFlow.cs:89:15:89:22 | access to local variable nonSink0 | | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | LocalDataFlow.cs:88:9:88:16 | access to local variable nonSink0 | | LocalDataFlow.cs:88:24:88:28 | "abc" | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | -| LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:88:32:88:36 | "def" | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | -| LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:89:15:89:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:96:32:96:39 | access to local variable nonSink0 | | LocalDataFlow.cs:89:15:89:22 | access to local variable nonSink0 | LocalDataFlow.cs:96:32:96:39 | access to local variable nonSink0 | | LocalDataFlow.cs:92:13:92:17 | access to local variable sink8 | LocalDataFlow.cs:92:13:92:33 | SSA def(sink8) | @@ -930,115 +922,85 @@ | Splitting.cs:3:28:3:34 | SSA param(tainted) | Splitting.cs:5:17:5:23 | access to parameter tainted | | Splitting.cs:3:28:3:34 | tainted | Splitting.cs:3:28:3:34 | SSA param(tainted) | | Splitting.cs:5:13:5:13 | access to local variable x | Splitting.cs:5:13:5:23 | SSA def(x) | -| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | -| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:12:15:12:15 | [b (line 3): false] access to local variable x | +| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:6:13:6:13 | [input] SSA phi read(x) | +| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:8:19:8:19 | access to local variable x | | Splitting.cs:5:17:5:23 | access to parameter tainted | Splitting.cs:5:13:5:13 | access to local variable x | -| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | [b (line 3): false] access to parameter b | -| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | [b (line 3): true] access to parameter b | -| Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:19:8:19 | [post] [b (line 3): true] access to local variable x | Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | -| Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | Splitting.cs:12:15:12:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:12:15:12:15 | [b (line 3): true] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | -| Splitting.cs:12:15:12:15 | [post] [b (line 3): true] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:6:13:6:13 | [input] SSA phi read(x) | Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | access to parameter b | +| Splitting.cs:8:19:8:19 | [post] access to local variable x | Splitting.cs:9:17:9:17 | access to local variable x | +| Splitting.cs:8:19:8:19 | access to local variable x | Splitting.cs:9:17:9:17 | access to local variable x | +| Splitting.cs:9:17:9:17 | access to local variable x | Splitting.cs:9:17:9:25 | [input] SSA phi read(x) | +| Splitting.cs:9:17:9:25 | [input] SSA phi read(x) | Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:12:15:12:15 | [post] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:12:15:12:15 | access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | | Splitting.cs:17:18:17:18 | SSA param(b) | Splitting.cs:20:13:20:13 | access to parameter b | | Splitting.cs:17:18:17:18 | b | Splitting.cs:17:18:17:18 | SSA param(b) | | Splitting.cs:19:13:19:13 | access to local variable x | Splitting.cs:19:13:19:18 | SSA def(x) | -| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:22:19:22:19 | [b (line 17): true] access to local variable x | -| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:25:15:25:15 | [b (line 17): false] access to local variable x | +| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:20:13:20:13 | [input] SSA phi(x) | +| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:22:19:22:19 | access to local variable x | | Splitting.cs:19:17:19:18 | "" | Splitting.cs:19:13:19:13 | access to local variable x | -| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | [b (line 17): false] access to parameter b | -| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | [b (line 17): true] access to parameter b | -| Splitting.cs:23:13:23:13 | access to local variable x | Splitting.cs:23:13:23:30 | [b (line 17): true] SSA def(x) | -| Splitting.cs:23:13:23:30 | [b (line 17): true] SSA def(x) | Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | -| Splitting.cs:23:17:23:30 | [b (line 17): true] "taint source" | Splitting.cs:23:13:23:13 | access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): false] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [post] [b (line 17): false] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [post] [b (line 17): true] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:20:13:20:13 | [input] SSA phi(x) | Splitting.cs:25:15:25:15 | access to local variable x | +| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | access to parameter b | +| Splitting.cs:23:13:23:13 | access to local variable x | Splitting.cs:23:13:23:30 | SSA def(x) | +| Splitting.cs:23:13:23:30 | SSA def(x) | Splitting.cs:25:15:25:15 | access to local variable x | +| Splitting.cs:23:17:23:30 | "taint source" | Splitting.cs:23:13:23:13 | access to local variable x | +| Splitting.cs:25:15:25:15 | [post] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | [post] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | | Splitting.cs:32:18:32:18 | SSA param(b) | Splitting.cs:35:13:35:13 | access to parameter b | | Splitting.cs:32:18:32:18 | b | Splitting.cs:32:18:32:18 | SSA param(b) | | Splitting.cs:34:17:34:18 | "" | Splitting.cs:34:13:34:13 | access to local variable x | -| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | [b (line 32): false] access to parameter b | -| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | [b (line 32): true] access to parameter b | -| Splitting.cs:36:17:36:19 | [b (line 32): true] "a" | Splitting.cs:36:13:36:13 | access to local variable x | -| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | [b (line 32): false] SSA def(x) | -| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | [b (line 32): true] SSA def(x) | -| Splitting.cs:37:9:37:15 | [b (line 32): false] SSA def(x) | Splitting.cs:38:15:38:15 | [b (line 32): false] access to local variable x | -| Splitting.cs:37:9:37:15 | [b (line 32): true] SSA def(x) | Splitting.cs:38:15:38:15 | [b (line 32): true] access to local variable x | -| Splitting.cs:37:13:37:15 | [b (line 32): false] "b" | Splitting.cs:37:9:37:9 | access to local variable x | -| Splitting.cs:37:13:37:15 | [b (line 32): true] "b" | Splitting.cs:37:9:37:9 | access to local variable x | -| Splitting.cs:38:15:38:15 | [b (line 32): false] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | -| Splitting.cs:38:15:38:15 | [b (line 32): true] access to local variable x | Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | -| Splitting.cs:38:15:38:15 | [post] [b (line 32): false] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | -| Splitting.cs:38:15:38:15 | [post] [b (line 32): true] access to local variable x | Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:15:39:15 | [b (line 32): false] access to parameter b | Splitting.cs:42:13:42:13 | [b (line 32): false] access to parameter b | -| Splitting.cs:39:15:39:15 | [b (line 32): true] access to parameter b | Splitting.cs:42:13:42:13 | [b (line 32): true] access to parameter b | -| Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | Splitting.cs:39:15:39:25 | [b (line 32): true] ... ? ... : ... | -| Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:19:39:19 | [post] [b (line 32): true] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:23:39:25 | [b (line 32): false] "c" | Splitting.cs:39:15:39:25 | [b (line 32): false] ... ? ... : ... | -| Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | Splitting.cs:40:15:40:23 | [b (line 32): false] (...) ... | -| Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | Splitting.cs:40:15:40:23 | [b (line 32): true] (...) ... | -| Splitting.cs:41:19:41:21 | [b (line 32): false] "d" | Splitting.cs:41:15:41:15 | access to local variable x | -| Splitting.cs:41:19:41:21 | [b (line 32): false] "d" | Splitting.cs:41:15:41:21 | [b (line 32): false] ... = ... | -| Splitting.cs:41:19:41:21 | [b (line 32): true] "d" | Splitting.cs:41:15:41:15 | access to local variable x | -| Splitting.cs:41:19:41:21 | [b (line 32): true] "d" | Splitting.cs:41:15:41:21 | [b (line 32): true] ... = ... | +| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | access to parameter b | +| Splitting.cs:36:17:36:19 | "a" | Splitting.cs:36:13:36:13 | access to local variable x | +| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | SSA def(x) | +| Splitting.cs:37:9:37:15 | SSA def(x) | Splitting.cs:38:15:38:15 | access to local variable x | +| Splitting.cs:37:13:37:15 | "b" | Splitting.cs:37:9:37:9 | access to local variable x | +| Splitting.cs:38:15:38:15 | [post] access to local variable x | Splitting.cs:39:19:39:19 | access to local variable x | +| Splitting.cs:38:15:38:15 | [post] access to local variable x | Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | +| Splitting.cs:38:15:38:15 | access to local variable x | Splitting.cs:39:19:39:19 | access to local variable x | +| Splitting.cs:38:15:38:15 | access to local variable x | Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | +| Splitting.cs:39:15:39:15 | access to parameter b | Splitting.cs:42:13:42:13 | access to parameter b | +| Splitting.cs:39:19:39:19 | [post] access to local variable x | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:39:19:39:19 | access to local variable x | Splitting.cs:39:15:39:25 | ... ? ... : ... | +| Splitting.cs:39:19:39:19 | access to local variable x | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:39:23:39:25 | "c" | Splitting.cs:39:15:39:25 | ... ? ... : ... | +| Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:40:23:40:23 | access to local variable x | Splitting.cs:40:15:40:23 | (...) ... | +| Splitting.cs:41:19:41:21 | "d" | Splitting.cs:41:15:41:15 | access to local variable x | +| Splitting.cs:41:19:41:21 | "d" | Splitting.cs:41:15:41:21 | ... = ... | | Splitting.cs:46:18:46:18 | SSA param(b) | Splitting.cs:49:13:49:13 | access to parameter b | | Splitting.cs:46:18:46:18 | b | Splitting.cs:46:18:46:18 | SSA param(b) | | Splitting.cs:48:13:48:13 | access to local variable x | Splitting.cs:48:13:48:18 | SSA def(x) | -| Splitting.cs:48:13:48:18 | SSA def(x) | Splitting.cs:53:13:53:13 | [b (line 46): false] access to local variable x | +| Splitting.cs:48:13:48:18 | SSA def(x) | Splitting.cs:53:13:53:13 | access to local variable x | | Splitting.cs:48:17:48:18 | "" | Splitting.cs:48:13:48:13 | access to local variable x | -| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | [b (line 46): false] access to parameter b | -| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | [b (line 46): true] access to parameter b | -| Splitting.cs:50:13:50:13 | access to local variable x | Splitting.cs:50:13:50:21 | [b (line 46): true] SSA def(x) | -| Splitting.cs:50:13:50:21 | [b (line 46): true] SSA def(x) | Splitting.cs:53:13:53:13 | [b (line 46): true] access to local variable x | -| Splitting.cs:50:17:50:21 | [b (line 46): true] "abc" | Splitting.cs:50:13:50:13 | access to local variable x | -| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | [b (line 46): false] SSA def(y) | -| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | [b (line 46): true] SSA def(y) | -| Splitting.cs:51:13:51:36 | [b (line 46): false] SSA def(y) | Splitting.cs:52:9:52:9 | [b (line 46): false] access to local variable y | -| Splitting.cs:51:13:51:36 | [b (line 46): true] SSA def(y) | Splitting.cs:52:9:52:9 | [b (line 46): true] access to local variable y | -| Splitting.cs:51:17:51:36 | [b (line 46): false] array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | -| Splitting.cs:51:17:51:36 | [b (line 46): true] array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | -| Splitting.cs:51:30:51:36 | [b (line 46): false] { ..., ... } | Splitting.cs:51:17:51:36 | [b (line 46): false] array creation of type String[] | -| Splitting.cs:51:30:51:36 | [b (line 46): true] { ..., ... } | Splitting.cs:51:17:51:36 | [b (line 46): true] array creation of type String[] | -| Splitting.cs:52:9:52:9 | [b (line 46): false] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:52:9:52:9 | [b (line 46): true] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:52:9:52:9 | [post] [b (line 46): false] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:52:9:52:9 | [post] [b (line 46): true] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:52:16:52:18 | [b (line 46): false] "b" | Splitting.cs:52:9:52:12 | access to array element | -| Splitting.cs:52:16:52:18 | [b (line 46): true] "b" | Splitting.cs:52:9:52:12 | access to array element | -| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | [b (line 46): false] SSA def(x) | -| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | [b (line 46): true] SSA def(x) | -| Splitting.cs:53:9:53:20 | [b (line 46): false] SSA def(x) | Splitting.cs:54:17:54:17 | [b (line 46): false] access to local variable x | -| Splitting.cs:53:9:53:20 | [b (line 46): true] SSA def(x) | Splitting.cs:54:17:54:17 | [b (line 46): true] access to local variable x | -| Splitting.cs:53:13:53:20 | [b (line 46): false] ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | -| Splitting.cs:53:13:53:20 | [b (line 46): true] ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | -| Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | [b (line 46): false] SSA def(z) | -| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | [b (line 46): true] SSA def(z) | -| Splitting.cs:54:13:54:23 | [b (line 46): false] SSA def(z) | Splitting.cs:55:14:55:14 | [b (line 46): false] access to local variable z | -| Splitting.cs:54:13:54:23 | [b (line 46): true] SSA def(z) | Splitting.cs:55:14:55:14 | [b (line 46): true] access to local variable z | -| Splitting.cs:54:17:54:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | -| Splitting.cs:54:17:54:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | -| Splitting.cs:54:17:54:23 | [b (line 46): false] ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | -| Splitting.cs:54:17:54:23 | [b (line 46): true] ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | -| Splitting.cs:55:13:55:14 | [b (line 46): false] !... | Splitting.cs:55:9:55:9 | access to local variable z | -| Splitting.cs:55:13:55:14 | [b (line 46): true] !... | Splitting.cs:55:9:55:9 | access to local variable z | -| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | [b (line 46): false] SSA def(x) | -| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | [b (line 46): true] SSA def(x) | -| Splitting.cs:56:9:56:19 | [b (line 46): false] SSA def(x) | Splitting.cs:57:14:57:14 | [b (line 46): false] access to local variable x | -| Splitting.cs:56:9:56:19 | [b (line 46): true] SSA def(x) | Splitting.cs:57:14:57:14 | [b (line 46): true] access to local variable x | -| Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | Splitting.cs:56:9:56:9 | access to local variable x | -| Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | Splitting.cs:56:9:56:9 | access to local variable x | -| Splitting.cs:57:13:57:24 | [b (line 46): false] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | -| Splitting.cs:57:13:57:24 | [b (line 46): true] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | -| Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y | -| Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): true] access to local variable y | -| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | -| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | -| Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): false] access to local variable s | -| Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): true] access to local variable s | +| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | access to parameter b | +| Splitting.cs:50:13:50:13 | access to local variable x | Splitting.cs:50:13:50:21 | SSA def(x) | +| Splitting.cs:50:13:50:21 | SSA def(x) | Splitting.cs:53:13:53:13 | access to local variable x | +| Splitting.cs:50:17:50:21 | "abc" | Splitting.cs:50:13:50:13 | access to local variable x | +| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | SSA def(y) | +| Splitting.cs:51:13:51:36 | SSA def(y) | Splitting.cs:52:9:52:9 | access to local variable y | +| Splitting.cs:51:17:51:36 | array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | +| Splitting.cs:51:30:51:36 | { ..., ... } | Splitting.cs:51:17:51:36 | array creation of type String[] | +| Splitting.cs:52:9:52:9 | [post] access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | +| Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | +| Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:12 | access to array element | +| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | SSA def(x) | +| Splitting.cs:53:9:53:20 | SSA def(x) | Splitting.cs:54:17:54:17 | access to local variable x | +| Splitting.cs:53:13:53:20 | ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | +| Splitting.cs:53:17:53:17 | access to local variable y | Splitting.cs:57:17:57:17 | access to local variable y | +| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | SSA def(z) | +| Splitting.cs:54:13:54:23 | SSA def(z) | Splitting.cs:55:14:55:14 | access to local variable z | +| Splitting.cs:54:17:54:17 | access to local variable x | Splitting.cs:56:17:56:17 | access to local variable x | +| Splitting.cs:54:17:54:23 | ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | +| Splitting.cs:55:13:55:14 | !... | Splitting.cs:55:9:55:9 | access to local variable z | +| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | SSA def(x) | +| Splitting.cs:56:9:56:19 | SSA def(x) | Splitting.cs:57:14:57:14 | access to local variable x | +| Splitting.cs:56:13:56:19 | $"..." | Splitting.cs:56:9:56:9 | access to local variable x | +| Splitting.cs:57:13:57:24 | access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | +| Splitting.cs:57:17:57:17 | access to local variable y | Splitting.cs:58:27:58:27 | access to local variable y | +| Splitting.cs:58:22:58:22 | SSA def(s) | Splitting.cs:59:19:59:19 | access to local variable s | +| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | SSA def(s) | | UseUseExplosion.cs:21:10:21:10 | SSA entry def(this.Prop) | UseUseExplosion.cs:24:13:24:16 | access to property Prop | | UseUseExplosion.cs:21:10:21:10 | this | UseUseExplosion.cs:24:13:24:16 | this access | | UseUseExplosion.cs:23:13:23:13 | access to local variable x | UseUseExplosion.cs:23:13:23:17 | SSA def(x) | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected index 37988a13066..372d0bfb3e1 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected @@ -2,7 +2,7 @@ | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | | LocalDataFlow.cs:69:15:69:19 | access to local variable sink5 | | LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | -| LocalDataFlow.cs:85:15:85:19 | [b (line 48): false] access to local variable sink7 | +| LocalDataFlow.cs:85:15:85:19 | access to local variable sink7 | | LocalDataFlow.cs:93:15:93:19 | access to local variable sink8 | | LocalDataFlow.cs:101:15:101:19 | access to local variable sink9 | | LocalDataFlow.cs:109:15:109:20 | access to local variable sink15 | @@ -51,7 +51,9 @@ | SSA.cs:98:15:98:22 | access to local variable ssaSink4 | | SSA.cs:124:15:124:34 | access to field SsaFieldSink1 | | SSA.cs:180:15:180:22 | access to local variable ssaSink5 | -| Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | -| Splitting.cs:12:15:12:15 | [b (line 3): false] access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | +| Splitting.cs:8:19:8:19 | access to local variable x | +| Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:29:19:29:19 | access to local variable x | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index 360c0abd82d..1e9e48f5456 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -58,32 +58,24 @@ | LocalDataFlow.cs:76:13:76:17 | access to local variable sink6 | LocalDataFlow.cs:76:13:76:27 | SSA def(sink6) | | LocalDataFlow.cs:76:13:76:27 | SSA def(sink6) | LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | | LocalDataFlow.cs:76:22:76:26 | access to local variable sink5 | LocalDataFlow.cs:76:13:76:17 | access to local variable sink6 | -| LocalDataFlow.cs:77:15:77:19 | [post] access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | -| LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | +| LocalDataFlow.cs:77:15:77:19 | [post] access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | +| LocalDataFlow.cs:77:15:77:19 | access to local variable sink6 | LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | | LocalDataFlow.cs:80:9:80:16 | access to local variable nonSink0 | LocalDataFlow.cs:80:9:80:29 | SSA def(nonSink0) | | LocalDataFlow.cs:80:9:80:29 | SSA def(nonSink0) | LocalDataFlow.cs:81:15:81:22 | access to local variable nonSink0 | | LocalDataFlow.cs:80:21:80:28 | access to local variable nonSink0 | LocalDataFlow.cs:80:9:80:16 | access to local variable nonSink0 | -| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | [b (line 48): false] SSA def(sink7) | -| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | [b (line 48): true] SSA def(sink7) | -| LocalDataFlow.cs:84:13:84:35 | [b (line 48): false] SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | [b (line 48): false] access to local variable sink7 | -| LocalDataFlow.cs:84:13:84:35 | [b (line 48): true] SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | [b (line 48): true] access to local variable sink7 | -| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | [b (line 48): false] access to parameter b | -| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | [b (line 48): true] access to parameter b | -| LocalDataFlow.cs:84:21:84:35 | [b (line 48): false] ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | -| LocalDataFlow.cs:84:21:84:35 | [b (line 48): true] ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | -| LocalDataFlow.cs:84:25:84:27 | [b (line 48): true] "a" | LocalDataFlow.cs:84:21:84:35 | [b (line 48): true] ... ? ... : ... | -| LocalDataFlow.cs:84:31:84:35 | [b (line 48): false] access to local variable sink6 | LocalDataFlow.cs:84:21:84:35 | [b (line 48): false] ... ? ... : ... | -| LocalDataFlow.cs:85:15:85:19 | [b (line 48): false] access to local variable sink7 | LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [b (line 48): true] access to local variable sink7 | LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [post] [b (line 48): false] access to local variable sink7 | LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | -| LocalDataFlow.cs:85:15:85:19 | [post] [b (line 48): true] access to local variable sink7 | LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | +| LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | LocalDataFlow.cs:84:13:84:35 | SSA def(sink7) | +| LocalDataFlow.cs:84:13:84:35 | SSA def(sink7) | LocalDataFlow.cs:85:15:85:19 | access to local variable sink7 | +| LocalDataFlow.cs:84:21:84:21 | access to parameter b | LocalDataFlow.cs:88:20:88:20 | access to parameter b | +| LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | LocalDataFlow.cs:84:13:84:17 | access to local variable sink7 | +| LocalDataFlow.cs:84:25:84:27 | "a" | LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | +| LocalDataFlow.cs:84:31:84:35 | access to local variable sink6 | LocalDataFlow.cs:84:21:84:35 | ... ? ... : ... | +| LocalDataFlow.cs:85:15:85:19 | [post] access to local variable sink7 | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | +| LocalDataFlow.cs:85:15:85:19 | access to local variable sink7 | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:88:9:88:16 | access to local variable nonSink0 | LocalDataFlow.cs:88:9:88:36 | SSA def(nonSink0) | | LocalDataFlow.cs:88:9:88:36 | SSA def(nonSink0) | LocalDataFlow.cs:89:15:89:22 | access to local variable nonSink0 | | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | LocalDataFlow.cs:88:9:88:16 | access to local variable nonSink0 | | LocalDataFlow.cs:88:24:88:28 | "abc" | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | -| LocalDataFlow.cs:88:24:88:28 | [input] SSA phi(sink7) | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:88:32:88:36 | "def" | LocalDataFlow.cs:88:20:88:36 | ... ? ... : ... | -| LocalDataFlow.cs:88:32:88:36 | [input] SSA phi(sink7) | LocalDataFlow.cs:92:29:92:33 | access to local variable sink7 | | LocalDataFlow.cs:89:15:89:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:96:32:96:39 | access to local variable nonSink0 | | LocalDataFlow.cs:89:15:89:22 | access to local variable nonSink0 | LocalDataFlow.cs:96:32:96:39 | access to local variable nonSink0 | | LocalDataFlow.cs:92:13:92:17 | access to local variable sink8 | LocalDataFlow.cs:92:13:92:33 | SSA def(sink8) | @@ -1060,138 +1052,97 @@ | Splitting.cs:3:28:3:34 | SSA param(tainted) | Splitting.cs:5:17:5:23 | access to parameter tainted | | Splitting.cs:3:28:3:34 | tainted | Splitting.cs:3:28:3:34 | SSA param(tainted) | | Splitting.cs:5:13:5:13 | access to local variable x | Splitting.cs:5:13:5:23 | SSA def(x) | -| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | -| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:12:15:12:15 | [b (line 3): false] access to local variable x | +| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:6:13:6:13 | [input] SSA phi read(x) | +| Splitting.cs:5:13:5:23 | SSA def(x) | Splitting.cs:8:19:8:19 | access to local variable x | | Splitting.cs:5:17:5:23 | access to parameter tainted | Splitting.cs:5:13:5:13 | access to local variable x | -| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | [b (line 3): false] access to parameter b | -| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | [b (line 3): true] access to parameter b | -| Splitting.cs:8:19:8:19 | [b (line 3): true] access to local variable x | Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | -| Splitting.cs:8:19:8:19 | [post] [b (line 3): true] access to local variable x | Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | -| Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | Splitting.cs:9:17:9:25 | [b (line 3): true] ... == ... | -| Splitting.cs:9:17:9:17 | [b (line 3): true] access to local variable x | Splitting.cs:12:15:12:15 | [b (line 3): true] access to local variable x | -| Splitting.cs:12:15:12:15 | [b (line 3): true] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | -| Splitting.cs:12:15:12:15 | [post] [b (line 3): true] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:6:13:6:13 | [input] SSA phi read(x) | Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:13:13:13:13 | access to parameter b | +| Splitting.cs:8:19:8:19 | [post] access to local variable x | Splitting.cs:9:17:9:17 | access to local variable x | +| Splitting.cs:8:19:8:19 | access to local variable x | Splitting.cs:9:17:9:17 | access to local variable x | +| Splitting.cs:9:17:9:17 | access to local variable x | Splitting.cs:9:17:9:25 | ... == ... | +| Splitting.cs:9:17:9:17 | access to local variable x | Splitting.cs:9:17:9:25 | [input] SSA phi read(x) | +| Splitting.cs:9:17:9:25 | [input] SSA phi read(x) | Splitting.cs:12:15:12:15 | access to local variable x | +| Splitting.cs:12:15:12:15 | [post] access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | +| Splitting.cs:12:15:12:15 | access to local variable x | Splitting.cs:14:19:14:19 | access to local variable x | | Splitting.cs:17:18:17:18 | SSA param(b) | Splitting.cs:20:13:20:13 | access to parameter b | | Splitting.cs:17:18:17:18 | b | Splitting.cs:17:18:17:18 | SSA param(b) | | Splitting.cs:19:13:19:13 | access to local variable x | Splitting.cs:19:13:19:18 | SSA def(x) | -| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:22:19:22:19 | [b (line 17): true] access to local variable x | -| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:25:15:25:15 | [b (line 17): false] access to local variable x | +| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:20:13:20:13 | [input] SSA phi(x) | +| Splitting.cs:19:13:19:18 | SSA def(x) | Splitting.cs:22:19:22:19 | access to local variable x | | Splitting.cs:19:17:19:18 | "" | Splitting.cs:19:13:19:13 | access to local variable x | -| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | [b (line 17): false] access to parameter b | -| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | [b (line 17): true] access to parameter b | -| Splitting.cs:23:13:23:13 | access to local variable x | Splitting.cs:23:13:23:30 | [b (line 17): true] SSA def(x) | -| Splitting.cs:23:13:23:30 | [b (line 17): true] SSA def(x) | Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | -| Splitting.cs:23:17:23:30 | [b (line 17): true] "taint source" | Splitting.cs:23:13:23:13 | access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): false] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [b (line 17): true] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [post] [b (line 17): false] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | -| Splitting.cs:25:15:25:15 | [post] [b (line 17): true] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:20:13:20:13 | [input] SSA phi(x) | Splitting.cs:25:15:25:15 | access to local variable x | +| Splitting.cs:20:13:20:13 | access to parameter b | Splitting.cs:26:13:26:13 | access to parameter b | +| Splitting.cs:23:13:23:13 | access to local variable x | Splitting.cs:23:13:23:30 | SSA def(x) | +| Splitting.cs:23:13:23:30 | SSA def(x) | Splitting.cs:25:15:25:15 | access to local variable x | +| Splitting.cs:23:17:23:30 | "taint source" | Splitting.cs:23:13:23:13 | access to local variable x | +| Splitting.cs:25:15:25:15 | [post] access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | [post] access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | Splitting.cs:27:19:27:19 | access to local variable x | +| Splitting.cs:25:15:25:15 | access to local variable x | Splitting.cs:29:19:29:19 | access to local variable x | | Splitting.cs:32:18:32:18 | SSA param(b) | Splitting.cs:35:13:35:13 | access to parameter b | | Splitting.cs:32:18:32:18 | b | Splitting.cs:32:18:32:18 | SSA param(b) | | Splitting.cs:34:17:34:18 | "" | Splitting.cs:34:13:34:13 | access to local variable x | -| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | [b (line 32): false] access to parameter b | -| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | [b (line 32): true] access to parameter b | -| Splitting.cs:36:17:36:19 | [b (line 32): true] "a" | Splitting.cs:36:13:36:13 | access to local variable x | -| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | [b (line 32): false] SSA def(x) | -| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | [b (line 32): true] SSA def(x) | -| Splitting.cs:37:9:37:15 | [b (line 32): false] SSA def(x) | Splitting.cs:38:15:38:15 | [b (line 32): false] access to local variable x | -| Splitting.cs:37:9:37:15 | [b (line 32): true] SSA def(x) | Splitting.cs:38:15:38:15 | [b (line 32): true] access to local variable x | -| Splitting.cs:37:13:37:15 | [b (line 32): false] "b" | Splitting.cs:37:9:37:9 | access to local variable x | -| Splitting.cs:37:13:37:15 | [b (line 32): true] "b" | Splitting.cs:37:9:37:9 | access to local variable x | -| Splitting.cs:38:15:38:15 | [b (line 32): false] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | -| Splitting.cs:38:15:38:15 | [b (line 32): true] access to local variable x | Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | -| Splitting.cs:38:15:38:15 | [post] [b (line 32): false] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | -| Splitting.cs:38:15:38:15 | [post] [b (line 32): true] access to local variable x | Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:15:39:15 | [b (line 32): false] access to parameter b | Splitting.cs:42:13:42:13 | [b (line 32): false] access to parameter b | -| Splitting.cs:39:15:39:15 | [b (line 32): true] access to parameter b | Splitting.cs:42:13:42:13 | [b (line 32): true] access to parameter b | -| Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | Splitting.cs:39:15:39:25 | [b (line 32): true] ... ? ... : ... | -| Splitting.cs:39:19:39:19 | [b (line 32): true] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:19:39:19 | [post] [b (line 32): true] access to local variable x | Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | -| Splitting.cs:39:23:39:25 | [b (line 32): false] "c" | Splitting.cs:39:15:39:25 | [b (line 32): false] ... ? ... : ... | -| Splitting.cs:40:23:40:23 | [b (line 32): false] access to local variable x | Splitting.cs:40:15:40:23 | [b (line 32): false] (...) ... | -| Splitting.cs:40:23:40:23 | [b (line 32): true] access to local variable x | Splitting.cs:40:15:40:23 | [b (line 32): true] (...) ... | -| Splitting.cs:41:19:41:21 | [b (line 32): false] "d" | Splitting.cs:41:15:41:15 | access to local variable x | -| Splitting.cs:41:19:41:21 | [b (line 32): false] "d" | Splitting.cs:41:15:41:21 | [b (line 32): false] ... = ... | -| Splitting.cs:41:19:41:21 | [b (line 32): true] "d" | Splitting.cs:41:15:41:15 | access to local variable x | -| Splitting.cs:41:19:41:21 | [b (line 32): true] "d" | Splitting.cs:41:15:41:21 | [b (line 32): true] ... = ... | +| Splitting.cs:35:13:35:13 | access to parameter b | Splitting.cs:39:15:39:15 | access to parameter b | +| Splitting.cs:36:17:36:19 | "a" | Splitting.cs:36:13:36:13 | access to local variable x | +| Splitting.cs:37:9:37:9 | access to local variable x | Splitting.cs:37:9:37:15 | SSA def(x) | +| Splitting.cs:37:9:37:15 | SSA def(x) | Splitting.cs:38:15:38:15 | access to local variable x | +| Splitting.cs:37:13:37:15 | "b" | Splitting.cs:37:9:37:9 | access to local variable x | +| Splitting.cs:38:15:38:15 | [post] access to local variable x | Splitting.cs:39:19:39:19 | access to local variable x | +| Splitting.cs:38:15:38:15 | [post] access to local variable x | Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | +| Splitting.cs:38:15:38:15 | access to local variable x | Splitting.cs:39:19:39:19 | access to local variable x | +| Splitting.cs:38:15:38:15 | access to local variable x | Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | +| Splitting.cs:39:15:39:15 | access to parameter b | Splitting.cs:42:13:42:13 | access to parameter b | +| Splitting.cs:39:19:39:19 | [post] access to local variable x | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:39:19:39:19 | access to local variable x | Splitting.cs:39:15:39:25 | ... ? ... : ... | +| Splitting.cs:39:19:39:19 | access to local variable x | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:39:23:39:25 | "c" | Splitting.cs:39:15:39:25 | ... ? ... : ... | +| Splitting.cs:39:23:39:25 | [input] SSA phi read(x) | Splitting.cs:40:23:40:23 | access to local variable x | +| Splitting.cs:40:23:40:23 | access to local variable x | Splitting.cs:40:15:40:23 | (...) ... | +| Splitting.cs:41:19:41:21 | "d" | Splitting.cs:41:15:41:15 | access to local variable x | +| Splitting.cs:41:19:41:21 | "d" | Splitting.cs:41:15:41:21 | ... = ... | | Splitting.cs:46:18:46:18 | SSA param(b) | Splitting.cs:49:13:49:13 | access to parameter b | | Splitting.cs:46:18:46:18 | b | Splitting.cs:46:18:46:18 | SSA param(b) | | Splitting.cs:48:13:48:13 | access to local variable x | Splitting.cs:48:13:48:18 | SSA def(x) | -| Splitting.cs:48:13:48:18 | SSA def(x) | Splitting.cs:53:13:53:13 | [b (line 46): false] access to local variable x | +| Splitting.cs:48:13:48:18 | SSA def(x) | Splitting.cs:53:13:53:13 | access to local variable x | | Splitting.cs:48:17:48:18 | "" | Splitting.cs:48:13:48:13 | access to local variable x | -| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | [b (line 46): false] access to parameter b | -| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | [b (line 46): true] access to parameter b | -| Splitting.cs:50:13:50:13 | access to local variable x | Splitting.cs:50:13:50:21 | [b (line 46): true] SSA def(x) | -| Splitting.cs:50:13:50:21 | [b (line 46): true] SSA def(x) | Splitting.cs:53:13:53:13 | [b (line 46): true] access to local variable x | -| Splitting.cs:50:17:50:21 | [b (line 46): true] "abc" | Splitting.cs:50:13:50:13 | access to local variable x | -| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | [b (line 46): false] SSA def(y) | -| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | [b (line 46): true] SSA def(y) | -| Splitting.cs:51:13:51:36 | [b (line 46): false] SSA def(y) | Splitting.cs:52:9:52:9 | [b (line 46): false] access to local variable y | -| Splitting.cs:51:13:51:36 | [b (line 46): true] SSA def(y) | Splitting.cs:52:9:52:9 | [b (line 46): true] access to local variable y | -| Splitting.cs:51:17:51:36 | [b (line 46): false] array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | -| Splitting.cs:51:17:51:36 | [b (line 46): true] array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | -| Splitting.cs:51:30:51:36 | [b (line 46): false] { ..., ... } | Splitting.cs:51:17:51:36 | [b (line 46): false] array creation of type String[] | -| Splitting.cs:51:30:51:36 | [b (line 46): true] { ..., ... } | Splitting.cs:51:17:51:36 | [b (line 46): true] array creation of type String[] | -| Splitting.cs:51:32:51:34 | [b (line 46): false] "a" | Splitting.cs:51:30:51:36 | [b (line 46): false] { ..., ... } | -| Splitting.cs:51:32:51:34 | [b (line 46): true] "a" | Splitting.cs:51:30:51:36 | [b (line 46): true] { ..., ... } | -| Splitting.cs:52:9:52:9 | [b (line 46): false] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:52:9:52:9 | [b (line 46): true] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:52:9:52:9 | [post] [b (line 46): false] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:52:9:52:9 | [post] [b (line 46): true] access to local variable y | Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:52:16:52:18 | [b (line 46): false] "b" | Splitting.cs:52:9:52:9 | [post] [b (line 46): false] access to local variable y | -| Splitting.cs:52:16:52:18 | [b (line 46): false] "b" | Splitting.cs:52:9:52:12 | access to array element | -| Splitting.cs:52:16:52:18 | [b (line 46): true] "b" | Splitting.cs:52:9:52:9 | [post] [b (line 46): true] access to local variable y | -| Splitting.cs:52:16:52:18 | [b (line 46): true] "b" | Splitting.cs:52:9:52:12 | access to array element | -| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | [b (line 46): false] SSA def(x) | -| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | [b (line 46): true] SSA def(x) | -| Splitting.cs:53:9:53:20 | [b (line 46): false] SSA def(x) | Splitting.cs:54:17:54:17 | [b (line 46): false] access to local variable x | -| Splitting.cs:53:9:53:20 | [b (line 46): true] SSA def(x) | Splitting.cs:54:17:54:17 | [b (line 46): true] access to local variable x | -| Splitting.cs:53:13:53:13 | [b (line 46): false] access to local variable x | Splitting.cs:53:13:53:20 | [b (line 46): false] ... + ... | -| Splitting.cs:53:13:53:13 | [b (line 46): true] access to local variable x | Splitting.cs:53:13:53:20 | [b (line 46): true] ... + ... | -| Splitting.cs:53:13:53:20 | [b (line 46): false] ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | -| Splitting.cs:53:13:53:20 | [b (line 46): true] ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | -| Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | Splitting.cs:53:17:53:20 | [b (line 46): false] access to array element | -| Splitting.cs:53:17:53:17 | [b (line 46): false] access to local variable y | Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | -| Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | Splitting.cs:53:17:53:20 | [b (line 46): true] access to array element | -| Splitting.cs:53:17:53:17 | [b (line 46): true] access to local variable y | Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | -| Splitting.cs:53:17:53:20 | [b (line 46): false] access to array element | Splitting.cs:53:13:53:20 | [b (line 46): false] ... + ... | -| Splitting.cs:53:17:53:20 | [b (line 46): true] access to array element | Splitting.cs:53:13:53:20 | [b (line 46): true] ... + ... | -| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | [b (line 46): false] SSA def(z) | -| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | [b (line 46): true] SSA def(z) | -| Splitting.cs:54:13:54:23 | [b (line 46): false] SSA def(z) | Splitting.cs:55:14:55:14 | [b (line 46): false] access to local variable z | -| Splitting.cs:54:13:54:23 | [b (line 46): true] SSA def(z) | Splitting.cs:55:14:55:14 | [b (line 46): true] access to local variable z | -| Splitting.cs:54:17:54:17 | [b (line 46): false] access to local variable x | Splitting.cs:54:17:54:23 | [b (line 46): false] ... == ... | -| Splitting.cs:54:17:54:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | -| Splitting.cs:54:17:54:17 | [b (line 46): true] access to local variable x | Splitting.cs:54:17:54:23 | [b (line 46): true] ... == ... | -| Splitting.cs:54:17:54:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | -| Splitting.cs:54:17:54:23 | [b (line 46): false] ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | -| Splitting.cs:54:17:54:23 | [b (line 46): true] ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | -| Splitting.cs:55:13:55:14 | [b (line 46): false] !... | Splitting.cs:55:9:55:9 | access to local variable z | -| Splitting.cs:55:13:55:14 | [b (line 46): true] !... | Splitting.cs:55:9:55:9 | access to local variable z | -| Splitting.cs:55:14:55:14 | [b (line 46): false] access to local variable z | Splitting.cs:55:13:55:14 | [b (line 46): false] !... | -| Splitting.cs:55:14:55:14 | [b (line 46): true] access to local variable z | Splitting.cs:55:13:55:14 | [b (line 46): true] !... | -| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | [b (line 46): false] SSA def(x) | -| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | [b (line 46): true] SSA def(x) | -| Splitting.cs:56:9:56:19 | [b (line 46): false] SSA def(x) | Splitting.cs:57:14:57:14 | [b (line 46): false] access to local variable x | -| Splitting.cs:56:9:56:19 | [b (line 46): true] SSA def(x) | Splitting.cs:57:14:57:14 | [b (line 46): true] access to local variable x | -| Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | Splitting.cs:56:9:56:9 | access to local variable x | -| Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | Splitting.cs:56:9:56:9 | access to local variable x | -| Splitting.cs:56:15:56:15 | [b (line 46): false] "c" | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | -| Splitting.cs:56:15:56:15 | [b (line 46): true] "c" | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | -| Splitting.cs:56:16:56:18 | [b (line 46): false] {...} | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | -| Splitting.cs:56:16:56:18 | [b (line 46): true] {...} | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | -| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): false] {...} | -| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): true] {...} | -| Splitting.cs:57:13:57:24 | [b (line 46): false] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | -| Splitting.cs:57:13:57:24 | [b (line 46): true] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | -| Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y | -| Splitting.cs:57:17:57:17 | [b (line 46): true] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): true] access to local variable y | -| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | -| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | -| Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): false] access to local variable s | -| Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | Splitting.cs:59:19:59:19 | [b (line 46): true] access to local variable s | -| Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y | Splitting.cs:58:22:58:22 | [b (line 46): false] SSA def(s) | -| Splitting.cs:58:27:58:27 | [b (line 46): true] access to local variable y | Splitting.cs:58:22:58:22 | [b (line 46): true] SSA def(s) | +| Splitting.cs:49:13:49:13 | access to parameter b | Splitting.cs:60:13:60:13 | access to parameter b | +| Splitting.cs:50:13:50:13 | access to local variable x | Splitting.cs:50:13:50:21 | SSA def(x) | +| Splitting.cs:50:13:50:21 | SSA def(x) | Splitting.cs:53:13:53:13 | access to local variable x | +| Splitting.cs:50:17:50:21 | "abc" | Splitting.cs:50:13:50:13 | access to local variable x | +| Splitting.cs:51:13:51:13 | access to local variable y | Splitting.cs:51:13:51:36 | SSA def(y) | +| Splitting.cs:51:13:51:36 | SSA def(y) | Splitting.cs:52:9:52:9 | access to local variable y | +| Splitting.cs:51:17:51:36 | array creation of type String[] | Splitting.cs:51:13:51:13 | access to local variable y | +| Splitting.cs:51:30:51:36 | { ..., ... } | Splitting.cs:51:17:51:36 | array creation of type String[] | +| Splitting.cs:51:32:51:34 | "a" | Splitting.cs:51:30:51:36 | { ..., ... } | +| Splitting.cs:52:9:52:9 | [post] access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | +| Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y | +| Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:9 | [post] access to local variable y | +| Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:12 | access to array element | +| Splitting.cs:53:9:53:9 | access to local variable x | Splitting.cs:53:9:53:20 | SSA def(x) | +| Splitting.cs:53:9:53:20 | SSA def(x) | Splitting.cs:54:17:54:17 | access to local variable x | +| Splitting.cs:53:13:53:13 | access to local variable x | Splitting.cs:53:13:53:20 | ... + ... | +| Splitting.cs:53:13:53:20 | ... + ... | Splitting.cs:53:9:53:9 | access to local variable x | +| Splitting.cs:53:17:53:17 | access to local variable y | Splitting.cs:53:17:53:20 | access to array element | +| Splitting.cs:53:17:53:17 | access to local variable y | Splitting.cs:57:17:57:17 | access to local variable y | +| Splitting.cs:53:17:53:20 | access to array element | Splitting.cs:53:13:53:20 | ... + ... | +| Splitting.cs:54:13:54:13 | access to local variable z | Splitting.cs:54:13:54:23 | SSA def(z) | +| Splitting.cs:54:13:54:23 | SSA def(z) | Splitting.cs:55:14:55:14 | access to local variable z | +| Splitting.cs:54:17:54:17 | access to local variable x | Splitting.cs:54:17:54:23 | ... == ... | +| Splitting.cs:54:17:54:17 | access to local variable x | Splitting.cs:56:17:56:17 | access to local variable x | +| Splitting.cs:54:17:54:23 | ... == ... | Splitting.cs:54:13:54:13 | access to local variable z | +| Splitting.cs:55:13:55:14 | !... | Splitting.cs:55:9:55:9 | access to local variable z | +| Splitting.cs:55:14:55:14 | access to local variable z | Splitting.cs:55:13:55:14 | !... | +| Splitting.cs:56:9:56:9 | access to local variable x | Splitting.cs:56:9:56:19 | SSA def(x) | +| Splitting.cs:56:9:56:19 | SSA def(x) | Splitting.cs:57:14:57:14 | access to local variable x | +| Splitting.cs:56:13:56:19 | $"..." | Splitting.cs:56:9:56:9 | access to local variable x | +| Splitting.cs:56:15:56:15 | "c" | Splitting.cs:56:13:56:19 | $"..." | +| Splitting.cs:56:16:56:18 | {...} | Splitting.cs:56:13:56:19 | $"..." | +| Splitting.cs:56:17:56:17 | access to local variable x | Splitting.cs:56:16:56:18 | {...} | +| Splitting.cs:57:13:57:24 | access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | +| Splitting.cs:57:17:57:17 | access to local variable y | Splitting.cs:58:27:58:27 | access to local variable y | +| Splitting.cs:58:22:58:22 | SSA def(s) | Splitting.cs:59:19:59:19 | access to local variable s | +| Splitting.cs:58:22:58:22 | String s | Splitting.cs:58:22:58:22 | SSA def(s) | +| Splitting.cs:58:27:58:27 | access to local variable y | Splitting.cs:58:22:58:22 | SSA def(s) | | UseUseExplosion.cs:21:10:21:10 | SSA entry def(this.Prop) | UseUseExplosion.cs:24:13:24:16 | access to property Prop | | UseUseExplosion.cs:21:10:21:10 | this | UseUseExplosion.cs:24:13:24:16 | this access | | UseUseExplosion.cs:23:13:23:13 | access to local variable x | UseUseExplosion.cs:23:13:23:17 | SSA def(x) | diff --git a/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected b/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected index eb08a808522..ac03ba8b8f3 100644 --- a/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected +++ b/csharp/ql/test/library-tests/dataflow/modulusanalysis/ModulusAnalysis.expected @@ -89,26 +89,24 @@ | ModulusAnalysis.cs:47:37:47:38 | 11 | 0 | 11 | 0 | | ModulusAnalysis.cs:48:34:48:34 | access to local variable l | 0 | 1 | 4 | | ModulusAnalysis.cs:48:34:48:34 | access to local variable l | SSA def(l) | 0 | 0 | -| ModulusAnalysis.cs:52:13:52:25 | [cond2 (line 9): true] ... = ... | 0 | 3 | 4 | -| ModulusAnalysis.cs:52:17:52:17 | [cond2 (line 9): true] access to parameter i | SSA param(i) | 0 | 0 | -| ModulusAnalysis.cs:52:17:52:21 | [cond2 (line 9): true] ... * ... | 0 | 0 | 4 | -| ModulusAnalysis.cs:52:17:52:25 | [cond2 (line 9): true] ... + ... | 0 | 3 | 4 | -| ModulusAnalysis.cs:52:21:52:21 | [cond2 (line 9): true] 4 | 0 | 4 | 0 | -| ModulusAnalysis.cs:52:25:52:25 | [cond2 (line 9): true] 3 | 0 | 3 | 0 | -| ModulusAnalysis.cs:56:13:56:25 | [cond2 (line 9): false] ... = ... | 0 | 7 | 8 | -| ModulusAnalysis.cs:56:17:56:17 | [cond2 (line 9): false] access to parameter i | SSA param(i) | 0 | 0 | -| ModulusAnalysis.cs:56:17:56:21 | [cond2 (line 9): false] ... * ... | 0 | 0 | 8 | -| ModulusAnalysis.cs:56:17:56:25 | [cond2 (line 9): false] ... + ... | 0 | 7 | 8 | -| ModulusAnalysis.cs:56:21:56:21 | [cond2 (line 9): false] 8 | 0 | 8 | 0 | -| ModulusAnalysis.cs:56:25:56:25 | [cond2 (line 9): false] 7 | 0 | 7 | 0 | -| ModulusAnalysis.cs:58:34:58:34 | [cond2 (line 9): false] access to local variable j | 0 | 7 | 8 | -| ModulusAnalysis.cs:58:34:58:34 | [cond2 (line 9): false] access to local variable j | [cond2 (line 9): false] SSA def(j) | 0 | 0 | -| ModulusAnalysis.cs:58:34:58:34 | [cond2 (line 9): true] access to local variable j | 0 | 3 | 4 | -| ModulusAnalysis.cs:58:34:58:34 | [cond2 (line 9): true] access to local variable j | [cond2 (line 9): true] SSA def(j) | 0 | 0 | +| ModulusAnalysis.cs:52:13:52:25 | ... = ... | 0 | 3 | 4 | +| ModulusAnalysis.cs:52:17:52:17 | access to parameter i | SSA param(i) | 0 | 0 | +| ModulusAnalysis.cs:52:17:52:21 | ... * ... | 0 | 0 | 4 | +| ModulusAnalysis.cs:52:17:52:25 | ... + ... | 0 | 3 | 4 | +| ModulusAnalysis.cs:52:21:52:21 | 4 | 0 | 4 | 0 | +| ModulusAnalysis.cs:52:25:52:25 | 3 | 0 | 3 | 0 | +| ModulusAnalysis.cs:56:13:56:25 | ... = ... | 0 | 7 | 8 | +| ModulusAnalysis.cs:56:17:56:17 | access to parameter i | SSA param(i) | 0 | 0 | +| ModulusAnalysis.cs:56:17:56:21 | ... * ... | 0 | 0 | 8 | +| ModulusAnalysis.cs:56:17:56:25 | ... + ... | 0 | 7 | 8 | +| ModulusAnalysis.cs:56:21:56:21 | 8 | 0 | 8 | 0 | +| ModulusAnalysis.cs:56:25:56:25 | 7 | 0 | 7 | 0 | +| ModulusAnalysis.cs:58:34:58:34 | access to local variable j | 0 | 3 | 4 | +| ModulusAnalysis.cs:58:34:58:34 | access to local variable j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.cs:62:38:62:38 | access to local variable j | 0 | 3 | 4 | -| ModulusAnalysis.cs:62:38:62:38 | access to local variable j | [cond2 (line 9): true] SSA def(j) | 0 | 0 | -| ModulusAnalysis.cs:66:38:66:38 | access to local variable j | 0 | 7 | 8 | -| ModulusAnalysis.cs:66:38:66:38 | access to local variable j | [cond2 (line 9): false] SSA def(j) | 0 | 0 | +| ModulusAnalysis.cs:62:38:62:38 | access to local variable j | SSA phi(j) | 0 | 0 | +| ModulusAnalysis.cs:66:38:66:38 | access to local variable j | 0 | 3 | 4 | +| ModulusAnalysis.cs:66:38:66:38 | access to local variable j | SSA phi(j) | 0 | 0 | | ModulusAnalysis.cs:69:17:69:18 | 64 | 0 | 64 | 0 | | ModulusAnalysis.cs:70:34:70:34 | access to local variable t | 0 | 64 | 0 | | ModulusAnalysis.cs:70:34:70:34 | access to local variable t | SSA def(t) | 0 | 0 | @@ -131,22 +129,20 @@ | ModulusAnalysis.cs:75:25:75:25 | 3 | 0 | 3 | 0 | | ModulusAnalysis.cs:77:38:77:38 | access to parameter x | 0 | 3 | 16 | | ModulusAnalysis.cs:77:38:77:38 | access to parameter x | SSA param(x) | 0 | 0 | -| ModulusAnalysis.cs:80:9:82:23 | [cond3 (line 9): false] ... = ... | 0 | 7 | 8 | -| ModulusAnalysis.cs:80:9:82:23 | [cond3 (line 9): true] ... = ... | 0 | 3 | 4 | -| ModulusAnalysis.cs:80:13:82:23 | [cond3 (line 9): false] ... ? ... : ... | 0 | 7 | 8 | -| ModulusAnalysis.cs:80:13:82:23 | [cond3 (line 9): true] ... ? ... : ... | 0 | 3 | 4 | -| ModulusAnalysis.cs:81:15:81:15 | [cond3 (line 9): true] access to parameter i | SSA param(i) | 0 | 0 | -| ModulusAnalysis.cs:81:15:81:19 | [cond3 (line 9): true] ... * ... | 0 | 0 | 4 | -| ModulusAnalysis.cs:81:15:81:23 | [cond3 (line 9): true] ... + ... | 0 | 3 | 4 | -| ModulusAnalysis.cs:81:19:81:19 | [cond3 (line 9): true] 4 | 0 | 4 | 0 | -| ModulusAnalysis.cs:81:23:81:23 | [cond3 (line 9): true] 3 | 0 | 3 | 0 | -| ModulusAnalysis.cs:82:15:82:15 | [cond3 (line 9): false] access to parameter i | SSA param(i) | 0 | 0 | -| ModulusAnalysis.cs:82:15:82:19 | [cond3 (line 9): false] ... * ... | 0 | 0 | 8 | -| ModulusAnalysis.cs:82:15:82:23 | [cond3 (line 9): false] ... + ... | 0 | 7 | 8 | -| ModulusAnalysis.cs:82:19:82:19 | [cond3 (line 9): false] 8 | 0 | 8 | 0 | -| ModulusAnalysis.cs:82:23:82:23 | [cond3 (line 9): false] 7 | 0 | 7 | 0 | -| ModulusAnalysis.cs:84:38:84:38 | access to local variable j | 0 | 7 | 8 | -| ModulusAnalysis.cs:84:38:84:38 | access to local variable j | [cond3 (line 9): false] SSA def(j) | 0 | 0 | +| ModulusAnalysis.cs:80:9:82:23 | ... = ... | 0 | 3 | 4 | +| ModulusAnalysis.cs:80:13:82:23 | ... ? ... : ... | 0 | 3 | 4 | +| ModulusAnalysis.cs:81:15:81:15 | access to parameter i | SSA param(i) | 0 | 0 | +| ModulusAnalysis.cs:81:15:81:19 | ... * ... | 0 | 0 | 4 | +| ModulusAnalysis.cs:81:15:81:23 | ... + ... | 0 | 3 | 4 | +| ModulusAnalysis.cs:81:19:81:19 | 4 | 0 | 4 | 0 | +| ModulusAnalysis.cs:81:23:81:23 | 3 | 0 | 3 | 0 | +| ModulusAnalysis.cs:82:15:82:15 | access to parameter i | SSA param(i) | 0 | 0 | +| ModulusAnalysis.cs:82:15:82:19 | ... * ... | 0 | 0 | 8 | +| ModulusAnalysis.cs:82:15:82:23 | ... + ... | 0 | 7 | 8 | +| ModulusAnalysis.cs:82:19:82:19 | 8 | 0 | 8 | 0 | +| ModulusAnalysis.cs:82:23:82:23 | 7 | 0 | 7 | 0 | +| ModulusAnalysis.cs:84:38:84:38 | access to local variable j | 0 | 3 | 4 | +| ModulusAnalysis.cs:84:38:84:38 | access to local variable j | SSA def(j) | 0 | 0 | | ModulusAnalysis.cs:89:22:89:22 | 0 | 0 | 0 | 0 | | ModulusAnalysis.cs:89:25:89:25 | access to local variable i | SSA phi(i) | 0 | 0 | | ModulusAnalysis.cs:89:29:89:31 | access to parameter cap | SSA param(cap) | 0 | 0 | diff --git a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected index 69a73d52508..b0d97c4d6e4 100644 --- a/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected +++ b/csharp/ql/test/library-tests/dataflow/signanalysis/SignAnalysis.expected @@ -236,15 +236,11 @@ | SignAnalysis.cs:464:9:464:9 | access to local variable x | positive | | SignAnalysis.cs:464:9:464:11 | ...++ | positive | | SignAnalysis.cs:465:34:465:34 | access to local variable x | strictlyPositive | -| SignAnalysis.cs:470:21:470:21 | [b (line 468): true] 1 | strictlyPositive | -| SignAnalysis.cs:470:25:470:26 | [b (line 468): false] -... | strictlyNegative | -| SignAnalysis.cs:470:26:470:26 | [b (line 468): false] 1 | strictlyPositive | -| SignAnalysis.cs:480:16:480:20 | [b (line 477): true] ... = ... | strictlyPositive | -| SignAnalysis.cs:480:20:480:20 | [b (line 477): true] 1 | strictlyPositive | -| SignAnalysis.cs:480:28:480:33 | [b (line 477): false] ... = ... | strictlyNegative | -| SignAnalysis.cs:480:32:480:33 | [b (line 477): false] -... | strictlyNegative | -| SignAnalysis.cs:480:33:480:33 | [b (line 477): false] 1 | strictlyPositive | -| SignAnalysis.cs:482:34:482:34 | [b (line 477): false] access to local variable x | strictlyNegative | -| SignAnalysis.cs:482:34:482:34 | [b (line 477): true] access to local variable x | strictlyPositive | -| SignAnalysis.cs:485:38:485:38 | access to local variable x | strictlyPositive | -| SignAnalysis.cs:487:38:487:38 | access to local variable x | strictlyNegative | +| SignAnalysis.cs:470:21:470:21 | 1 | strictlyPositive | +| SignAnalysis.cs:470:25:470:26 | -... | strictlyNegative | +| SignAnalysis.cs:470:26:470:26 | 1 | strictlyPositive | +| SignAnalysis.cs:480:16:480:20 | ... = ... | strictlyPositive | +| SignAnalysis.cs:480:20:480:20 | 1 | strictlyPositive | +| SignAnalysis.cs:480:28:480:33 | ... = ... | strictlyNegative | +| SignAnalysis.cs:480:32:480:33 | -... | strictlyNegative | +| SignAnalysis.cs:480:33:480:33 | 1 | strictlyPositive | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected index 221b551b1f0..13036f0f0ae 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected @@ -119,13 +119,6 @@ | Properties.cs:74:23:74:23 | a | Properties.cs:74:23:74:54 | Action a = ... | Properties.cs:77:9:77:9 | access to local variable a | | Properties.cs:75:23:75:23 | b | Properties.cs:75:23:75:35 | Action b = ... | Properties.cs:80:9:80:9 | access to local variable b | | Properties.cs:106:37:106:37 | p | Properties.cs:106:37:106:37 | p | Properties.cs:106:42:106:42 | access to parameter p | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | b | Splitting.cs:6:13:6:13 | access to parameter b | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | ... = ... | Splitting.cs:11:13:11:13 | access to local variable x | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | b | Splitting.cs:25:13:25:13 | access to parameter b | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:29:13:29:19 | ... = ... | Splitting.cs:30:13:30:13 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | ... = ... | Splitting.cs:33:9:33:9 | access to local variable x | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | b | Splitting.cs:45:13:45:13 | access to parameter b | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:49:13:49:19 | ... = ... | Splitting.cs:50:13:50:13 | access to local variable x | | Test.cs:3:9:3:13 | field | Test.cs:57:9:57:17 | ... = ... | Test.cs:58:13:58:17 | access to field field | | Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | param1 | Test.cs:11:13:11:18 | access to parameter param1 | | Test.cs:5:67:5:72 | param2 | Test.cs:5:67:5:72 | param2 | Test.cs:39:27:39:32 | access to parameter param2 | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected index 1b416d1b4f2..3e6623aa4e8 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/ReadAdjacentRead.expected @@ -94,14 +94,6 @@ | Properties.cs:104:16:104:20 | Props | Properties.cs:114:20:114:35 | access to field Props | Properties.cs:115:21:115:36 | access to field Props | | Properties.cs:104:16:104:20 | Props | Properties.cs:115:21:115:30 | access to field Props | Properties.cs:116:17:116:26 | access to field Props | | Properties.cs:104:16:104:20 | Props | Properties.cs:115:21:115:36 | access to field Props | Properties.cs:116:17:116:32 | access to field Props | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:6:13:6:13 | access to parameter b | Splitting.cs:15:13:15:13 | access to parameter b | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:13:9:13:9 | access to local variable x | Splitting.cs:14:9:14:9 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:14:9:14:9 | access to local variable x | Splitting.cs:17:13:17:13 | access to local variable x | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:25:13:25:13 | access to parameter b | Splitting.cs:35:13:35:13 | access to parameter b | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:33:9:33:9 | access to local variable x | Splitting.cs:34:9:34:9 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:34:9:34:9 | access to local variable x | Splitting.cs:37:13:37:13 | access to local variable x | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:45:13:45:13 | access to parameter b | Splitting.cs:52:13:52:13 | access to parameter b | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:9 | access to local variable x | Splitting.cs:55:9:55:9 | access to local variable x | | Test.cs:8:13:8:13 | x | Test.cs:25:16:25:16 | access to local variable x | Test.cs:25:16:25:16 | access to local variable x | | Test.cs:9:13:9:13 | y | Test.cs:25:20:25:20 | access to local variable y | Test.cs:31:13:31:13 | access to local variable y | | Test.cs:9:13:9:13 | y | Test.cs:25:20:25:20 | access to local variable y | Test.cs:43:20:43:20 | access to local variable y | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected index 8cbd5e6b1b6..e69a5cbe088 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected @@ -33,8 +33,6 @@ | Properties.cs:33:19:33:22 | Properties.stat | Properties.cs:50:9:50:17 | SSA phi(Properties.stat) | Properties.cs:49:17:49:32 | SSA call def(Properties.stat) | | Properties.cs:61:23:61:23 | i | Properties.cs:63:16:63:16 | SSA phi(i) | Properties.cs:61:23:61:23 | SSA param(i) | | Properties.cs:61:23:61:23 | i | Properties.cs:63:16:63:16 | SSA phi(i) | Properties.cs:63:16:63:18 | SSA def(i) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:5:15:5:20 | SSA param(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:27:17:27:24 | SSA def(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:33:9:33:19 | SSA phi(param1) | Test.cs:25:16:25:16 | SSA phi(param1) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/Splitting.cs b/csharp/ql/test/library-tests/dataflow/ssa/Splitting.cs deleted file mode 100644 index 3969b9ab339..00000000000 --- a/csharp/ql/test/library-tests/dataflow/ssa/Splitting.cs +++ /dev/null @@ -1,57 +0,0 @@ -class Splitting -{ - void M1(bool b) - { - var x = ""; - if (b) - x = "a"; - else - { - x = "b"; - x.ToString(); - } - x.ToString(); - x.ToString(); - if (b) - { - x.ToString(); - x = "c"; - } - } - - void M2(bool b) - { - var x = ""; - if (b) - x = "a"; - else - { - x = "b"; - x.ToString(); - } - x = "c"; - x.ToString(); - x.ToString(); - if (b) - { - x.ToString(); - x = "d"; - } - } - - void M3(bool b) - { - var x = ""; - if (b) - x = "a"; - else - { - x = "b"; - x.ToString(); - } - if (b) - b = false; - x.ToString(); - x.ToString(); - } -} diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index 8d0e2b8261d..3f117d6412e 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -35,7 +35,6 @@ | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | @@ -242,17 +241,6 @@ | Properties.cs:114:20:114:35 | this.Props.Props | Properties.cs:113:9:113:22 | SSA call def(this.Props.Props) | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:108:10:108:10 | SSA qualifier def(this.Props.Props.xs) | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | SSA param(b) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | SSA param(b) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | | Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | SSA param(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:27:17:27:24 | SSA def(param1) | @@ -289,7 +277,7 @@ | Test.cs:56:13:56:17 | this.field | Test.cs:46:10:46:10 | SSA entry def(this.field) | | Test.cs:56:13:56:17 | this.field | Test.cs:57:9:57:17 | SSA def(this.field) | | Test.cs:62:16:62:16 | x | Test.cs:62:16:62:16 | SSA param(x) | -| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | +| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | SSA def(e) | | Test.cs:76:24:76:25 | b1 | Test.cs:76:24:76:25 | SSA param(b1) | | Test.cs:76:33:76:34 | b2 | Test.cs:76:33:76:34 | SSA param(b2) | | Test.cs:76:42:76:43 | b3 | Test.cs:76:42:76:43 | SSA param(b3) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 272db29e6f4..4bbe88295ed 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -35,7 +35,6 @@ | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | -| Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | @@ -52,9 +51,12 @@ | DefUse.cs:13:13:13:18 | SSA def(y) | DefUse.cs:13:13:13:18 | ... = ... | | DefUse.cs:18:13:18:18 | SSA def(y) | DefUse.cs:18:13:18:18 | ... = ... | | DefUse.cs:19:13:19:18 | SSA def(w) | DefUse.cs:19:13:19:18 | ... = ... | +| DefUse.cs:23:9:23:15 | SSA phi(w) | DefUse.cs:23:9:23:15 | ...; | +| DefUse.cs:23:9:23:15 | SSA phi(y) | DefUse.cs:23:9:23:15 | ...; | | DefUse.cs:28:13:28:18 | SSA def(y) | DefUse.cs:28:13:28:18 | ... = ... | | DefUse.cs:29:13:29:18 | SSA def(w) | DefUse.cs:29:13:29:18 | ... = ... | | DefUse.cs:39:13:39:18 | SSA def(y) | DefUse.cs:39:13:39:18 | ... = ... | +| DefUse.cs:42:9:42:15 | SSA phi(y) | DefUse.cs:42:9:42:15 | ...; | | DefUse.cs:44:13:44:17 | SSA def(z) | DefUse.cs:44:13:44:17 | Int32 z = ... | | DefUse.cs:47:23:47:23 | SSA def(z) | DefUse.cs:47:9:47:24 | call to method outMethod | | DefUse.cs:50:23:50:23 | SSA def(z) | DefUse.cs:50:9:50:24 | call to method refMethod | @@ -65,12 +67,14 @@ | DefUse.cs:67:19:67:27 | SSA def(tc) | DefUse.cs:67:19:67:27 | TestClass tc = ... | | DefUse.cs:79:13:79:18 | SSA def(x1) | DefUse.cs:79:13:79:18 | Int32 x1 = ... | | DefUse.cs:80:30:80:31 | SSA def(x1) | DefUse.cs:80:16:80:32 | call to method refMethod | +| DefUse.cs:80:30:80:31 | SSA phi(x1) | DefUse.cs:80:30:80:31 | access to local variable x1 | | DefUse.cs:83:13:83:18 | SSA def(x2) | DefUse.cs:83:13:83:18 | Int32 x2 = ... | | DefUse.cs:85:15:85:16 | SSA def(x2) | DefUse.cs:84:9:86:17 | call to method refOutMethod | | DefUse.cs:89:13:89:18 | SSA def(x3) | DefUse.cs:89:13:89:18 | Int32 x3 = ... | | DefUse.cs:92:15:92:16 | SSA def(x3) | DefUse.cs:91:9:93:17 | call to method refOutMethod | | DefUse.cs:93:15:93:16 | SSA def(x4) | DefUse.cs:91:9:93:17 | call to method refOutMethod | | DefUse.cs:97:13:97:18 | SSA def(x5) | DefUse.cs:97:13:97:18 | Int32 x5 = ... | +| DefUse.cs:98:16:98:17 | SSA phi(x5) | DefUse.cs:98:16:98:17 | access to local variable x5 | | DefUse.cs:101:13:101:23 | SSA def(x5) | DefUse.cs:101:13:101:23 | ... = ... | | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... = ... | | DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... | @@ -93,13 +97,16 @@ | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | | Example.cs:13:13:13:23 | SSA call def(this.Field) | Example.cs:13:13:13:23 | call to method SetField | +| Example.cs:14:9:14:24 | SSA phi(this.Field) | Example.cs:14:9:14:24 | ...; | | Example.cs:18:16:18:16 | SSA param(p) | Example.cs:18:16:18:16 | p | | Example.cs:18:24:18:24 | SSA param(b) | Example.cs:18:24:18:24 | b | | Example.cs:23:13:23:17 | SSA def(p) | Example.cs:23:13:23:17 | ... = ... | +| Example.cs:25:9:25:15 | SSA phi(p) | Example.cs:25:9:25:15 | ...; | | Fields.cs:16:17:16:17 | SSA entry def(this.xs) | Fields.cs:16:17:16:17 | F | | Fields.cs:19:9:19:13 | SSA call def(this.xs) | Fields.cs:19:9:19:13 | call to method Upd | | Fields.cs:20:9:20:14 | SSA def(x) | Fields.cs:20:9:20:14 | ... = ... | | Fields.cs:22:13:22:17 | SSA call def(this.xs) | Fields.cs:22:13:22:17 | call to method Upd | +| Fields.cs:23:9:23:20 | SSA phi(this.xs) | Fields.cs:23:9:23:20 | ...; | | Fields.cs:24:9:24:23 | SSA def(this.xs) | Fields.cs:24:9:24:23 | ... = ... | | Fields.cs:28:17:28:17 | SSA entry def(Fields.stat) | Fields.cs:28:17:28:17 | G | | Fields.cs:28:17:28:17 | SSA entry def(this.xs) | Fields.cs:28:17:28:17 | G | @@ -118,6 +125,9 @@ | Fields.cs:49:13:49:28 | SSA def(f) | Fields.cs:49:13:49:28 | ... = ... | | Fields.cs:49:13:49:28 | SSA qualifier def(f.xs) | Fields.cs:49:13:49:28 | ... = ... | | Fields.cs:49:17:49:28 | SSA call def(Fields.stat) | Fields.cs:49:17:49:28 | object creation of type Fields | +| Fields.cs:50:9:50:17 | SSA phi(Fields.stat) | Fields.cs:50:9:50:17 | ...; | +| Fields.cs:50:9:50:17 | SSA phi(f) | Fields.cs:50:9:50:17 | ...; | +| Fields.cs:50:9:50:17 | SSA phi(f.xs) | Fields.cs:50:9:50:17 | ...; | | Fields.cs:51:9:51:20 | SSA call def(Fields.stat) | Fields.cs:51:9:51:20 | object creation of type Fields | | Fields.cs:61:17:61:17 | SSA entry def(this.LoopField) | Fields.cs:61:17:61:17 | H | | Fields.cs:61:17:61:17 | SSA entry def(this.SingleAccessedField) | Fields.cs:61:17:61:17 | H | @@ -179,6 +189,7 @@ | Properties.cs:19:9:19:13 | SSA call def(this.xs) | Properties.cs:19:9:19:13 | call to method Upd | | Properties.cs:20:9:20:14 | SSA def(x) | Properties.cs:20:9:20:14 | ... = ... | | Properties.cs:22:13:22:17 | SSA call def(this.xs) | Properties.cs:22:13:22:17 | call to method Upd | +| Properties.cs:23:9:23:20 | SSA phi(this.xs) | Properties.cs:23:9:23:20 | ...; | | Properties.cs:24:9:24:23 | SSA def(this.xs) | Properties.cs:24:9:24:23 | ... = ... | | Properties.cs:28:17:28:17 | SSA entry def(Properties.stat) | Properties.cs:28:17:28:17 | G | | Properties.cs:28:17:28:17 | SSA entry def(this.xs) | Properties.cs:28:17:28:17 | G | @@ -197,10 +208,14 @@ | Properties.cs:49:13:49:32 | SSA def(f) | Properties.cs:49:13:49:32 | ... = ... | | Properties.cs:49:13:49:32 | SSA qualifier def(f.xs) | Properties.cs:49:13:49:32 | ... = ... | | Properties.cs:49:17:49:32 | SSA call def(Properties.stat) | Properties.cs:49:17:49:32 | object creation of type Properties | +| Properties.cs:50:9:50:17 | SSA phi(Properties.stat) | Properties.cs:50:9:50:17 | ...; | +| Properties.cs:50:9:50:17 | SSA phi(f) | Properties.cs:50:9:50:17 | ...; | +| Properties.cs:50:9:50:17 | SSA phi(f.xs) | Properties.cs:50:9:50:17 | ...; | | Properties.cs:51:9:51:24 | SSA call def(Properties.stat) | Properties.cs:51:9:51:24 | object creation of type Properties | | Properties.cs:61:17:61:17 | SSA entry def(this.LoopProp) | Properties.cs:61:17:61:17 | H | | Properties.cs:61:17:61:17 | SSA entry def(this.SingleAccessedProp) | Properties.cs:61:17:61:17 | H | | Properties.cs:61:23:61:23 | SSA param(i) | Properties.cs:61:23:61:23 | i | +| Properties.cs:63:16:63:16 | SSA phi(i) | Properties.cs:63:16:63:16 | access to parameter i | | Properties.cs:63:16:63:18 | SSA def(i) | Properties.cs:63:16:63:18 | ...-- | | Properties.cs:70:17:70:17 | SSA entry def(this.SingleAccessedProp) | Properties.cs:70:17:70:17 | I | | Properties.cs:73:13:73:32 | SSA def(f) | Properties.cs:73:13:73:32 | Properties f = ... | @@ -221,16 +236,6 @@ | Properties.cs:113:9:113:22 | SSA call def(this.Props) | Properties.cs:113:9:113:22 | call to method SetProps | | Properties.cs:113:9:113:22 | SSA call def(this.Props.Props) | Properties.cs:113:9:113:22 | call to method SetProps | | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:113:9:113:22 | call to method SetProps | -| Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:3:18:3:18 | b | -| Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:7:13:7:19 | ... = ... | -| Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:10:13:10:19 | ... = ... | -| Splitting.cs:22:18:22:18 | SSA param(b) | Splitting.cs:22:18:22:18 | b | -| Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | Splitting.cs:29:13:29:19 | ... = ... | -| Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | Splitting.cs:32:9:32:15 | ... = ... | -| Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:32:9:32:15 | ... = ... | -| Splitting.cs:42:18:42:18 | SSA param(b) | Splitting.cs:42:18:42:18 | b | -| Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | Splitting.cs:46:13:46:19 | ... = ... | -| Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | Splitting.cs:49:13:49:19 | ... = ... | | Test.cs:5:15:5:20 | SSA param(param1) | Test.cs:5:15:5:20 | param1 | | Test.cs:5:67:5:72 | SSA param(param2) | Test.cs:5:67:5:72 | param2 | | Test.cs:7:9:7:17 | SSA def(this.field) | Test.cs:7:9:7:17 | ... = ... | @@ -243,20 +248,31 @@ | Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... = ... | | Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... | | Test.cs:22:13:22:17 | SSA def(z) | Test.cs:22:13:22:17 | ... = ... | +| Test.cs:24:9:24:15 | SSA phi(this.field) | Test.cs:24:9:24:15 | ...; | +| Test.cs:24:9:24:15 | SSA phi(x) | Test.cs:24:9:24:15 | ...; | +| Test.cs:24:9:24:15 | SSA phi(y) | Test.cs:24:9:24:15 | ...; | +| Test.cs:24:9:24:15 | SSA phi(z) | Test.cs:24:9:24:15 | ...; | +| Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:25:16:25:16 | access to local variable x | +| Test.cs:25:16:25:16 | SSA phi(y) | Test.cs:25:16:25:16 | access to local variable x | | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ | | Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... = ... | +| Test.cs:33:9:33:19 | SSA phi(param1) | Test.cs:33:9:33:19 | ...; | | Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... | +| Test.cs:34:25:34:25 | SSA phi(i) | Test.cs:34:25:34:25 | access to local variable i | +| Test.cs:34:25:34:25 | SSA phi(x) | Test.cs:34:25:34:25 | access to local variable i | | Test.cs:34:33:34:35 | SSA def(i) | Test.cs:34:33:34:35 | ...++ | | Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... = ... | +| Test.cs:39:9:42:9 | SSA phi(param1) | Test.cs:39:9:42:9 | foreach (... ... in ...) ... | | Test.cs:39:22:39:22 | SSA def(w) | Test.cs:39:22:39:22 | Int32 w | | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... | | Test.cs:46:10:46:10 | SSA entry def(this.field) | Test.cs:46:10:46:10 | g | | Test.cs:46:16:46:18 | SSA param(in) | Test.cs:46:16:46:18 | in | | Test.cs:50:13:50:20 | SSA def(out) | Test.cs:50:13:50:20 | ... = ... | | Test.cs:54:13:54:20 | SSA def(out) | Test.cs:54:13:54:20 | ... = ... | +| Test.cs:56:9:56:19 | SSA phi(out) | Test.cs:56:9:56:19 | ...; | | Test.cs:57:9:57:17 | SSA def(this.field) | Test.cs:57:9:57:17 | ... = ... | | Test.cs:62:16:62:16 | SSA param(x) | Test.cs:62:16:62:16 | x | -| Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | Test.cs:68:45:68:45 | DivideByZeroException e | +| Test.cs:68:45:68:45 | SSA def(e) | Test.cs:68:45:68:45 | DivideByZeroException e | | Test.cs:76:24:76:25 | SSA param(b1) | Test.cs:76:24:76:25 | b1 | | Test.cs:76:33:76:34 | SSA param(b2) | Test.cs:76:33:76:34 | b2 | | Test.cs:76:42:76:43 | SSA param(b3) | Test.cs:76:42:76:43 | b3 | @@ -265,6 +281,7 @@ | Test.cs:76:69:76:70 | SSA param(b6) | Test.cs:76:69:76:70 | b6 | | Test.cs:78:13:78:17 | SSA def(x) | Test.cs:78:13:78:17 | Int32 x = ... | | Test.cs:108:13:108:17 | SSA def(x) | Test.cs:108:13:108:17 | ... = ... | +| Test.cs:113:9:116:9 | SSA phi(x) | Test.cs:113:9:116:9 | if (...) ... | | Tuples.cs:10:9:10:54 | SSA def(b) | Tuples.cs:10:9:10:54 | ... = ... | | Tuples.cs:10:9:10:54 | SSA def(s) | Tuples.cs:10:9:10:54 | ... = ... | | Tuples.cs:10:9:10:54 | SSA def(x) | Tuples.cs:10:9:10:54 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index 3dfc82d27ad..a8bcd3e4daf 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -15,7 +15,6 @@ | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:212:30:212:71 | EventHandler exited = ... | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | @@ -117,13 +116,6 @@ | Properties.cs:76:9:76:12 | f.xs | Properties.cs:84:9:84:25 | SSA def(f.xs) | Properties.cs:84:9:84:25 | ... = ... | | Properties.cs:78:9:78:15 | this.xs | Properties.cs:81:9:81:22 | SSA def(this.xs) | Properties.cs:81:9:81:22 | ... = ... | | Properties.cs:78:9:78:15 | this.xs | Properties.cs:83:9:83:22 | SSA def(this.xs) | Properties.cs:83:9:83:22 | ... = ... | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:7:13:7:19 | ... = ... | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:10:13:10:19 | ... = ... | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | Splitting.cs:29:13:29:19 | ... = ... | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | Splitting.cs:32:9:32:15 | ... = ... | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:32:9:32:15 | ... = ... | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | Splitting.cs:46:13:46:19 | ... = ... | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | Splitting.cs:49:13:49:19 | ... = ... | | Test.cs:5:15:5:20 | param1 | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ | | Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... | | Test.cs:7:9:7:13 | this.field | Test.cs:7:9:7:17 | SSA def(this.field) | Test.cs:7:9:7:17 | ... = ... | @@ -144,7 +136,7 @@ | Test.cs:46:29:46:32 | out | Test.cs:50:13:50:20 | SSA def(out) | Test.cs:50:13:50:20 | ... = ... | | Test.cs:46:29:46:32 | out | Test.cs:54:13:54:20 | SSA def(out) | Test.cs:54:13:54:20 | ... = ... | | Test.cs:56:13:56:17 | this.field | Test.cs:57:9:57:17 | SSA def(this.field) | Test.cs:57:9:57:17 | ... = ... | -| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | Test.cs:68:45:68:45 | DivideByZeroException e | +| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | SSA def(e) | Test.cs:68:45:68:45 | DivideByZeroException e | | Test.cs:78:13:78:13 | x | Test.cs:78:13:78:17 | SSA def(x) | Test.cs:78:13:78:17 | Int32 x = ... | | Test.cs:78:13:78:13 | x | Test.cs:108:13:108:17 | SSA def(x) | Test.cs:108:13:108:17 | ... = ... | | Tuples.cs:10:14:10:14 | x | Tuples.cs:10:9:10:54 | SSA def(x) | Tuples.cs:10:9:10:54 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected index f5c93b95944..3ba88d1dd17 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected @@ -28,9 +28,6 @@ | OutRef.cs:39:35:39:35 | j | OutRef.cs:39:35:39:35 | SSA param(j) | OutRef.cs:39:35:39:35 | j | | Properties.cs:61:23:61:23 | i | Properties.cs:61:23:61:23 | SSA param(i) | Properties.cs:61:23:61:23 | i | | Properties.cs:106:37:106:37 | p | Properties.cs:106:37:106:37 | SSA param(p) | Properties.cs:106:37:106:37 | p | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:3:18:3:18 | b | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | SSA param(b) | Splitting.cs:22:18:22:18 | b | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | SSA param(b) | Splitting.cs:42:18:42:18 | b | | Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | SSA param(param1) | Test.cs:5:15:5:20 | param1 | | Test.cs:5:67:5:72 | param2 | Test.cs:5:67:5:72 | SSA param(param2) | Test.cs:5:67:5:72 | param2 | | Test.cs:46:16:46:18 | in | Test.cs:46:16:46:18 | SSA param(in) | Test.cs:46:16:46:18 | in | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index 9daa4269711..46aba07eb37 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -35,7 +35,6 @@ | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:213:29:213:34 | access to local variable exited | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:11:17:11:17 | access to parameter b | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:26:13:26:13 | access to local variable c | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:27:13:27:13 | access to local variable c | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:26:13:26:19 | access to field Field | @@ -288,27 +287,6 @@ | Properties.cs:114:20:114:35 | this.Props.Props | Properties.cs:113:9:113:22 | SSA call def(this.Props.Props) | Properties.cs:116:17:116:32 | access to field Props | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:115:21:115:39 | access to property xs | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:116:17:116:35 | access to property xs | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:6:13:6:13 | access to parameter b | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:15:13:15:13 | access to parameter b | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:13:9:13:9 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:14:9:14:9 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:17:13:17:13 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:11:13:11:13 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:13:9:13:9 | access to local variable x | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:14:9:14:9 | access to local variable x | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | SSA param(b) | Splitting.cs:25:13:25:13 | access to parameter b | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | SSA param(b) | Splitting.cs:35:13:35:13 | access to parameter b | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | Splitting.cs:30:13:30:13 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | Splitting.cs:33:9:33:9 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | Splitting.cs:34:9:34:9 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:33:9:33:9 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:34:9:34:9 | access to local variable x | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:37:13:37:13 | access to local variable x | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | SSA param(b) | Splitting.cs:45:13:45:13 | access to parameter b | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | SSA param(b) | Splitting.cs:52:13:52:13 | access to parameter b | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | Splitting.cs:50:13:50:13 | access to local variable x | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:54:9:54:9 | access to local variable x | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:55:9:55:9 | access to local variable x | | Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | SSA param(param1) | Test.cs:11:13:11:18 | access to parameter param1 | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:27:17:27:22 | access to parameter param1 | | Test.cs:5:15:5:20 | param1 | Test.cs:39:9:42:9 | SSA phi(param1) | Test.cs:41:13:41:18 | access to parameter param1 | @@ -332,7 +310,7 @@ | Test.cs:56:13:56:17 | this.field | Test.cs:46:10:46:10 | SSA entry def(this.field) | Test.cs:56:13:56:17 | access to field field | | Test.cs:56:13:56:17 | this.field | Test.cs:57:9:57:17 | SSA def(this.field) | Test.cs:58:13:58:17 | access to field field | | Test.cs:62:16:62:16 | x | Test.cs:62:16:62:16 | SSA param(x) | Test.cs:66:28:66:28 | access to parameter x | -| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | Test.cs:70:17:70:17 | access to local variable e | +| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | SSA def(e) | Test.cs:70:17:70:17 | access to local variable e | | Test.cs:76:24:76:25 | b1 | Test.cs:76:24:76:25 | SSA param(b1) | Test.cs:80:13:80:14 | access to parameter b1 | | Test.cs:76:33:76:34 | b2 | Test.cs:76:33:76:34 | SSA param(b2) | Test.cs:84:18:84:19 | access to parameter b2 | | Test.cs:76:42:76:43 | b3 | Test.cs:76:42:76:43 | SSA param(b3) | Test.cs:90:13:90:14 | access to parameter b3 | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index d0e6b073f01..d6dfac1475a 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -35,7 +35,6 @@ | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | SSA def(i) | -| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) | @@ -329,18 +328,6 @@ | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:108:10:108:10 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:108:10:108:10 | SSA qualifier def(this.Props.Props.xs) | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:108:10:108:10 | SSA qualifier def(this.Props.Props.xs) | | Properties.cs:115:21:115:39 | this.Props.Props.xs | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | Properties.cs:113:9:113:22 | SSA qualifier def(this.Props.Props.xs) | -| Splitting.cs:3:18:3:18 | b | Splitting.cs:3:18:3:18 | SSA param(b) | Splitting.cs:3:18:3:18 | SSA param(b) | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | Splitting.cs:7:13:7:19 | [b (line 3): true] SSA def(x) | -| Splitting.cs:5:13:5:13 | x | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | Splitting.cs:10:13:10:19 | [b (line 3): false] SSA def(x) | -| Splitting.cs:22:18:22:18 | b | Splitting.cs:22:18:22:18 | SSA param(b) | Splitting.cs:22:18:22:18 | SSA param(b) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | Splitting.cs:29:13:29:19 | [b (line 22): false] SSA def(x) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | Splitting.cs:32:9:32:15 | [b (line 22): false] SSA def(x) | -| Splitting.cs:24:13:24:13 | x | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | Splitting.cs:32:9:32:15 | [b (line 22): true] SSA def(x) | -| Splitting.cs:42:18:42:18 | b | Splitting.cs:42:18:42:18 | SSA param(b) | Splitting.cs:42:18:42:18 | SSA param(b) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:46:13:46:19 | [b (line 42): true] SSA def(x) | -| Splitting.cs:44:13:44:13 | x | Splitting.cs:54:9:54:21 | SSA phi(x) | Splitting.cs:49:13:49:19 | [b (line 42): false] SSA def(x) | | Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | SSA param(param1) | Test.cs:5:15:5:20 | SSA param(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:5:15:5:20 | SSA param(param1) | | Test.cs:5:15:5:20 | param1 | Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:27:17:27:24 | SSA def(param1) | @@ -391,7 +378,7 @@ | Test.cs:56:13:56:17 | this.field | Test.cs:46:10:46:10 | SSA entry def(this.field) | Test.cs:46:10:46:10 | SSA entry def(this.field) | | Test.cs:56:13:56:17 | this.field | Test.cs:57:9:57:17 | SSA def(this.field) | Test.cs:57:9:57:17 | SSA def(this.field) | | Test.cs:62:16:62:16 | x | Test.cs:62:16:62:16 | SSA param(x) | Test.cs:62:16:62:16 | SSA param(x) | -| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | Test.cs:68:45:68:45 | [exception: DivideByZeroException] SSA def(e) | +| Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | SSA def(e) | Test.cs:68:45:68:45 | SSA def(e) | | Test.cs:76:24:76:25 | b1 | Test.cs:76:24:76:25 | SSA param(b1) | Test.cs:76:24:76:25 | SSA param(b1) | | Test.cs:76:33:76:34 | b2 | Test.cs:76:33:76:34 | SSA param(b2) | Test.cs:76:33:76:34 | SSA param(b2) | | Test.cs:76:42:76:43 | b3 | Test.cs:76:42:76:43 | SSA param(b3) | Test.cs:76:42:76:43 | SSA param(b3) | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected index a3850dd73eb..124caa4e69e 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected @@ -1,30 +1,30 @@ models | 1 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | | 2 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 3 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 3 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 4 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:4 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:4 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:2 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:3 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:3 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:4 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:4 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected index 9b1b32b57fd..d3ae7cc363d 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected @@ -2,36 +2,36 @@ models | 1 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual | | 2 | Source: My.Qltest; TestSources; false; ExecuteQuery; (System.String); ; ReturnValue; database; manual | | 3 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 4 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 4 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 5 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:5 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:5 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:3 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:4 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:4 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:5 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:5 | | Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | | Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String | | Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected index ee8d0615b2d..ea0ab7943d2 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected @@ -4,18 +4,18 @@ models | 3 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual | | 4 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual | | 5 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 6 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 6 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 7 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:7 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:7 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:5 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:6 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:6 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:7 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:7 | | Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 | | Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 | @@ -23,16 +23,16 @@ edges | Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | | Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String | | Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... | @@ -43,7 +43,7 @@ nodes | Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String | | Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected index cac7f178b40..9648aa5e5eb 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected @@ -5,18 +5,18 @@ models | 4 | Source: My.Qltest; TestSources; false; GetCustom; (System.String); ; ReturnValue; custom; manual | | 5 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual | | 6 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 7 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 7 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 8 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:8 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:8 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:6 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:7 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:7 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:8 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:8 | | Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 | | Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 | @@ -26,16 +26,16 @@ edges | Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | | Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String | | Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... | @@ -49,7 +49,7 @@ nodes | Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String | | Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected index b0e7142693f..b13812650b8 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected @@ -3,33 +3,33 @@ models | 2 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual | | 3 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual | | 4 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 6 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:4 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:5 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:5 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 | | Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:43:20:43:25 | access to local variable result : String | provenance | Src:MaD:3 | | Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:2 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | | Test.cs:43:20:43:25 | access to local variable result : String | semmle.label | access to local variable result : String | | Test.cs:43:29:43:50 | call to method ReadEnv : String | semmle.label | call to method ReadEnv : String | | Test.cs:46:42:46:96 | ... + ... | semmle.label | ... + ... | @@ -37,7 +37,7 @@ nodes | Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String | | Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | | Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... | diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected index ae9fccfab80..ccaa28dde3e 100644 --- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected +++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected @@ -3,33 +3,33 @@ models | 2 | Source: My.Qltest; TestSources; false; ExecuteQuery; (System.String); ; ReturnValue; database; manual | | 3 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual | | 4 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual | -| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual | +| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual | | 6 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual | edges -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 | +| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:4 | -| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:5 | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | | +| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:5 | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | | | Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 | | Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 | | Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 | | Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 | nodes -| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object | +| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] | | Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String | -| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object | +| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] | | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream | | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream | -| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object | +| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] | | Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... | | Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String | -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] | | Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String | | Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... | @@ -37,7 +37,7 @@ nodes | Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String | | Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... | subpaths -| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | +| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String | #select | Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... | | Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... | diff --git a/csharp/ql/test/library-tests/definitions/PrintAst.expected b/csharp/ql/test/library-tests/definitions/PrintAst.expected index 1ad3ad1a61d..9b5606d30f5 100644 --- a/csharp/ql/test/library-tests/definitions/PrintAst.expected +++ b/csharp/ql/test/library-tests/definitions/PrintAst.expected @@ -272,8 +272,8 @@ definitions.cs: # 125| 0: [MethodCall] call to method M # 125| -1: [BaseAccess] base access # 128| 6: [Method] M2`1 -# 128| -1: [TypeMention] Void # 128| -1: [TypeMention] I1 +# 128| -1: [TypeMention] Void #-----| 1: (Type parameters) # 128| 0: [TypeParameter] T # 128| 4: [BlockStmt] {...} @@ -356,8 +356,8 @@ definitions.cs: # 153| 0: [Parameter] value # 153| 4: [BlockStmt] {...} # 154| 6: [Method] M -# 154| -1: [TypeMention] A # 154| -1: [TypeMention] I4 +# 154| -1: [TypeMention] A # 154| 4: [ThrowExpr] throw ... # 154| 0: [ObjectCreation] object creation of type Exception # 154| 0: [TypeMention] Exception diff --git a/csharp/ql/test/library-tests/exceptions/Exceptions1.expected b/csharp/ql/test/library-tests/exceptions/Exceptions1.expected index f3e813a7395..c97468d6189 100644 --- a/csharp/ql/test/library-tests/exceptions/Exceptions1.expected +++ b/csharp/ql/test/library-tests/exceptions/Exceptions1.expected @@ -9,14 +9,55 @@ | exceptions.cs:76:13:76:13 | ; | exceptions.cs:89:13:89:13 | ; | | exceptions.cs:76:13:76:13 | ; | exceptions.cs:93:13:93:13 | ; | | exceptions.cs:76:13:76:13 | ; | exceptions.cs:97:13:97:13 | ; | +| exceptions.cs:105:13:105:13 | ; | exceptions.cs:110:13:110:13 | ; | | exceptions.cs:105:13:105:13 | ; | exceptions.cs:114:13:114:13 | ; | +| exceptions.cs:105:13:105:13 | ; | exceptions.cs:118:13:118:13 | ; | +| exceptions.cs:105:13:105:13 | ; | exceptions.cs:122:13:122:13 | ; | +| exceptions.cs:105:13:105:13 | ; | exceptions.cs:126:13:126:13 | ; | +| exceptions.cs:134:13:134:13 | ; | exceptions.cs:139:13:139:13 | ; | | exceptions.cs:134:13:134:13 | ; | exceptions.cs:143:13:143:13 | ; | +| exceptions.cs:134:13:134:13 | ; | exceptions.cs:147:13:147:13 | ; | +| exceptions.cs:134:13:134:13 | ; | exceptions.cs:151:13:151:13 | ; | +| exceptions.cs:134:13:134:13 | ; | exceptions.cs:155:13:155:13 | ; | +| exceptions.cs:163:13:163:13 | ; | exceptions.cs:168:13:168:13 | ; | | exceptions.cs:163:13:163:13 | ; | exceptions.cs:172:13:172:13 | ; | +| exceptions.cs:163:13:163:13 | ; | exceptions.cs:176:13:176:13 | ; | +| exceptions.cs:163:13:163:13 | ; | exceptions.cs:180:13:180:13 | ; | +| exceptions.cs:163:13:163:13 | ; | exceptions.cs:184:13:184:13 | ; | +| exceptions.cs:222:13:222:13 | ; | exceptions.cs:227:13:227:13 | ; | +| exceptions.cs:222:13:222:13 | ; | exceptions.cs:231:13:231:13 | ; | | exceptions.cs:222:13:222:13 | ; | exceptions.cs:235:13:235:13 | ; | +| exceptions.cs:222:13:222:13 | ; | exceptions.cs:239:13:239:13 | ; | +| exceptions.cs:222:13:222:13 | ; | exceptions.cs:243:13:243:13 | ; | +| exceptions.cs:280:13:280:13 | ; | exceptions.cs:285:13:285:13 | ; | +| exceptions.cs:280:13:280:13 | ; | exceptions.cs:289:13:289:13 | ; | +| exceptions.cs:280:13:280:13 | ; | exceptions.cs:293:13:293:13 | ; | | exceptions.cs:280:13:280:13 | ; | exceptions.cs:297:13:297:13 | ; | +| exceptions.cs:280:13:280:13 | ; | exceptions.cs:301:13:301:13 | ; | | exceptions.cs:309:13:309:13 | ; | exceptions.cs:314:13:314:13 | ; | +| exceptions.cs:309:13:309:13 | ; | exceptions.cs:318:13:318:13 | ; | +| exceptions.cs:309:13:309:13 | ; | exceptions.cs:322:13:322:13 | ; | +| exceptions.cs:309:13:309:13 | ; | exceptions.cs:326:13:326:13 | ; | +| exceptions.cs:309:13:309:13 | ; | exceptions.cs:330:13:330:13 | ; | +| exceptions.cs:338:13:338:13 | ; | exceptions.cs:343:13:343:13 | ; | | exceptions.cs:338:13:338:13 | ; | exceptions.cs:347:13:347:13 | ; | +| exceptions.cs:338:13:338:13 | ; | exceptions.cs:351:13:351:13 | ; | +| exceptions.cs:338:13:338:13 | ; | exceptions.cs:355:13:355:13 | ; | +| exceptions.cs:338:13:338:13 | ; | exceptions.cs:359:13:359:13 | ; | +| exceptions.cs:368:13:368:13 | ; | exceptions.cs:373:13:373:13 | ; | +| exceptions.cs:368:13:368:13 | ; | exceptions.cs:377:13:377:13 | ; | +| exceptions.cs:368:13:368:13 | ; | exceptions.cs:381:13:381:13 | ; | | exceptions.cs:368:13:368:13 | ; | exceptions.cs:385:13:385:13 | ; | +| exceptions.cs:368:13:368:13 | ; | exceptions.cs:389:13:389:13 | ; | +| exceptions.cs:398:13:398:13 | ; | exceptions.cs:403:13:403:13 | ; | | exceptions.cs:398:13:398:13 | ; | exceptions.cs:407:13:407:13 | ; | +| exceptions.cs:398:13:398:13 | ; | exceptions.cs:411:13:411:13 | ; | +| exceptions.cs:398:13:398:13 | ; | exceptions.cs:415:13:415:13 | ; | +| exceptions.cs:398:13:398:13 | ; | exceptions.cs:419:13:419:13 | ; | | exceptions.cs:451:13:451:13 | ; | exceptions.cs:456:13:456:13 | ; | +| exceptions.cs:451:13:451:13 | ; | exceptions.cs:460:13:460:13 | ; | +| exceptions.cs:468:13:468:13 | ; | exceptions.cs:473:13:473:13 | ; | +| exceptions.cs:468:13:468:13 | ; | exceptions.cs:477:13:477:13 | ; | +| exceptions.cs:468:13:468:13 | ; | exceptions.cs:481:13:481:13 | ; | | exceptions.cs:468:13:468:13 | ; | exceptions.cs:485:13:485:13 | ; | +| exceptions.cs:468:13:468:13 | ; | exceptions.cs:489:13:489:13 | ; | diff --git a/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected b/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected index 00e46f6359c..2e6a5f679ba 100644 --- a/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected +++ b/csharp/ql/test/library-tests/expressions/ConstructorInitializers.expected @@ -27,6 +27,6 @@ | file://:0:0:0:0 | TestCreations | expressions.cs:383:18:383:30 | call to constructor Object | file://:0:0:0:0 | Object | | file://:0:0:0:0 | TestUnaryOperator | expressions.cs:292:11:292:27 | call to constructor Object | file://:0:0:0:0 | Object | | file://:0:0:0:0 | TupleExprs | expressions.cs:501:11:501:20 | call to constructor Object | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | X | expressions.cs:108:15:108:18 | call to constructor Object | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | X | expressions.cs:108:15:108:15 | call to constructor Object | file://:0:0:0:0 | Object | | file://:0:0:0:0 | X | expressions.cs:216:18:216:18 | call to constructor Object | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Y | expressions.cs:104:15:104:21 | call to constructor Object | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Y | expressions.cs:104:15:104:15 | call to constructor Object | file://:0:0:0:0 | Object | diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected index 3b9a54fafb3..476875a279e 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected @@ -1,6 +1,13 @@ +#select +| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value | +| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value | +| Name.cs:13:53:13:59 | access to property TheName | NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList2.cs:31:57:31:60 | access to property Name : String | User-provided value | +| Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value | edges -| NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 | -| NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 | +| NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:1 | +| NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:1 | +models +| 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; op_Explicit; (System.String); ; Argument[0]; html-injection; manual | nodes | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | semmle.label | access to property UrlParam | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | semmle.label | access to property QueryParam | @@ -8,8 +15,3 @@ nodes | NameList2.cs:31:57:31:60 | access to property Name : String | semmle.label | access to property Name : String | | NameList.cs:31:99:31:102 | access to property Name : String | semmle.label | access to property Name : String | subpaths -#select -| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value | -| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value | -| Name.cs:13:53:13:59 | access to property TheName | NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList2.cs:31:57:31:60 | access to property Name : String | User-provided value | -| Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value | diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref index faad1d6403c..89b5b951bdb 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref @@ -1 +1,2 @@ -Security Features/CWE-079/XSS.ql \ No newline at end of file +query: Security Features/CWE-079/XSS.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/csharp/ql/test/library-tests/goto/Goto1.expected b/csharp/ql/test/library-tests/goto/Goto1.expected index e6c124726a3..0baaf5ef723 100644 --- a/csharp/ql/test/library-tests/goto/Goto1.expected +++ b/csharp/ql/test/library-tests/goto/Goto1.expected @@ -7,7 +7,7 @@ | goto.cs:5:5:20:5 | {...} | goto.cs:6:9:8:9 | {...} | semmle.label | successor | | goto.cs:6:9:8:9 | {...} | goto.cs:7:13:7:14 | s1: | semmle.label | successor | | goto.cs:7:13:7:14 | s1: | goto.cs:7:17:7:24 | goto ...; | semmle.label | successor | -| goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | +| goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto | | goto.cs:9:9:9:10 | s2: | goto.cs:9:13:9:27 | ... ...; | semmle.label | successor | | goto.cs:9:13:9:27 | ... ...; | goto.cs:9:24:9:26 | "5" | semmle.label | successor | | goto.cs:9:20:9:26 | String s = ... | goto.cs:10:9:18:9 | switch (...) {...} | semmle.label | successor | @@ -18,24 +18,24 @@ | goto.cs:12:18:12:21 | null | goto.cs:12:24:12:25 | s3: | semmle.label | match | | goto.cs:12:18:12:21 | null | goto.cs:13:13:13:21 | case ...: | semmle.label | no-match | | goto.cs:12:24:12:25 | s3: | goto.cs:12:38:12:40 | "1" | semmle.label | successor | -| goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto(1) | +| goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto | | goto.cs:12:38:12:40 | "1" | goto.cs:12:28:12:41 | goto case ...; | semmle.label | successor | | goto.cs:13:13:13:21 | case ...: | goto.cs:13:18:13:20 | "1" | semmle.label | successor | | goto.cs:13:18:13:20 | "1" | goto.cs:13:23:13:24 | s4: | semmle.label | match | | goto.cs:13:18:13:20 | "1" | goto.cs:14:13:14:21 | case ...: | semmle.label | no-match | | goto.cs:13:23:13:24 | s4: | goto.cs:13:37:13:39 | "2" | semmle.label | successor | -| goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto(2) | +| goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto | | goto.cs:13:37:13:39 | "2" | goto.cs:13:27:13:40 | goto case ...; | semmle.label | successor | | goto.cs:14:13:14:21 | case ...: | goto.cs:14:18:14:20 | "2" | semmle.label | successor | | goto.cs:14:18:14:20 | "2" | goto.cs:14:23:14:24 | s5: | semmle.label | match | | goto.cs:14:18:14:20 | "2" | goto.cs:15:13:15:21 | case ...: | semmle.label | no-match | | goto.cs:14:23:14:24 | s5: | goto.cs:14:27:14:34 | goto ...; | semmle.label | successor | -| goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | +| goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto | | goto.cs:15:13:15:21 | case ...: | goto.cs:15:18:15:20 | "3" | semmle.label | successor | | goto.cs:15:18:15:20 | "3" | goto.cs:15:23:15:24 | s6: | semmle.label | match | | goto.cs:15:18:15:20 | "3" | goto.cs:16:13:16:21 | case ...: | semmle.label | no-match | | goto.cs:15:23:15:24 | s6: | goto.cs:15:27:15:39 | goto default; | semmle.label | successor | -| goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto(default) | +| goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto | | goto.cs:16:13:16:21 | case ...: | goto.cs:16:18:16:20 | "4" | semmle.label | successor | | goto.cs:16:18:16:20 | "4" | goto.cs:16:23:16:24 | s7: | semmle.label | match | | goto.cs:16:18:16:20 | "4" | goto.cs:17:13:17:20 | default: | semmle.label | no-match | @@ -43,7 +43,7 @@ | goto.cs:16:27:16:32 | break; | goto.cs:19:9:19:10 | s9: | semmle.label | break | | goto.cs:17:13:17:20 | default: | goto.cs:17:22:17:23 | s8: | semmle.label | successor | | goto.cs:17:22:17:23 | s8: | goto.cs:17:36:17:39 | null | semmle.label | successor | -| goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto(null) | +| goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto | | goto.cs:17:36:17:39 | null | goto.cs:17:26:17:40 | goto case ...; | semmle.label | successor | | goto.cs:19:9:19:10 | s9: | goto.cs:19:12:19:12 | ; | semmle.label | successor | | goto.cs:19:12:19:12 | ; | goto.cs:4:17:4:20 | exit Main (normal) | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/locations/A.cs b/csharp/ql/test/library-tests/locations/A.cs new file mode 100644 index 00000000000..565683622da --- /dev/null +++ b/csharp/ql/test/library-tests/locations/A.cs @@ -0,0 +1,40 @@ +using System; + +public abstract class A +{ + public abstract T Prop { get; } + public abstract T this[int index] { get; set; } + public abstract event EventHandler Event; + public void Apply(T t1) { } + public abstract object ToObject(T t2); + public object Field; + public A() { } + public A(T t) { } + ~A() { } + public static A operator +(A a1, A a2) { return a1; } +} + +public class A2 : A +{ + public override string Prop => ""; + + public override string this[int i] + { + get { return ""; } + set { } + } + + public override event EventHandler Event + { + add { } + remove { } + } + + public override object ToObject(string t) => t; + + public void M() + { + A2 other = new(); + other.Apply(""); + } +} diff --git a/csharp/ql/test/library-tests/locations/B.cs b/csharp/ql/test/library-tests/locations/B.cs new file mode 100644 index 00000000000..c4cfa971116 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/B.cs @@ -0,0 +1,20 @@ +using System; + +public class B : A +{ + public override int Prop => 0; + + public override int this[int i] + { + get { return 0; } + set { } + } + + public override event EventHandler Event + { + add { } + remove { } + } + + public override object ToObject(int t) => t; +} diff --git a/csharp/ql/test/library-tests/locations/Base.cs b/csharp/ql/test/library-tests/locations/Base.cs new file mode 100644 index 00000000000..413534319c4 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/Base.cs @@ -0,0 +1,8 @@ +public abstract class Base +{ + public void M() { } + + public class InnerBase { } +} + +public abstract class Base2 { } diff --git a/csharp/ql/test/library-tests/locations/C.cs b/csharp/ql/test/library-tests/locations/C.cs new file mode 100644 index 00000000000..a4063646d53 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/C.cs @@ -0,0 +1,12 @@ +using System; + +class C +{ + public void M() + { + B b = new B(); + b.Apply(0); + A2 a2 = new A2(); + a2.Apply(""); + } +} diff --git a/csharp/ql/test/library-tests/locations/Multiple1.cs b/csharp/ql/test/library-tests/locations/Multiple1.cs new file mode 100644 index 00000000000..1d8a6491b14 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/Multiple1.cs @@ -0,0 +1,13 @@ +public partial class Multiple { } + +public partial class MultipleGeneric { } + +public class Multiple1Specific +{ + public static (int, string) M() + { + (int, string) x = (0, ""); + (int, int) y = (0, 0); + return x; + } +} diff --git a/csharp/ql/test/library-tests/locations/Multiple2.cs b/csharp/ql/test/library-tests/locations/Multiple2.cs new file mode 100644 index 00000000000..e6383306616 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/Multiple2.cs @@ -0,0 +1,11 @@ +public partial class Multiple { } + +public partial class MultipleGeneric { } + +public class Multiple2Specific +{ + public void M() + { + (int, string) z = (0, ""); + } +} diff --git a/csharp/ql/test/library-tests/locations/Sub.cs b/csharp/ql/test/library-tests/locations/Sub.cs new file mode 100644 index 00000000000..744cf63b7b1 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/Sub.cs @@ -0,0 +1,8 @@ +public class Sub : Base +{ + public void SubM() + { + M(); + var x = new InnerBase(); + } +} diff --git a/csharp/ql/test/library-tests/locations/locations.expected b/csharp/ql/test/library-tests/locations/locations.expected new file mode 100644 index 00000000000..d41369ddcd4 --- /dev/null +++ b/csharp/ql/test/library-tests/locations/locations.expected @@ -0,0 +1,179 @@ +member_locations +| A.cs:3:23:3:26 | A | A.cs:5:23:5:26 | Prop | A.cs:5:23:5:26 | A.cs:5:23:5:26 | +| A.cs:3:23:3:26 | A | A.cs:6:23:6:26 | Item | A.cs:6:23:6:26 | A.cs:6:23:6:26 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A | A.cs:8:17:8:21 | Apply | A.cs:8:17:8:21 | A.cs:8:17:8:21 | +| A.cs:3:23:3:26 | A | A.cs:9:28:9:35 | ToObject | A.cs:9:28:9:35 | A.cs:9:28:9:35 | +| A.cs:3:23:3:26 | A | A.cs:10:19:10:23 | Field | A.cs:10:19:10:23 | A.cs:10:19:10:23 | +| A.cs:3:23:3:26 | A | A.cs:11:12:11:12 | A | A.cs:11:12:11:12 | A.cs:11:12:11:12 | +| A.cs:3:23:3:26 | A | A.cs:12:12:12:12 | A | A.cs:12:12:12:12 | A.cs:12:12:12:12 | +| A.cs:3:23:3:26 | A | A.cs:13:6:13:6 | ~A | A.cs:13:6:13:6 | A.cs:13:6:13:6 | +| A.cs:3:23:3:26 | A | A.cs:14:33:14:33 | + | A.cs:14:33:14:33 | A.cs:14:33:14:33 | +| A.cs:3:23:3:26 | A | A.cs:5:23:5:26 | Prop | A.cs:5:23:5:26 | A.cs:5:23:5:26 | +| A.cs:3:23:3:26 | A | A.cs:6:23:6:26 | Item | A.cs:6:23:6:26 | A.cs:6:23:6:26 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A | A.cs:8:17:8:21 | Apply | A.cs:8:17:8:21 | A.cs:8:17:8:21 | +| A.cs:3:23:3:26 | A | A.cs:9:28:9:35 | ToObject | A.cs:9:28:9:35 | A.cs:9:28:9:35 | +| A.cs:3:23:3:26 | A | A.cs:10:19:10:23 | Field | A.cs:10:19:10:23 | A.cs:10:19:10:23 | +| A.cs:3:23:3:26 | A | A.cs:11:12:11:12 | A | A.cs:11:12:11:12 | A.cs:11:12:11:12 | +| A.cs:3:23:3:26 | A | A.cs:12:12:12:12 | A | A.cs:12:12:12:12 | A.cs:12:12:12:12 | +| A.cs:3:23:3:26 | A | A.cs:13:6:13:6 | ~A | A.cs:13:6:13:6 | A.cs:13:6:13:6 | +| A.cs:3:23:3:26 | A | A.cs:14:33:14:33 | + | A.cs:14:33:14:33 | A.cs:14:33:14:33 | +| A.cs:3:23:3:26 | A`1 | A.cs:5:23:5:26 | Prop | A.cs:5:23:5:26 | A.cs:5:23:5:26 | +| A.cs:3:23:3:26 | A`1 | A.cs:6:23:6:26 | Item | A.cs:6:23:6:26 | A.cs:6:23:6:26 | +| A.cs:3:23:3:26 | A`1 | A.cs:7:40:7:44 | Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A`1 | A.cs:8:17:8:21 | Apply | A.cs:8:17:8:21 | A.cs:8:17:8:21 | +| A.cs:3:23:3:26 | A`1 | A.cs:9:28:9:35 | ToObject | A.cs:9:28:9:35 | A.cs:9:28:9:35 | +| A.cs:3:23:3:26 | A`1 | A.cs:10:19:10:23 | Field | A.cs:10:19:10:23 | A.cs:10:19:10:23 | +| A.cs:3:23:3:26 | A`1 | A.cs:11:12:11:12 | A | A.cs:11:12:11:12 | A.cs:11:12:11:12 | +| A.cs:3:23:3:26 | A`1 | A.cs:12:12:12:12 | A | A.cs:12:12:12:12 | A.cs:12:12:12:12 | +| A.cs:3:23:3:26 | A`1 | A.cs:13:6:13:6 | ~A | A.cs:13:6:13:6 | A.cs:13:6:13:6 | +| A.cs:3:23:3:26 | A`1 | A.cs:14:33:14:33 | + | A.cs:14:33:14:33 | A.cs:14:33:14:33 | +| A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A.cs:17:14:17:15 | +| A.cs:17:14:17:15 | A2 | A.cs:19:28:19:31 | Prop | A.cs:19:28:19:31 | A.cs:19:28:19:31 | +| A.cs:17:14:17:15 | A2 | A.cs:21:28:21:31 | Item | A.cs:21:28:21:31 | A.cs:21:28:21:31 | +| A.cs:17:14:17:15 | A2 | A.cs:27:40:27:44 | Event | A.cs:27:40:27:44 | A.cs:27:40:27:44 | +| A.cs:17:14:17:15 | A2 | A.cs:33:28:33:35 | ToObject | A.cs:33:28:33:35 | A.cs:33:28:33:35 | +| A.cs:17:14:17:15 | A2 | A.cs:35:17:35:17 | M | A.cs:35:17:35:17 | A.cs:35:17:35:17 | +| B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B.cs:3:14:3:14 | +| B.cs:3:14:3:14 | B | B.cs:5:25:5:28 | Prop | B.cs:5:25:5:28 | B.cs:5:25:5:28 | +| B.cs:3:14:3:14 | B | B.cs:7:25:7:28 | Item | B.cs:7:25:7:28 | B.cs:7:25:7:28 | +| B.cs:3:14:3:14 | B | B.cs:13:40:13:44 | Event | B.cs:13:40:13:44 | B.cs:13:40:13:44 | +| B.cs:3:14:3:14 | B | B.cs:19:28:19:35 | ToObject | B.cs:19:28:19:35 | B.cs:19:28:19:35 | +| Base.cs:1:23:1:29 | Base | Base.cs:1:23:1:26 | Base | Base.cs:1:23:1:26 | Base.cs:1:23:1:26 | +| Base.cs:1:23:1:29 | Base | Base.cs:3:17:3:17 | M | Base.cs:3:17:3:17 | Base.cs:3:17:3:17 | +| Base.cs:1:23:1:29 | Base | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:1:23:1:29 | Base`1 | Base.cs:1:23:1:26 | Base | Base.cs:1:23:1:26 | Base.cs:1:23:1:26 | +| Base.cs:1:23:1:29 | Base`1 | Base.cs:3:17:3:17 | M | Base.cs:3:17:3:17 | Base.cs:3:17:3:17 | +| Base.cs:1:23:1:29 | Base`1 | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:8:23:8:30 | Base2`1 | Base.cs:8:23:8:27 | Base2 | Base.cs:8:23:8:27 | Base.cs:8:23:8:27 | +| C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | C.cs:3:7:3:7 | +| C.cs:3:7:3:7 | C | C.cs:5:17:5:17 | M | C.cs:5:17:5:17 | C.cs:5:17:5:17 | +| Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | +| Multiple1.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:36 | MultipleGeneric | Multiple1.cs:3:22:3:36 | Multiple1.cs:3:22:3:36 | +| Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | Multiple1.cs:5:14:5:30 | +| Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:7:33:7:33 | M | Multiple1.cs:7:33:7:33 | Multiple1.cs:7:33:7:33 | +| Multiple2.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | +| Multiple2.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:36 | MultipleGeneric | Multiple1.cs:3:22:3:36 | Multiple1.cs:3:22:3:36 | +| Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | Multiple2.cs:5:14:5:30 | +| Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:7:17:7:17 | M | Multiple2.cs:7:17:7:17 | Multiple2.cs:7:17:7:17 | +| Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | Sub.cs:1:14:1:16 | +| Sub.cs:1:14:1:16 | Sub | Sub.cs:3:17:3:20 | SubM | Sub.cs:3:17:3:20 | Sub.cs:3:17:3:20 | +accessor_location +| A.cs:3:23:3:26 | A | A.cs:5:30:5:32 | get_Prop | A.cs:5:30:5:32 | A.cs:5:30:5:32 | +| A.cs:3:23:3:26 | A | A.cs:6:41:6:43 | get_Item | A.cs:6:41:6:43 | A.cs:6:41:6:43 | +| A.cs:3:23:3:26 | A | A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A | A.cs:5:30:5:32 | get_Prop | A.cs:5:30:5:32 | A.cs:5:30:5:32 | +| A.cs:3:23:3:26 | A | A.cs:6:41:6:43 | get_Item | A.cs:6:41:6:43 | A.cs:6:41:6:43 | +| A.cs:3:23:3:26 | A | A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A | A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A`1 | A.cs:5:30:5:32 | get_Prop | A.cs:5:30:5:32 | A.cs:5:30:5:32 | +| A.cs:3:23:3:26 | A`1 | A.cs:6:41:6:43 | get_Item | A.cs:6:41:6:43 | A.cs:6:41:6:43 | +| A.cs:3:23:3:26 | A`1 | A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:3:23:3:26 | A`1 | A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:3:23:3:26 | A`1 | A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:17:14:17:15 | A2 | A.cs:19:36:19:37 | get_Prop | A.cs:19:36:19:37 | A.cs:19:36:19:37 | +| A.cs:17:14:17:15 | A2 | A.cs:23:9:23:11 | get_Item | A.cs:23:9:23:11 | A.cs:23:9:23:11 | +| A.cs:17:14:17:15 | A2 | A.cs:24:9:24:11 | set_Item | A.cs:24:9:24:11 | A.cs:24:9:24:11 | +| A.cs:17:14:17:15 | A2 | A.cs:29:9:29:11 | add_Event | A.cs:29:9:29:11 | A.cs:29:9:29:11 | +| A.cs:17:14:17:15 | A2 | A.cs:30:9:30:14 | remove_Event | A.cs:30:9:30:14 | A.cs:30:9:30:14 | +| B.cs:3:14:3:14 | B | B.cs:5:33:5:33 | get_Prop | B.cs:5:33:5:33 | B.cs:5:33:5:33 | +| B.cs:3:14:3:14 | B | B.cs:9:9:9:11 | get_Item | B.cs:9:9:9:11 | B.cs:9:9:9:11 | +| B.cs:3:14:3:14 | B | B.cs:10:9:10:11 | set_Item | B.cs:10:9:10:11 | B.cs:10:9:10:11 | +| B.cs:3:14:3:14 | B | B.cs:15:9:15:11 | add_Event | B.cs:15:9:15:11 | B.cs:15:9:15:11 | +| B.cs:3:14:3:14 | B | B.cs:16:9:16:14 | remove_Event | B.cs:16:9:16:14 | B.cs:16:9:16:14 | +type_location +| A.cs:3:23:3:26 | A | A.cs:3:23:3:26 | A.cs:3:23:3:26 | +| A.cs:3:23:3:26 | A | A.cs:3:23:3:26 | A.cs:3:23:3:26 | +| A.cs:3:23:3:26 | A`1 | A.cs:3:23:3:26 | A.cs:3:23:3:26 | +| A.cs:3:25:3:25 | T | A.cs:3:25:3:25 | A.cs:3:25:3:25 | +| A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A.cs:17:14:17:15 | +| B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B.cs:3:14:3:14 | +| Base.cs:1:23:1:29 | Base | Base.cs:1:23:1:29 | Base.cs:1:23:1:29 | +| Base.cs:1:23:1:29 | Base`1 | Base.cs:1:23:1:29 | Base.cs:1:23:1:29 | +| Base.cs:1:28:1:28 | T | Base.cs:1:28:1:28 | Base.cs:1:28:1:28 | +| Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +| Base.cs:8:23:8:30 | Base2`1 | Base.cs:8:23:8:30 | Base.cs:8:23:8:30 | +| Base.cs:8:29:8:29 | T | Base.cs:8:29:8:29 | Base.cs:8:29:8:29 | +| C.cs:3:7:3:7 | C | C.cs:3:7:3:7 | C.cs:3:7:3:7 | +| Multiple1.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | +| Multiple1.cs:1:22:1:29 | Multiple | Multiple2.cs:1:22:1:29 | Multiple2.cs:1:22:1:29 | +| Multiple1.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:39 | Multiple1.cs:3:22:3:39 | +| Multiple1.cs:3:22:3:39 | MultipleGeneric`1 | Multiple2.cs:3:22:3:39 | Multiple2.cs:3:22:3:39 | +| Multiple1.cs:3:38:3:38 | S | Multiple1.cs:3:38:3:38 | Multiple1.cs:3:38:3:38 | +| Multiple1.cs:5:14:5:30 | Multiple1Specific | Multiple1.cs:5:14:5:30 | Multiple1.cs:5:14:5:30 | +| Multiple1.cs:7:19:7:31 | (Int32,String) | Multiple1.cs:7:19:7:31 | Multiple1.cs:7:19:7:31 | +| Multiple1.cs:10:9:10:18 | (Int32,Int32) | Multiple1.cs:10:9:10:18 | Multiple1.cs:10:9:10:18 | +| Multiple2.cs:1:22:1:29 | Multiple | Multiple1.cs:1:22:1:29 | Multiple1.cs:1:22:1:29 | +| Multiple2.cs:1:22:1:29 | Multiple | Multiple2.cs:1:22:1:29 | Multiple2.cs:1:22:1:29 | +| Multiple2.cs:3:22:3:39 | MultipleGeneric`1 | Multiple1.cs:3:22:3:39 | Multiple1.cs:3:22:3:39 | +| Multiple2.cs:3:22:3:39 | MultipleGeneric`1 | Multiple2.cs:3:22:3:39 | Multiple2.cs:3:22:3:39 | +| Multiple2.cs:5:14:5:30 | Multiple2Specific | Multiple2.cs:5:14:5:30 | Multiple2.cs:5:14:5:30 | +| Sub.cs:1:14:1:16 | Sub | Sub.cs:1:14:1:16 | Sub.cs:1:14:1:16 | +calltype_location +| A.cs:17:14:17:15 | call to constructor A | A.cs:3:23:3:26 | A | A.cs:3:23:3:26 | A.cs:3:23:3:26 | +| A.cs:37:20:37:24 | object creation of type A2 | A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A.cs:17:14:17:15 | +| B.cs:3:14:3:14 | call to constructor A | A.cs:3:23:3:26 | A | A.cs:3:23:3:26 | A.cs:3:23:3:26 | +| C.cs:7:15:7:21 | object creation of type B | B.cs:3:14:3:14 | B | B.cs:3:14:3:14 | B.cs:3:14:3:14 | +| C.cs:9:17:9:24 | object creation of type A2 | A.cs:17:14:17:15 | A2 | A.cs:17:14:17:15 | A.cs:17:14:17:15 | +| Sub.cs:1:14:1:16 | call to constructor Base | Base.cs:1:23:1:29 | Base | Base.cs:1:23:1:29 | Base.cs:1:23:1:29 | +| Sub.cs:6:17:6:31 | object creation of type InnerBase | Base.cs:5:18:5:26 | InnerBase | Base.cs:5:18:5:26 | Base.cs:5:18:5:26 | +typeparameter_location +| A.cs:3:25:3:25 | T | A.cs:3:25:3:25 | A.cs:3:25:3:25 | +| Base.cs:1:28:1:28 | T | Base.cs:1:28:1:28 | Base.cs:1:28:1:28 | +| Base.cs:8:29:8:29 | T | Base.cs:8:29:8:29 | Base.cs:8:29:8:29 | +| Multiple1.cs:3:38:3:38 | S | Multiple1.cs:3:38:3:38 | Multiple1.cs:3:38:3:38 | +| Multiple1.cs:3:38:3:38 | S | Multiple2.cs:3:38:3:38 | Multiple2.cs:3:38:3:38 | +tupletype_location +| Multiple1.cs:7:19:7:31 | (Int32,String) | Multiple1.cs:7:19:7:31 | Multiple1.cs:7:19:7:31 | +| Multiple1.cs:7:19:7:31 | (Int32,String) | Multiple2.cs:9:9:9:21 | Multiple2.cs:9:9:9:21 | +| Multiple1.cs:10:9:10:18 | (Int32,Int32) | Multiple1.cs:10:9:10:18 | Multiple1.cs:10:9:10:18 | +parameter_locations +| A.cs:6:41:6:43 | get_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:41:6:43 | get_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:41:6:43 | get_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:32:6:36 | index | A.cs:6:32:6:36 | A.cs:6:32:6:36 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | value | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | value | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:6:46:6:48 | set_Item | A.cs:6:46:6:48 | value | A.cs:6:46:6:48 | A.cs:6:46:6:48 | +| A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:7:40:7:44 | add_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:7:40:7:44 | remove_Event | A.cs:7:40:7:44 | value | A.cs:7:40:7:44 | A.cs:7:40:7:44 | +| A.cs:8:17:8:21 | Apply | A.cs:8:25:8:26 | t1 | A.cs:8:25:8:26 | A.cs:8:25:8:26 | +| A.cs:8:17:8:21 | Apply | A.cs:8:25:8:26 | t1 | A.cs:8:25:8:26 | A.cs:8:25:8:26 | +| A.cs:8:17:8:21 | Apply | A.cs:8:25:8:26 | t1 | A.cs:8:25:8:26 | A.cs:8:25:8:26 | +| A.cs:9:28:9:35 | ToObject | A.cs:9:39:9:40 | t2 | A.cs:9:39:9:40 | A.cs:9:39:9:40 | +| A.cs:9:28:9:35 | ToObject | A.cs:9:39:9:40 | t2 | A.cs:9:39:9:40 | A.cs:9:39:9:40 | +| A.cs:9:28:9:35 | ToObject | A.cs:9:39:9:40 | t2 | A.cs:9:39:9:40 | A.cs:9:39:9:40 | +| A.cs:12:12:12:12 | A | A.cs:12:16:12:16 | t | A.cs:12:16:12:16 | A.cs:12:16:12:16 | +| A.cs:12:12:12:12 | A | A.cs:12:16:12:16 | t | A.cs:12:16:12:16 | A.cs:12:16:12:16 | +| A.cs:12:12:12:12 | A | A.cs:12:16:12:16 | t | A.cs:12:16:12:16 | A.cs:12:16:12:16 | +| A.cs:14:33:14:33 | + | A.cs:14:40:14:41 | a1 | A.cs:14:40:14:41 | A.cs:14:40:14:41 | +| A.cs:14:33:14:33 | + | A.cs:14:40:14:41 | a1 | A.cs:14:40:14:41 | A.cs:14:40:14:41 | +| A.cs:14:33:14:33 | + | A.cs:14:40:14:41 | a1 | A.cs:14:40:14:41 | A.cs:14:40:14:41 | +| A.cs:14:33:14:33 | + | A.cs:14:49:14:50 | a2 | A.cs:14:49:14:50 | A.cs:14:49:14:50 | +| A.cs:14:33:14:33 | + | A.cs:14:49:14:50 | a2 | A.cs:14:49:14:50 | A.cs:14:49:14:50 | +| A.cs:14:33:14:33 | + | A.cs:14:49:14:50 | a2 | A.cs:14:49:14:50 | A.cs:14:49:14:50 | +| A.cs:23:9:23:11 | get_Item | A.cs:21:37:21:37 | i | A.cs:21:37:21:37 | A.cs:21:37:21:37 | +| A.cs:24:9:24:11 | set_Item | A.cs:21:37:21:37 | i | A.cs:21:37:21:37 | A.cs:21:37:21:37 | +| A.cs:24:9:24:11 | set_Item | A.cs:24:9:24:11 | value | A.cs:24:9:24:11 | A.cs:24:9:24:11 | +| A.cs:29:9:29:11 | add_Event | A.cs:29:9:29:11 | value | A.cs:29:9:29:11 | A.cs:29:9:29:11 | +| A.cs:30:9:30:14 | remove_Event | A.cs:30:9:30:14 | value | A.cs:30:9:30:14 | A.cs:30:9:30:14 | +| A.cs:33:28:33:35 | ToObject | A.cs:33:44:33:44 | t | A.cs:33:44:33:44 | A.cs:33:44:33:44 | +| B.cs:9:9:9:11 | get_Item | B.cs:7:34:7:34 | i | B.cs:7:34:7:34 | B.cs:7:34:7:34 | +| B.cs:10:9:10:11 | set_Item | B.cs:7:34:7:34 | i | B.cs:7:34:7:34 | B.cs:7:34:7:34 | +| B.cs:10:9:10:11 | set_Item | B.cs:10:9:10:11 | value | B.cs:10:9:10:11 | B.cs:10:9:10:11 | +| B.cs:15:9:15:11 | add_Event | B.cs:15:9:15:11 | value | B.cs:15:9:15:11 | B.cs:15:9:15:11 | +| B.cs:16:9:16:14 | remove_Event | B.cs:16:9:16:14 | value | B.cs:16:9:16:14 | B.cs:16:9:16:14 | +| B.cs:19:28:19:35 | ToObject | B.cs:19:41:19:41 | t | B.cs:19:41:19:41 | B.cs:19:41:19:41 | diff --git a/csharp/ql/test/library-tests/locations/locations.ql b/csharp/ql/test/library-tests/locations/locations.ql new file mode 100644 index 00000000000..d97852d7b3b --- /dev/null +++ b/csharp/ql/test/library-tests/locations/locations.ql @@ -0,0 +1,31 @@ +import csharp + +query predicate member_locations(Type t, Member m, SourceLocation l) { + t = m.getDeclaringType() and + l = m.getLocation() and + not l instanceof EmptyLocation and + t.fromSource() +} + +query predicate accessor_location(Type t, Accessor a, SourceLocation l) { + t = a.getDeclaringType() and + l = a.getLocation() and + not l instanceof EmptyLocation +} + +query predicate type_location(Type t, SourceLocation l) { + l = t.getLocation() and not l instanceof EmptyLocation +} + +query predicate calltype_location(Call call, Type t, SourceLocation l) { + t = call.getType() and + l = t.getALocation() +} + +query predicate typeparameter_location(TypeParameter tp, SourceLocation l) { tp.getALocation() = l } + +query predicate tupletype_location(TupleType tt, SourceLocation l) { tt.getALocation() = l } + +query predicate parameter_locations(Callable c, Parameter p, SourceLocation l) { + p.getCallable() = c and p.getALocation() = l +} diff --git a/csharp/ql/test/library-tests/overlay/base/A.cs b/csharp/ql/test/library-tests/overlay/base/A.cs new file mode 100644 index 00000000000..263824a575c --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/A.cs @@ -0,0 +1,66 @@ +using System; + +namespace ConsoleApp1 +{ + public class A + { + private string name; + public A(string x) + { + name = x; + } + + // Destructor + ~A() + { + Console.WriteLine("Destructor called!"); + } + + public string Prop { get; set; } = "Hello"; + + public object this[int i] + { + get { return new object(); } + set { } + } + + /* + * An example event + */ + public event EventHandler Clicked + { + add + { + Console.WriteLine("Handler added"); + } + remove + { + Console.WriteLine("Handler removed"); + } + } + + public static A operator +(A a, A b) + { + return a; + } + + [MyObsolete] + public void ObsoleteMethod() { } + + public int OldMethod(int x) + { + var y = x + 1; + return y; + } + + public override string ToString() + { + var x = $"A: {name}"; + return x; + } + } + + public class MyObsoleteAttribute : Attribute { } + + public class B { } +} diff --git a/csharp/ql/test/library-tests/overlay/base/Program.cs b/csharp/ql/test/library-tests/overlay/base/Program.cs new file mode 100644 index 00000000000..bc57d682a26 --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/Program.cs @@ -0,0 +1,65 @@ +using System; + +namespace ConsoleApp1 +{ + internal class Program + { + public static void Main(string[] args) + { + if (args.Length == 0) + { + Console.WriteLine("Print usage instructions here."); + return; + } + var x = args[0]; + var a = new A(x); + Console.WriteLine(a.ToString()); + } + + private string programName; + + public Program(string x) + { + programName = x; + } + + // Program destructor + ~Program() + { + Console.WriteLine("Program destructor called!"); + } + + public string ProgramProp { get; set; } = "Hello World!"; + + public string this[int i] + { + get { return string.Empty; } + set { } + } + + /* + * A program event. + */ + public event EventHandler ProgramClicked + { + add + { + Console.WriteLine("Program handler added"); + } + remove + { + Console.WriteLine("Program handler removed"); + } + } + + public static Program operator -(Program a, Program b) + { + return b; + } + + [Program] + public void AnnotatedMethod() { } + } + + public class ProgramAttribute : Attribute { } +} diff --git a/csharp/ql/test/library-tests/overlay/base/options b/csharp/ql/test/library-tests/overlay/base/options new file mode 100644 index 00000000000..7ba3811b2af --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/options @@ -0,0 +1 @@ +semmle-extractor-options: --standalone diff --git a/csharp/ql/test/library-tests/overlay/base/test.expected b/csharp/ql/test/library-tests/overlay/base/test.expected new file mode 100644 index 00000000000..0c2b5750f2c --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/test.expected @@ -0,0 +1,276 @@ +expressions +| A.cs:8:16:8:16 | call to constructor Object | +| A.cs:10:13:10:16 | access to field name | +| A.cs:10:13:10:16 | this access | +| A.cs:10:13:10:20 | ... = ... | +| A.cs:10:20:10:20 | access to parameter x | +| A.cs:16:13:16:19 | access to type Console | +| A.cs:16:13:16:51 | call to method WriteLine | +| A.cs:16:31:16:50 | "Destructor called!" | +| A.cs:19:23:19:26 | access to property Prop | +| A.cs:19:23:19:26 | this access | +| A.cs:19:42:19:50 | ... = ... | +| A.cs:19:44:19:50 | "Hello" | +| A.cs:23:26:23:37 | object creation of type Object | +| A.cs:34:17:34:23 | access to type Console | +| A.cs:34:17:34:50 | call to method WriteLine | +| A.cs:34:35:34:49 | "Handler added" | +| A.cs:38:17:38:23 | access to type Console | +| A.cs:38:17:38:52 | call to method WriteLine | +| A.cs:38:35:38:51 | "Handler removed" | +| A.cs:44:20:44:20 | access to parameter a | +| A.cs:52:17:52:17 | access to local variable y | +| A.cs:52:17:52:25 | Int32 y = ... | +| A.cs:52:21:52:21 | access to parameter x | +| A.cs:52:21:52:25 | ... + ... | +| A.cs:52:25:52:25 | 1 | +| A.cs:53:20:53:20 | access to local variable y | +| A.cs:58:17:58:17 | access to local variable x | +| A.cs:58:17:58:32 | String x = ... | +| A.cs:58:21:58:32 | $"..." | +| A.cs:58:23:58:25 | "A: " | +| A.cs:58:26:58:31 | {...} | +| A.cs:58:27:58:30 | access to field name | +| A.cs:58:27:58:30 | this access | +| A.cs:59:20:59:20 | access to local variable x | +| A.cs:63:18:63:36 | call to constructor Attribute | +| A.cs:65:18:65:18 | call to constructor Object | +| Program.cs:9:17:9:20 | access to parameter args | +| Program.cs:9:17:9:27 | access to property Length | +| Program.cs:9:17:9:32 | ... == ... | +| Program.cs:9:32:9:32 | 0 | +| Program.cs:11:17:11:23 | access to type Console | +| Program.cs:11:17:11:67 | call to method WriteLine | +| Program.cs:11:35:11:66 | "Print usage instructions here." | +| Program.cs:14:17:14:17 | access to local variable x | +| Program.cs:14:17:14:27 | String x = ... | +| Program.cs:14:21:14:24 | access to parameter args | +| Program.cs:14:21:14:27 | access to array element | +| Program.cs:14:26:14:26 | 0 | +| Program.cs:15:17:15:17 | access to local variable a | +| Program.cs:15:17:15:28 | A a = ... | +| Program.cs:15:21:15:28 | object creation of type A | +| Program.cs:15:27:15:27 | access to local variable x | +| Program.cs:16:13:16:19 | access to type Console | +| Program.cs:16:13:16:43 | call to method WriteLine | +| Program.cs:16:31:16:31 | access to local variable a | +| Program.cs:16:31:16:42 | call to method ToString | +| Program.cs:21:16:21:22 | call to constructor Object | +| Program.cs:23:13:23:23 | access to field programName | +| Program.cs:23:13:23:23 | this access | +| Program.cs:23:13:23:27 | ... = ... | +| Program.cs:23:27:23:27 | access to parameter x | +| Program.cs:29:13:29:19 | access to type Console | +| Program.cs:29:13:29:59 | call to method WriteLine | +| Program.cs:29:31:29:58 | "Program destructor called!" | +| Program.cs:32:23:32:33 | access to property ProgramProp | +| Program.cs:32:23:32:33 | this access | +| Program.cs:32:49:32:64 | ... = ... | +| Program.cs:32:51:32:64 | "Hello World!" | +| Program.cs:36:26:36:31 | access to type String | +| Program.cs:36:26:36:37 | access to field Empty | +| Program.cs:47:17:47:23 | access to type Console | +| Program.cs:47:17:47:58 | call to method WriteLine | +| Program.cs:47:35:47:57 | "Program handler added" | +| Program.cs:51:17:51:23 | access to type Console | +| Program.cs:51:17:51:60 | call to method WriteLine | +| Program.cs:51:35:51:59 | "Program handler removed" | +| Program.cs:57:20:57:20 | access to parameter b | +| Program.cs:64:18:64:33 | call to constructor Attribute | +statements +| A.cs:9:9:11:9 | {...} | +| A.cs:10:13:10:21 | ...; | +| A.cs:15:9:17:9 | {...} | +| A.cs:16:13:16:52 | ...; | +| A.cs:23:17:23:40 | {...} | +| A.cs:23:19:23:38 | return ...; | +| A.cs:24:17:24:19 | {...} | +| A.cs:33:13:35:13 | {...} | +| A.cs:34:17:34:51 | ...; | +| A.cs:37:13:39:13 | {...} | +| A.cs:38:17:38:53 | ...; | +| A.cs:43:9:45:9 | {...} | +| A.cs:44:13:44:21 | return ...; | +| A.cs:48:38:48:40 | {...} | +| A.cs:51:9:54:9 | {...} | +| A.cs:52:13:52:26 | ... ...; | +| A.cs:53:13:53:21 | return ...; | +| A.cs:57:9:60:9 | {...} | +| A.cs:58:13:58:33 | ... ...; | +| A.cs:59:13:59:21 | return ...; | +| A.cs:63:18:63:36 | {...} | +| A.cs:65:18:65:18 | {...} | +| Program.cs:8:9:17:9 | {...} | +| Program.cs:9:13:13:13 | if (...) ... | +| Program.cs:10:13:13:13 | {...} | +| Program.cs:11:17:11:68 | ...; | +| Program.cs:12:17:12:23 | return ...; | +| Program.cs:14:13:14:28 | ... ...; | +| Program.cs:15:13:15:29 | ... ...; | +| Program.cs:16:13:16:44 | ...; | +| Program.cs:22:9:24:9 | {...} | +| Program.cs:23:13:23:28 | ...; | +| Program.cs:28:9:30:9 | {...} | +| Program.cs:29:13:29:60 | ...; | +| Program.cs:36:17:36:40 | {...} | +| Program.cs:36:19:36:38 | return ...; | +| Program.cs:37:17:37:19 | {...} | +| Program.cs:46:13:48:13 | {...} | +| Program.cs:47:17:47:59 | ...; | +| Program.cs:50:13:52:13 | {...} | +| Program.cs:51:17:51:61 | ...; | +| Program.cs:56:9:58:9 | {...} | +| Program.cs:57:13:57:21 | return ...; | +| Program.cs:61:39:61:41 | {...} | +| Program.cs:64:18:64:33 | {...} | +methods +| A.cs:48:21:48:34 | ObsoleteMethod | +| A.cs:50:20:50:28 | OldMethod | +| A.cs:56:32:56:39 | ToString | +| Program.cs:7:28:7:31 | Main | +| Program.cs:61:21:61:35 | AnnotatedMethod | +types +| A.cs:5:18:5:18 | A | +| A.cs:63:18:63:36 | MyObsoleteAttribute | +| A.cs:65:18:65:18 | B | +| Program.cs:5:20:5:26 | Program | +| Program.cs:64:18:64:33 | ProgramAttribute | +parameters +| A.cs:8:25:8:25 | x | +| A.cs:19:35:19:37 | value | +| A.cs:21:32:21:32 | i | +| A.cs:21:32:21:32 | i | +| A.cs:21:32:21:32 | i | +| A.cs:24:13:24:15 | value | +| A.cs:32:13:32:15 | value | +| A.cs:36:13:36:18 | value | +| A.cs:42:38:42:38 | a | +| A.cs:42:43:42:43 | b | +| A.cs:50:34:50:34 | x | +| Program.cs:7:42:7:45 | args | +| Program.cs:21:31:21:31 | x | +| Program.cs:32:42:32:44 | value | +| Program.cs:34:32:34:32 | i | +| Program.cs:34:32:34:32 | i | +| Program.cs:34:32:34:32 | i | +| Program.cs:37:13:37:15 | value | +| Program.cs:45:13:45:15 | value | +| Program.cs:49:13:49:18 | value | +| Program.cs:55:50:55:50 | a | +| Program.cs:55:61:55:61 | b | +operators +| A.cs:42:34:42:34 | + | +| Program.cs:55:40:55:40 | - | +constructors +| A.cs:8:16:8:16 | A | +| Program.cs:21:16:21:22 | Program | +destructors +| A.cs:14:10:14:10 | ~A | +| Program.cs:27:10:27:16 | ~Program | +fields +| A.cs:7:24:7:27 | name | +| Program.cs:19:24:19:34 | programName | +properties +| A.cs:19:23:19:26 | Prop | +| Program.cs:32:23:32:33 | ProgramProp | +indexers +| A.cs:21:23:21:26 | Item | +| Program.cs:34:23:34:26 | Item | +accessors +| A.cs:19:30:19:32 | get_Prop | +| A.cs:19:35:19:37 | set_Prop | +| A.cs:23:13:23:15 | get_Item | +| A.cs:24:13:24:15 | set_Item | +| A.cs:32:13:32:15 | add_Clicked | +| A.cs:36:13:36:18 | remove_Clicked | +| Program.cs:32:37:32:39 | get_ProgramProp | +| Program.cs:32:42:32:44 | set_ProgramProp | +| Program.cs:36:13:36:15 | get_Item | +| Program.cs:37:13:37:15 | set_Item | +| Program.cs:45:13:45:15 | add_ProgramClicked | +| Program.cs:49:13:49:18 | remove_ProgramClicked | +attributes +| A.cs:47:10:47:19 | [MyObsolete(...)] | +| Program.cs:60:10:60:16 | [Program(...)] | +events +| A.cs:30:35:30:41 | Clicked | +| Program.cs:43:35:43:48 | ProgramClicked | +eventAccessors +| A.cs:32:13:32:15 | add_Clicked | +| A.cs:36:13:36:18 | remove_Clicked | +| Program.cs:45:13:45:15 | add_ProgramClicked | +| Program.cs:49:13:49:18 | remove_ProgramClicked | +usingDirectives +| A.cs:1:1:1:13 | using ...; | +| Program.cs:1:1:1:13 | using ...; | +commentLines +| A.cs:13:9:13:21 | // ... | +| A.cs:27:9:27:10 | /* ... */ | +| A.cs:28:1:28:27 | /* ... */ | +| A.cs:29:1:29:11 | /* ... */ | +| Program.cs:26:9:26:29 | // ... | +| Program.cs:40:9:40:10 | /* ... */ | +| Program.cs:41:1:41:27 | /* ... */ | +| Program.cs:42:1:42:11 | /* ... */ | +commentBlocks +| A.cs:13:9:13:21 | // ... | +| A.cs:27:9:29:11 | /* ... */ | +| Program.cs:26:9:26:29 | // ... | +| Program.cs:40:9:42:11 | /* ... */ | +typeMentions +| A.cs:7:17:7:22 | String | +| A.cs:8:18:8:23 | String | +| A.cs:16:13:16:19 | Console | +| A.cs:19:16:19:21 | String | +| A.cs:21:16:21:21 | Object | +| A.cs:21:28:21:30 | Int32 | +| A.cs:23:30:23:35 | Object | +| A.cs:34:17:34:23 | Console | +| A.cs:38:17:38:23 | Console | +| A.cs:42:23:42:23 | A | +| A.cs:42:36:42:36 | A | +| A.cs:42:41:42:41 | A | +| A.cs:47:10:47:19 | MyObsoleteAttribute | +| A.cs:48:16:48:19 | Void | +| A.cs:50:16:50:18 | Int32 | +| A.cs:50:30:50:32 | Int32 | +| A.cs:52:13:52:15 | Int32 | +| A.cs:56:25:56:30 | String | +| A.cs:58:13:58:15 | String | +| A.cs:63:40:63:48 | Attribute | +| Program.cs:7:23:7:26 | Void | +| Program.cs:7:33:7:38 | String | +| Program.cs:7:33:7:40 | String[] | +| Program.cs:11:17:11:23 | Console | +| Program.cs:14:13:14:15 | String | +| Program.cs:15:13:15:15 | A | +| Program.cs:15:25:15:25 | A | +| Program.cs:16:13:16:19 | Console | +| Program.cs:19:17:19:22 | String | +| Program.cs:21:24:21:29 | String | +| Program.cs:29:13:29:19 | Console | +| Program.cs:32:16:32:21 | String | +| Program.cs:34:16:34:21 | String | +| Program.cs:34:28:34:30 | Int32 | +| Program.cs:36:26:36:31 | String | +| Program.cs:47:17:47:23 | Console | +| Program.cs:51:17:51:23 | Console | +| Program.cs:55:23:55:29 | Program | +| Program.cs:55:42:55:48 | Program | +| Program.cs:55:53:55:59 | Program | +| Program.cs:60:10:60:16 | ProgramAttribute | +| Program.cs:61:16:61:19 | Void | +| Program.cs:64:37:64:45 | Attribute | +xmlLocatables +| web.changed.config:2:1:12:17 | configuration | +| web.changed.config:3:3:4:16 | system.web | +| web.changed.config:5:3:11:22 | system.webServer | +| web.changed.config:6:5:10:20 | httpProtocol | +| web.changed.config:7:7:9:23 | customHeaders | +| web.changed.config:8:9:8:42 | add | +| web.changed.config:8:9:8:42 | name=MyOption | +| web.changed.config:8:9:8:42 | value=1 | +| web.unchanged.config:2:1:6:17 | configuration | +| web.unchanged.config:3:3:5:16 | system.web | +| web.unchanged.config:4:5:4:37 | httpCookies | +| web.unchanged.config:4:5:4:37 | requireSSL=true | diff --git a/csharp/ql/test/library-tests/overlay/base/test.qlref b/csharp/ql/test/library-tests/overlay/base/test.qlref new file mode 100644 index 00000000000..bbce8f8b98d --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/test.qlref @@ -0,0 +1 @@ +query: ../test.ql diff --git a/csharp/ql/test/library-tests/overlay/base/web.changed.config b/csharp/ql/test/library-tests/overlay/base/web.changed.config new file mode 100644 index 00000000000..a678c32c5a0 --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/base/web.changed.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Web.config b/csharp/ql/test/library-tests/overlay/base/web.unchanged.config similarity index 73% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Web.config rename to csharp/ql/test/library-tests/overlay/base/web.unchanged.config index 96fd10c05b7..e4dc561c53f 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigEmpty/Web.config +++ b/csharp/ql/test/library-tests/overlay/base/web.unchanged.config @@ -1,6 +1,6 @@ - + diff --git a/csharp/ql/test/library-tests/overlay/codeql-test.yml b/csharp/ql/test/library-tests/overlay/codeql-test.yml new file mode 100644 index 00000000000..59ca317af6f --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/codeql-test.yml @@ -0,0 +1,3 @@ +overlay: + base: "base/" + overlay: "overlay/" diff --git a/csharp/ql/test/library-tests/overlay/options b/csharp/ql/test/library-tests/overlay/options new file mode 100644 index 00000000000..7ba3811b2af --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/options @@ -0,0 +1 @@ +semmle-extractor-options: --standalone diff --git a/csharp/ql/test/library-tests/overlay/overlay/A.cs b/csharp/ql/test/library-tests/overlay/overlay/A.cs new file mode 100644 index 00000000000..7955f810bd8 --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/overlay/A.cs @@ -0,0 +1,70 @@ +using System; + +namespace ConsoleApp1 +{ + public class C { } + + public class A + { + private string name; + public A(string x) + { + name = x; + } + + // Destructor + ~A() + { + Console.WriteLine("Destructor called!"); + } + + public string Prop { get; set; } = "Hello"; + + public object this[int i] + { + get { return new object(); } + set { } + } + + /* + * An example event + */ + public event EventHandler Clicked + { + add + { + Console.WriteLine("Handler added"); + } + remove + { + Console.WriteLine("Handler removed"); + } + } + + public static A operator +(A a, A b) + { + return a; + } + + [MyObsolete] + public void ObsoleteMethod() { } + + + public override string ToString() + { + string y; + y = $"Name: {name}"; + return y; + } + + public void NewMethod() + { + if (name.EndsWith("test")) + { + name = name.ToUpper(); + } + } + } + + public class MyObsoleteAttribute : Attribute { } +} diff --git a/csharp/ql/test/library-tests/overlay/overlay/Program.cs b/csharp/ql/test/library-tests/overlay/overlay/Program.cs new file mode 100644 index 00000000000..bc57d682a26 --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/overlay/Program.cs @@ -0,0 +1,65 @@ +using System; + +namespace ConsoleApp1 +{ + internal class Program + { + public static void Main(string[] args) + { + if (args.Length == 0) + { + Console.WriteLine("Print usage instructions here."); + return; + } + var x = args[0]; + var a = new A(x); + Console.WriteLine(a.ToString()); + } + + private string programName; + + public Program(string x) + { + programName = x; + } + + // Program destructor + ~Program() + { + Console.WriteLine("Program destructor called!"); + } + + public string ProgramProp { get; set; } = "Hello World!"; + + public string this[int i] + { + get { return string.Empty; } + set { } + } + + /* + * A program event. + */ + public event EventHandler ProgramClicked + { + add + { + Console.WriteLine("Program handler added"); + } + remove + { + Console.WriteLine("Program handler removed"); + } + } + + public static Program operator -(Program a, Program b) + { + return b; + } + + [Program] + public void AnnotatedMethod() { } + } + + public class ProgramAttribute : Attribute { } +} diff --git a/csharp/ql/test/library-tests/overlay/overlay/options b/csharp/ql/test/library-tests/overlay/overlay/options new file mode 100644 index 00000000000..7ba3811b2af --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/overlay/options @@ -0,0 +1 @@ +semmle-extractor-options: --standalone diff --git a/csharp/ql/test/library-tests/overlay/overlay/test.expected b/csharp/ql/test/library-tests/overlay/overlay/test.expected new file mode 100644 index 00000000000..d9d4d0ec6fe --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/overlay/test.expected @@ -0,0 +1,274 @@ +expressions +| A.cs:5:18:5:18 | call to constructor Object | +| A.cs:10:16:10:16 | call to constructor Object | +| A.cs:12:13:12:16 | access to field name | +| A.cs:12:13:12:16 | this access | +| A.cs:12:13:12:20 | ... = ... | +| A.cs:12:20:12:20 | access to parameter x | +| A.cs:18:13:18:19 | access to type Console | +| A.cs:18:13:18:51 | call to method WriteLine | +| A.cs:18:31:18:50 | "Destructor called!" | +| A.cs:21:23:21:26 | access to property Prop | +| A.cs:21:23:21:26 | this access | +| A.cs:21:42:21:50 | ... = ... | +| A.cs:21:44:21:50 | "Hello" | +| A.cs:25:26:25:37 | object creation of type Object | +| A.cs:36:17:36:23 | access to type Console | +| A.cs:36:17:36:50 | call to method WriteLine | +| A.cs:36:35:36:49 | "Handler added" | +| A.cs:40:17:40:23 | access to type Console | +| A.cs:40:17:40:52 | call to method WriteLine | +| A.cs:40:35:40:51 | "Handler removed" | +| A.cs:46:20:46:20 | access to parameter a | +| A.cs:55:20:55:20 | String y | +| A.cs:56:13:56:13 | access to local variable y | +| A.cs:56:13:56:31 | ... = ... | +| A.cs:56:17:56:31 | $"..." | +| A.cs:56:19:56:24 | "Name: " | +| A.cs:56:25:56:30 | {...} | +| A.cs:56:26:56:29 | access to field name | +| A.cs:56:26:56:29 | this access | +| A.cs:57:20:57:20 | access to local variable y | +| A.cs:62:17:62:20 | access to field name | +| A.cs:62:17:62:20 | this access | +| A.cs:62:17:62:37 | call to method EndsWith | +| A.cs:62:31:62:36 | "test" | +| A.cs:64:17:64:20 | access to field name | +| A.cs:64:17:64:20 | this access | +| A.cs:64:17:64:37 | ... = ... | +| A.cs:64:24:64:27 | access to field name | +| A.cs:64:24:64:27 | this access | +| A.cs:64:24:64:37 | call to method ToUpper | +| A.cs:69:18:69:36 | call to constructor Attribute | +| Program.cs:9:17:9:20 | access to parameter args | +| Program.cs:9:17:9:27 | access to property Length | +| Program.cs:9:17:9:32 | ... == ... | +| Program.cs:9:32:9:32 | 0 | +| Program.cs:11:17:11:23 | access to type Console | +| Program.cs:11:17:11:67 | call to method WriteLine | +| Program.cs:11:35:11:66 | "Print usage instructions here." | +| Program.cs:14:17:14:17 | access to local variable x | +| Program.cs:14:17:14:27 | String x = ... | +| Program.cs:14:21:14:24 | access to parameter args | +| Program.cs:14:21:14:27 | access to array element | +| Program.cs:14:26:14:26 | 0 | +| Program.cs:15:17:15:17 | access to local variable a | +| Program.cs:15:17:15:28 | A a = ... | +| Program.cs:15:21:15:28 | object creation of type A | +| Program.cs:15:27:15:27 | access to local variable x | +| Program.cs:16:13:16:19 | access to type Console | +| Program.cs:16:13:16:43 | call to method WriteLine | +| Program.cs:16:31:16:31 | access to local variable a | +| Program.cs:16:31:16:42 | call to method ToString | +| Program.cs:21:16:21:22 | call to constructor Object | +| Program.cs:23:13:23:23 | access to field programName | +| Program.cs:23:13:23:23 | this access | +| Program.cs:23:13:23:27 | ... = ... | +| Program.cs:23:27:23:27 | access to parameter x | +| Program.cs:29:13:29:19 | access to type Console | +| Program.cs:29:13:29:59 | call to method WriteLine | +| Program.cs:29:31:29:58 | "Program destructor called!" | +| Program.cs:32:23:32:33 | access to property ProgramProp | +| Program.cs:32:23:32:33 | this access | +| Program.cs:32:49:32:64 | ... = ... | +| Program.cs:32:51:32:64 | "Hello World!" | +| Program.cs:36:26:36:31 | access to type String | +| Program.cs:36:26:36:37 | access to field Empty | +| Program.cs:47:17:47:23 | access to type Console | +| Program.cs:47:17:47:58 | call to method WriteLine | +| Program.cs:47:35:47:57 | "Program handler added" | +| Program.cs:51:17:51:23 | access to type Console | +| Program.cs:51:17:51:60 | call to method WriteLine | +| Program.cs:51:35:51:59 | "Program handler removed" | +| Program.cs:57:20:57:20 | access to parameter b | +| Program.cs:64:18:64:33 | call to constructor Attribute | +statements +| A.cs:5:18:5:18 | {...} | +| A.cs:11:9:13:9 | {...} | +| A.cs:12:13:12:21 | ...; | +| A.cs:17:9:19:9 | {...} | +| A.cs:18:13:18:52 | ...; | +| A.cs:25:17:25:40 | {...} | +| A.cs:25:19:25:38 | return ...; | +| A.cs:26:17:26:19 | {...} | +| A.cs:35:13:37:13 | {...} | +| A.cs:36:17:36:51 | ...; | +| A.cs:39:13:41:13 | {...} | +| A.cs:40:17:40:53 | ...; | +| A.cs:45:9:47:9 | {...} | +| A.cs:46:13:46:21 | return ...; | +| A.cs:50:38:50:40 | {...} | +| A.cs:54:9:58:9 | {...} | +| A.cs:55:13:55:21 | ... ...; | +| A.cs:56:13:56:32 | ...; | +| A.cs:57:13:57:21 | return ...; | +| A.cs:61:9:66:9 | {...} | +| A.cs:62:13:65:13 | if (...) ... | +| A.cs:63:13:65:13 | {...} | +| A.cs:64:17:64:38 | ...; | +| A.cs:69:18:69:36 | {...} | +| Program.cs:8:9:17:9 | {...} | +| Program.cs:9:13:13:13 | if (...) ... | +| Program.cs:10:13:13:13 | {...} | +| Program.cs:11:17:11:68 | ...; | +| Program.cs:12:17:12:23 | return ...; | +| Program.cs:14:13:14:28 | ... ...; | +| Program.cs:15:13:15:29 | ... ...; | +| Program.cs:16:13:16:44 | ...; | +| Program.cs:22:9:24:9 | {...} | +| Program.cs:23:13:23:28 | ...; | +| Program.cs:28:9:30:9 | {...} | +| Program.cs:29:13:29:60 | ...; | +| Program.cs:36:17:36:40 | {...} | +| Program.cs:36:19:36:38 | return ...; | +| Program.cs:37:17:37:19 | {...} | +| Program.cs:46:13:48:13 | {...} | +| Program.cs:47:17:47:59 | ...; | +| Program.cs:50:13:52:13 | {...} | +| Program.cs:51:17:51:61 | ...; | +| Program.cs:56:9:58:9 | {...} | +| Program.cs:57:13:57:21 | return ...; | +| Program.cs:61:39:61:41 | {...} | +| Program.cs:64:18:64:33 | {...} | +methods +| A.cs:50:21:50:34 | ObsoleteMethod | +| A.cs:53:32:53:39 | ToString | +| A.cs:60:21:60:29 | NewMethod | +| Program.cs:7:28:7:31 | Main | +| Program.cs:61:21:61:35 | AnnotatedMethod | +types +| A.cs:5:18:5:18 | C | +| A.cs:7:18:7:18 | A | +| A.cs:69:18:69:36 | MyObsoleteAttribute | +| Program.cs:5:20:5:26 | Program | +| Program.cs:64:18:64:33 | ProgramAttribute | +parameters +| A.cs:10:25:10:25 | x | +| A.cs:21:35:21:37 | value | +| A.cs:23:32:23:32 | i | +| A.cs:23:32:23:32 | i | +| A.cs:23:32:23:32 | i | +| A.cs:26:13:26:15 | value | +| A.cs:34:13:34:15 | value | +| A.cs:38:13:38:18 | value | +| A.cs:44:38:44:38 | a | +| A.cs:44:43:44:43 | b | +| Program.cs:7:42:7:45 | args | +| Program.cs:21:31:21:31 | x | +| Program.cs:32:42:32:44 | value | +| Program.cs:34:32:34:32 | i | +| Program.cs:34:32:34:32 | i | +| Program.cs:34:32:34:32 | i | +| Program.cs:37:13:37:15 | value | +| Program.cs:45:13:45:15 | value | +| Program.cs:49:13:49:18 | value | +| Program.cs:55:50:55:50 | a | +| Program.cs:55:61:55:61 | b | +operators +| A.cs:44:34:44:34 | + | +| Program.cs:55:40:55:40 | - | +constructors +| A.cs:10:16:10:16 | A | +| Program.cs:21:16:21:22 | Program | +destructors +| A.cs:16:10:16:10 | ~A | +| Program.cs:27:10:27:16 | ~Program | +fields +| A.cs:9:24:9:27 | name | +| Program.cs:19:24:19:34 | programName | +properties +| A.cs:21:23:21:26 | Prop | +| Program.cs:32:23:32:33 | ProgramProp | +indexers +| A.cs:23:23:23:26 | Item | +| Program.cs:34:23:34:26 | Item | +accessors +| A.cs:21:30:21:32 | get_Prop | +| A.cs:21:35:21:37 | set_Prop | +| A.cs:25:13:25:15 | get_Item | +| A.cs:26:13:26:15 | set_Item | +| A.cs:34:13:34:15 | add_Clicked | +| A.cs:38:13:38:18 | remove_Clicked | +| Program.cs:32:37:32:39 | get_ProgramProp | +| Program.cs:32:42:32:44 | set_ProgramProp | +| Program.cs:36:13:36:15 | get_Item | +| Program.cs:37:13:37:15 | set_Item | +| Program.cs:45:13:45:15 | add_ProgramClicked | +| Program.cs:49:13:49:18 | remove_ProgramClicked | +attributes +| A.cs:49:10:49:19 | [MyObsolete(...)] | +| Program.cs:60:10:60:16 | [Program(...)] | +events +| A.cs:32:35:32:41 | Clicked | +| Program.cs:43:35:43:48 | ProgramClicked | +eventAccessors +| A.cs:34:13:34:15 | add_Clicked | +| A.cs:38:13:38:18 | remove_Clicked | +| Program.cs:45:13:45:15 | add_ProgramClicked | +| Program.cs:49:13:49:18 | remove_ProgramClicked | +usingDirectives +| A.cs:1:1:1:13 | using ...; | +| Program.cs:1:1:1:13 | using ...; | +commentLines +| A.cs:15:9:15:21 | // ... | +| A.cs:29:9:29:10 | /* ... */ | +| A.cs:30:1:30:27 | /* ... */ | +| A.cs:31:1:31:11 | /* ... */ | +| Program.cs:26:9:26:29 | // ... | +| Program.cs:40:9:40:10 | /* ... */ | +| Program.cs:41:1:41:27 | /* ... */ | +| Program.cs:42:1:42:11 | /* ... */ | +commentBlocks +| A.cs:15:9:15:21 | // ... | +| A.cs:29:9:31:11 | /* ... */ | +| Program.cs:26:9:26:29 | // ... | +| Program.cs:40:9:42:11 | /* ... */ | +typeMentions +| A.cs:9:17:9:22 | String | +| A.cs:10:18:10:23 | String | +| A.cs:18:13:18:19 | Console | +| A.cs:21:16:21:21 | String | +| A.cs:23:16:23:21 | Object | +| A.cs:23:28:23:30 | Int32 | +| A.cs:25:30:25:35 | Object | +| A.cs:36:17:36:23 | Console | +| A.cs:40:17:40:23 | Console | +| A.cs:44:23:44:23 | A | +| A.cs:44:36:44:36 | A | +| A.cs:44:41:44:41 | A | +| A.cs:49:10:49:19 | MyObsoleteAttribute | +| A.cs:50:16:50:19 | Void | +| A.cs:53:25:53:30 | String | +| A.cs:55:13:55:18 | String | +| A.cs:60:16:60:19 | Void | +| A.cs:69:40:69:48 | Attribute | +| Program.cs:7:23:7:26 | Void | +| Program.cs:7:33:7:38 | String | +| Program.cs:7:33:7:40 | String[] | +| Program.cs:11:17:11:23 | Console | +| Program.cs:14:13:14:15 | String | +| Program.cs:15:13:15:15 | A | +| Program.cs:15:25:15:25 | A | +| Program.cs:16:13:16:19 | Console | +| Program.cs:19:17:19:22 | String | +| Program.cs:21:24:21:29 | String | +| Program.cs:29:13:29:19 | Console | +| Program.cs:32:16:32:21 | String | +| Program.cs:34:16:34:21 | String | +| Program.cs:34:28:34:30 | Int32 | +| Program.cs:36:26:36:31 | String | +| Program.cs:47:17:47:23 | Console | +| Program.cs:51:17:51:23 | Console | +| Program.cs:55:23:55:29 | Program | +| Program.cs:55:42:55:48 | Program | +| Program.cs:55:53:55:59 | Program | +| Program.cs:60:10:60:16 | ProgramAttribute | +| Program.cs:61:16:61:19 | Void | +| Program.cs:64:37:64:45 | Attribute | +xmlLocatables +| web.changed.config:2:1:5:17 | configuration | +| web.changed.config:3:3:4:16 | system.web | +| web.unchanged.config:2:1:6:17 | configuration | +| web.unchanged.config:3:3:5:16 | system.web | +| web.unchanged.config:4:5:4:37 | httpCookies | +| web.unchanged.config:4:5:4:37 | requireSSL=true | diff --git a/csharp/ql/test/library-tests/overlay/overlay/test.qlref b/csharp/ql/test/library-tests/overlay/overlay/test.qlref new file mode 100644 index 00000000000..bbce8f8b98d --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/overlay/test.qlref @@ -0,0 +1 @@ +query: ../test.ql diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Web.config b/csharp/ql/test/library-tests/overlay/overlay/web.changed.config similarity index 83% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Web.config rename to csharp/ql/test/library-tests/overlay/overlay/web.changed.config index 96fd10c05b7..8f0b996a024 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Web.config +++ b/csharp/ql/test/library-tests/overlay/overlay/web.changed.config @@ -1,6 +1,5 @@ - diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Web.config b/csharp/ql/test/library-tests/overlay/overlay/web.unchanged.config similarity index 72% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Web.config rename to csharp/ql/test/library-tests/overlay/overlay/web.unchanged.config index ec7b88761ca..e4dc561c53f 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/ConfigFalse/Web.config +++ b/csharp/ql/test/library-tests/overlay/overlay/web.unchanged.config @@ -1,6 +1,6 @@ - + diff --git a/csharp/ql/test/library-tests/overlay/test.ql b/csharp/ql/test/library-tests/overlay/test.ql new file mode 100644 index 00000000000..91f3c6a3aab --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/test.ql @@ -0,0 +1,41 @@ +import csharp + +query predicate expressions(Expr e) { e.fromSource() } + +query predicate statements(Stmt s) { s.fromSource() } + +query predicate methods(Method m) { m.fromSource() } + +query predicate types(Type t) { t.fromSource() } + +query predicate parameters(Parameter p) { p.fromSource() } + +query predicate operators(Operator o) { o.fromSource() } + +query predicate constructors(Constructor c) { c.fromSource() } + +query predicate destructors(Destructor d) { d.fromSource() } + +query predicate fields(Field f) { f.fromSource() } + +query predicate properties(Property p) { p.fromSource() } + +query predicate indexers(Indexer i) { i.fromSource() } + +query predicate accessors(Accessor a) { a.fromSource() } + +query predicate attributes(Attribute a) { a.fromSource() } + +query predicate events(Event ev) { ev.fromSource() } + +query predicate eventAccessors(EventAccessor ea) { ea.fromSource() } + +query predicate usingDirectives(UsingDirective ud) { ud.fromSource() } + +query predicate commentLines(CommentLine cl) { any() } + +query predicate commentBlocks(CommentBlock cb) { any() } + +query predicate typeMentions(TypeMention tm) { any() } + +query predicate xmlLocatables(XmlLocatable xl) { any() } diff --git a/csharp/ql/test/library-tests/overlay/testlocations.expected b/csharp/ql/test/library-tests/overlay/testlocations.expected new file mode 100644 index 00000000000..28715da9ee9 --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/testlocations.expected @@ -0,0 +1,5 @@ +elementsWithMultipleSourceLocations +typeMentionsWithMultipleSourceLocations +commentLinesWithMultipleSourceLocations +commentBlocksWithMultipleSourceLocations +removedEntities diff --git a/csharp/ql/test/library-tests/overlay/testlocations.ql b/csharp/ql/test/library-tests/overlay/testlocations.ql new file mode 100644 index 00000000000..24aaeda218c --- /dev/null +++ b/csharp/ql/test/library-tests/overlay/testlocations.ql @@ -0,0 +1,29 @@ +import csharp + +// This is a consistency check that the overlay mechanism for cleaning up locations +// works correctly. +query predicate elementsWithMultipleSourceLocations(Element e, SourceLocation loc) { + e.fromSource() and + not e instanceof Namespace and + strictcount(SourceLocation l0 | l0 = e.getALocation()) > 1 and + loc = e.getALocation() +} + +query predicate typeMentionsWithMultipleSourceLocations(TypeMention tm, SourceLocation loc) { + strictcount(SourceLocation l0 | l0 = tm.getLocation()) > 1 and + loc = tm.getLocation() +} + +query predicate commentLinesWithMultipleSourceLocations(CommentLine cl, SourceLocation loc) { + strictcount(SourceLocation l0 | l0 = cl.getLocation()) > 1 and + loc = cl.getLocation() +} + +query predicate commentBlocksWithMultipleSourceLocations(CommentBlock cb, SourceLocation loc) { + strictcount(SourceLocation l0 | l0 = cb.getLocation()) > 1 and + loc = cb.getLocation() +} + +// This is a consistency check that the entities that are removed as a part of +// the changes in the overlay are indeed removed from the database. +query predicate removedEntities(Element e) { e.(Method).getName() = "OldMethod" } diff --git a/csharp/ql/test/library-tests/partial/Partial1.expected b/csharp/ql/test/library-tests/partial/Partial1.expected index af7be135914..55dcaabcea7 100644 --- a/csharp/ql/test/library-tests/partial/Partial1.expected +++ b/csharp/ql/test/library-tests/partial/Partial1.expected @@ -10,3 +10,5 @@ | Partial.cs:28:9:28:11 | set_Item | | Partial.cs:32:15:32:33 | OnePartPartialClass | | Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | +| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | +| PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | diff --git a/csharp/ql/test/library-tests/partial/PartialConstructors.expected b/csharp/ql/test/library-tests/partial/PartialConstructors.expected new file mode 100644 index 00000000000..01779f1b81e --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialConstructors.expected @@ -0,0 +1,4 @@ +| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | {...} | +| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | {...} | +| Partial.cs:38:7:38:21 | NonPartialClass | Partial.cs:38:7:38:21 | {...} | +| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | {...} | diff --git a/csharp/ql/test/library-tests/partial/PartialConstructors.ql b/csharp/ql/test/library-tests/partial/PartialConstructors.ql new file mode 100644 index 00000000000..049de629085 --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialConstructors.ql @@ -0,0 +1,5 @@ +import csharp + +from Constructor c +where c.getDeclaringType().fromSource() +select c, c.getBody() diff --git a/csharp/ql/test/library-tests/partial/PartialMultipleFiles1.cs b/csharp/ql/test/library-tests/partial/PartialMultipleFiles1.cs new file mode 100644 index 00000000000..6f9471f19ca --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialMultipleFiles1.cs @@ -0,0 +1 @@ +public partial class PartialMultipleFiles { } diff --git a/csharp/ql/test/library-tests/partial/PartialMultipleFiles2.cs b/csharp/ql/test/library-tests/partial/PartialMultipleFiles2.cs new file mode 100644 index 00000000000..6f9471f19ca --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialMultipleFiles2.cs @@ -0,0 +1 @@ +public partial class PartialMultipleFiles { } diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index 8d9da42fc11..d97f6fc01f0 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -89,3 +89,7 @@ Partial.cs: # 42| 0: [Parameter] index # 45| 1: [Parameter] value # 45| 4: [BlockStmt] {...} +PartialMultipleFiles1.cs: +# 1| [Class] PartialMultipleFiles +PartialMultipleFiles2.cs: +# 1| [Class] PartialMultipleFiles diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs new file mode 100644 index 00000000000..d4177a57661 --- /dev/null +++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs @@ -0,0 +1,13 @@ +public class CollectionTaintTracking +{ + public void ImplicitCollectionReadAtSink() + { + var tainted = Source(1); + var arr = new object[] { tainted }; + Sink(arr); // $ hasTaintFlow=1 + } + + static T Source(object source) => throw null; + + public static void Sink(T t) { } +} diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected new file mode 100644 index 00000000000..6d93e7f5ef9 --- /dev/null +++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected @@ -0,0 +1,18 @@ +models +edges +| CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | provenance | | +| CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | provenance | | +| CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | provenance | | +| CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | provenance | | +| CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | provenance | | +nodes +| CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object | +| CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | semmle.label | call to method Source : Object | +| CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | semmle.label | access to local variable arr : null [element] : Object | +| CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | semmle.label | { ..., ... } : null [element] : Object | +| CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object | +| CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | semmle.label | access to local variable arr | +subpaths +testFailures +#select +| CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | $@ | CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql new file mode 100644 index 00000000000..0af8971a13b --- /dev/null +++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import csharp +import utils.test.InlineFlowTest +import TaintFlowTest +import PathGraph + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/tainttracking/collections/options b/csharp/ql/test/library-tests/tainttracking/collections/options new file mode 100644 index 00000000000..75c39b4541b --- /dev/null +++ b/csharp/ql/test/library-tests/tainttracking/collections/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected index a33793ae461..30cb9112c3d 100644 --- a/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected +++ b/csharp/ql/test/query-tests/API Abuse/FormatInvalid/FormatInvalid.expected @@ -40,7 +40,7 @@ | FormatInvalid.cs:111:23:111:25 | "}" | FormatInvalid.cs:111:23:111:25 | "}" | FormatInvalid.cs:111:23:111:25 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:111:9:111:32 | call to method Write | this | FormatInvalid.cs:111:9:111:32 | call to method Write | this | | FormatInvalid.cs:112:23:112:25 | "}" | FormatInvalid.cs:112:23:112:25 | "}" | FormatInvalid.cs:112:23:112:25 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:112:9:112:35 | call to method Write | this | FormatInvalid.cs:112:9:112:35 | call to method Write | this | | FormatInvalid.cs:113:23:113:25 | "}" | FormatInvalid.cs:113:23:113:25 | "}" | FormatInvalid.cs:113:23:113:25 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:113:9:113:38 | call to method Write | this | FormatInvalid.cs:113:9:113:38 | call to method Write | this | -| FormatInvalid.cs:118:56:118:58 | "}" | FormatInvalid.cs:118:56:118:58 | [assertion success] "}" | FormatInvalid.cs:118:56:118:58 | [assertion success] "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:118:9:118:63 | call to method Assert | this | FormatInvalid.cs:118:9:118:63 | call to method Assert | this | +| FormatInvalid.cs:118:56:118:58 | "}" | FormatInvalid.cs:118:56:118:58 | "}" | FormatInvalid.cs:118:56:118:58 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:118:9:118:63 | call to method Assert | this | FormatInvalid.cs:118:9:118:63 | call to method Assert | this | | FormatInvalid.cs:119:18:119:20 | "}" | FormatInvalid.cs:119:18:119:20 | "}" | FormatInvalid.cs:119:18:119:20 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:119:9:119:24 | call to method Write | this | FormatInvalid.cs:119:9:119:24 | call to method Write | this | | FormatInvalid.cs:120:40:120:42 | "}" | FormatInvalid.cs:120:40:120:42 | "}" | FormatInvalid.cs:120:40:120:42 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:120:9:120:47 | call to method Print | this | FormatInvalid.cs:120:9:120:47 | call to method Print | this | | FormatInvalid.cs:140:44:140:46 | "}" | FormatInvalid.cs:140:44:140:46 | "}" | FormatInvalid.cs:140:44:140:46 | "}" | Invalid format string used in $@ formatting call. | FormatInvalid.cs:140:22:140:47 | call to method Parse | this | FormatInvalid.cs:140:22:140:47 | call to method Parse | this | @@ -264,8 +264,8 @@ nodes | FormatInvalid.cs:112:23:112:25 | "}" | semmle.label | "}" | | FormatInvalid.cs:113:23:113:25 | "}" | semmle.label | "}" | | FormatInvalid.cs:113:23:113:25 | "}" | semmle.label | "}" | -| FormatInvalid.cs:118:56:118:58 | [assertion success] "}" | semmle.label | [assertion success] "}" | -| FormatInvalid.cs:118:56:118:58 | [assertion success] "}" | semmle.label | [assertion success] "}" | +| FormatInvalid.cs:118:56:118:58 | "}" | semmle.label | "}" | +| FormatInvalid.cs:118:56:118:58 | "}" | semmle.label | "}" | | FormatInvalid.cs:119:18:119:20 | "}" | semmle.label | "}" | | FormatInvalid.cs:119:18:119:20 | "}" | semmle.label | "}" | | FormatInvalid.cs:120:40:120:42 | "}" | semmle.label | "}" | diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected index e154d10b9d3..fc310e53fde 100644 --- a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected @@ -1,31 +1,31 @@ -| ConstantCondition.cs:38:18:38:29 | (...) ... | Expression is always 'null'. | -| ConstantCondition.cs:39:18:39:24 | (...) ... | Expression is never 'null'. | -| ConstantCondition.cs:46:17:46:26 | (...) ... | Expression is always 'null'. | -| ConstantCondition.cs:47:17:47:18 | "" | Expression is never 'null'. | -| ConstantCondition.cs:48:13:48:19 | (...) ... | Expression is never 'null'. | -| ConstantCondition.cs:49:13:49:14 | "" | Expression is never 'null'. | -| ConstantCondition.cs:62:18:62:18 | 2 | Pattern never matches. | -| ConstantCondition.cs:64:18:64:18 | 3 | Pattern always matches. | -| ConstantCondition.cs:75:18:75:20 | access to type Int32 | Pattern never matches. | -| ConstantCondition.cs:95:13:95:13 | _ | Pattern always matches. | -| ConstantCondition.cs:114:13:114:14 | access to parameter b1 | Condition always evaluates to 'true'. | -| ConstantCondition.cs:114:19:114:20 | access to parameter b2 | Condition always evaluates to 'true'. | -| ConstantCondition.cs:141:22:141:22 | _ | Pattern always matches. | -| ConstantConditionBad.cs:5:16:5:20 | ... > ... | Condition always evaluates to 'false'. | -| ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | Condition always evaluates to 'true'. | -| ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | Condition always evaluates to 'false'. | -| ConstantConditionalExpressionCondition.cs:13:21:13:30 | ... == ... | Condition always evaluates to 'true'. | -| ConstantForCondition.cs:9:29:9:33 | false | Condition always evaluates to 'false'. | -| ConstantForCondition.cs:11:29:11:34 | ... == ... | Condition always evaluates to 'false'. | -| ConstantIfCondition.cs:11:17:11:29 | ... == ... | Condition always evaluates to 'true'. | -| ConstantIfCondition.cs:14:17:14:21 | false | Condition always evaluates to 'false'. | -| ConstantIfCondition.cs:17:17:17:26 | ... == ... | Condition always evaluates to 'true'. | -| ConstantIsNullOrEmpty.cs:10:21:10:54 | call to method IsNullOrEmpty | Condition always evaluates to 'false'. | -| ConstantIsNullOrEmpty.cs:46:21:46:46 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | -| ConstantIsNullOrEmpty.cs:50:21:50:44 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | -| ConstantIsNullOrEmpty.cs:54:21:54:45 | call to method IsNullOrEmpty | Condition always evaluates to 'false'. | -| ConstantNullCoalescingLeftHandOperand.cs:11:24:11:34 | access to constant NULL_OBJECT | Expression is never 'null'. | -| ConstantNullCoalescingLeftHandOperand.cs:12:24:12:27 | null | Expression is always 'null'. | -| ConstantWhileCondition.cs:12:20:12:32 | ... == ... | Condition always evaluates to 'true'. | -| ConstantWhileCondition.cs:16:20:16:24 | false | Condition always evaluates to 'false'. | -| ConstantWhileCondition.cs:24:20:24:29 | ... == ... | Condition always evaluates to 'true'. | +| ConstantCondition.cs:38:18:38:29 | (...) ... | Expression is always 'null'. | ConstantCondition.cs:38:18:38:29 | (...) ... | dummy | +| ConstantCondition.cs:39:18:39:24 | (...) ... | Expression is never 'null'. | ConstantCondition.cs:39:18:39:24 | (...) ... | dummy | +| ConstantCondition.cs:46:17:46:26 | (...) ... | Expression is always 'null'. | ConstantCondition.cs:46:17:46:26 | (...) ... | dummy | +| ConstantCondition.cs:47:17:47:18 | "" | Expression is never 'null'. | ConstantCondition.cs:47:17:47:18 | "" | dummy | +| ConstantCondition.cs:48:13:48:19 | (...) ... | Expression is never 'null'. | ConstantCondition.cs:48:13:48:19 | (...) ... | dummy | +| ConstantCondition.cs:49:13:49:14 | "" | Expression is never 'null'. | ConstantCondition.cs:49:13:49:14 | "" | dummy | +| ConstantCondition.cs:62:18:62:18 | 2 | Pattern never matches. | ConstantCondition.cs:62:18:62:18 | 2 | dummy | +| ConstantCondition.cs:64:18:64:18 | 3 | Pattern always matches. | ConstantCondition.cs:64:18:64:18 | 3 | dummy | +| ConstantCondition.cs:75:18:75:20 | access to type Int32 | Pattern never matches. | ConstantCondition.cs:75:18:75:20 | access to type Int32 | dummy | +| ConstantCondition.cs:95:13:95:13 | _ | Pattern always matches. | ConstantCondition.cs:95:13:95:13 | _ | dummy | +| ConstantCondition.cs:114:13:114:14 | access to parameter b1 | Condition is always true because of $@. | ConstantCondition.cs:110:14:110:15 | access to parameter b1 | access to parameter b1 | +| ConstantCondition.cs:114:19:114:20 | access to parameter b2 | Condition is always true because of $@. | ConstantCondition.cs:112:14:112:15 | access to parameter b2 | access to parameter b2 | +| ConstantCondition.cs:141:22:141:22 | _ | Pattern always matches. | ConstantCondition.cs:141:22:141:22 | _ | dummy | +| ConstantConditionBad.cs:5:16:5:20 | ... > ... | Condition always evaluates to 'false'. | ConstantConditionBad.cs:5:16:5:20 | ... > ... | dummy | +| ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | Condition always evaluates to 'true'. | ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | dummy | +| ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | Condition always evaluates to 'false'. | ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | dummy | +| ConstantConditionalExpressionCondition.cs:13:21:13:30 | ... == ... | Condition always evaluates to 'true'. | ConstantConditionalExpressionCondition.cs:13:21:13:30 | ... == ... | dummy | +| ConstantForCondition.cs:9:29:9:33 | false | Condition always evaluates to 'false'. | ConstantForCondition.cs:9:29:9:33 | false | dummy | +| ConstantForCondition.cs:11:29:11:34 | ... == ... | Condition always evaluates to 'false'. | ConstantForCondition.cs:11:29:11:34 | ... == ... | dummy | +| ConstantIfCondition.cs:11:17:11:29 | ... == ... | Condition always evaluates to 'true'. | ConstantIfCondition.cs:11:17:11:29 | ... == ... | dummy | +| ConstantIfCondition.cs:14:17:14:21 | false | Condition always evaluates to 'false'. | ConstantIfCondition.cs:14:17:14:21 | false | dummy | +| ConstantIfCondition.cs:17:17:17:26 | ... == ... | Condition always evaluates to 'true'. | ConstantIfCondition.cs:17:17:17:26 | ... == ... | dummy | +| ConstantIsNullOrEmpty.cs:10:21:10:54 | call to method IsNullOrEmpty | Condition always evaluates to 'false'. | ConstantIsNullOrEmpty.cs:10:21:10:54 | call to method IsNullOrEmpty | dummy | +| ConstantIsNullOrEmpty.cs:46:21:46:46 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | ConstantIsNullOrEmpty.cs:46:21:46:46 | call to method IsNullOrEmpty | dummy | +| ConstantIsNullOrEmpty.cs:50:21:50:44 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | ConstantIsNullOrEmpty.cs:50:21:50:44 | call to method IsNullOrEmpty | dummy | +| ConstantIsNullOrEmpty.cs:54:21:54:45 | call to method IsNullOrEmpty | Condition always evaluates to 'false'. | ConstantIsNullOrEmpty.cs:54:21:54:45 | call to method IsNullOrEmpty | dummy | +| ConstantNullCoalescingLeftHandOperand.cs:11:24:11:34 | access to constant NULL_OBJECT | Expression is never 'null'. | ConstantNullCoalescingLeftHandOperand.cs:11:24:11:34 | access to constant NULL_OBJECT | dummy | +| ConstantNullCoalescingLeftHandOperand.cs:12:24:12:27 | null | Expression is always 'null'. | ConstantNullCoalescingLeftHandOperand.cs:12:24:12:27 | null | dummy | +| ConstantWhileCondition.cs:12:20:12:32 | ... == ... | Condition always evaluates to 'true'. | ConstantWhileCondition.cs:12:20:12:32 | ... == ... | dummy | +| ConstantWhileCondition.cs:16:20:16:24 | false | Condition always evaluates to 'false'. | ConstantWhileCondition.cs:16:20:16:24 | false | dummy | +| ConstantWhileCondition.cs:24:20:24:29 | ... == ... | Condition always evaluates to 'true'. | ConstantWhileCondition.cs:24:20:24:29 | ... == ... | dummy | diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 04d8e20c09e..03a6644fe80 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -395,7 +395,7 @@ class Initializers { var s = ""; if (b) - s = "abc"; // $ Alert + s = "abc"; // Not reported if (!b) return s; return null; diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected index 6f718c49407..6271d6276c7 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.expected @@ -13,7 +13,6 @@ | DeadStoreOfLocal.cs:314:18:314:23 | Object v2 | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:314:22:314:23 | v2 | v2 | | DeadStoreOfLocal.cs:331:9:331:32 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:327:23:327:23 | b | b | | DeadStoreOfLocal.cs:372:13:372:20 | String s = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:372:13:372:13 | s | s | -| DeadStoreOfLocal.cs:398:13:398:21 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:396:13:396:13 | s | s | | DeadStoreOfLocal.cs:472:20:472:76 | FileStream y = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:472:20:472:20 | y | y | | DeadStoreOfLocalBad.cs:7:13:7:48 | Boolean success = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:7:13:7:19 | success | success | | DeadStoreOfLocalBad.cs:23:32:23:32 | FormatException e | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocalBad.cs:23:32:23:32 | e | e | diff --git a/csharp/ql/test/query-tests/Nullness/C.cs b/csharp/ql/test/query-tests/Nullness/C.cs index 405dceb74d5..8c6a0226f36 100644 --- a/csharp/ql/test/query-tests/Nullness/C.cs +++ b/csharp/ql/test/query-tests/Nullness/C.cs @@ -74,7 +74,7 @@ public class C public void TestNull() { - object o = null; + object o = Maybe() ? null : new object(); if (IsNotNull(o)) o.ToString(); // GOOD diff --git a/csharp/ql/test/query-tests/Nullness/D.cs b/csharp/ql/test/query-tests/Nullness/D.cs index ffc4fd193c7..a465a434be6 100644 --- a/csharp/ql/test/query-tests/Nullness/D.cs +++ b/csharp/ql/test/query-tests/Nullness/D.cs @@ -14,7 +14,7 @@ public class D public void Caller() { Callee1(new object()); - Callee1(null); // $ Source[cs/dereferenced-value-may-be-null] + Callee1(null); Callee2(new object()); } @@ -23,7 +23,7 @@ public class D param.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } - public void Callee2(object param) // $ Source[cs/dereferenced-value-may-be-null] + public void Callee2(object param) { if (param != null) { @@ -55,24 +55,24 @@ public class D if ((2 > 1 && o4 != null) != false) o4.ToString(); // GOOD - var o5 = (o4 != null) ? "" : null; // $ Source[cs/dereferenced-value-may-be-null] + var o5 = (o4 != null) ? "" : null; if (o5 != null) o4.ToString(); // GOOD if (o4 != null) - o5.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + o5.ToString(); // GOOD var o6 = maybe ? null : ""; if (!CustomIsNull(o6)) o6.ToString(); // GOOD - var o7 = maybe ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] + var o7 = maybe ? null : ""; var ok = o7 != null && 2 > 1; if (ok) o7.ToString(); // GOOD else o7.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] - var o8 = maybe ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] + var o8 = maybe ? null : ""; int track = o8 == null ? 42 : 1 + 1; if (track == 2) o8.ToString(); // GOOD @@ -86,7 +86,7 @@ public class D public void Deref(int i) { - int[] xs = maybe ? null : new int[2]; // $ Source[cs/dereferenced-value-may-be-null] + int[] xs = maybe ? null : new int[2]; if (i > 1) xs[0] = 5; // $ Alert[cs/dereferenced-value-may-be-null] @@ -122,7 +122,7 @@ public class D x.ToString(); // GOOD } - public void LengthGuard(int[] a, int[] b) // $ Source[cs/dereferenced-value-may-be-null] + public void LengthGuard(int[] a, int[] b) { int alen = a == null ? 0 : a.Length; // GOOD int blen = b == null ? 0 : b.Length; // GOOD @@ -146,7 +146,7 @@ public class D } } - public void MissedGuard(object obj) // $ Source[cs/dereferenced-value-may-be-null] + public void MissedGuard(object obj) { obj.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] var x = obj != null ? 1 : 0; @@ -160,7 +160,7 @@ public class D public void Exceptions() { - object obj = null; // $ Source[cs/dereferenced-value-may-be-null] + object obj = null; try { obj = MkMaybe(); @@ -237,16 +237,16 @@ public class D if (flag) o.ToString(); // GOOD - o = null; // $ Source[cs/dereferenced-value-may-be-null] + o = null; var other = maybe ? null : ""; if (other == null) o = ""; if (other != null) o.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] (always - but reported as maybe) else - o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + o.ToString(); // GOOD - var o2 = (num < 0) ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] + var o2 = (num < 0) ? null : ""; if (num < 0) o2 = ""; else @@ -255,7 +255,7 @@ public class D public void TrackingVariable(int[] a) { - object o = null; // $ Source[cs/dereferenced-value-may-be-null] + object o = null; object other = null; if (maybe) { @@ -264,9 +264,9 @@ public class D } if (other is string) - o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + o.ToString(); // GOOD - o = null; // $ Source[cs/dereferenced-value-may-be-null] + o = null; int count = 0; var found = false; for (var i = 0; i < a.Length; i++) @@ -280,7 +280,7 @@ public class D } if (a[i] > 10000) { - o = null; // $ Source[cs/dereferenced-value-may-be-null] + o = null; count = 0; if (2 > i) { } found = false; @@ -291,17 +291,17 @@ public class D o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (found) - o.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + o.ToString(); // GOOD - object prev = null; // $ Source[cs/dereferenced-value-may-be-null] + object prev = null; for (var i = 0; i < a.Length; ++i) { if (i != 0) - prev.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + prev.ToString(); // GOOD prev = a[i]; } - string s = null; // $ Source[cs/dereferenced-value-may-be-null] + string s = null; { var s_null = true; foreach (var i in a) @@ -310,10 +310,10 @@ public class D s = "" + a; } if (!s_null) - s.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + s.ToString(); // GOOD } - object r = null; // $ Source[cs/dereferenced-value-may-be-null] + object r = null; var stat = MyStatus.INIT; while (stat == MyStatus.INIT && stat != MyStatus.READY) { @@ -321,7 +321,7 @@ public class D if (stat == MyStatus.INIT) stat = MyStatus.READY; } - r.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + r.ToString(); // GOOD } public enum MyStatus @@ -348,7 +348,7 @@ public class D public void LoopCorr(int iters) { - int[] a = null; // $ Source[cs/dereferenced-value-may-be-null] + int[] a = null; if (iters > 0) a = new int[iters]; @@ -357,13 +357,13 @@ public class D if (iters > 0) { - string last = null; // $ Source[cs/dereferenced-value-may-be-null] + string last = null; for (var i = 0; i < iters; i++) last = "abc"; last.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } - int[] b = maybe ? null : new int[iters]; // $ Source[cs/dereferenced-value-may-be-null] + int[] b = maybe ? null : new int[iters]; if (iters > 0 && (b == null || b.Length < iters)) throw new Exception(); @@ -385,7 +385,7 @@ public class D ioe.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } - public void LengthGuard2(int[] a, int[] b) // $ Source[cs/dereferenced-value-may-be-null] + public void LengthGuard2(int[] a, int[] b) { int alen = a == null ? 0 : a.Length; // GOOD int sum = 0; @@ -402,13 +402,13 @@ public class D i = -3; } - public void CorrConds2(object x, object y) // $ Source[cs/dereferenced-value-may-be-null] + public void CorrConds2(object x, object y) { if ((x != null && y == null) || (x == null && y != null)) return; if (x != null) - y.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + y.ToString(); // GOOD if (y != null) - x.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + x.ToString(); // GOOD } } diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs index f8264523b68..e6a8066d9a7 100644 --- a/csharp/ql/test/query-tests/Nullness/E.cs +++ b/csharp/ql/test/query-tests/Nullness/E.cs @@ -6,9 +6,9 @@ public class E { public void Ex1(long[][][] a1, int ix, int len) { - long[][] a2 = null; // $ Source[cs/dereferenced-value-may-be-null] + long[][] a2 = null; var haveA2 = ix < len && (a2 = a1[ix]) != null; - long[] a3 = null; // $ Source[cs/dereferenced-value-may-be-null] + long[] a3 = null; var haveA3 = haveA2 && (a3 = a2[ix]) != null; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] if (haveA3) a3[0] = 0; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] @@ -20,7 +20,7 @@ public class E var s2 = (s1 == null) ? null : ""; if (s2 == null) { - s1 = y ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] + s1 = y ? null : ""; s2 = (s1 == null) ? null : ""; } if (s2 != null) @@ -32,7 +32,7 @@ public class E string last = null; foreach (var s in new string[] { "aa", "bb" }) last = s; - last.ToString(); // GOOD + last.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] last = null; if (ss.Any()) @@ -40,7 +40,7 @@ public class E foreach (var s in ss) last = s; - last.ToString(); // GOOD + last.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } } @@ -48,7 +48,7 @@ public class E { int index = 0; var result = new List>(); - List slice = null; // $ Source[cs/dereferenced-value-may-be-null] + List slice = null; var iter = list.GetEnumerator(); while (iter.MoveNext()) { @@ -63,7 +63,7 @@ public class E } } - public void Ex5(bool hasArr, int[] arr) // $ Source[cs/dereferenced-value-may-be-null] + public void Ex5(bool hasArr, int[] arr) { int arrLen = 0; if (hasArr) @@ -104,7 +104,7 @@ public class E public void Ex7(int[] arr1) { - int[] arr2 = null; // $ Source[cs/dereferenced-value-may-be-null] + int[] arr2 = null; if (arr1.Length > 0) arr2 = new int[arr1.Length]; @@ -122,7 +122,7 @@ public class E int j = 0; while (!stop && j < lim) { - int step = (j * obj.GetHashCode()) % 10; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + int step = (j * obj.GetHashCode()) % 10; // GOOD if (step == 0) { obj.ToString(); // GOOD @@ -134,7 +134,7 @@ public class E } else { - obj = null; // $ Source[cs/dereferenced-value-may-be-null] + obj = null; } continue; } @@ -149,17 +149,17 @@ public class E { return; } - object obj2 = obj1; // $ Source[cs/dereferenced-value-may-be-null] + object obj2 = obj1; if (obj2 != null && obj2.GetHashCode() % 5 > 2) { obj2.ToString(); // GOOD cond = true; } if (cond) - obj2.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + obj2.ToString(); // GOOD } - public void Ex10(int[] a) // $ Source[cs/dereferenced-value-may-be-null] + public void Ex10(int[] a) { int n = a == null ? 0 : a.Length; for (var i = 0; i < n; i++) @@ -170,12 +170,12 @@ public class E } } - public void Ex11(object obj, bool b1) // $ Source[cs/dereferenced-value-may-be-null] + public void Ex11(object obj, bool b1) { bool b2 = obj == null ? false : b1; if (b2 == null) { - obj.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + obj.ToString(); // GOOD } if (obj == null) { @@ -183,11 +183,11 @@ public class E } if (b1 == null) { - obj.ToString(); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + obj.ToString(); // GOOD } } - public void Ex12(object o) // $ Source[cs/dereferenced-value-may-be-null] + public void Ex12(object o) { var i = o.GetHashCode(); // $ Alert[cs/dereferenced-value-may-be-null] var s = o?.ToString(); @@ -195,12 +195,12 @@ public class E public void Ex13(bool b) { - var o = b ? null : ""; // $ Source[cs/dereferenced-value-may-be-null] - o.M1(); // GOOD + var o = b ? null : ""; + o.M1(); // GOOD (because M1 doesn't deref o) if (b) o.M2(); // $ Alert[cs/dereferenced-value-may-be-null] else - o.Select(x => x); // $ Alert[cs/dereferenced-value-may-be-null] + o.Select(x => x); // GOOD } public int Ex14(string s) @@ -214,28 +214,28 @@ public class E { var x = ""; if (b) - x = null; // $ Source[cs/dereferenced-value-may-be-null] + x = null; x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] if (b) - x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] + x.ToString(); // dominated by prior deref, i.e. not reported } public void Ex16(bool b) { var x = ""; if (b) - x = null; // $ Source[cs/dereferenced-value-may-be-null] + x = null; if (b) - x.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] - x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + x.ToString(); // "dominated" by prior deref, i.e. not reported } - public int Ex17(int? i) // $ Source[cs/dereferenced-value-may-be-null] + public int Ex17(int? i) { return i.Value; // $ Alert[cs/dereferenced-value-may-be-null] } - public int Ex18(int? i) // $ Source[cs/dereferenced-value-may-be-null] + public int Ex18(int? i) { return (int)i; // $ Alert[cs/dereferenced-value-may-be-null] } @@ -280,7 +280,7 @@ public class E { if (b) b.ToString(); - var o = Make(); // $ Source[cs/dereferenced-value-may-be-null] + var o = Make(); o?.ToString(); o.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] if (b) @@ -298,7 +298,7 @@ public class E public void Ex25(object o) { - var s = o as string; // $ Source[cs/dereferenced-value-may-be-null] + var s = o as string; s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } @@ -339,13 +339,13 @@ public class E static void Ex30(string s, object o) { - var x = s ?? o as string; // $ Source[cs/dereferenced-value-may-be-null] + var x = s ?? o as string; x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } static void Ex31(string s, object o) { - dynamic x = s ?? o as string; // $ Source[cs/dereferenced-value-may-be-null] + dynamic x = s ?? o as string; x.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] } @@ -371,19 +371,19 @@ public class E { if (o is string) { - var s = o as string; // $ Source[cs/dereferenced-value-may-be-null] + var s = o as string; return s.Length; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] } return -1; } - static bool Ex37(E e1, E e2) // $ Source[cs/dereferenced-value-may-be-null] + static bool Ex37(E e1, E e2) { if ((e1 == null && e2 != null) || (e1 != null && e2 == null)) return false; if (e1 == null && e2 == null) return true; - return e1.Long == e2.Long; // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-may-be-null] + return e1.Long == e2.Long; // GOOD } int Ex38(int? i) @@ -432,24 +432,33 @@ public class E return @is.Any(); } - static void Ex45(string s) + static void Ex45(string s, int i) { - if (s is null) + if (i == 0 && s is null) { s.ToString(); // $ Alert[cs/dereferenced-value-is-always-null] } - if (s is not not null) + if (i == 1 && s is not not null) { - s.ToString(); // $ MISSING: Alert[cs/dereferenced-value-is-always-null] + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] MISSING: Alert[cs/dereferenced-value-is-always-null] } - if (s is not null) + if (i == 2 && s is not null) { s.ToString(); // GOOD } - if (s is object) + if (i == 3 && s is object) + { + s.ToString(); // GOOD + } + + if (s is not object) + { + s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] + } + else { s.ToString(); // GOOD } diff --git a/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected b/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected index 9e66a5bccd1..5ba1fdf8765 100644 --- a/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/EqualityCheck.expected @@ -190,12 +190,12 @@ | E.cs:83:13:83:24 | ... != ... | false | E.cs:83:21:83:24 | null | E.cs:83:13:83:16 | access to parameter vals | | E.cs:85:18:85:29 | ... != ... | false | E.cs:85:18:85:21 | access to parameter vals | E.cs:85:26:85:29 | null | | E.cs:85:18:85:29 | ... != ... | false | E.cs:85:26:85:29 | null | E.cs:85:18:85:21 | access to parameter vals | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_A | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:92:18:92:27 | access to constant MY_CONST_A | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_A | E.cs:92:18:92:27 | access to constant MY_CONST_A | E.cs:90:17:90:27 | access to local variable switchguard | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_B | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:97:18:97:27 | access to constant MY_CONST_B | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_B | E.cs:97:18:97:27 | access to constant MY_CONST_B | E.cs:90:17:90:27 | access to local variable switchguard | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_C | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:95:18:95:27 | access to constant MY_CONST_C | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_C | E.cs:95:18:95:27 | access to constant MY_CONST_C | E.cs:90:17:90:27 | access to local variable switchguard | +| E.cs:92:13:92:28 | case ...: | true | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:92:18:92:27 | access to constant MY_CONST_A | +| E.cs:92:13:92:28 | case ...: | true | E.cs:92:18:92:27 | access to constant MY_CONST_A | E.cs:90:17:90:27 | access to local variable switchguard | +| E.cs:95:13:95:28 | case ...: | true | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:95:18:95:27 | access to constant MY_CONST_C | +| E.cs:95:13:95:28 | case ...: | true | E.cs:95:18:95:27 | access to constant MY_CONST_C | E.cs:90:17:90:27 | access to local variable switchguard | +| E.cs:97:13:97:28 | case ...: | true | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:97:18:97:27 | access to constant MY_CONST_B | +| E.cs:97:13:97:28 | case ...: | true | E.cs:97:18:97:27 | access to constant MY_CONST_B | E.cs:90:17:90:27 | access to local variable switchguard | | E.cs:126:21:126:29 | ... == ... | true | E.cs:126:21:126:24 | access to local variable step | E.cs:126:29:126:29 | 0 | | E.cs:126:21:126:29 | ... == ... | true | E.cs:126:29:126:29 | 0 | E.cs:126:21:126:24 | access to local variable step | | E.cs:153:13:153:24 | ... != ... | false | E.cs:153:13:153:16 | access to local variable obj2 | E.cs:153:21:153:24 | null | @@ -244,8 +244,18 @@ | E.cs:423:33:423:44 | ... == ... | true | E.cs:423:38:423:44 | access to property Value | E.cs:423:33:423:33 | access to parameter j | | E.cs:430:34:430:45 | ... == ... | true | E.cs:430:34:430:34 | access to parameter j | E.cs:430:39:430:45 | access to property Value | | E.cs:430:34:430:45 | ... == ... | true | E.cs:430:39:430:45 | access to property Value | E.cs:430:34:430:34 | access to parameter j | -| E.cs:437:13:437:21 | ... is ... | true | E.cs:437:13:437:13 | access to parameter s | E.cs:437:18:437:21 | null | -| E.cs:437:13:437:21 | ... is ... | true | E.cs:437:18:437:21 | null | E.cs:437:13:437:13 | access to parameter s | +| E.cs:437:13:437:18 | ... == ... | true | E.cs:437:13:437:13 | access to parameter i | E.cs:437:18:437:18 | 0 | +| E.cs:437:13:437:18 | ... == ... | true | E.cs:437:18:437:18 | 0 | E.cs:437:13:437:13 | access to parameter i | +| E.cs:437:23:437:31 | ... is ... | true | E.cs:437:23:437:23 | access to parameter s | E.cs:437:28:437:31 | null | +| E.cs:437:23:437:31 | ... is ... | true | E.cs:437:28:437:31 | null | E.cs:437:23:437:23 | access to parameter s | +| E.cs:442:13:442:18 | ... == ... | true | E.cs:442:13:442:13 | access to parameter i | E.cs:442:18:442:18 | 1 | +| E.cs:442:13:442:18 | ... == ... | true | E.cs:442:18:442:18 | 1 | E.cs:442:13:442:13 | access to parameter i | +| E.cs:447:13:447:18 | ... == ... | true | E.cs:447:13:447:13 | access to parameter i | E.cs:447:18:447:18 | 2 | +| E.cs:447:13:447:18 | ... == ... | true | E.cs:447:18:447:18 | 2 | E.cs:447:13:447:13 | access to parameter i | +| E.cs:447:23:447:35 | ... is ... | false | E.cs:447:23:447:23 | access to parameter s | E.cs:447:32:447:35 | null | +| E.cs:447:23:447:35 | ... is ... | false | E.cs:447:32:447:35 | null | E.cs:447:23:447:23 | access to parameter s | +| E.cs:452:13:452:18 | ... == ... | true | E.cs:452:13:452:13 | access to parameter i | E.cs:452:18:452:18 | 3 | +| E.cs:452:13:452:18 | ... == ... | true | E.cs:452:18:452:18 | 3 | E.cs:452:13:452:13 | access to parameter i | | Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:13:59:13 | access to parameter o | Forwarding.cs:59:18:59:21 | null | | Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:18:59:21 | null | Forwarding.cs:59:13:59:13 | access to parameter o | | Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:32:78:32 | access to parameter o | Forwarding.cs:78:35:78:38 | null | diff --git a/csharp/ql/test/query-tests/Nullness/EqualityCheck.ql b/csharp/ql/test/query-tests/Nullness/EqualityCheck.ql index 3036911b5a6..1140d4e9a9d 100644 --- a/csharp/ql/test/query-tests/Nullness/EqualityCheck.ql +++ b/csharp/ql/test/query-tests/Nullness/EqualityCheck.ql @@ -1,5 +1,6 @@ import csharp import semmle.code.csharp.controlflow.Guards -from Expr e1, AbstractValue v, Expr e2 -select Internal::getAnEqualityCheck(e1, v, e2), v, e1, e2 +from Guard guard, Expr e1, Expr e2, boolean eqval +where guard.isEquality(e1, e2, eqval) +select guard, eqval, e1, e2 diff --git a/csharp/ql/test/query-tests/Nullness/Forwarding.cs b/csharp/ql/test/query-tests/Nullness/Forwarding.cs index 122c5036567..fc7b7eb2e8f 100644 --- a/csharp/ql/test/query-tests/Nullness/Forwarding.cs +++ b/csharp/ql/test/query-tests/Nullness/Forwarding.cs @@ -28,7 +28,7 @@ class ForwardingTests if (IsNotNull(s)) { - Console.WriteLine(s.Length); // GOOD + Console.WriteLine(s.Length); // $ SPURIOUS (false positive): Alert[cs/dereferenced-value-is-always-null] } if (IsNotNullWrong(s)) diff --git a/csharp/ql/test/query-tests/Nullness/Implications.expected b/csharp/ql/test/query-tests/Nullness/Implications.expected deleted file mode 100644 index ec660dd44a4..00000000000 --- a/csharp/ql/test/query-tests/Nullness/Implications.expected +++ /dev/null @@ -1,1520 +0,0 @@ -| A.cs:8:15:8:32 | access to local variable synchronizedAlways | non-null | A.cs:7:37:7:40 | null | non-null | -| A.cs:8:15:8:32 | access to local variable synchronizedAlways | null | A.cs:7:37:7:40 | null | null | -| A.cs:10:13:10:30 | access to local variable synchronizedAlways | non-null | A.cs:7:37:7:40 | null | non-null | -| A.cs:10:13:10:30 | access to local variable synchronizedAlways | null | A.cs:7:37:7:40 | null | null | -| A.cs:17:9:17:17 | access to local variable arrayNull | empty | A.cs:16:27:16:30 | null | empty | -| A.cs:17:9:17:17 | access to local variable arrayNull | non-empty | A.cs:16:27:16:30 | null | non-empty | -| A.cs:17:9:17:17 | access to local variable arrayNull | non-null | A.cs:16:27:16:30 | null | non-null | -| A.cs:17:9:17:17 | access to local variable arrayNull | null | A.cs:16:27:16:30 | null | null | -| A.cs:21:9:21:15 | access to local variable arrayOk | empty | A.cs:20:19:20:29 | array creation of type Int32[] | empty | -| A.cs:21:9:21:15 | access to local variable arrayOk | non-empty | A.cs:20:19:20:29 | array creation of type Int32[] | non-empty | -| A.cs:21:9:21:15 | access to local variable arrayOk | non-null | A.cs:20:19:20:29 | array creation of type Int32[] | non-null | -| A.cs:21:9:21:15 | access to local variable arrayOk | null | A.cs:20:19:20:29 | array creation of type Int32[] | null | -| A.cs:31:27:31:37 | access to local variable arrayAccess | empty | A.cs:26:29:26:32 | null | empty | -| A.cs:31:27:31:37 | access to local variable arrayAccess | non-empty | A.cs:26:29:26:32 | null | non-empty | -| A.cs:31:27:31:37 | access to local variable arrayAccess | non-null | A.cs:26:29:26:32 | null | non-null | -| A.cs:31:27:31:37 | access to local variable arrayAccess | null | A.cs:26:29:26:32 | null | null | -| A.cs:32:27:32:37 | access to local variable fieldAccess | empty | A.cs:27:32:27:35 | null | empty | -| A.cs:32:27:32:37 | access to local variable fieldAccess | non-empty | A.cs:27:32:27:35 | null | non-empty | -| A.cs:32:27:32:37 | access to local variable fieldAccess | non-null | A.cs:27:32:27:35 | null | non-null | -| A.cs:32:27:32:37 | access to local variable fieldAccess | null | A.cs:27:32:27:35 | null | null | -| A.cs:33:28:33:39 | access to local variable methodAccess | non-null | A.cs:28:31:28:34 | null | non-null | -| A.cs:33:28:33:39 | access to local variable methodAccess | null | A.cs:28:31:28:34 | null | null | -| A.cs:34:27:34:36 | access to local variable methodCall | non-null | A.cs:29:29:29:32 | null | non-null | -| A.cs:34:27:34:36 | access to local variable methodCall | null | A.cs:29:29:29:32 | null | null | -| A.cs:36:27:36:37 | access to local variable arrayAccess | non-null | A.cs:26:29:26:32 | null | non-null | -| A.cs:36:27:36:37 | access to local variable arrayAccess | null | A.cs:26:29:26:32 | null | null | -| A.cs:37:27:37:37 | access to local variable fieldAccess | non-null | A.cs:27:32:27:35 | null | non-null | -| A.cs:37:27:37:37 | access to local variable fieldAccess | null | A.cs:27:32:27:35 | null | null | -| A.cs:38:15:38:26 | access to local variable methodAccess | non-null | A.cs:28:31:28:34 | null | non-null | -| A.cs:38:15:38:26 | access to local variable methodAccess | null | A.cs:28:31:28:34 | null | null | -| A.cs:39:27:39:36 | access to local variable methodCall | non-null | A.cs:29:29:29:32 | null | non-null | -| A.cs:39:27:39:36 | access to local variable methodCall | null | A.cs:29:29:29:32 | null | null | -| A.cs:49:25:49:30 | access to local variable varRef | non-null | A.cs:48:25:48:28 | null | non-null | -| A.cs:49:25:49:30 | access to local variable varRef | null | A.cs:48:25:48:28 | null | null | -| A.cs:50:9:50:14 | access to local variable varRef | non-null | A.cs:48:25:48:28 | null | non-null | -| A.cs:50:9:50:14 | access to local variable varRef | null | A.cs:48:25:48:28 | null | null | -| A.cs:53:25:53:30 | access to local variable varRef | non-null | A.cs:52:18:52:21 | null | non-null | -| A.cs:53:25:53:30 | access to local variable varRef | null | A.cs:52:18:52:21 | null | null | -| A.cs:61:36:61:45 | ... = ... | empty | A.cs:61:36:61:41 | access to local variable actual | empty | -| A.cs:61:36:61:45 | ... = ... | empty | A.cs:61:45:61:45 | access to parameter e | empty | -| A.cs:61:36:61:45 | ... = ... | non-empty | A.cs:61:36:61:41 | access to local variable actual | non-empty | -| A.cs:61:36:61:45 | ... = ... | non-empty | A.cs:61:45:61:45 | access to parameter e | non-empty | -| A.cs:61:36:61:45 | ... = ... | non-null | A.cs:61:36:61:41 | access to local variable actual | non-null | -| A.cs:61:36:61:45 | ... = ... | non-null | A.cs:61:45:61:45 | access to parameter e | non-null | -| A.cs:61:36:61:45 | ... = ... | null | A.cs:61:36:61:41 | access to local variable actual | null | -| A.cs:61:36:61:45 | ... = ... | null | A.cs:61:45:61:45 | access to parameter e | null | -| A.cs:63:9:63:11 | access to local variable fun | non-null | A.cs:61:26:61:45 | (...) => ... | non-null | -| A.cs:63:9:63:11 | access to local variable fun | null | A.cs:61:26:61:45 | (...) => ... | null | -| Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | Assert.cs:9:20:9:20 | access to parameter b | false | -| Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | Assert.cs:9:31:9:32 | "" | non-null | -| Assert.cs:9:20:9:32 | ... ? ... : ... | null | Assert.cs:9:20:9:20 | access to parameter b | true | -| Assert.cs:9:20:9:32 | ... ? ... : ... | null | Assert.cs:9:24:9:27 | null | null | -| Assert.cs:10:22:10:22 | access to local variable s | empty | Assert.cs:9:20:9:32 | ... ? ... : ... | empty | -| Assert.cs:10:22:10:22 | access to local variable s | non-empty | Assert.cs:9:20:9:32 | ... ? ... : ... | non-empty | -| Assert.cs:10:22:10:22 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | -| Assert.cs:10:22:10:22 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null | -| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:9:20:9:20 | access to parameter b | true | -| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:22:10:22 | access to local variable s | null | -| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:9:20:9:20 | access to parameter b | false | -| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:10:22:10:22 | access to local variable s | non-null | -| Assert.cs:11:27:11:27 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null | -| Assert.cs:11:27:11:27 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null | -| Assert.cs:13:13:13:25 | ... ? ... : ... | non-null | Assert.cs:13:13:13:13 | access to parameter b | false | -| Assert.cs:13:13:13:25 | ... ? ... : ... | non-null | Assert.cs:13:24:13:25 | "" | non-null | -| Assert.cs:13:13:13:25 | ... ? ... : ... | null | Assert.cs:13:13:13:13 | access to parameter b | true | -| Assert.cs:13:13:13:25 | ... ? ... : ... | null | Assert.cs:13:17:13:20 | null | null | -| Assert.cs:14:23:14:23 | access to local variable s | empty | Assert.cs:13:13:13:25 | ... ? ... : ... | empty | -| Assert.cs:14:23:14:23 | access to local variable s | non-empty | Assert.cs:13:13:13:25 | ... ? ... : ... | non-empty | -| Assert.cs:14:23:14:23 | access to local variable s | non-null | Assert.cs:13:13:13:13 | access to parameter b | false | -| Assert.cs:14:23:14:23 | access to local variable s | non-null | Assert.cs:13:13:13:25 | ... ? ... : ... | non-null | -| Assert.cs:14:23:14:23 | access to local variable s | null | Assert.cs:13:13:13:13 | access to parameter b | true | -| Assert.cs:14:23:14:23 | access to local variable s | null | Assert.cs:13:13:13:25 | ... ? ... : ... | null | -| Assert.cs:15:27:15:27 | access to local variable s | non-null | Assert.cs:13:13:13:25 | ... ? ... : ... | non-null | -| Assert.cs:15:27:15:27 | access to local variable s | null | Assert.cs:13:13:13:25 | ... ? ... : ... | null | -| Assert.cs:17:13:17:25 | ... ? ... : ... | non-null | Assert.cs:17:13:17:13 | access to parameter b | false | -| Assert.cs:17:13:17:25 | ... ? ... : ... | non-null | Assert.cs:17:24:17:25 | "" | non-null | -| Assert.cs:17:13:17:25 | ... ? ... : ... | null | Assert.cs:17:13:17:13 | access to parameter b | true | -| Assert.cs:17:13:17:25 | ... ? ... : ... | null | Assert.cs:17:17:17:20 | null | null | -| Assert.cs:18:26:18:26 | access to local variable s | empty | Assert.cs:17:13:17:25 | ... ? ... : ... | empty | -| Assert.cs:18:26:18:26 | access to local variable s | non-empty | Assert.cs:17:13:17:25 | ... ? ... : ... | non-empty | -| Assert.cs:18:26:18:26 | access to local variable s | non-null | Assert.cs:17:13:17:13 | access to parameter b | false | -| Assert.cs:18:26:18:26 | access to local variable s | non-null | Assert.cs:17:13:17:25 | ... ? ... : ... | non-null | -| Assert.cs:18:26:18:26 | access to local variable s | null | Assert.cs:17:13:17:13 | access to parameter b | true | -| Assert.cs:18:26:18:26 | access to local variable s | null | Assert.cs:17:13:17:25 | ... ? ... : ... | null | -| Assert.cs:19:27:19:27 | access to local variable s | non-null | Assert.cs:17:13:17:25 | ... ? ... : ... | non-null | -| Assert.cs:19:27:19:27 | access to local variable s | null | Assert.cs:17:13:17:25 | ... ? ... : ... | null | -| Assert.cs:21:13:21:25 | ... ? ... : ... | non-null | Assert.cs:21:13:21:13 | access to parameter b | false | -| Assert.cs:21:13:21:25 | ... ? ... : ... | non-null | Assert.cs:21:24:21:25 | "" | non-null | -| Assert.cs:21:13:21:25 | ... ? ... : ... | null | Assert.cs:21:13:21:13 | access to parameter b | true | -| Assert.cs:21:13:21:25 | ... ? ... : ... | null | Assert.cs:21:17:21:20 | null | null | -| Assert.cs:22:23:22:23 | access to local variable s | empty | Assert.cs:21:13:21:25 | ... ? ... : ... | empty | -| Assert.cs:22:23:22:23 | access to local variable s | non-empty | Assert.cs:21:13:21:25 | ... ? ... : ... | non-empty | -| Assert.cs:22:23:22:23 | access to local variable s | non-null | Assert.cs:21:13:21:25 | ... ? ... : ... | non-null | -| Assert.cs:22:23:22:23 | access to local variable s | null | Assert.cs:21:13:21:25 | ... ? ... : ... | null | -| Assert.cs:22:23:22:31 | ... == ... | false | Assert.cs:21:13:21:13 | access to parameter b | false | -| Assert.cs:22:23:22:31 | ... == ... | false | Assert.cs:22:23:22:23 | access to local variable s | non-null | -| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:21:13:21:13 | access to parameter b | true | -| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:22:23:22:23 | access to local variable s | null | -| Assert.cs:23:27:23:27 | access to local variable s | non-null | Assert.cs:21:13:21:25 | ... ? ... : ... | non-null | -| Assert.cs:23:27:23:27 | access to local variable s | null | Assert.cs:21:13:21:25 | ... ? ... : ... | null | -| Assert.cs:25:13:25:25 | ... ? ... : ... | non-null | Assert.cs:25:13:25:13 | access to parameter b | false | -| Assert.cs:25:13:25:25 | ... ? ... : ... | non-null | Assert.cs:25:24:25:25 | "" | non-null | -| Assert.cs:25:13:25:25 | ... ? ... : ... | null | Assert.cs:25:13:25:13 | access to parameter b | true | -| Assert.cs:25:13:25:25 | ... ? ... : ... | null | Assert.cs:25:17:25:20 | null | null | -| Assert.cs:26:23:26:23 | access to local variable s | empty | Assert.cs:25:13:25:25 | ... ? ... : ... | empty | -| Assert.cs:26:23:26:23 | access to local variable s | non-empty | Assert.cs:25:13:25:25 | ... ? ... : ... | non-empty | -| Assert.cs:26:23:26:23 | access to local variable s | non-null | Assert.cs:25:13:25:25 | ... ? ... : ... | non-null | -| Assert.cs:26:23:26:23 | access to local variable s | null | Assert.cs:25:13:25:25 | ... ? ... : ... | null | -| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:25:13:25:13 | access to parameter b | true | -| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:26:23:26:23 | access to local variable s | null | -| Assert.cs:26:23:26:31 | ... != ... | true | Assert.cs:25:13:25:13 | access to parameter b | false | -| Assert.cs:26:23:26:31 | ... != ... | true | Assert.cs:26:23:26:23 | access to local variable s | non-null | -| Assert.cs:27:27:27:27 | access to local variable s | non-null | Assert.cs:25:13:25:25 | ... ? ... : ... | non-null | -| Assert.cs:27:27:27:27 | access to local variable s | null | Assert.cs:25:13:25:25 | ... ? ... : ... | null | -| Assert.cs:29:13:29:25 | ... ? ... : ... | non-null | Assert.cs:29:13:29:13 | access to parameter b | false | -| Assert.cs:29:13:29:25 | ... ? ... : ... | non-null | Assert.cs:29:24:29:25 | "" | non-null | -| Assert.cs:29:13:29:25 | ... ? ... : ... | null | Assert.cs:29:13:29:13 | access to parameter b | true | -| Assert.cs:29:13:29:25 | ... ? ... : ... | null | Assert.cs:29:17:29:20 | null | null | -| Assert.cs:30:24:30:24 | access to local variable s | empty | Assert.cs:29:13:29:25 | ... ? ... : ... | empty | -| Assert.cs:30:24:30:24 | access to local variable s | non-empty | Assert.cs:29:13:29:25 | ... ? ... : ... | non-empty | -| Assert.cs:30:24:30:24 | access to local variable s | non-null | Assert.cs:29:13:29:25 | ... ? ... : ... | non-null | -| Assert.cs:30:24:30:24 | access to local variable s | null | Assert.cs:29:13:29:25 | ... ? ... : ... | null | -| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:29:13:29:13 | access to parameter b | true | -| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:30:24:30:24 | access to local variable s | null | -| Assert.cs:30:24:30:32 | ... != ... | true | Assert.cs:29:13:29:13 | access to parameter b | false | -| Assert.cs:30:24:30:32 | ... != ... | true | Assert.cs:30:24:30:24 | access to local variable s | non-null | -| Assert.cs:31:27:31:27 | access to local variable s | non-null | Assert.cs:29:13:29:25 | ... ? ... : ... | non-null | -| Assert.cs:31:27:31:27 | access to local variable s | null | Assert.cs:29:13:29:25 | ... ? ... : ... | null | -| Assert.cs:33:13:33:25 | ... ? ... : ... | non-null | Assert.cs:33:13:33:13 | access to parameter b | false | -| Assert.cs:33:13:33:25 | ... ? ... : ... | non-null | Assert.cs:33:24:33:25 | "" | non-null | -| Assert.cs:33:13:33:25 | ... ? ... : ... | null | Assert.cs:33:13:33:13 | access to parameter b | true | -| Assert.cs:33:13:33:25 | ... ? ... : ... | null | Assert.cs:33:17:33:20 | null | null | -| Assert.cs:34:24:34:24 | access to local variable s | empty | Assert.cs:33:13:33:25 | ... ? ... : ... | empty | -| Assert.cs:34:24:34:24 | access to local variable s | non-empty | Assert.cs:33:13:33:25 | ... ? ... : ... | non-empty | -| Assert.cs:34:24:34:24 | access to local variable s | non-null | Assert.cs:33:13:33:25 | ... ? ... : ... | non-null | -| Assert.cs:34:24:34:24 | access to local variable s | null | Assert.cs:33:13:33:25 | ... ? ... : ... | null | -| Assert.cs:34:24:34:32 | ... == ... | false | Assert.cs:33:13:33:13 | access to parameter b | false | -| Assert.cs:34:24:34:32 | ... == ... | false | Assert.cs:34:24:34:24 | access to local variable s | non-null | -| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:33:13:33:13 | access to parameter b | true | -| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:34:24:34:24 | access to local variable s | null | -| Assert.cs:35:27:35:27 | access to local variable s | non-null | Assert.cs:33:13:33:25 | ... ? ... : ... | non-null | -| Assert.cs:35:27:35:27 | access to local variable s | null | Assert.cs:33:13:33:25 | ... ? ... : ... | null | -| Assert.cs:37:13:37:25 | ... ? ... : ... | non-null | Assert.cs:37:13:37:13 | access to parameter b | false | -| Assert.cs:37:13:37:25 | ... ? ... : ... | non-null | Assert.cs:37:24:37:25 | "" | non-null | -| Assert.cs:37:13:37:25 | ... ? ... : ... | null | Assert.cs:37:13:37:13 | access to parameter b | true | -| Assert.cs:37:13:37:25 | ... ? ... : ... | null | Assert.cs:37:17:37:20 | null | null | -| Assert.cs:38:23:38:23 | access to local variable s | empty | Assert.cs:37:13:37:25 | ... ? ... : ... | empty | -| Assert.cs:38:23:38:23 | access to local variable s | non-empty | Assert.cs:37:13:37:25 | ... ? ... : ... | non-empty | -| Assert.cs:38:23:38:23 | access to local variable s | non-null | Assert.cs:37:13:37:25 | ... ? ... : ... | non-null | -| Assert.cs:38:23:38:23 | access to local variable s | null | Assert.cs:37:13:37:25 | ... ? ... : ... | null | -| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:37:13:37:13 | access to parameter b | true | -| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:23:38:23 | access to local variable s | null | -| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:37:13:37:13 | access to parameter b | false | -| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:38:23:38:23 | access to local variable s | non-null | -| Assert.cs:38:23:38:36 | ... && ... | true | Assert.cs:38:23:38:31 | ... != ... | true | -| Assert.cs:38:23:38:36 | ... && ... | true | Assert.cs:38:36:38:36 | access to parameter b | true | -| Assert.cs:39:27:39:27 | access to local variable s | non-null | Assert.cs:37:13:37:25 | ... ? ... : ... | non-null | -| Assert.cs:39:27:39:27 | access to local variable s | null | Assert.cs:37:13:37:25 | ... ? ... : ... | null | -| Assert.cs:41:13:41:25 | ... ? ... : ... | non-null | Assert.cs:41:13:41:13 | access to parameter b | false | -| Assert.cs:41:13:41:25 | ... ? ... : ... | non-null | Assert.cs:41:24:41:25 | "" | non-null | -| Assert.cs:41:13:41:25 | ... ? ... : ... | null | Assert.cs:41:13:41:13 | access to parameter b | true | -| Assert.cs:41:13:41:25 | ... ? ... : ... | null | Assert.cs:41:17:41:20 | null | null | -| Assert.cs:42:24:42:24 | access to local variable s | empty | Assert.cs:41:13:41:25 | ... ? ... : ... | empty | -| Assert.cs:42:24:42:24 | access to local variable s | non-empty | Assert.cs:41:13:41:25 | ... ? ... : ... | non-empty | -| Assert.cs:42:24:42:24 | access to local variable s | non-null | Assert.cs:41:13:41:25 | ... ? ... : ... | non-null | -| Assert.cs:42:24:42:24 | access to local variable s | null | Assert.cs:41:13:41:25 | ... ? ... : ... | null | -| Assert.cs:42:24:42:32 | ... == ... | false | Assert.cs:41:13:41:13 | access to parameter b | false | -| Assert.cs:42:24:42:32 | ... == ... | false | Assert.cs:42:24:42:24 | access to local variable s | non-null | -| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:41:13:41:13 | access to parameter b | true | -| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:42:24:42:24 | access to local variable s | null | -| Assert.cs:42:24:42:38 | ... \|\| ... | false | Assert.cs:42:24:42:32 | ... == ... | false | -| Assert.cs:42:24:42:38 | ... \|\| ... | false | Assert.cs:42:37:42:38 | !... | false | -| Assert.cs:42:37:42:38 | !... | false | Assert.cs:42:38:42:38 | access to parameter b | true | -| Assert.cs:42:37:42:38 | !... | true | Assert.cs:42:38:42:38 | access to parameter b | false | -| Assert.cs:43:27:43:27 | access to local variable s | non-null | Assert.cs:41:13:41:25 | ... ? ... : ... | non-null | -| Assert.cs:43:27:43:27 | access to local variable s | null | Assert.cs:41:13:41:25 | ... ? ... : ... | null | -| Assert.cs:45:13:45:25 | ... ? ... : ... | non-null | Assert.cs:45:13:45:13 | access to parameter b | false | -| Assert.cs:45:13:45:25 | ... ? ... : ... | non-null | Assert.cs:45:24:45:25 | "" | non-null | -| Assert.cs:45:13:45:25 | ... ? ... : ... | null | Assert.cs:45:13:45:13 | access to parameter b | true | -| Assert.cs:45:13:45:25 | ... ? ... : ... | null | Assert.cs:45:17:45:20 | null | null | -| Assert.cs:46:23:46:23 | access to local variable s | empty | Assert.cs:45:13:45:25 | ... ? ... : ... | empty | -| Assert.cs:46:23:46:23 | access to local variable s | non-empty | Assert.cs:45:13:45:25 | ... ? ... : ... | non-empty | -| Assert.cs:46:23:46:23 | access to local variable s | non-null | Assert.cs:45:13:45:25 | ... ? ... : ... | non-null | -| Assert.cs:46:23:46:23 | access to local variable s | null | Assert.cs:45:13:45:25 | ... ? ... : ... | null | -| Assert.cs:46:23:46:31 | ... == ... | false | Assert.cs:45:13:45:13 | access to parameter b | false | -| Assert.cs:46:23:46:31 | ... == ... | false | Assert.cs:46:23:46:23 | access to local variable s | non-null | -| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:45:13:45:13 | access to parameter b | true | -| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:46:23:46:23 | access to local variable s | null | -| Assert.cs:46:23:46:36 | ... && ... | true | Assert.cs:46:23:46:31 | ... == ... | true | -| Assert.cs:46:23:46:36 | ... && ... | true | Assert.cs:46:36:46:36 | access to parameter b | true | -| Assert.cs:47:27:47:27 | access to local variable s | non-null | Assert.cs:45:13:45:25 | ... ? ... : ... | non-null | -| Assert.cs:47:27:47:27 | access to local variable s | null | Assert.cs:45:13:45:25 | ... ? ... : ... | null | -| Assert.cs:49:13:49:25 | ... ? ... : ... | non-null | Assert.cs:49:13:49:13 | access to parameter b | false | -| Assert.cs:49:13:49:25 | ... ? ... : ... | non-null | Assert.cs:49:24:49:25 | "" | non-null | -| Assert.cs:49:13:49:25 | ... ? ... : ... | null | Assert.cs:49:13:49:13 | access to parameter b | true | -| Assert.cs:49:13:49:25 | ... ? ... : ... | null | Assert.cs:49:17:49:20 | null | null | -| Assert.cs:50:24:50:24 | access to local variable s | empty | Assert.cs:49:13:49:25 | ... ? ... : ... | empty | -| Assert.cs:50:24:50:24 | access to local variable s | non-empty | Assert.cs:49:13:49:25 | ... ? ... : ... | non-empty | -| Assert.cs:50:24:50:24 | access to local variable s | non-null | Assert.cs:49:13:49:25 | ... ? ... : ... | non-null | -| Assert.cs:50:24:50:24 | access to local variable s | null | Assert.cs:49:13:49:25 | ... ? ... : ... | null | -| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:49:13:49:13 | access to parameter b | true | -| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:50:24:50:24 | access to local variable s | null | -| Assert.cs:50:24:50:32 | ... != ... | true | Assert.cs:49:13:49:13 | access to parameter b | false | -| Assert.cs:50:24:50:32 | ... != ... | true | Assert.cs:50:24:50:24 | access to local variable s | non-null | -| Assert.cs:50:24:50:38 | ... \|\| ... | false | Assert.cs:50:24:50:32 | ... != ... | false | -| Assert.cs:50:24:50:38 | ... \|\| ... | false | Assert.cs:50:37:50:38 | !... | false | -| Assert.cs:50:37:50:38 | !... | false | Assert.cs:50:38:50:38 | access to parameter b | true | -| Assert.cs:50:37:50:38 | !... | true | Assert.cs:50:38:50:38 | access to parameter b | false | -| Assert.cs:51:27:51:27 | access to local variable s | non-null | Assert.cs:49:13:49:25 | ... ? ... : ... | non-null | -| Assert.cs:51:27:51:27 | access to local variable s | null | Assert.cs:49:13:49:25 | ... ? ... : ... | null | -| B.cs:12:13:12:24 | access to local variable eqCallAlways | non-null | B.cs:7:26:7:29 | null | non-null | -| B.cs:12:13:12:24 | access to local variable eqCallAlways | null | B.cs:7:26:7:29 | null | null | -| B.cs:12:13:12:32 | call to operator == | false | B.cs:12:13:12:24 | access to local variable eqCallAlways | non-null | -| B.cs:12:13:12:32 | call to operator == | false | B.cs:12:29:12:32 | null | non-null | -| B.cs:12:13:12:32 | call to operator == | true | B.cs:12:13:12:24 | access to local variable eqCallAlways | null | -| B.cs:12:13:12:32 | call to operator == | true | B.cs:12:29:12:32 | null | null | -| B.cs:13:13:13:24 | access to local variable eqCallAlways | non-null | B.cs:7:26:7:29 | null | non-null | -| B.cs:13:13:13:24 | access to local variable eqCallAlways | null | B.cs:7:26:7:29 | null | null | -| B.cs:15:13:15:14 | access to local variable b2 | non-null | B.cs:8:16:8:19 | null | non-null | -| B.cs:15:13:15:14 | access to local variable b2 | null | B.cs:8:16:8:19 | null | null | -| B.cs:15:13:15:22 | call to operator != | false | B.cs:15:13:15:14 | access to local variable b2 | null | -| B.cs:15:13:15:22 | call to operator != | false | B.cs:15:19:15:22 | null | null | -| B.cs:15:13:15:22 | call to operator != | true | B.cs:15:13:15:14 | access to local variable b2 | non-null | -| B.cs:15:13:15:22 | call to operator != | true | B.cs:15:19:15:22 | null | non-null | -| B.cs:16:13:16:14 | access to local variable b2 | non-null | B.cs:8:16:8:19 | null | non-null | -| B.cs:16:13:16:14 | access to local variable b2 | null | B.cs:8:16:8:19 | null | null | -| B.cs:18:13:18:14 | access to local variable b3 | non-null | B.cs:9:16:9:19 | null | non-null | -| B.cs:18:13:18:14 | access to local variable b3 | null | B.cs:9:16:9:19 | null | null | -| B.cs:18:13:18:22 | call to operator == | false | B.cs:18:13:18:14 | access to local variable b3 | non-null | -| B.cs:18:13:18:22 | call to operator == | false | B.cs:18:19:18:22 | null | non-null | -| B.cs:18:13:18:22 | call to operator == | true | B.cs:18:13:18:14 | access to local variable b3 | null | -| B.cs:18:13:18:22 | call to operator == | true | B.cs:18:19:18:22 | null | null | -| B.cs:20:13:20:14 | access to local variable b3 | non-null | B.cs:9:16:9:19 | null | non-null | -| B.cs:20:13:20:14 | access to local variable b3 | null | B.cs:9:16:9:19 | null | null | -| B.cs:22:13:22:25 | access to local variable neqCallAlways | non-null | B.cs:10:27:10:30 | null | non-null | -| B.cs:22:13:22:25 | access to local variable neqCallAlways | null | B.cs:10:27:10:30 | null | null | -| B.cs:22:13:22:33 | call to operator != | false | B.cs:22:13:22:25 | access to local variable neqCallAlways | null | -| B.cs:22:13:22:33 | call to operator != | false | B.cs:22:30:22:33 | null | null | -| B.cs:22:13:22:33 | call to operator != | true | B.cs:22:13:22:25 | access to local variable neqCallAlways | non-null | -| B.cs:22:13:22:33 | call to operator != | true | B.cs:22:30:22:33 | null | non-null | -| B.cs:24:13:24:25 | access to local variable neqCallAlways | non-null | B.cs:10:27:10:30 | null | non-null | -| B.cs:24:13:24:25 | access to local variable neqCallAlways | null | B.cs:10:27:10:30 | null | null | -| B.cs:34:16:34:26 | !... | false | B.cs:34:18:34:25 | call to operator == | true | -| B.cs:34:16:34:26 | !... | true | B.cs:34:18:34:25 | call to operator == | false | -| B.cs:53:17:53:25 | (...) ... | non-null | B.cs:53:25:53:25 | access to local variable o | non-null | -| B.cs:53:17:53:25 | (...) ... | null | B.cs:53:25:53:25 | access to local variable o | null | -| B.cs:53:17:53:33 | ... != ... | false | B.cs:53:17:53:25 | (...) ... | null | -| B.cs:53:17:53:33 | ... != ... | false | B.cs:53:30:53:33 | null | null | -| B.cs:53:17:53:33 | ... != ... | true | B.cs:53:17:53:25 | (...) ... | non-null | -| B.cs:53:17:53:33 | ... != ... | true | B.cs:53:30:53:33 | null | non-null | -| B.cs:53:25:53:25 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null | -| B.cs:53:25:53:25 | access to local variable o | null | B.cs:52:24:52:27 | null | null | -| B.cs:55:26:55:26 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null | -| B.cs:55:26:55:26 | access to local variable o | null | B.cs:52:24:52:27 | null | null | -| B.cs:55:26:55:36 | call to method Equals | false | B.cs:55:26:55:26 | access to local variable o | non-null | -| B.cs:55:26:55:36 | call to method Equals | false | B.cs:55:35:55:35 | access to local variable o | non-null | -| B.cs:55:26:55:36 | call to method Equals | true | B.cs:55:26:55:26 | access to local variable o | null | -| B.cs:55:26:55:36 | call to method Equals | true | B.cs:55:35:55:35 | access to local variable o | null | -| B.cs:55:35:55:35 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null | -| B.cs:55:35:55:35 | access to local variable o | null | B.cs:52:24:52:27 | null | null | -| C.cs:11:13:11:30 | !... | false | C.cs:11:15:11:29 | !... | true | -| C.cs:11:13:11:30 | !... | true | C.cs:11:15:11:29 | !... | false | -| C.cs:11:15:11:29 | !... | false | C.cs:11:17:11:28 | !... | true | -| C.cs:11:15:11:29 | !... | true | C.cs:11:17:11:28 | !... | false | -| C.cs:11:17:11:28 | !... | false | C.cs:11:19:11:27 | ... == ... | true | -| C.cs:11:17:11:28 | !... | true | C.cs:11:19:11:27 | ... == ... | false | -| C.cs:11:19:11:19 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null | -| C.cs:11:19:11:19 | access to local variable o | null | C.cs:10:20:10:23 | null | null | -| C.cs:11:19:11:27 | ... == ... | false | C.cs:11:19:11:19 | access to local variable o | non-null | -| C.cs:11:19:11:27 | ... == ... | false | C.cs:11:24:11:27 | null | non-null | -| C.cs:11:19:11:27 | ... == ... | true | C.cs:11:19:11:19 | access to local variable o | null | -| C.cs:11:19:11:27 | ... == ... | true | C.cs:11:24:11:27 | null | null | -| C.cs:13:13:13:13 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null | -| C.cs:13:13:13:13 | access to local variable o | null | C.cs:10:20:10:23 | null | null | -| C.cs:16:13:16:24 | !... | false | C.cs:16:15:16:23 | ... != ... | true | -| C.cs:16:13:16:24 | !... | true | C.cs:16:15:16:23 | ... != ... | false | -| C.cs:16:15:16:15 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null | -| C.cs:16:15:16:15 | access to local variable o | null | C.cs:10:20:10:23 | null | null | -| C.cs:16:15:16:23 | ... != ... | false | C.cs:16:15:16:15 | access to local variable o | null | -| C.cs:16:15:16:23 | ... != ... | false | C.cs:16:20:16:23 | null | null | -| C.cs:16:15:16:23 | ... != ... | true | C.cs:16:15:16:15 | access to local variable o | non-null | -| C.cs:16:15:16:23 | ... != ... | true | C.cs:16:20:16:23 | null | non-null | -| C.cs:18:13:18:13 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null | -| C.cs:18:13:18:13 | access to local variable o | null | C.cs:10:20:10:23 | null | null | -| C.cs:24:13:24:21 | ... != ... | false | C.cs:24:13:24:13 | access to parameter o | null | -| C.cs:24:13:24:21 | ... != ... | true | C.cs:24:13:24:13 | access to parameter o | non-null | -| C.cs:28:37:28:45 | ... == ... | false | C.cs:28:37:28:37 | access to parameter o | non-null | -| C.cs:28:37:28:45 | ... == ... | true | C.cs:28:37:28:37 | access to parameter o | null | -| C.cs:30:40:30:48 | ... != ... | false | C.cs:30:40:30:40 | access to parameter o | null | -| C.cs:30:40:30:48 | ... != ... | true | C.cs:30:40:30:40 | access to parameter o | non-null | -| C.cs:34:13:34:21 | ... == ... | false | C.cs:34:13:34:13 | access to parameter o | non-null | -| C.cs:34:13:34:21 | ... == ... | true | C.cs:34:13:34:13 | access to parameter o | null | -| C.cs:40:17:40:35 | ... ? ... : ... | non-null | C.cs:40:17:40:23 | call to method Maybe | false | -| C.cs:40:17:40:35 | ... ? ... : ... | non-null | C.cs:40:34:40:35 | "" | non-null | -| C.cs:40:17:40:35 | ... ? ... : ... | null | C.cs:40:17:40:23 | call to method Maybe | true | -| C.cs:40:17:40:35 | ... ? ... : ... | null | C.cs:40:27:40:30 | null | null | -| C.cs:41:22:41:22 | access to local variable s | empty | C.cs:40:17:40:35 | ... ? ... : ... | empty | -| C.cs:41:22:41:22 | access to local variable s | non-empty | C.cs:40:17:40:35 | ... ? ... : ... | non-empty | -| C.cs:41:22:41:22 | access to local variable s | non-null | C.cs:40:17:40:35 | ... ? ... : ... | non-null | -| C.cs:41:22:41:22 | access to local variable s | null | C.cs:40:17:40:35 | ... ? ... : ... | null | -| C.cs:41:22:41:30 | ... == ... | false | C.cs:40:17:40:23 | call to method Maybe | false | -| C.cs:41:22:41:30 | ... == ... | false | C.cs:41:22:41:22 | access to local variable s | non-null | -| C.cs:41:22:41:30 | ... == ... | true | C.cs:40:17:40:23 | call to method Maybe | true | -| C.cs:41:22:41:30 | ... == ... | true | C.cs:41:22:41:22 | access to local variable s | null | -| C.cs:42:9:42:9 | access to local variable s | non-null | C.cs:40:17:40:35 | ... ? ... : ... | non-null | -| C.cs:42:9:42:9 | access to local variable s | null | C.cs:40:17:40:35 | ... ? ... : ... | null | -| C.cs:44:13:44:31 | ... ? ... : ... | non-null | C.cs:44:13:44:19 | call to method Maybe | false | -| C.cs:44:13:44:31 | ... ? ... : ... | non-null | C.cs:44:30:44:31 | "" | non-null | -| C.cs:44:13:44:31 | ... ? ... : ... | null | C.cs:44:13:44:19 | call to method Maybe | true | -| C.cs:44:13:44:31 | ... ? ... : ... | null | C.cs:44:23:44:26 | null | null | -| C.cs:45:22:45:22 | access to local variable s | empty | C.cs:44:13:44:31 | ... ? ... : ... | empty | -| C.cs:45:22:45:22 | access to local variable s | non-empty | C.cs:44:13:44:31 | ... ? ... : ... | non-empty | -| C.cs:45:22:45:22 | access to local variable s | non-null | C.cs:44:13:44:31 | ... ? ... : ... | non-null | -| C.cs:45:22:45:22 | access to local variable s | null | C.cs:44:13:44:31 | ... ? ... : ... | null | -| C.cs:45:22:45:30 | ... != ... | false | C.cs:44:13:44:19 | call to method Maybe | true | -| C.cs:45:22:45:30 | ... != ... | false | C.cs:45:22:45:22 | access to local variable s | null | -| C.cs:45:22:45:30 | ... != ... | true | C.cs:44:13:44:19 | call to method Maybe | false | -| C.cs:45:22:45:30 | ... != ... | true | C.cs:45:22:45:22 | access to local variable s | non-null | -| C.cs:46:9:46:9 | access to local variable s | non-null | C.cs:44:13:44:31 | ... ? ... : ... | non-null | -| C.cs:46:9:46:9 | access to local variable s | null | C.cs:44:13:44:31 | ... ? ... : ... | null | -| C.cs:52:20:52:21 | access to local variable o1 | non-null | C.cs:51:18:51:29 | object creation of type Object | non-null | -| C.cs:52:20:52:21 | access to local variable o1 | null | C.cs:51:18:51:29 | object creation of type Object | null | -| C.cs:53:9:53:10 | access to local variable o1 | non-null | C.cs:51:18:51:29 | object creation of type Object | non-null | -| C.cs:53:9:53:10 | access to local variable o1 | null | C.cs:51:18:51:29 | object creation of type Object | null | -| C.cs:55:18:55:36 | ... ? ... : ... | non-null | C.cs:55:18:55:24 | call to method Maybe | false | -| C.cs:55:18:55:36 | ... ? ... : ... | non-null | C.cs:55:35:55:36 | "" | non-null | -| C.cs:55:18:55:36 | ... ? ... : ... | null | C.cs:55:18:55:24 | call to method Maybe | true | -| C.cs:55:18:55:36 | ... ? ... : ... | null | C.cs:55:28:55:31 | null | null | -| C.cs:56:23:56:24 | access to local variable o2 | empty | C.cs:55:18:55:36 | ... ? ... : ... | empty | -| C.cs:56:23:56:24 | access to local variable o2 | non-empty | C.cs:55:18:55:36 | ... ? ... : ... | non-empty | -| C.cs:56:23:56:24 | access to local variable o2 | non-null | C.cs:55:18:55:24 | call to method Maybe | false | -| C.cs:56:23:56:24 | access to local variable o2 | non-null | C.cs:55:18:55:36 | ... ? ... : ... | non-null | -| C.cs:56:23:56:24 | access to local variable o2 | null | C.cs:55:18:55:24 | call to method Maybe | true | -| C.cs:56:23:56:24 | access to local variable o2 | null | C.cs:55:18:55:36 | ... ? ... : ... | null | -| C.cs:57:9:57:10 | access to local variable o2 | non-null | C.cs:55:18:55:36 | ... ? ... : ... | non-null | -| C.cs:57:9:57:10 | access to local variable o2 | null | C.cs:55:18:55:36 | ... ? ... : ... | null | -| C.cs:62:18:62:46 | ... ? ... : ... | non-null | C.cs:62:18:62:24 | call to method Maybe | false | -| C.cs:62:18:62:46 | ... ? ... : ... | non-null | C.cs:62:35:62:46 | object creation of type Object | non-null | -| C.cs:62:18:62:46 | ... ? ... : ... | null | C.cs:62:18:62:24 | call to method Maybe | true | -| C.cs:62:18:62:46 | ... ? ... : ... | null | C.cs:62:28:62:31 | null | null | -| C.cs:63:23:63:24 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null | -| C.cs:63:23:63:24 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null | -| C.cs:64:9:64:10 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null | -| C.cs:64:9:64:10 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null | -| C.cs:66:18:66:46 | ... ? ... : ... | non-null | C.cs:66:18:66:24 | call to method Maybe | false | -| C.cs:66:18:66:46 | ... ? ... : ... | non-null | C.cs:66:35:66:46 | object creation of type Object | non-null | -| C.cs:66:18:66:46 | ... ? ... : ... | null | C.cs:66:18:66:24 | call to method Maybe | true | -| C.cs:66:18:66:46 | ... ? ... : ... | null | C.cs:66:28:66:31 | null | null | -| C.cs:67:23:67:24 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null | -| C.cs:67:23:67:24 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null | -| C.cs:68:9:68:10 | access to local variable o2 | non-null | C.cs:66:18:66:46 | ... ? ... : ... | non-null | -| C.cs:68:9:68:10 | access to local variable o2 | null | C.cs:66:18:66:46 | ... ? ... : ... | null | -| C.cs:70:18:70:46 | ... ? ... : ... | non-null | C.cs:70:18:70:24 | call to method Maybe | false | -| C.cs:70:18:70:46 | ... ? ... : ... | non-null | C.cs:70:35:70:46 | object creation of type Object | non-null | -| C.cs:70:18:70:46 | ... ? ... : ... | null | C.cs:70:18:70:24 | call to method Maybe | true | -| C.cs:70:18:70:46 | ... ? ... : ... | null | C.cs:70:28:70:31 | null | null | -| C.cs:71:26:71:27 | access to local variable o3 | non-null | C.cs:70:18:70:24 | call to method Maybe | false | -| C.cs:71:26:71:27 | access to local variable o3 | non-null | C.cs:70:18:70:46 | ... ? ... : ... | non-null | -| C.cs:71:26:71:27 | access to local variable o3 | null | C.cs:70:18:70:24 | call to method Maybe | true | -| C.cs:71:26:71:27 | access to local variable o3 | null | C.cs:70:18:70:46 | ... ? ... : ... | null | -| C.cs:72:9:72:10 | access to local variable o3 | non-null | C.cs:70:18:70:46 | ... ? ... : ... | non-null | -| C.cs:72:9:72:10 | access to local variable o3 | null | C.cs:70:18:70:46 | ... ? ... : ... | null | -| C.cs:78:13:78:24 | call to method IsNotNull | false | C.cs:78:23:78:23 | access to local variable o | null | -| C.cs:78:13:78:24 | call to method IsNotNull | true | C.cs:78:23:78:23 | access to local variable o | non-null | -| C.cs:78:23:78:23 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null | -| C.cs:78:23:78:23 | access to local variable o | null | C.cs:77:20:77:23 | null | null | -| C.cs:79:13:79:13 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null | -| C.cs:79:13:79:13 | access to local variable o | null | C.cs:77:20:77:23 | null | null | -| C.cs:81:13:81:22 | !... | false | C.cs:81:14:81:22 | call to method IsNull | true | -| C.cs:81:13:81:22 | !... | true | C.cs:81:14:81:22 | call to method IsNull | false | -| C.cs:81:14:81:22 | call to method IsNull | false | C.cs:81:21:81:21 | access to local variable o | non-null | -| C.cs:81:14:81:22 | call to method IsNull | true | C.cs:81:21:81:21 | access to local variable o | null | -| C.cs:81:21:81:21 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null | -| C.cs:81:21:81:21 | access to local variable o | null | C.cs:77:20:77:23 | null | null | -| C.cs:82:13:82:13 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null | -| C.cs:82:13:82:13 | access to local variable o | null | C.cs:77:20:77:23 | null | null | -| C.cs:88:13:88:13 | access to local variable o | non-null | C.cs:87:20:87:23 | null | non-null | -| C.cs:88:13:88:13 | access to local variable o | null | C.cs:87:20:87:23 | null | null | -| C.cs:88:13:88:23 | ... is ... | true | C.cs:88:13:88:13 | access to local variable o | non-null | -| C.cs:89:13:89:13 | access to local variable o | non-null | C.cs:87:20:87:23 | null | non-null | -| C.cs:89:13:89:13 | access to local variable o | null | C.cs:87:20:87:23 | null | null | -| C.cs:94:17:94:45 | ... ? ... : ... | non-null | C.cs:94:17:94:23 | call to method Maybe | false | -| C.cs:94:17:94:45 | ... ? ... : ... | non-null | C.cs:94:34:94:45 | object creation of type Object | non-null | -| C.cs:94:17:94:45 | ... ? ... : ... | null | C.cs:94:17:94:23 | call to method Maybe | true | -| C.cs:94:17:94:45 | ... ? ... : ... | null | C.cs:94:27:94:30 | null | null | -| C.cs:95:15:95:15 | access to local variable o | non-null | C.cs:94:17:94:45 | ... ? ... : ... | non-null | -| C.cs:95:15:95:15 | access to local variable o | null | C.cs:94:17:94:45 | ... ? ... : ... | null | -| C.cs:96:13:96:13 | access to local variable o | non-null | C.cs:94:17:94:45 | ... ? ... : ... | non-null | -| C.cs:96:13:96:13 | access to local variable o | null | C.cs:94:17:94:45 | ... ? ... : ... | null | -| C.cs:113:22:113:28 | access to local variable colours | empty | C.cs:112:26:112:29 | null | empty | -| C.cs:113:22:113:28 | access to local variable colours | non-empty | C.cs:112:26:112:29 | null | non-empty | -| C.cs:113:22:113:28 | access to local variable colours | non-null | C.cs:112:26:112:29 | null | non-null | -| C.cs:113:22:113:28 | access to local variable colours | null | C.cs:112:26:112:29 | null | null | -| C.cs:113:22:113:36 | ... == ... | false | C.cs:113:22:113:28 | access to local variable colours | non-null | -| C.cs:113:22:113:36 | ... == ... | false | C.cs:113:33:113:36 | null | non-null | -| C.cs:113:22:113:36 | ... == ... | true | C.cs:113:22:113:28 | access to local variable colours | null | -| C.cs:113:22:113:36 | ... == ... | true | C.cs:113:33:113:36 | null | null | -| C.cs:113:22:113:59 | ... \|\| ... | false | C.cs:113:22:113:36 | ... == ... | false | -| C.cs:113:22:113:59 | ... \|\| ... | false | C.cs:113:41:113:59 | ... == ... | false | -| C.cs:113:22:113:90 | ... ? ... : ... | null | C.cs:113:22:113:59 | ... \|\| ... | false | -| C.cs:113:22:113:90 | ... ? ... : ... | null | C.cs:113:73:113:90 | call to method ToString | null | -| C.cs:113:41:113:47 | access to local variable colours | non-null | C.cs:112:26:112:29 | null | non-null | -| C.cs:113:41:113:47 | access to local variable colours | null | C.cs:112:26:112:29 | null | null | -| C.cs:113:73:113:79 | access to local variable colours | non-null | C.cs:112:26:112:29 | null | non-null | -| C.cs:113:73:113:79 | access to local variable colours | null | C.cs:112:26:112:29 | null | null | -| C.cs:120:13:120:20 | access to local variable children | empty | C.cs:118:29:118:32 | null | empty | -| C.cs:120:13:120:20 | access to local variable children | non-empty | C.cs:118:29:118:32 | null | non-empty | -| C.cs:120:13:120:20 | access to local variable children | non-null | C.cs:118:29:118:32 | null | non-null | -| C.cs:120:13:120:20 | access to local variable children | null | C.cs:118:29:118:32 | null | null | -| C.cs:120:13:120:28 | ... == ... | false | C.cs:120:13:120:20 | access to local variable children | non-null | -| C.cs:120:13:120:28 | ... == ... | false | C.cs:120:25:120:28 | null | non-null | -| C.cs:120:13:120:28 | ... == ... | true | C.cs:120:13:120:20 | access to local variable children | null | -| C.cs:120:13:120:28 | ... == ... | true | C.cs:120:25:120:28 | null | null | -| C.cs:122:13:122:31 | ... > ... | true | C.cs:122:13:122:20 | access to local variable children | non-empty | -| C.cs:129:13:129:38 | ... == ... | false | C.cs:129:14:129:29 | ... = ... | non-null | -| C.cs:129:13:129:38 | ... == ... | false | C.cs:129:35:129:38 | null | non-null | -| C.cs:129:13:129:38 | ... == ... | true | C.cs:129:14:129:29 | ... = ... | null | -| C.cs:129:13:129:38 | ... == ... | true | C.cs:129:35:129:38 | null | null | -| C.cs:129:13:129:55 | ... \|\| ... | false | C.cs:129:13:129:38 | ... == ... | false | -| C.cs:129:13:129:55 | ... \|\| ... | false | C.cs:129:43:129:55 | ... > ... | false | -| C.cs:129:14:129:29 | ... = ... | empty | C.cs:129:14:129:15 | access to local variable ok | empty | -| C.cs:129:14:129:29 | ... = ... | empty | C.cs:129:20:129:28 | ... = ... | empty | -| C.cs:129:14:129:29 | ... = ... | non-empty | C.cs:129:14:129:15 | access to local variable ok | non-empty | -| C.cs:129:14:129:29 | ... = ... | non-empty | C.cs:129:20:129:28 | ... = ... | non-empty | -| C.cs:129:14:129:29 | ... = ... | non-null | C.cs:129:14:129:15 | access to local variable ok | non-null | -| C.cs:129:14:129:29 | ... = ... | non-null | C.cs:129:20:129:28 | ... = ... | non-null | -| C.cs:129:14:129:29 | ... = ... | null | C.cs:129:14:129:15 | access to local variable ok | null | -| C.cs:129:14:129:29 | ... = ... | null | C.cs:129:20:129:28 | ... = ... | null | -| C.cs:129:20:129:28 | ... = ... | empty | C.cs:129:20:129:21 | access to local variable xx | empty | -| C.cs:129:20:129:28 | ... = ... | empty | C.cs:129:25:129:28 | null | empty | -| C.cs:129:20:129:28 | ... = ... | non-empty | C.cs:129:20:129:21 | access to local variable xx | non-empty | -| C.cs:129:20:129:28 | ... = ... | non-empty | C.cs:129:25:129:28 | null | non-empty | -| C.cs:129:20:129:28 | ... = ... | non-null | C.cs:129:20:129:21 | access to local variable xx | non-null | -| C.cs:129:20:129:28 | ... = ... | non-null | C.cs:129:25:129:28 | null | non-null | -| C.cs:129:20:129:28 | ... = ... | null | C.cs:129:20:129:21 | access to local variable xx | null | -| C.cs:129:20:129:28 | ... = ... | null | C.cs:129:25:129:28 | null | null | -| C.cs:129:43:129:44 | access to local variable ok | empty | C.cs:129:20:129:28 | ... = ... | empty | -| C.cs:129:43:129:44 | access to local variable ok | non-empty | C.cs:129:20:129:28 | ... = ... | non-empty | -| C.cs:129:43:129:44 | access to local variable ok | non-null | C.cs:129:20:129:28 | ... = ... | non-null | -| C.cs:129:43:129:44 | access to local variable ok | null | C.cs:129:20:129:28 | ... = ... | null | -| C.cs:137:13:137:48 | ... \|\| ... | false | C.cs:137:13:137:30 | call to local function Foo | false | -| C.cs:137:13:137:48 | ... \|\| ... | false | C.cs:137:35:137:48 | ... > ... | false | -| C.cs:137:17:137:29 | ... = ... | empty | C.cs:137:17:137:19 | access to local variable ok2 | empty | -| C.cs:137:17:137:29 | ... = ... | empty | C.cs:137:23:137:29 | "hello" | empty | -| C.cs:137:17:137:29 | ... = ... | non-empty | C.cs:137:17:137:19 | access to local variable ok2 | non-empty | -| C.cs:137:17:137:29 | ... = ... | non-empty | C.cs:137:23:137:29 | "hello" | non-empty | -| C.cs:137:17:137:29 | ... = ... | non-null | C.cs:137:17:137:19 | access to local variable ok2 | non-null | -| C.cs:137:17:137:29 | ... = ... | non-null | C.cs:137:23:137:29 | "hello" | non-null | -| C.cs:137:17:137:29 | ... = ... | null | C.cs:137:17:137:19 | access to local variable ok2 | null | -| C.cs:137:17:137:29 | ... = ... | null | C.cs:137:23:137:29 | "hello" | null | -| C.cs:137:35:137:37 | access to local variable ok2 | empty | C.cs:137:23:137:29 | "hello" | empty | -| C.cs:137:35:137:37 | access to local variable ok2 | non-empty | C.cs:137:23:137:29 | "hello" | non-empty | -| C.cs:137:35:137:37 | access to local variable ok2 | non-null | C.cs:137:23:137:29 | "hello" | non-null | -| C.cs:137:35:137:37 | access to local variable ok2 | null | C.cs:137:23:137:29 | "hello" | null | -| C.cs:145:13:145:39 | ... != ... | false | C.cs:145:14:145:30 | ... = ... | null | -| C.cs:145:13:145:39 | ... != ... | false | C.cs:145:36:145:39 | null | null | -| C.cs:145:13:145:39 | ... != ... | true | C.cs:145:14:145:30 | ... = ... | non-null | -| C.cs:145:13:145:39 | ... != ... | true | C.cs:145:36:145:39 | null | non-null | -| C.cs:145:13:145:57 | ... && ... | true | C.cs:145:13:145:39 | ... != ... | true | -| C.cs:145:13:145:57 | ... && ... | true | C.cs:145:44:145:57 | ... > ... | true | -| C.cs:145:14:145:30 | ... = ... | empty | C.cs:145:14:145:15 | access to local variable xx | empty | -| C.cs:145:14:145:30 | ... = ... | empty | C.cs:145:20:145:29 | ... = ... | empty | -| C.cs:145:14:145:30 | ... = ... | non-empty | C.cs:145:14:145:15 | access to local variable xx | non-empty | -| C.cs:145:14:145:30 | ... = ... | non-empty | C.cs:145:20:145:29 | ... = ... | non-empty | -| C.cs:145:14:145:30 | ... = ... | non-null | C.cs:145:14:145:15 | access to local variable xx | non-null | -| C.cs:145:14:145:30 | ... = ... | non-null | C.cs:145:20:145:29 | ... = ... | non-null | -| C.cs:145:14:145:30 | ... = ... | null | C.cs:145:14:145:15 | access to local variable xx | null | -| C.cs:145:14:145:30 | ... = ... | null | C.cs:145:20:145:29 | ... = ... | null | -| C.cs:145:20:145:29 | ... = ... | empty | C.cs:145:20:145:22 | access to local variable ok3 | empty | -| C.cs:145:20:145:29 | ... = ... | empty | C.cs:145:26:145:29 | null | empty | -| C.cs:145:20:145:29 | ... = ... | non-empty | C.cs:145:20:145:22 | access to local variable ok3 | non-empty | -| C.cs:145:20:145:29 | ... = ... | non-empty | C.cs:145:26:145:29 | null | non-empty | -| C.cs:145:20:145:29 | ... = ... | non-null | C.cs:145:20:145:22 | access to local variable ok3 | non-null | -| C.cs:145:20:145:29 | ... = ... | non-null | C.cs:145:26:145:29 | null | non-null | -| C.cs:145:20:145:29 | ... = ... | null | C.cs:145:20:145:22 | access to local variable ok3 | null | -| C.cs:145:20:145:29 | ... = ... | null | C.cs:145:26:145:29 | null | null | -| C.cs:145:44:145:46 | access to local variable ok3 | empty | C.cs:145:26:145:29 | null | empty | -| C.cs:145:44:145:46 | access to local variable ok3 | non-empty | C.cs:145:26:145:29 | null | non-empty | -| C.cs:145:44:145:46 | access to local variable ok3 | non-null | C.cs:145:26:145:29 | null | non-null | -| C.cs:145:44:145:46 | access to local variable ok3 | null | C.cs:145:26:145:29 | null | null | -| C.cs:157:16:157:16 | access to local variable s | empty | C.cs:155:17:155:20 | null | empty | -| C.cs:157:16:157:16 | access to local variable s | non-empty | C.cs:155:17:155:20 | null | non-empty | -| C.cs:157:16:157:16 | access to local variable s | non-null | C.cs:155:17:155:20 | null | non-null | -| C.cs:157:16:157:16 | access to local variable s | null | C.cs:155:17:155:20 | null | null | -| C.cs:157:16:157:24 | ... != ... | false | C.cs:157:16:157:16 | access to local variable s | null | -| C.cs:157:16:157:24 | ... != ... | false | C.cs:157:21:157:24 | null | null | -| C.cs:157:16:157:24 | ... != ... | true | C.cs:157:16:157:16 | access to local variable s | non-null | -| C.cs:157:16:157:24 | ... != ... | true | C.cs:157:21:157:24 | null | non-null | -| C.cs:165:16:165:16 | access to local variable s | empty | C.cs:163:17:163:20 | null | empty | -| C.cs:165:16:165:16 | access to local variable s | non-empty | C.cs:163:17:163:20 | null | non-empty | -| C.cs:165:16:165:16 | access to local variable s | non-null | C.cs:163:17:163:20 | null | non-null | -| C.cs:165:16:165:16 | access to local variable s | null | C.cs:163:17:163:20 | null | null | -| C.cs:165:16:165:24 | ... != ... | false | C.cs:165:16:165:16 | access to local variable s | null | -| C.cs:165:16:165:24 | ... != ... | false | C.cs:165:21:165:24 | null | null | -| C.cs:165:16:165:24 | ... != ... | true | C.cs:165:16:165:16 | access to local variable s | non-null | -| C.cs:165:16:165:24 | ... != ... | true | C.cs:165:21:165:24 | null | non-null | -| C.cs:170:13:170:13 | access to local variable s | non-null | C.cs:167:13:167:16 | null | non-null | -| C.cs:170:13:170:13 | access to local variable s | null | C.cs:167:13:167:16 | null | null | -| C.cs:172:16:172:16 | access to local variable s | non-null | C.cs:167:13:167:16 | null | non-null | -| C.cs:172:16:172:16 | access to local variable s | null | C.cs:167:13:167:16 | null | null | -| C.cs:172:16:172:24 | ... != ... | false | C.cs:172:16:172:16 | access to local variable s | null | -| C.cs:172:16:172:24 | ... != ... | false | C.cs:172:21:172:24 | null | null | -| C.cs:172:16:172:24 | ... != ... | true | C.cs:172:16:172:16 | access to local variable s | non-null | -| C.cs:172:16:172:24 | ... != ... | true | C.cs:172:21:172:24 | null | non-null | -| C.cs:186:16:186:24 | ... != ... | false | C.cs:186:16:186:16 | access to local variable s | null | -| C.cs:186:16:186:24 | ... != ... | true | C.cs:186:16:186:16 | access to local variable s | non-null | -| C.cs:210:17:210:35 | ... ? ... : ... | non-null | C.cs:210:17:210:23 | call to method Maybe | false | -| C.cs:210:17:210:35 | ... ? ... : ... | non-null | C.cs:210:34:210:35 | "" | non-null | -| C.cs:210:17:210:35 | ... ? ... : ... | null | C.cs:210:17:210:23 | call to method Maybe | true | -| C.cs:210:17:210:35 | ... ? ... : ... | null | C.cs:210:27:210:30 | null | null | -| C.cs:211:13:211:13 | access to local variable s | empty | C.cs:210:17:210:35 | ... ? ... : ... | empty | -| C.cs:211:13:211:13 | access to local variable s | non-empty | C.cs:210:17:210:35 | ... ? ... : ... | non-empty | -| C.cs:211:13:211:13 | access to local variable s | non-null | C.cs:210:17:210:35 | ... ? ... : ... | non-null | -| C.cs:211:13:211:13 | access to local variable s | null | C.cs:210:17:210:35 | ... ? ... : ... | null | -| C.cs:211:13:211:21 | ... != ... | false | C.cs:210:17:210:23 | call to method Maybe | true | -| C.cs:211:13:211:21 | ... != ... | false | C.cs:211:13:211:13 | access to local variable s | null | -| C.cs:211:13:211:21 | ... != ... | true | C.cs:210:17:210:23 | call to method Maybe | false | -| C.cs:211:13:211:21 | ... != ... | true | C.cs:211:13:211:13 | access to local variable s | non-null | -| C.cs:213:13:213:13 | access to local variable s | non-null | C.cs:210:17:210:35 | ... ? ... : ... | non-null | -| C.cs:213:13:213:13 | access to local variable s | null | C.cs:210:17:210:35 | ... ? ... : ... | null | -| C.cs:217:13:217:21 | ... == ... | false | C.cs:211:13:211:21 | ... != ... | false | -| C.cs:217:13:217:21 | ... == ... | false | C.cs:217:13:217:13 | access to local variable s | non-null | -| C.cs:217:13:217:21 | ... == ... | true | C.cs:217:13:217:13 | access to local variable s | null | -| C.cs:221:13:221:13 | access to local variable s | empty | C.cs:220:13:220:14 | "" | empty | -| C.cs:221:13:221:13 | access to local variable s | non-empty | C.cs:220:13:220:14 | "" | non-empty | -| C.cs:221:13:221:13 | access to local variable s | non-null | C.cs:220:13:220:14 | "" | non-null | -| C.cs:221:13:221:13 | access to local variable s | null | C.cs:220:13:220:14 | "" | null | -| C.cs:221:13:221:21 | ... != ... | false | C.cs:221:13:221:13 | access to local variable s | null | -| C.cs:221:13:221:21 | ... != ... | false | C.cs:221:18:221:21 | null | non-null | -| C.cs:221:13:221:21 | ... != ... | true | C.cs:221:13:221:13 | access to local variable s | non-null | -| C.cs:221:13:221:42 | ... && ... | true | C.cs:221:13:221:21 | ... != ... | true | -| C.cs:221:13:221:42 | ... && ... | true | C.cs:221:26:221:42 | ... == ... | true | -| C.cs:221:26:221:26 | access to local variable s | non-null | C.cs:220:13:220:14 | "" | non-null | -| C.cs:221:26:221:26 | access to local variable s | null | C.cs:220:13:220:14 | "" | null | -| C.cs:229:14:229:19 | ... = ... | empty | C.cs:229:14:229:14 | access to local variable s | empty | -| C.cs:229:14:229:19 | ... = ... | empty | C.cs:229:18:229:19 | "" | empty | -| C.cs:229:14:229:19 | ... = ... | non-empty | C.cs:229:14:229:14 | access to local variable s | non-empty | -| C.cs:229:14:229:19 | ... = ... | non-empty | C.cs:229:18:229:19 | "" | non-empty | -| C.cs:229:14:229:19 | ... = ... | non-null | C.cs:229:14:229:14 | access to local variable s | non-null | -| C.cs:229:14:229:19 | ... = ... | non-null | C.cs:229:18:229:19 | "" | non-null | -| C.cs:229:14:229:19 | ... = ... | null | C.cs:229:14:229:14 | access to local variable s | null | -| C.cs:229:14:229:19 | ... = ... | null | C.cs:229:18:229:19 | "" | null | -| C.cs:229:22:229:30 | ... != ... | false | C.cs:229:22:229:22 | access to local variable s | null | -| C.cs:229:22:229:30 | ... != ... | true | C.cs:229:22:229:22 | access to local variable s | non-null | -| C.cs:229:33:229:40 | ... = ... | empty | C.cs:229:33:229:33 | access to local variable s | empty | -| C.cs:229:33:229:40 | ... = ... | empty | C.cs:229:37:229:40 | null | empty | -| C.cs:229:33:229:40 | ... = ... | non-empty | C.cs:229:33:229:33 | access to local variable s | non-empty | -| C.cs:229:33:229:40 | ... = ... | non-empty | C.cs:229:37:229:40 | null | non-empty | -| C.cs:229:33:229:40 | ... = ... | non-null | C.cs:229:33:229:33 | access to local variable s | non-null | -| C.cs:229:33:229:40 | ... = ... | non-null | C.cs:229:37:229:40 | null | non-null | -| C.cs:229:33:229:40 | ... = ... | null | C.cs:229:33:229:33 | access to local variable s | null | -| C.cs:229:33:229:40 | ... = ... | null | C.cs:229:37:229:40 | null | null | -| C.cs:235:14:235:21 | ... = ... | empty | C.cs:235:14:235:14 | access to local variable s | empty | -| C.cs:235:14:235:21 | ... = ... | empty | C.cs:235:18:235:21 | null | empty | -| C.cs:235:14:235:21 | ... = ... | non-empty | C.cs:235:14:235:14 | access to local variable s | non-empty | -| C.cs:235:14:235:21 | ... = ... | non-empty | C.cs:235:18:235:21 | null | non-empty | -| C.cs:235:14:235:21 | ... = ... | non-null | C.cs:235:14:235:14 | access to local variable s | non-null | -| C.cs:235:14:235:21 | ... = ... | non-null | C.cs:235:18:235:21 | null | non-null | -| C.cs:235:14:235:21 | ... = ... | null | C.cs:235:14:235:14 | access to local variable s | null | -| C.cs:235:14:235:21 | ... = ... | null | C.cs:235:18:235:21 | null | null | -| C.cs:235:24:235:32 | ... == ... | false | C.cs:235:24:235:24 | access to local variable s | non-null | -| C.cs:235:24:235:32 | ... == ... | false | C.cs:235:29:235:32 | null | non-null | -| C.cs:235:24:235:32 | ... == ... | true | C.cs:235:24:235:24 | access to local variable s | null | -| C.cs:235:24:235:32 | ... == ... | true | C.cs:235:29:235:32 | null | null | -| C.cs:235:35:235:42 | ... = ... | empty | C.cs:235:35:235:35 | access to local variable s | empty | -| C.cs:235:35:235:42 | ... = ... | empty | C.cs:235:39:235:42 | null | empty | -| C.cs:235:35:235:42 | ... = ... | non-empty | C.cs:235:35:235:35 | access to local variable s | non-empty | -| C.cs:235:35:235:42 | ... = ... | non-empty | C.cs:235:39:235:42 | null | non-empty | -| C.cs:235:35:235:42 | ... = ... | non-null | C.cs:235:35:235:35 | access to local variable s | non-null | -| C.cs:235:35:235:42 | ... = ... | non-null | C.cs:235:39:235:42 | null | non-null | -| C.cs:235:35:235:42 | ... = ... | null | C.cs:235:35:235:35 | access to local variable s | null | -| C.cs:235:35:235:42 | ... = ... | null | C.cs:235:39:235:42 | null | null | -| C.cs:240:14:240:19 | ... = ... | empty | C.cs:240:14:240:14 | access to local variable s | empty | -| C.cs:240:14:240:19 | ... = ... | empty | C.cs:240:18:240:19 | "" | empty | -| C.cs:240:14:240:19 | ... = ... | non-empty | C.cs:240:14:240:14 | access to local variable s | non-empty | -| C.cs:240:14:240:19 | ... = ... | non-empty | C.cs:240:18:240:19 | "" | non-empty | -| C.cs:240:14:240:19 | ... = ... | non-null | C.cs:240:14:240:14 | access to local variable s | non-null | -| C.cs:240:14:240:19 | ... = ... | non-null | C.cs:240:18:240:19 | "" | non-null | -| C.cs:240:14:240:19 | ... = ... | null | C.cs:240:14:240:14 | access to local variable s | null | -| C.cs:240:14:240:19 | ... = ... | null | C.cs:240:18:240:19 | "" | null | -| C.cs:240:24:240:31 | ... = ... | empty | C.cs:240:24:240:24 | access to local variable s | empty | -| C.cs:240:24:240:31 | ... = ... | empty | C.cs:240:28:240:31 | null | empty | -| C.cs:240:24:240:31 | ... = ... | non-empty | C.cs:240:24:240:24 | access to local variable s | non-empty | -| C.cs:240:24:240:31 | ... = ... | non-empty | C.cs:240:28:240:31 | null | non-empty | -| C.cs:240:24:240:31 | ... = ... | non-null | C.cs:240:24:240:24 | access to local variable s | non-null | -| C.cs:240:24:240:31 | ... = ... | non-null | C.cs:240:28:240:31 | null | non-null | -| C.cs:240:24:240:31 | ... = ... | null | C.cs:240:24:240:24 | access to local variable s | null | -| C.cs:240:24:240:31 | ... = ... | null | C.cs:240:28:240:31 | null | null | -| C.cs:249:9:249:9 | access to local variable a | empty | C.cs:248:19:248:22 | null | empty | -| C.cs:249:9:249:9 | access to local variable a | non-empty | C.cs:248:19:248:22 | null | non-empty | -| C.cs:249:9:249:9 | access to local variable a | non-null | C.cs:248:19:248:22 | null | non-null | -| C.cs:249:9:249:9 | access to local variable a | null | C.cs:248:19:248:22 | null | null | -| C.cs:252:9:252:9 | access to local variable a | empty | C.cs:251:13:251:23 | array creation of type Int32[] | empty | -| C.cs:252:9:252:9 | access to local variable a | non-empty | C.cs:251:13:251:23 | array creation of type Int32[] | non-empty | -| C.cs:252:9:252:9 | access to local variable a | non-null | C.cs:251:13:251:23 | array creation of type Int32[] | non-null | -| C.cs:252:9:252:9 | access to local variable a | null | C.cs:251:13:251:23 | array creation of type Int32[] | null | -| C.cs:260:9:260:10 | access to local variable ia | empty | C.cs:257:20:257:23 | null | empty | -| C.cs:260:9:260:10 | access to local variable ia | non-empty | C.cs:257:20:257:23 | null | non-empty | -| C.cs:260:9:260:10 | access to local variable ia | non-null | C.cs:257:20:257:23 | null | non-null | -| C.cs:260:9:260:10 | access to local variable ia | null | C.cs:257:20:257:23 | null | null | -| C.cs:261:20:261:21 | access to local variable sa | empty | C.cs:258:23:258:26 | null | empty | -| C.cs:261:20:261:21 | access to local variable sa | non-empty | C.cs:258:23:258:26 | null | non-empty | -| C.cs:261:20:261:21 | access to local variable sa | non-null | C.cs:258:23:258:26 | null | non-null | -| C.cs:261:20:261:21 | access to local variable sa | null | C.cs:258:23:258:26 | null | null | -| C.cs:263:9:263:10 | access to local variable ia | non-null | C.cs:257:20:257:23 | null | non-null | -| C.cs:263:9:263:10 | access to local variable ia | null | C.cs:257:20:257:23 | null | null | -| C.cs:264:16:264:17 | access to local variable sa | non-null | C.cs:258:23:258:26 | null | non-null | -| C.cs:264:16:264:17 | access to local variable sa | null | C.cs:258:23:258:26 | null | null | -| D.cs:28:13:28:25 | ... != ... | false | D.cs:28:13:28:17 | access to parameter param | null | -| D.cs:28:13:28:25 | ... != ... | true | D.cs:28:13:28:17 | access to parameter param | non-null | -| D.cs:37:13:37:23 | ... is ... | true | D.cs:37:13:37:13 | access to parameter x | non-null | -| D.cs:38:13:38:21 | ... == ... | false | D.cs:38:13:38:13 | access to parameter x | non-null | -| D.cs:38:13:38:21 | ... == ... | true | D.cs:38:13:38:13 | access to parameter x | null | -| D.cs:39:16:39:24 | ... == ... | false | D.cs:39:16:39:16 | access to parameter x | non-null | -| D.cs:39:16:39:24 | ... == ... | true | D.cs:39:16:39:16 | access to parameter x | null | -| D.cs:44:18:44:44 | ... ? ... : ... | non-null | D.cs:44:18:44:22 | access to field maybe | false | -| D.cs:44:18:44:44 | ... ? ... : ... | non-null | D.cs:44:33:44:44 | object creation of type Object | non-null | -| D.cs:44:18:44:44 | ... ? ... : ... | null | D.cs:44:18:44:22 | access to field maybe | true | -| D.cs:44:18:44:44 | ... ? ... : ... | null | D.cs:44:26:44:29 | null | null | -| D.cs:45:13:45:14 | access to local variable o1 | non-null | D.cs:44:18:44:44 | ... ? ... : ... | non-null | -| D.cs:45:13:45:14 | access to local variable o1 | null | D.cs:44:18:44:44 | ... ? ... : ... | null | -| D.cs:45:13:45:22 | ... != ... | false | D.cs:44:18:44:22 | access to field maybe | true | -| D.cs:45:13:45:22 | ... != ... | false | D.cs:45:13:45:14 | access to local variable o1 | null | -| D.cs:45:13:45:22 | ... != ... | true | D.cs:44:18:44:22 | access to field maybe | false | -| D.cs:45:13:45:22 | ... != ... | true | D.cs:45:13:45:14 | access to local variable o1 | non-null | -| D.cs:45:25:45:26 | access to local variable o1 | non-null | D.cs:44:18:44:44 | ... ? ... : ... | non-null | -| D.cs:45:25:45:26 | access to local variable o1 | null | D.cs:44:18:44:44 | ... ? ... : ... | null | -| D.cs:47:18:47:34 | ... ? ... : ... | non-null | D.cs:47:18:47:22 | access to field maybe | false | -| D.cs:47:18:47:34 | ... ? ... : ... | non-null | D.cs:47:33:47:34 | "" | non-null | -| D.cs:47:18:47:34 | ... ? ... : ... | null | D.cs:47:18:47:22 | access to field maybe | true | -| D.cs:47:18:47:34 | ... ? ... : ... | null | D.cs:47:26:47:29 | null | null | -| D.cs:48:13:48:14 | access to local variable o2 | empty | D.cs:47:18:47:34 | ... ? ... : ... | empty | -| D.cs:48:13:48:14 | access to local variable o2 | non-empty | D.cs:47:18:47:34 | ... ? ... : ... | non-empty | -| D.cs:48:13:48:14 | access to local variable o2 | non-null | D.cs:47:18:47:34 | ... ? ... : ... | non-null | -| D.cs:48:13:48:14 | access to local variable o2 | null | D.cs:47:18:47:34 | ... ? ... : ... | null | -| D.cs:48:13:48:24 | ... is ... | false | D.cs:47:18:47:22 | access to field maybe | true | -| D.cs:48:13:48:24 | ... is ... | false | D.cs:48:13:48:14 | access to local variable o2 | null | -| D.cs:48:13:48:24 | ... is ... | true | D.cs:47:18:47:22 | access to field maybe | false | -| D.cs:48:13:48:24 | ... is ... | true | D.cs:48:13:48:14 | access to local variable o2 | non-null | -| D.cs:48:27:48:28 | access to local variable o2 | non-null | D.cs:47:18:47:34 | ... ? ... : ... | non-null | -| D.cs:48:27:48:28 | access to local variable o2 | null | D.cs:47:18:47:34 | ... ? ... : ... | null | -| D.cs:51:13:51:44 | ... != ... | false | D.cs:51:14:51:35 | ... = ... | null | -| D.cs:51:13:51:44 | ... != ... | true | D.cs:51:14:51:35 | ... = ... | non-null | -| D.cs:51:14:51:35 | ... = ... | non-null | D.cs:51:14:51:15 | access to local variable o3 | non-null | -| D.cs:51:14:51:35 | ... = ... | non-null | D.cs:51:19:51:35 | ... ? ... : ... | non-null | -| D.cs:51:14:51:35 | ... = ... | null | D.cs:51:14:51:15 | access to local variable o3 | null | -| D.cs:51:14:51:35 | ... = ... | null | D.cs:51:19:51:35 | ... ? ... : ... | null | -| D.cs:51:19:51:35 | ... ? ... : ... | non-null | D.cs:51:19:51:23 | access to field maybe | false | -| D.cs:51:19:51:35 | ... ? ... : ... | non-null | D.cs:51:34:51:35 | "" | non-null | -| D.cs:51:19:51:35 | ... ? ... : ... | null | D.cs:51:19:51:23 | access to field maybe | true | -| D.cs:51:19:51:35 | ... ? ... : ... | null | D.cs:51:27:51:30 | null | null | -| D.cs:52:13:52:14 | access to local variable o3 | non-null | D.cs:51:19:51:35 | ... ? ... : ... | non-null | -| D.cs:52:13:52:14 | access to local variable o3 | null | D.cs:51:19:51:35 | ... ? ... : ... | null | -| D.cs:54:18:54:34 | ... ? ... : ... | non-null | D.cs:54:18:54:22 | access to field maybe | false | -| D.cs:54:18:54:34 | ... ? ... : ... | non-null | D.cs:54:33:54:34 | "" | non-null | -| D.cs:54:18:54:34 | ... ? ... : ... | null | D.cs:54:18:54:22 | access to field maybe | true | -| D.cs:54:18:54:34 | ... ? ... : ... | null | D.cs:54:26:54:29 | null | null | -| D.cs:55:13:55:42 | ... != ... | false | D.cs:55:14:55:32 | ... && ... | false | -| D.cs:55:13:55:42 | ... != ... | true | D.cs:55:14:55:32 | ... && ... | true | -| D.cs:55:14:55:32 | ... && ... | true | D.cs:55:14:55:18 | ... > ... | true | -| D.cs:55:14:55:32 | ... && ... | true | D.cs:55:23:55:32 | ... != ... | true | -| D.cs:55:23:55:24 | access to local variable o4 | empty | D.cs:54:18:54:34 | ... ? ... : ... | empty | -| D.cs:55:23:55:24 | access to local variable o4 | non-empty | D.cs:54:18:54:34 | ... ? ... : ... | non-empty | -| D.cs:55:23:55:24 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null | -| D.cs:55:23:55:24 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null | -| D.cs:55:23:55:32 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true | -| D.cs:55:23:55:32 | ... != ... | false | D.cs:55:23:55:24 | access to local variable o4 | null | -| D.cs:55:23:55:32 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false | -| D.cs:55:23:55:32 | ... != ... | true | D.cs:55:23:55:24 | access to local variable o4 | non-null | -| D.cs:56:13:56:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null | -| D.cs:56:13:56:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null | -| D.cs:58:18:58:41 | ... ? ... : ... | non-null | D.cs:58:19:58:28 | ... != ... | true | -| D.cs:58:18:58:41 | ... ? ... : ... | non-null | D.cs:58:33:58:34 | "" | non-null | -| D.cs:58:18:58:41 | ... ? ... : ... | null | D.cs:58:19:58:28 | ... != ... | false | -| D.cs:58:18:58:41 | ... ? ... : ... | null | D.cs:58:38:58:41 | null | null | -| D.cs:58:19:58:20 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null | -| D.cs:58:19:58:20 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null | -| D.cs:58:19:58:28 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true | -| D.cs:58:19:58:28 | ... != ... | false | D.cs:58:19:58:20 | access to local variable o4 | null | -| D.cs:58:19:58:28 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false | -| D.cs:58:19:58:28 | ... != ... | true | D.cs:58:19:58:20 | access to local variable o4 | non-null | -| D.cs:59:13:59:14 | access to local variable o5 | empty | D.cs:58:18:58:41 | ... ? ... : ... | empty | -| D.cs:59:13:59:14 | access to local variable o5 | non-empty | D.cs:58:18:58:41 | ... ? ... : ... | non-empty | -| D.cs:59:13:59:14 | access to local variable o5 | non-null | D.cs:58:18:58:41 | ... ? ... : ... | non-null | -| D.cs:59:13:59:14 | access to local variable o5 | null | D.cs:58:18:58:41 | ... ? ... : ... | null | -| D.cs:59:13:59:22 | ... != ... | false | D.cs:58:19:58:28 | ... != ... | false | -| D.cs:59:13:59:22 | ... != ... | false | D.cs:59:13:59:14 | access to local variable o5 | null | -| D.cs:59:13:59:22 | ... != ... | true | D.cs:58:19:58:28 | ... != ... | true | -| D.cs:59:13:59:22 | ... != ... | true | D.cs:59:13:59:14 | access to local variable o5 | non-null | -| D.cs:60:13:60:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null | -| D.cs:60:13:60:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null | -| D.cs:61:13:61:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null | -| D.cs:61:13:61:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null | -| D.cs:61:13:61:22 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true | -| D.cs:61:13:61:22 | ... != ... | false | D.cs:61:13:61:14 | access to local variable o4 | null | -| D.cs:61:13:61:22 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false | -| D.cs:61:13:61:22 | ... != ... | true | D.cs:61:13:61:14 | access to local variable o4 | non-null | -| D.cs:62:13:62:14 | access to local variable o5 | non-null | D.cs:58:18:58:41 | ... ? ... : ... | non-null | -| D.cs:62:13:62:14 | access to local variable o5 | null | D.cs:58:18:58:41 | ... ? ... : ... | null | -| D.cs:64:18:64:34 | ... ? ... : ... | non-null | D.cs:64:18:64:22 | access to field maybe | false | -| D.cs:64:18:64:34 | ... ? ... : ... | non-null | D.cs:64:33:64:34 | "" | non-null | -| D.cs:64:18:64:34 | ... ? ... : ... | null | D.cs:64:18:64:22 | access to field maybe | true | -| D.cs:64:18:64:34 | ... ? ... : ... | null | D.cs:64:26:64:29 | null | null | -| D.cs:65:13:65:29 | !... | false | D.cs:65:14:65:29 | call to method CustomIsNull | true | -| D.cs:65:13:65:29 | !... | true | D.cs:65:14:65:29 | call to method CustomIsNull | false | -| D.cs:65:14:65:29 | call to method CustomIsNull | false | D.cs:64:18:64:22 | access to field maybe | false | -| D.cs:65:14:65:29 | call to method CustomIsNull | false | D.cs:65:27:65:28 | access to local variable o6 | non-null | -| D.cs:65:14:65:29 | call to method CustomIsNull | true | D.cs:64:18:64:22 | access to field maybe | true | -| D.cs:65:14:65:29 | call to method CustomIsNull | true | D.cs:65:27:65:28 | access to local variable o6 | null | -| D.cs:65:27:65:28 | access to local variable o6 | empty | D.cs:64:18:64:34 | ... ? ... : ... | empty | -| D.cs:65:27:65:28 | access to local variable o6 | non-empty | D.cs:64:18:64:34 | ... ? ... : ... | non-empty | -| D.cs:65:27:65:28 | access to local variable o6 | non-null | D.cs:64:18:64:34 | ... ? ... : ... | non-null | -| D.cs:65:27:65:28 | access to local variable o6 | null | D.cs:64:18:64:34 | ... ? ... : ... | null | -| D.cs:66:13:66:14 | access to local variable o6 | non-null | D.cs:64:18:64:34 | ... ? ... : ... | non-null | -| D.cs:66:13:66:14 | access to local variable o6 | null | D.cs:64:18:64:34 | ... ? ... : ... | null | -| D.cs:68:18:68:34 | ... ? ... : ... | non-null | D.cs:68:18:68:22 | access to field maybe | false | -| D.cs:68:18:68:34 | ... ? ... : ... | non-null | D.cs:68:33:68:34 | "" | non-null | -| D.cs:68:18:68:34 | ... ? ... : ... | null | D.cs:68:18:68:22 | access to field maybe | true | -| D.cs:68:18:68:34 | ... ? ... : ... | null | D.cs:68:26:68:29 | null | null | -| D.cs:69:18:69:19 | access to local variable o7 | empty | D.cs:68:18:68:34 | ... ? ... : ... | empty | -| D.cs:69:18:69:19 | access to local variable o7 | non-empty | D.cs:68:18:68:34 | ... ? ... : ... | non-empty | -| D.cs:69:18:69:19 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null | -| D.cs:69:18:69:19 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | null | -| D.cs:69:18:69:27 | ... != ... | false | D.cs:68:18:68:22 | access to field maybe | true | -| D.cs:69:18:69:27 | ... != ... | false | D.cs:69:18:69:19 | access to local variable o7 | null | -| D.cs:69:18:69:27 | ... != ... | true | D.cs:68:18:68:22 | access to field maybe | false | -| D.cs:69:18:69:27 | ... != ... | true | D.cs:69:18:69:19 | access to local variable o7 | non-null | -| D.cs:69:18:69:36 | ... && ... | true | D.cs:69:18:69:27 | ... != ... | true | -| D.cs:69:18:69:36 | ... && ... | true | D.cs:69:32:69:36 | ... > ... | true | -| D.cs:70:13:70:14 | access to local variable ok | false | D.cs:69:18:69:36 | ... && ... | false | -| D.cs:70:13:70:14 | access to local variable ok | true | D.cs:69:18:69:36 | ... && ... | true | -| D.cs:71:13:71:14 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null | -| D.cs:71:13:71:14 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | null | -| D.cs:73:13:73:14 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null | -| D.cs:73:13:73:14 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | null | -| D.cs:75:18:75:34 | ... ? ... : ... | non-null | D.cs:75:18:75:22 | access to field maybe | false | -| D.cs:75:18:75:34 | ... ? ... : ... | non-null | D.cs:75:33:75:34 | "" | non-null | -| D.cs:75:18:75:34 | ... ? ... : ... | null | D.cs:75:18:75:22 | access to field maybe | true | -| D.cs:75:18:75:34 | ... ? ... : ... | null | D.cs:75:26:75:29 | null | null | -| D.cs:76:21:76:22 | access to local variable o8 | empty | D.cs:75:18:75:34 | ... ? ... : ... | empty | -| D.cs:76:21:76:22 | access to local variable o8 | non-empty | D.cs:75:18:75:34 | ... ? ... : ... | non-empty | -| D.cs:76:21:76:22 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null | -| D.cs:76:21:76:22 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null | -| D.cs:76:21:76:30 | ... == ... | false | D.cs:75:18:75:22 | access to field maybe | false | -| D.cs:76:21:76:30 | ... == ... | false | D.cs:76:21:76:22 | access to local variable o8 | non-null | -| D.cs:76:21:76:30 | ... == ... | true | D.cs:75:18:75:22 | access to field maybe | true | -| D.cs:76:21:76:30 | ... == ... | true | D.cs:76:21:76:22 | access to local variable o8 | null | -| D.cs:77:13:77:22 | ... == ... | false | D.cs:76:21:76:30 | ... == ... | true | -| D.cs:77:13:77:22 | ... == ... | true | D.cs:76:21:76:30 | ... == ... | false | -| D.cs:78:13:78:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null | -| D.cs:78:13:78:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null | -| D.cs:79:13:79:23 | ... != ... | false | D.cs:76:21:76:30 | ... == ... | true | -| D.cs:79:13:79:23 | ... != ... | true | D.cs:76:21:76:30 | ... == ... | false | -| D.cs:80:13:80:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null | -| D.cs:80:13:80:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null | -| D.cs:82:13:82:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null | -| D.cs:82:13:82:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null | -| D.cs:84:13:84:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null | -| D.cs:84:13:84:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null | -| D.cs:89:20:89:44 | ... ? ... : ... | empty | D.cs:89:20:89:24 | access to field maybe | true | -| D.cs:89:20:89:44 | ... ? ... : ... | empty | D.cs:89:28:89:31 | null | empty | -| D.cs:89:20:89:44 | ... ? ... : ... | non-null | D.cs:89:20:89:24 | access to field maybe | false | -| D.cs:89:20:89:44 | ... ? ... : ... | non-null | D.cs:89:35:89:44 | array creation of type Int32[] | non-null | -| D.cs:89:20:89:44 | ... ? ... : ... | null | D.cs:89:20:89:24 | access to field maybe | true | -| D.cs:89:20:89:44 | ... ? ... : ... | null | D.cs:89:28:89:31 | null | null | -| D.cs:91:13:91:14 | access to local variable xs | empty | D.cs:89:20:89:44 | ... ? ... : ... | empty | -| D.cs:91:13:91:14 | access to local variable xs | non-empty | D.cs:89:20:89:44 | ... ? ... : ... | non-empty | -| D.cs:91:13:91:14 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:91:13:91:14 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:94:21:94:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:94:21:94:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:98:21:98:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:98:21:98:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:102:31:102:32 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:102:31:102:32 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:105:19:105:20 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:105:19:105:20 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:106:17:106:18 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:106:17:106:18 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:110:26:110:27 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:110:26:110:27 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:110:26:110:35 | ... != ... | false | D.cs:89:20:89:24 | access to field maybe | true | -| D.cs:110:26:110:35 | ... != ... | false | D.cs:110:26:110:27 | access to local variable xs | null | -| D.cs:110:26:110:35 | ... != ... | true | D.cs:89:20:89:24 | access to field maybe | false | -| D.cs:110:26:110:35 | ... != ... | true | D.cs:110:26:110:27 | access to local variable xs | non-null | -| D.cs:111:13:111:14 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:111:13:111:14 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:111:21:111:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null | -| D.cs:111:21:111:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null | -| D.cs:117:17:117:32 | ... ? ... : ... | non-null | D.cs:117:17:117:17 | access to parameter b | false | -| D.cs:117:17:117:32 | ... ? ... : ... | non-null | D.cs:117:28:117:32 | "abc" | non-null | -| D.cs:117:17:117:32 | ... ? ... : ... | null | D.cs:117:17:117:17 | access to parameter b | true | -| D.cs:117:17:117:32 | ... ? ... : ... | null | D.cs:117:21:117:24 | null | null | -| D.cs:118:13:118:13 | access to local variable x | empty | D.cs:117:17:117:32 | ... ? ... : ... | empty | -| D.cs:118:13:118:13 | access to local variable x | non-empty | D.cs:117:17:117:32 | ... ? ... : ... | non-empty | -| D.cs:118:13:118:13 | access to local variable x | non-null | D.cs:117:17:117:32 | ... ? ... : ... | non-null | -| D.cs:118:13:118:13 | access to local variable x | null | D.cs:117:17:117:32 | ... ? ... : ... | null | -| D.cs:118:13:118:21 | ... == ... | false | D.cs:117:17:117:17 | access to parameter b | false | -| D.cs:118:13:118:21 | ... == ... | false | D.cs:118:13:118:13 | access to local variable x | non-null | -| D.cs:118:13:118:21 | ... == ... | true | D.cs:117:17:117:17 | access to parameter b | true | -| D.cs:118:13:118:21 | ... == ... | true | D.cs:118:13:118:13 | access to local variable x | null | -| D.cs:118:13:118:30 | ... ? ... : ... | null | D.cs:118:13:118:21 | ... == ... | false | -| D.cs:118:13:118:30 | ... ? ... : ... | null | D.cs:118:30:118:30 | access to local variable x | null | -| D.cs:118:30:118:30 | access to local variable x | non-null | D.cs:117:17:117:32 | ... ? ... : ... | non-null | -| D.cs:118:30:118:30 | access to local variable x | null | D.cs:117:17:117:32 | ... ? ... : ... | null | -| D.cs:119:13:119:13 | access to local variable x | empty | D.cs:118:13:118:30 | ... ? ... : ... | empty | -| D.cs:119:13:119:13 | access to local variable x | non-empty | D.cs:118:13:118:30 | ... ? ... : ... | non-empty | -| D.cs:119:13:119:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null | -| D.cs:119:13:119:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null | -| D.cs:119:13:119:21 | ... == ... | false | D.cs:119:13:119:13 | access to local variable x | non-null | -| D.cs:119:13:119:21 | ... == ... | true | D.cs:118:13:118:21 | ... == ... | false | -| D.cs:119:13:119:21 | ... == ... | true | D.cs:119:13:119:13 | access to local variable x | null | -| D.cs:120:13:120:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null | -| D.cs:120:13:120:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null | -| D.cs:122:13:122:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null | -| D.cs:122:13:122:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null | -| D.cs:127:20:127:28 | ... == ... | false | D.cs:127:20:127:20 | access to parameter a | non-null | -| D.cs:127:20:127:28 | ... == ... | true | D.cs:127:20:127:20 | access to parameter a | null | -| D.cs:128:20:128:28 | ... == ... | false | D.cs:128:20:128:20 | access to parameter b | non-null | -| D.cs:128:20:128:28 | ... == ... | true | D.cs:128:20:128:20 | access to parameter b | null | -| D.cs:139:13:139:21 | ... != ... | false | D.cs:139:13:139:13 | access to parameter a | null | -| D.cs:139:13:139:21 | ... != ... | true | D.cs:139:13:139:13 | access to parameter a | non-null | -| D.cs:152:17:152:27 | ... != ... | false | D.cs:152:17:152:19 | access to parameter obj | null | -| D.cs:152:17:152:27 | ... != ... | true | D.cs:152:17:152:19 | access to parameter obj | non-null | -| D.cs:182:9:182:12 | access to local variable obj2 | non-null | D.cs:176:20:176:28 | call to method MkMaybe | non-null | -| D.cs:182:9:182:12 | access to local variable obj2 | null | D.cs:176:20:176:28 | call to method MkMaybe | null | -| D.cs:190:9:190:12 | access to local variable obj3 | non-null | D.cs:187:20:187:28 | call to method MkMaybe | non-null | -| D.cs:190:9:190:12 | access to local variable obj3 | null | D.cs:187:20:187:28 | call to method MkMaybe | null | -| D.cs:196:13:196:13 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null | -| D.cs:196:13:196:13 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null | -| D.cs:196:13:196:21 | ... == ... | false | D.cs:196:13:196:13 | access to local variable o | non-null | -| D.cs:196:13:196:21 | ... == ... | true | D.cs:196:13:196:13 | access to local variable o | null | -| D.cs:196:13:196:21 | ... == ... | true | D.cs:196:18:196:21 | null | non-null | -| D.cs:197:13:197:13 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null | -| D.cs:197:13:197:13 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null | -| D.cs:198:9:198:9 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null | -| D.cs:198:9:198:9 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null | -| D.cs:206:17:206:25 | ... == ... | false | D.cs:206:17:206:17 | access to local variable e | non-null | -| D.cs:206:17:206:25 | ... == ... | true | D.cs:206:17:206:17 | access to local variable e | null | -| D.cs:212:18:212:18 | access to local variable n | non-null | D.cs:211:20:211:23 | null | non-null | -| D.cs:212:18:212:18 | access to local variable n | null | D.cs:211:20:211:23 | null | null | -| D.cs:212:18:212:26 | ... == ... | false | D.cs:212:18:212:18 | access to local variable n | non-null | -| D.cs:212:18:212:26 | ... == ... | false | D.cs:212:23:212:26 | null | non-null | -| D.cs:212:18:212:26 | ... == ... | true | D.cs:212:18:212:18 | access to local variable n | null | -| D.cs:212:18:212:26 | ... == ... | true | D.cs:212:23:212:26 | null | null | -| D.cs:212:18:212:45 | ... ? ... : ... | non-null | D.cs:212:18:212:26 | ... == ... | true | -| D.cs:212:18:212:45 | ... ? ... : ... | non-null | D.cs:212:30:212:41 | object creation of type Object | non-null | -| D.cs:212:18:212:45 | ... ? ... : ... | null | D.cs:212:18:212:26 | ... == ... | false | -| D.cs:212:18:212:45 | ... ? ... : ... | null | D.cs:212:45:212:45 | access to local variable n | null | -| D.cs:212:45:212:45 | access to local variable n | non-null | D.cs:211:20:211:23 | null | non-null | -| D.cs:212:45:212:45 | access to local variable n | null | D.cs:211:20:211:23 | null | null | -| D.cs:213:9:213:10 | access to local variable o2 | non-null | D.cs:212:18:212:45 | ... ? ... : ... | non-null | -| D.cs:213:9:213:10 | access to local variable o2 | null | D.cs:212:18:212:45 | ... ? ... : ... | null | -| D.cs:216:13:216:14 | access to local variable o3 | empty | D.cs:215:18:215:22 | "abc" | empty | -| D.cs:216:13:216:14 | access to local variable o3 | non-empty | D.cs:215:18:215:22 | "abc" | non-empty | -| D.cs:216:13:216:14 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null | -| D.cs:216:13:216:14 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null | -| D.cs:216:13:216:22 | ... == ... | false | D.cs:216:13:216:14 | access to local variable o3 | non-null | -| D.cs:216:13:216:22 | ... == ... | true | D.cs:216:13:216:14 | access to local variable o3 | null | -| D.cs:216:13:216:22 | ... == ... | true | D.cs:216:19:216:22 | null | non-null | -| D.cs:217:13:217:14 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null | -| D.cs:217:13:217:14 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null | -| D.cs:218:9:218:10 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null | -| D.cs:218:9:218:10 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null | -| D.cs:220:18:220:26 | ... + ... | non-null | D.cs:220:18:220:19 | "" | non-null | -| D.cs:220:18:220:26 | ... + ... | non-null | D.cs:220:23:220:26 | null | non-null | -| D.cs:220:18:220:26 | ... + ... | null | D.cs:220:23:220:26 | null | null | -| D.cs:221:13:221:14 | access to local variable o4 | empty | D.cs:220:18:220:26 | ... + ... | empty | -| D.cs:221:13:221:14 | access to local variable o4 | non-empty | D.cs:220:18:220:26 | ... + ... | non-empty | -| D.cs:221:13:221:14 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null | -| D.cs:221:13:221:14 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | null | -| D.cs:221:13:221:22 | ... == ... | false | D.cs:221:13:221:14 | access to local variable o4 | non-null | -| D.cs:221:13:221:22 | ... == ... | true | D.cs:221:13:221:14 | access to local variable o4 | null | -| D.cs:221:13:221:22 | ... == ... | true | D.cs:221:19:221:22 | null | non-null | -| D.cs:222:13:222:14 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null | -| D.cs:222:13:222:14 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | null | -| D.cs:223:9:223:10 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null | -| D.cs:223:9:223:10 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | null | -| D.cs:232:13:232:13 | access to local variable o | non-null | D.cs:230:17:230:28 | object creation of type Object | non-null | -| D.cs:232:13:232:13 | access to local variable o | null | D.cs:230:17:230:28 | object creation of type Object | null | -| D.cs:238:13:238:13 | access to local variable o | non-null | D.cs:236:17:236:18 | "" | non-null | -| D.cs:238:13:238:13 | access to local variable o | null | D.cs:236:17:236:18 | "" | null | -| D.cs:241:21:241:37 | ... ? ... : ... | non-null | D.cs:241:21:241:25 | access to field maybe | false | -| D.cs:241:21:241:37 | ... ? ... : ... | non-null | D.cs:241:36:241:37 | "" | non-null | -| D.cs:241:21:241:37 | ... ? ... : ... | null | D.cs:241:21:241:25 | access to field maybe | true | -| D.cs:241:21:241:37 | ... ? ... : ... | null | D.cs:241:29:241:32 | null | null | -| D.cs:242:13:242:17 | access to local variable other | empty | D.cs:241:21:241:37 | ... ? ... : ... | empty | -| D.cs:242:13:242:17 | access to local variable other | non-empty | D.cs:241:21:241:37 | ... ? ... : ... | non-empty | -| D.cs:242:13:242:17 | access to local variable other | non-null | D.cs:241:21:241:37 | ... ? ... : ... | non-null | -| D.cs:242:13:242:17 | access to local variable other | null | D.cs:241:21:241:37 | ... ? ... : ... | null | -| D.cs:242:13:242:25 | ... == ... | false | D.cs:241:21:241:25 | access to field maybe | false | -| D.cs:242:13:242:25 | ... == ... | false | D.cs:242:13:242:17 | access to local variable other | non-null | -| D.cs:242:13:242:25 | ... == ... | true | D.cs:241:21:241:25 | access to field maybe | true | -| D.cs:242:13:242:25 | ... == ... | true | D.cs:242:13:242:17 | access to local variable other | null | -| D.cs:244:13:244:17 | access to local variable other | non-null | D.cs:241:21:241:37 | ... ? ... : ... | non-null | -| D.cs:244:13:244:17 | access to local variable other | null | D.cs:241:21:241:37 | ... ? ... : ... | null | -| D.cs:244:13:244:25 | ... != ... | false | D.cs:241:21:241:25 | access to field maybe | true | -| D.cs:244:13:244:25 | ... != ... | false | D.cs:244:13:244:17 | access to local variable other | null | -| D.cs:244:13:244:25 | ... != ... | true | D.cs:241:21:241:25 | access to field maybe | false | -| D.cs:244:13:244:25 | ... != ... | true | D.cs:244:13:244:17 | access to local variable other | non-null | -| D.cs:249:18:249:38 | ... ? ... : ... | non-null | D.cs:249:19:249:25 | ... < ... | false | -| D.cs:249:18:249:38 | ... ? ... : ... | non-null | D.cs:249:37:249:38 | "" | non-null | -| D.cs:249:18:249:38 | ... ? ... : ... | null | D.cs:249:19:249:25 | ... < ... | true | -| D.cs:249:18:249:38 | ... ? ... : ... | null | D.cs:249:30:249:33 | null | null | -| D.cs:253:13:253:14 | access to local variable o2 | empty | D.cs:249:18:249:38 | ... ? ... : ... | empty | -| D.cs:253:13:253:14 | access to local variable o2 | non-empty | D.cs:249:18:249:38 | ... ? ... : ... | non-empty | -| D.cs:253:13:253:14 | access to local variable o2 | non-null | D.cs:249:18:249:38 | ... ? ... : ... | non-null | -| D.cs:253:13:253:14 | access to local variable o2 | null | D.cs:249:18:249:38 | ... ? ... : ... | null | -| D.cs:266:13:266:27 | ... is ... | true | D.cs:266:13:266:17 | access to local variable other | non-null | -| D.cs:310:21:310:26 | ... + ... | non-null | D.cs:310:21:310:22 | "" | non-null | -| D.cs:310:21:310:26 | ... + ... | non-null | D.cs:310:26:310:26 | call to method ToString | non-null | -| D.cs:310:21:310:26 | ... + ... | null | D.cs:310:26:310:26 | call to method ToString | null | -| D.cs:312:17:312:23 | !... | false | D.cs:312:18:312:23 | access to local variable s_null | true | -| D.cs:312:17:312:23 | !... | true | D.cs:312:18:312:23 | access to local variable s_null | false | -| D.cs:318:16:318:62 | ... && ... | true | D.cs:318:16:318:36 | ... == ... | true | -| D.cs:318:16:318:62 | ... && ... | true | D.cs:318:41:318:62 | ... != ... | true | -| D.cs:336:13:336:23 | ... == ... | false | D.cs:336:13:336:15 | access to parameter obj | non-null | -| D.cs:336:13:336:23 | ... == ... | true | D.cs:336:13:336:15 | access to parameter obj | null | -| D.cs:341:13:341:23 | ... != ... | false | D.cs:336:13:336:23 | ... == ... | false | -| D.cs:341:13:341:23 | ... != ... | false | D.cs:341:13:341:15 | access to local variable msg | null | -| D.cs:341:13:341:23 | ... != ... | true | D.cs:341:13:341:15 | access to local variable msg | non-null | -| D.cs:343:13:343:27 | ... + ... | non-null | D.cs:343:13:343:15 | access to local variable msg | non-null | -| D.cs:343:13:343:27 | ... + ... | non-null | D.cs:343:20:343:27 | "foobar" | non-null | -| D.cs:343:13:343:27 | ... + ... | null | D.cs:343:13:343:15 | access to local variable msg | null | -| D.cs:343:13:343:27 | ... = ... | empty | D.cs:343:13:343:15 | access to local variable msg | empty | -| D.cs:343:13:343:27 | ... = ... | empty | D.cs:343:13:343:27 | ... + ... | empty | -| D.cs:343:13:343:27 | ... = ... | non-empty | D.cs:343:13:343:15 | access to local variable msg | non-empty | -| D.cs:343:13:343:27 | ... = ... | non-empty | D.cs:343:13:343:27 | ... + ... | non-empty | -| D.cs:343:13:343:27 | ... = ... | non-null | D.cs:343:13:343:15 | access to local variable msg | non-null | -| D.cs:343:13:343:27 | ... = ... | non-null | D.cs:343:13:343:27 | ... + ... | non-null | -| D.cs:343:13:343:27 | ... = ... | null | D.cs:343:13:343:15 | access to local variable msg | null | -| D.cs:343:13:343:27 | ... = ... | null | D.cs:343:13:343:27 | ... + ... | null | -| D.cs:344:33:344:35 | access to local variable msg | empty | D.cs:343:13:343:27 | ... + ... | empty | -| D.cs:344:33:344:35 | access to local variable msg | non-empty | D.cs:343:13:343:27 | ... + ... | non-empty | -| D.cs:344:33:344:35 | access to local variable msg | non-null | D.cs:343:13:343:27 | ... + ... | non-null | -| D.cs:344:33:344:35 | access to local variable msg | null | D.cs:343:13:343:27 | ... + ... | null | -| D.cs:366:19:366:47 | ... ? ... : ... | non-null | D.cs:366:19:366:23 | access to field maybe | false | -| D.cs:366:19:366:47 | ... ? ... : ... | non-null | D.cs:366:34:366:47 | array creation of type Int32[] | non-null | -| D.cs:366:19:366:47 | ... ? ... : ... | null | D.cs:366:19:366:23 | access to field maybe | true | -| D.cs:366:19:366:47 | ... ? ... : ... | null | D.cs:366:27:366:30 | null | null | -| D.cs:367:13:367:56 | ... && ... | true | D.cs:367:13:367:21 | ... > ... | true | -| D.cs:367:13:367:56 | ... && ... | true | D.cs:367:27:367:55 | ... \|\| ... | true | -| D.cs:367:27:367:27 | access to local variable b | empty | D.cs:366:19:366:47 | ... ? ... : ... | empty | -| D.cs:367:27:367:27 | access to local variable b | non-empty | D.cs:366:19:366:47 | ... ? ... : ... | non-empty | -| D.cs:367:27:367:27 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null | -| D.cs:367:27:367:27 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null | -| D.cs:367:27:367:35 | ... == ... | false | D.cs:366:19:366:23 | access to field maybe | false | -| D.cs:367:27:367:35 | ... == ... | false | D.cs:367:27:367:27 | access to local variable b | non-null | -| D.cs:367:27:367:35 | ... == ... | true | D.cs:366:19:366:23 | access to field maybe | true | -| D.cs:367:27:367:35 | ... == ... | true | D.cs:367:27:367:27 | access to local variable b | null | -| D.cs:367:27:367:55 | ... \|\| ... | false | D.cs:367:27:367:35 | ... == ... | false | -| D.cs:367:27:367:55 | ... \|\| ... | false | D.cs:367:40:367:55 | ... < ... | false | -| D.cs:367:40:367:40 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null | -| D.cs:367:40:367:40 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null | -| D.cs:372:13:372:13 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null | -| D.cs:372:13:372:13 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null | -| D.cs:382:13:382:23 | ... != ... | false | D.cs:379:13:379:13 | access to parameter b | false | -| D.cs:382:13:382:23 | ... != ... | false | D.cs:382:13:382:15 | access to local variable ioe | null | -| D.cs:382:13:382:23 | ... != ... | true | D.cs:382:13:382:15 | access to local variable ioe | non-null | -| D.cs:390:20:390:28 | ... == ... | false | D.cs:390:20:390:20 | access to parameter a | non-null | -| D.cs:390:20:390:28 | ... == ... | true | D.cs:390:20:390:20 | access to parameter a | null | -| D.cs:397:20:397:28 | ... == ... | false | D.cs:397:20:397:20 | access to parameter b | non-null | -| D.cs:397:20:397:28 | ... == ... | true | D.cs:397:20:397:20 | access to parameter b | null | -| D.cs:407:13:407:64 | ... \|\| ... | false | D.cs:407:14:407:35 | ... && ... | false | -| D.cs:407:13:407:64 | ... \|\| ... | false | D.cs:407:42:407:63 | ... && ... | false | -| D.cs:407:14:407:22 | ... != ... | false | D.cs:407:14:407:14 | access to parameter x | null | -| D.cs:407:14:407:22 | ... != ... | true | D.cs:407:14:407:14 | access to parameter x | non-null | -| D.cs:407:14:407:35 | ... && ... | true | D.cs:407:14:407:22 | ... != ... | true | -| D.cs:407:14:407:35 | ... && ... | true | D.cs:407:27:407:35 | ... == ... | true | -| D.cs:407:27:407:35 | ... == ... | false | D.cs:407:27:407:27 | access to parameter y | non-null | -| D.cs:407:27:407:35 | ... == ... | true | D.cs:407:27:407:27 | access to parameter y | null | -| D.cs:407:42:407:50 | ... == ... | false | D.cs:407:42:407:42 | access to parameter x | non-null | -| D.cs:407:42:407:50 | ... == ... | true | D.cs:407:42:407:42 | access to parameter x | null | -| D.cs:407:42:407:63 | ... && ... | true | D.cs:407:42:407:50 | ... == ... | true | -| D.cs:407:42:407:63 | ... && ... | true | D.cs:407:55:407:63 | ... != ... | true | -| D.cs:407:55:407:63 | ... != ... | false | D.cs:407:55:407:55 | access to parameter y | null | -| D.cs:407:55:407:63 | ... != ... | true | D.cs:407:55:407:55 | access to parameter y | non-null | -| D.cs:409:13:409:21 | ... != ... | false | D.cs:409:13:409:13 | access to parameter x | null | -| D.cs:409:13:409:21 | ... != ... | true | D.cs:409:13:409:13 | access to parameter x | non-null | -| D.cs:411:13:411:21 | ... != ... | false | D.cs:411:13:411:13 | access to parameter y | null | -| D.cs:411:13:411:21 | ... != ... | true | D.cs:411:13:411:13 | access to parameter y | non-null | -| E.cs:10:22:10:54 | ... && ... | true | E.cs:10:22:10:29 | ... < ... | true | -| E.cs:10:22:10:54 | ... && ... | true | E.cs:10:34:10:54 | ... != ... | true | -| E.cs:10:34:10:54 | ... != ... | false | E.cs:10:35:10:45 | ... = ... | null | -| E.cs:10:34:10:54 | ... != ... | true | E.cs:10:35:10:45 | ... = ... | non-null | -| E.cs:10:35:10:45 | ... = ... | empty | E.cs:10:35:10:36 | access to local variable a2 | empty | -| E.cs:10:35:10:45 | ... = ... | empty | E.cs:10:40:10:45 | access to array element | empty | -| E.cs:10:35:10:45 | ... = ... | non-empty | E.cs:10:35:10:36 | access to local variable a2 | non-empty | -| E.cs:10:35:10:45 | ... = ... | non-empty | E.cs:10:40:10:45 | access to array element | non-empty | -| E.cs:10:35:10:45 | ... = ... | non-null | E.cs:10:35:10:36 | access to local variable a2 | non-null | -| E.cs:10:35:10:45 | ... = ... | non-null | E.cs:10:40:10:45 | access to array element | non-null | -| E.cs:10:35:10:45 | ... = ... | null | E.cs:10:35:10:36 | access to local variable a2 | null | -| E.cs:10:35:10:45 | ... = ... | null | E.cs:10:40:10:45 | access to array element | null | -| E.cs:12:22:12:27 | access to local variable haveA2 | false | E.cs:10:22:10:54 | ... && ... | false | -| E.cs:12:22:12:27 | access to local variable haveA2 | true | E.cs:10:22:10:54 | ... && ... | true | -| E.cs:12:22:12:52 | ... && ... | true | E.cs:12:22:12:27 | access to local variable haveA2 | true | -| E.cs:12:22:12:52 | ... && ... | true | E.cs:12:32:12:52 | ... != ... | true | -| E.cs:12:32:12:52 | ... != ... | false | E.cs:12:33:12:43 | ... = ... | null | -| E.cs:12:32:12:52 | ... != ... | true | E.cs:12:33:12:43 | ... = ... | non-null | -| E.cs:12:33:12:43 | ... = ... | empty | E.cs:12:33:12:34 | access to local variable a3 | empty | -| E.cs:12:33:12:43 | ... = ... | empty | E.cs:12:38:12:43 | access to array element | empty | -| E.cs:12:33:12:43 | ... = ... | non-empty | E.cs:12:33:12:34 | access to local variable a3 | non-empty | -| E.cs:12:33:12:43 | ... = ... | non-empty | E.cs:12:38:12:43 | access to array element | non-empty | -| E.cs:12:33:12:43 | ... = ... | non-null | E.cs:12:33:12:34 | access to local variable a3 | non-null | -| E.cs:12:33:12:43 | ... = ... | non-null | E.cs:12:38:12:43 | access to array element | non-null | -| E.cs:12:33:12:43 | ... = ... | null | E.cs:12:33:12:34 | access to local variable a3 | null | -| E.cs:12:33:12:43 | ... = ... | null | E.cs:12:38:12:43 | access to array element | null | -| E.cs:13:13:13:18 | access to local variable haveA3 | false | E.cs:12:22:12:52 | ... && ... | false | -| E.cs:13:13:13:18 | access to local variable haveA3 | true | E.cs:12:22:12:52 | ... && ... | true | -| E.cs:19:18:19:30 | ... ? ... : ... | non-null | E.cs:19:18:19:18 | access to parameter x | false | -| E.cs:19:18:19:30 | ... ? ... : ... | non-null | E.cs:19:29:19:30 | "" | non-null | -| E.cs:19:18:19:30 | ... ? ... : ... | null | E.cs:19:18:19:18 | access to parameter x | true | -| E.cs:19:18:19:30 | ... ? ... : ... | null | E.cs:19:22:19:25 | null | null | -| E.cs:20:18:20:41 | ... ? ... : ... | non-null | E.cs:20:19:20:28 | ... == ... | false | -| E.cs:20:18:20:41 | ... ? ... : ... | non-null | E.cs:20:40:20:41 | "" | non-null | -| E.cs:20:18:20:41 | ... ? ... : ... | null | E.cs:20:19:20:28 | ... == ... | true | -| E.cs:20:18:20:41 | ... ? ... : ... | null | E.cs:20:33:20:36 | null | null | -| E.cs:20:19:20:20 | access to local variable s1 | empty | E.cs:19:18:19:30 | ... ? ... : ... | empty | -| E.cs:20:19:20:20 | access to local variable s1 | non-empty | E.cs:19:18:19:30 | ... ? ... : ... | non-empty | -| E.cs:20:19:20:20 | access to local variable s1 | non-null | E.cs:19:18:19:30 | ... ? ... : ... | non-null | -| E.cs:20:19:20:20 | access to local variable s1 | null | E.cs:19:18:19:30 | ... ? ... : ... | null | -| E.cs:20:19:20:28 | ... == ... | false | E.cs:19:18:19:18 | access to parameter x | false | -| E.cs:20:19:20:28 | ... == ... | false | E.cs:20:19:20:20 | access to local variable s1 | non-null | -| E.cs:20:19:20:28 | ... == ... | true | E.cs:19:18:19:18 | access to parameter x | true | -| E.cs:20:19:20:28 | ... == ... | true | E.cs:20:19:20:20 | access to local variable s1 | null | -| E.cs:21:13:21:14 | access to local variable s2 | empty | E.cs:20:18:20:41 | ... ? ... : ... | empty | -| E.cs:21:13:21:14 | access to local variable s2 | non-empty | E.cs:20:18:20:41 | ... ? ... : ... | non-empty | -| E.cs:21:13:21:14 | access to local variable s2 | non-null | E.cs:20:18:20:41 | ... ? ... : ... | non-null | -| E.cs:21:13:21:14 | access to local variable s2 | null | E.cs:20:18:20:41 | ... ? ... : ... | null | -| E.cs:21:13:21:22 | ... == ... | false | E.cs:20:19:20:28 | ... == ... | false | -| E.cs:21:13:21:22 | ... == ... | false | E.cs:21:13:21:14 | access to local variable s2 | non-null | -| E.cs:21:13:21:22 | ... == ... | true | E.cs:20:19:20:28 | ... == ... | true | -| E.cs:21:13:21:22 | ... == ... | true | E.cs:21:13:21:14 | access to local variable s2 | null | -| E.cs:23:18:23:30 | ... ? ... : ... | non-null | E.cs:23:18:23:18 | access to parameter y | false | -| E.cs:23:18:23:30 | ... ? ... : ... | non-null | E.cs:23:29:23:30 | "" | non-null | -| E.cs:23:18:23:30 | ... ? ... : ... | null | E.cs:23:18:23:18 | access to parameter y | true | -| E.cs:23:18:23:30 | ... ? ... : ... | null | E.cs:23:22:23:25 | null | null | -| E.cs:24:18:24:41 | ... ? ... : ... | non-null | E.cs:24:19:24:28 | ... == ... | false | -| E.cs:24:18:24:41 | ... ? ... : ... | non-null | E.cs:24:40:24:41 | "" | non-null | -| E.cs:24:18:24:41 | ... ? ... : ... | null | E.cs:24:19:24:28 | ... == ... | true | -| E.cs:24:18:24:41 | ... ? ... : ... | null | E.cs:24:33:24:36 | null | null | -| E.cs:24:19:24:20 | access to local variable s1 | empty | E.cs:23:18:23:30 | ... ? ... : ... | empty | -| E.cs:24:19:24:20 | access to local variable s1 | non-empty | E.cs:23:18:23:30 | ... ? ... : ... | non-empty | -| E.cs:24:19:24:20 | access to local variable s1 | non-null | E.cs:23:18:23:30 | ... ? ... : ... | non-null | -| E.cs:24:19:24:20 | access to local variable s1 | null | E.cs:23:18:23:30 | ... ? ... : ... | null | -| E.cs:24:19:24:28 | ... == ... | false | E.cs:23:18:23:18 | access to parameter y | false | -| E.cs:24:19:24:28 | ... == ... | false | E.cs:24:19:24:20 | access to local variable s1 | non-null | -| E.cs:24:19:24:28 | ... == ... | true | E.cs:23:18:23:18 | access to parameter y | true | -| E.cs:24:19:24:28 | ... == ... | true | E.cs:24:19:24:20 | access to local variable s1 | null | -| E.cs:26:13:26:22 | ... != ... | false | E.cs:26:13:26:14 | access to local variable s2 | null | -| E.cs:26:13:26:22 | ... != ... | true | E.cs:26:13:26:14 | access to local variable s2 | non-null | -| E.cs:35:9:35:12 | access to local variable last | empty | E.cs:34:20:34:20 | access to local variable s | empty | -| E.cs:35:9:35:12 | access to local variable last | non-empty | E.cs:34:20:34:20 | access to local variable s | non-empty | -| E.cs:35:9:35:12 | access to local variable last | non-null | E.cs:34:20:34:20 | access to local variable s | non-null | -| E.cs:35:9:35:12 | access to local variable last | null | E.cs:34:20:34:20 | access to local variable s | null | -| E.cs:38:13:38:20 | call to method Any | false | E.cs:38:13:38:14 | access to parameter ss | empty | -| E.cs:38:13:38:20 | call to method Any | true | E.cs:38:13:38:14 | access to parameter ss | non-empty | -| E.cs:43:13:43:16 | access to local variable last | empty | E.cs:41:24:41:24 | access to local variable s | empty | -| E.cs:43:13:43:16 | access to local variable last | non-empty | E.cs:41:24:41:24 | access to local variable s | non-empty | -| E.cs:43:13:43:16 | access to local variable last | non-null | E.cs:41:24:41:24 | access to local variable s | non-null | -| E.cs:43:13:43:16 | access to local variable last | null | E.cs:41:24:41:24 | access to local variable s | null | -| E.cs:53:16:53:19 | access to local variable iter | non-null | E.cs:52:20:52:39 | call to method GetEnumerator | non-null | -| E.cs:53:16:53:19 | access to local variable iter | null | E.cs:52:20:52:39 | call to method GetEnumerator | null | -| E.cs:55:23:55:26 | access to local variable iter | non-null | E.cs:52:20:52:39 | call to method GetEnumerator | non-null | -| E.cs:55:23:55:26 | access to local variable iter | null | E.cs:52:20:52:39 | call to method GetEnumerator | null | -| E.cs:59:17:59:22 | access to local variable result | empty | E.cs:50:22:50:45 | object creation of type List> | empty | -| E.cs:59:17:59:22 | access to local variable result | non-empty | E.cs:50:22:50:45 | object creation of type List> | non-empty | -| E.cs:59:17:59:22 | access to local variable result | non-null | E.cs:50:22:50:45 | object creation of type List> | non-null | -| E.cs:59:17:59:22 | access to local variable result | null | E.cs:50:22:50:45 | object creation of type List> | null | -| E.cs:59:28:59:32 | access to local variable slice | empty | E.cs:58:25:58:42 | object creation of type List | empty | -| E.cs:59:28:59:32 | access to local variable slice | non-empty | E.cs:58:25:58:42 | object creation of type List | non-empty | -| E.cs:59:28:59:32 | access to local variable slice | non-null | E.cs:58:25:58:42 | object creation of type List | non-null | -| E.cs:59:28:59:32 | access to local variable slice | null | E.cs:58:25:58:42 | object creation of type List | null | -| E.cs:61:23:61:25 | access to local variable str | empty | E.cs:55:23:55:34 | access to property Current | empty | -| E.cs:61:23:61:25 | access to local variable str | non-empty | E.cs:55:23:55:34 | access to property Current | non-empty | -| E.cs:61:23:61:25 | access to local variable str | non-null | E.cs:55:23:55:34 | access to property Current | non-null | -| E.cs:61:23:61:25 | access to local variable str | null | E.cs:55:23:55:34 | access to property Current | null | -| E.cs:70:22:70:32 | ... == ... | false | E.cs:70:22:70:24 | access to parameter arr | non-null | -| E.cs:70:22:70:32 | ... == ... | true | E.cs:70:22:70:24 | access to parameter arr | null | -| E.cs:83:13:83:24 | ... != ... | false | E.cs:83:13:83:16 | access to parameter vals | null | -| E.cs:83:13:83:24 | ... != ... | true | E.cs:83:13:83:16 | access to parameter vals | non-null | -| E.cs:83:13:83:30 | ... && ... | true | E.cs:83:13:83:24 | ... != ... | true | -| E.cs:83:13:83:30 | ... && ... | true | E.cs:83:29:83:30 | access to parameter b1 | true | -| E.cs:85:18:85:29 | ... != ... | false | E.cs:85:18:85:21 | access to parameter vals | null | -| E.cs:85:18:85:29 | ... != ... | true | E.cs:85:18:85:21 | access to parameter vals | non-null | -| E.cs:85:18:85:35 | ... && ... | true | E.cs:85:18:85:29 | ... != ... | true | -| E.cs:85:18:85:35 | ... && ... | true | E.cs:85:34:85:35 | access to parameter b2 | true | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_A | E.cs:83:13:83:30 | ... && ... | true | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_A | E.cs:90:17:90:27 | access to local variable switchguard | 1 | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_B | E.cs:83:13:83:30 | ... && ... | false | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_B | E.cs:85:18:85:35 | ... && ... | true | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_B | E.cs:90:17:90:27 | access to local variable switchguard | 2 | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_C | E.cs:83:13:83:30 | ... && ... | false | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_C | E.cs:85:18:85:35 | ... && ... | false | -| E.cs:90:17:90:27 | access to local variable switchguard | match access to constant MY_CONST_C | E.cs:90:17:90:27 | access to local variable switchguard | 3 | -| E.cs:90:17:90:27 | access to local variable switchguard | non-match access to constant MY_CONST_A | E.cs:83:13:83:30 | ... && ... | false | -| E.cs:108:13:108:27 | ... > ... | true | E.cs:108:13:108:16 | access to parameter arr1 | non-empty | -| E.cs:120:16:120:20 | !... | false | E.cs:120:17:120:20 | access to local variable stop | true | -| E.cs:120:16:120:20 | !... | true | E.cs:120:17:120:20 | access to local variable stop | false | -| E.cs:123:20:123:24 | !... | false | E.cs:123:21:123:24 | access to local variable stop | true | -| E.cs:123:20:123:24 | !... | true | E.cs:123:21:123:24 | access to local variable stop | false | -| E.cs:123:20:123:35 | ... && ... | true | E.cs:123:20:123:24 | !... | true | -| E.cs:123:20:123:35 | ... && ... | true | E.cs:123:29:123:35 | ... < ... | true | -| E.cs:131:25:131:29 | !... | false | E.cs:131:26:131:29 | access to local variable stop | true | -| E.cs:131:25:131:29 | !... | true | E.cs:131:26:131:29 | access to local variable stop | false | -| E.cs:131:26:131:29 | access to local variable stop | false | E.cs:130:28:130:33 | ... >= ... | false | -| E.cs:131:26:131:29 | access to local variable stop | true | E.cs:130:28:130:33 | ... >= ... | true | -| E.cs:153:13:153:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null | -| E.cs:153:13:153:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null | -| E.cs:153:13:153:24 | ... != ... | false | E.cs:153:13:153:16 | access to local variable obj2 | null | -| E.cs:153:13:153:24 | ... != ... | true | E.cs:153:13:153:16 | access to local variable obj2 | non-null | -| E.cs:153:13:153:54 | ... && ... | true | E.cs:153:13:153:24 | ... != ... | true | -| E.cs:153:13:153:54 | ... && ... | true | E.cs:153:29:153:54 | ... > ... | true | -| E.cs:153:29:153:32 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null | -| E.cs:153:29:153:32 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null | -| E.cs:155:13:155:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null | -| E.cs:155:13:155:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null | -| E.cs:159:13:159:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null | -| E.cs:159:13:159:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null | -| E.cs:164:17:164:25 | ... == ... | false | E.cs:164:17:164:17 | access to parameter a | non-null | -| E.cs:164:17:164:25 | ... == ... | true | E.cs:164:17:164:17 | access to parameter a | null | -| E.cs:175:19:175:29 | ... == ... | false | E.cs:175:19:175:21 | access to parameter obj | non-null | -| E.cs:175:19:175:29 | ... == ... | true | E.cs:175:19:175:21 | access to parameter obj | null | -| E.cs:175:19:175:42 | ... ? ... : ... | true | E.cs:175:19:175:29 | ... == ... | false | -| E.cs:175:19:175:42 | ... ? ... : ... | true | E.cs:175:41:175:42 | access to parameter b1 | true | -| E.cs:176:13:176:14 | (...) ... | non-null | E.cs:176:13:176:14 | access to local variable b2 | non-null | -| E.cs:176:13:176:14 | (...) ... | null | E.cs:176:13:176:14 | access to local variable b2 | null | -| E.cs:176:13:176:14 | access to local variable b2 | false | E.cs:175:19:175:42 | ... ? ... : ... | false | -| E.cs:176:13:176:14 | access to local variable b2 | true | E.cs:175:19:175:42 | ... ? ... : ... | true | -| E.cs:176:13:176:22 | ... == ... | false | E.cs:176:13:176:14 | (...) ... | non-null | -| E.cs:176:13:176:22 | ... == ... | true | E.cs:176:13:176:14 | (...) ... | null | -| E.cs:176:13:176:22 | ... == ... | true | E.cs:176:19:176:22 | null | non-null | -| E.cs:180:13:180:23 | ... == ... | false | E.cs:180:13:180:15 | access to parameter obj | non-null | -| E.cs:180:13:180:23 | ... == ... | true | E.cs:180:13:180:15 | access to parameter obj | null | -| E.cs:184:13:184:14 | (...) ... | non-null | E.cs:184:13:184:14 | access to parameter b1 | non-null | -| E.cs:184:13:184:14 | (...) ... | null | E.cs:184:13:184:14 | access to parameter b1 | null | -| E.cs:184:13:184:22 | ... == ... | false | E.cs:184:13:184:14 | (...) ... | non-null | -| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:13:184:14 | (...) ... | null | -| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:19:184:22 | null | non-null | -| E.cs:193:17:193:29 | call to method ToString | non-null | E.cs:193:17:193:17 | access to parameter o | non-null | -| E.cs:198:17:198:29 | ... ? ... : ... | non-null | E.cs:198:17:198:17 | access to parameter b | false | -| E.cs:198:17:198:29 | ... ? ... : ... | non-null | E.cs:198:28:198:29 | "" | non-null | -| E.cs:198:17:198:29 | ... ? ... : ... | null | E.cs:198:17:198:17 | access to parameter b | true | -| E.cs:198:17:198:29 | ... ? ... : ... | null | E.cs:198:21:198:24 | null | null | -| E.cs:199:9:199:9 | access to local variable o | empty | E.cs:198:17:198:29 | ... ? ... : ... | empty | -| E.cs:199:9:199:9 | access to local variable o | non-empty | E.cs:198:17:198:29 | ... ? ... : ... | non-empty | -| E.cs:199:9:199:9 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null | -| E.cs:199:9:199:9 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null | -| E.cs:201:13:201:13 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null | -| E.cs:201:13:201:13 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null | -| E.cs:203:13:203:13 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null | -| E.cs:203:13:203:13 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null | -| E.cs:208:13:208:23 | ... is ... | false | E.cs:208:13:208:13 | access to parameter s | null | -| E.cs:208:13:208:23 | ... is ... | true | E.cs:208:13:208:13 | access to parameter s | non-null | -| E.cs:220:13:220:13 | access to local variable x | non-null | E.cs:217:17:217:20 | null | non-null | -| E.cs:220:13:220:13 | access to local variable x | null | E.cs:217:17:217:20 | null | null | -| E.cs:229:13:229:13 | access to local variable x | empty | E.cs:227:17:227:20 | null | empty | -| E.cs:229:13:229:13 | access to local variable x | non-empty | E.cs:227:17:227:20 | null | non-empty | -| E.cs:229:13:229:13 | access to local variable x | non-null | E.cs:227:17:227:20 | null | non-null | -| E.cs:229:13:229:13 | access to local variable x | null | E.cs:227:17:227:20 | null | null | -| E.cs:245:13:245:22 | access to property HasValue | false | E.cs:245:13:245:13 | access to parameter i | null | -| E.cs:245:13:245:22 | access to property HasValue | true | E.cs:245:13:245:13 | access to parameter i | non-null | -| E.cs:252:13:252:21 | ... != ... | false | E.cs:252:13:252:13 | access to parameter i | null | -| E.cs:252:13:252:21 | ... != ... | true | E.cs:252:13:252:13 | access to parameter i | non-null | -| E.cs:259:13:259:21 | ... == ... | false | E.cs:259:13:259:13 | access to parameter i | non-null | -| E.cs:259:13:259:21 | ... == ... | true | E.cs:259:13:259:13 | access to parameter i | null | -| E.cs:270:13:270:13 | access to local variable o | non-null | E.cs:269:17:269:22 | call to method Make | non-null | -| E.cs:270:13:270:13 | access to local variable o | null | E.cs:269:17:269:22 | call to method Make | null | -| E.cs:274:17:274:25 | ... != ... | false | E.cs:274:17:274:17 | access to local variable o | null | -| E.cs:274:17:274:25 | ... != ... | true | E.cs:274:17:274:17 | access to local variable o | non-null | -| E.cs:284:9:284:9 | access to local variable o | empty | E.cs:283:17:283:22 | call to method Make | empty | -| E.cs:284:9:284:9 | access to local variable o | non-empty | E.cs:283:17:283:22 | call to method Make | non-empty | -| E.cs:284:9:284:9 | access to local variable o | non-null | E.cs:283:17:283:22 | call to method Make | non-null | -| E.cs:284:9:284:9 | access to local variable o | null | E.cs:283:17:283:22 | call to method Make | null | -| E.cs:285:9:285:9 | access to local variable o | non-null | E.cs:283:17:283:22 | call to method Make | non-null | -| E.cs:285:9:285:9 | access to local variable o | null | E.cs:283:17:283:22 | call to method Make | null | -| E.cs:292:20:292:32 | ... ? ... : ... | non-null | E.cs:292:20:292:20 | access to parameter b | false | -| E.cs:292:20:292:32 | ... ? ... : ... | non-null | E.cs:292:31:292:32 | "" | non-null | -| E.cs:292:20:292:32 | ... ? ... : ... | null | E.cs:292:20:292:20 | access to parameter b | true | -| E.cs:292:20:292:32 | ... ? ... : ... | null | E.cs:292:24:292:27 | null | null | -| E.cs:293:13:293:13 | access to local variable s | empty | E.cs:292:20:292:32 | ... ? ... : ... | empty | -| E.cs:293:13:293:13 | access to local variable s | non-empty | E.cs:292:20:292:32 | ... ? ... : ... | non-empty | -| E.cs:293:13:293:13 | access to local variable s | non-null | E.cs:292:20:292:20 | access to parameter b | false | -| E.cs:293:13:293:13 | access to local variable s | non-null | E.cs:292:20:292:32 | ... ? ... : ... | non-null | -| E.cs:293:13:293:13 | access to local variable s | null | E.cs:292:20:292:20 | access to parameter b | true | -| E.cs:293:13:293:13 | access to local variable s | null | E.cs:292:20:292:32 | ... ? ... : ... | null | -| E.cs:293:13:293:19 | call to method M2 | non-null | E.cs:293:13:293:13 | access to local variable s | non-null | -| E.cs:293:13:293:19 | call to method M2 | null | E.cs:293:13:293:13 | access to local variable s | null | -| E.cs:293:13:293:24 | ... == ... | true | E.cs:293:13:293:19 | call to method M2 | non-null | -| E.cs:295:13:295:13 | access to local variable s | non-null | E.cs:292:20:292:32 | ... ? ... : ... | non-null | -| E.cs:295:13:295:13 | access to local variable s | null | E.cs:292:20:292:32 | ... ? ... : ... | null | -| E.cs:302:9:302:9 | access to local variable s | empty | E.cs:301:17:301:27 | ... as ... | empty | -| E.cs:302:9:302:9 | access to local variable s | non-empty | E.cs:301:17:301:27 | ... as ... | non-empty | -| E.cs:302:9:302:9 | access to local variable s | non-null | E.cs:301:17:301:27 | ... as ... | non-null | -| E.cs:302:9:302:9 | access to local variable s | null | E.cs:301:17:301:27 | ... as ... | null | -| E.cs:309:13:309:22 | access to property HasValue | false | E.cs:309:13:309:13 | access to field l | null | -| E.cs:309:13:309:22 | access to property HasValue | true | E.cs:309:13:309:13 | access to field l | non-null | -| E.cs:317:22:317:38 | ... ? ... : ... | non-null | E.cs:317:22:317:26 | access to field Field | false | -| E.cs:317:22:317:38 | ... ? ... : ... | non-null | E.cs:317:37:317:38 | "" | non-null | -| E.cs:317:22:317:38 | ... ? ... : ... | null | E.cs:317:22:317:26 | access to field Field | true | -| E.cs:317:22:317:38 | ... ? ... : ... | null | E.cs:317:30:317:33 | null | null | -| E.cs:321:13:321:30 | ... is ... | false | E.cs:321:14:321:21 | ... ?? ... | non-null | -| E.cs:321:13:321:30 | ... is ... | true | E.cs:321:14:321:21 | ... ?? ... | null | -| E.cs:321:14:321:21 | ... ?? ... | null | E.cs:321:14:321:15 | access to parameter s1 | null | -| E.cs:321:14:321:21 | ... ?? ... | null | E.cs:321:20:321:21 | access to parameter s2 | null | -| E.cs:330:17:330:28 | (...) ... | non-null | E.cs:330:25:330:28 | null | non-null | -| E.cs:330:17:330:28 | (...) ... | null | E.cs:330:25:330:28 | null | null | -| E.cs:330:17:330:36 | ... ?? ... | null | E.cs:330:17:330:28 | (...) ... | null | -| E.cs:330:17:330:36 | ... ?? ... | null | E.cs:330:33:330:36 | null | null | -| E.cs:331:9:331:9 | access to local variable x | empty | E.cs:330:17:330:36 | ... ?? ... | empty | -| E.cs:331:9:331:9 | access to local variable x | non-empty | E.cs:330:17:330:36 | ... ?? ... | non-empty | -| E.cs:331:9:331:9 | access to local variable x | non-null | E.cs:330:17:330:36 | ... ?? ... | non-null | -| E.cs:331:9:331:9 | access to local variable x | null | E.cs:330:17:330:36 | ... ?? ... | null | -| E.cs:336:17:336:23 | ... ?? ... | null | E.cs:336:17:336:17 | access to parameter s | null | -| E.cs:336:17:336:23 | ... ?? ... | null | E.cs:336:22:336:23 | "" | null | -| E.cs:337:9:337:9 | access to local variable x | empty | E.cs:336:17:336:23 | ... ?? ... | empty | -| E.cs:337:9:337:9 | access to local variable x | non-empty | E.cs:336:17:336:23 | ... ?? ... | non-empty | -| E.cs:337:9:337:9 | access to local variable x | non-null | E.cs:336:17:336:23 | ... ?? ... | non-null | -| E.cs:337:9:337:9 | access to local variable x | null | E.cs:336:17:336:23 | ... ?? ... | null | -| E.cs:342:17:342:32 | ... ?? ... | null | E.cs:342:17:342:17 | access to parameter s | null | -| E.cs:342:17:342:32 | ... ?? ... | null | E.cs:342:22:342:32 | ... as ... | null | -| E.cs:343:9:343:9 | access to local variable x | empty | E.cs:342:17:342:32 | ... ?? ... | empty | -| E.cs:343:9:343:9 | access to local variable x | non-empty | E.cs:342:17:342:32 | ... ?? ... | non-empty | -| E.cs:343:9:343:9 | access to local variable x | non-null | E.cs:342:17:342:32 | ... ?? ... | non-null | -| E.cs:343:9:343:9 | access to local variable x | null | E.cs:342:17:342:32 | ... ?? ... | null | -| E.cs:348:21:348:36 | ... ?? ... | null | E.cs:348:21:348:21 | access to parameter s | null | -| E.cs:348:21:348:36 | ... ?? ... | null | E.cs:348:26:348:36 | ... as ... | null | -| E.cs:349:9:349:9 | access to local variable x | non-null | E.cs:348:21:348:36 | ... ?? ... | non-null | -| E.cs:349:9:349:9 | access to local variable x | null | E.cs:348:21:348:36 | ... ?? ... | null | -| E.cs:354:21:354:36 | ... ?? ... | null | E.cs:354:21:354:21 | access to parameter s | null | -| E.cs:354:21:354:36 | ... ?? ... | null | E.cs:354:26:354:36 | ... as ... | null | -| E.cs:355:13:355:13 | access to local variable x | non-null | E.cs:354:21:354:36 | ... ?? ... | non-null | -| E.cs:355:13:355:13 | access to local variable x | null | E.cs:354:21:354:36 | ... ?? ... | null | -| E.cs:355:13:355:21 | dynamic call to operator != | false | E.cs:355:13:355:13 | access to local variable x | null | -| E.cs:355:13:355:21 | dynamic call to operator != | true | E.cs:355:13:355:13 | access to local variable x | non-null | -| E.cs:356:13:356:13 | access to local variable x | non-null | E.cs:354:21:354:36 | ... ?? ... | non-null | -| E.cs:356:13:356:13 | access to local variable x | null | E.cs:354:21:354:36 | ... ?? ... | null | -| E.cs:361:17:361:32 | ... ?? ... | null | E.cs:361:17:361:17 | access to parameter s | null | -| E.cs:361:17:361:32 | ... ?? ... | null | E.cs:361:22:361:32 | ... as ... | null | -| E.cs:362:13:362:13 | access to local variable x | empty | E.cs:361:17:361:32 | ... ?? ... | empty | -| E.cs:362:13:362:13 | access to local variable x | non-empty | E.cs:361:17:361:32 | ... ?? ... | non-empty | -| E.cs:362:13:362:13 | access to local variable x | non-null | E.cs:361:17:361:32 | ... ?? ... | non-null | -| E.cs:362:13:362:13 | access to local variable x | null | E.cs:361:17:361:32 | ... ?? ... | null | -| E.cs:362:13:362:29 | ... != ... | false | E.cs:362:13:362:13 | access to local variable x | null | -| E.cs:362:13:362:29 | ... != ... | true | E.cs:362:13:362:13 | access to local variable x | non-null | -| E.cs:362:18:362:29 | (...) ... | non-null | E.cs:362:26:362:29 | null | non-null | -| E.cs:362:18:362:29 | (...) ... | null | E.cs:362:26:362:29 | null | null | -| E.cs:363:13:363:13 | access to local variable x | non-null | E.cs:361:17:361:32 | ... ?? ... | non-null | -| E.cs:363:13:363:13 | access to local variable x | null | E.cs:361:17:361:32 | ... ?? ... | null | -| E.cs:372:13:372:23 | ... is ... | true | E.cs:372:13:372:13 | access to parameter o | non-null | -| E.cs:375:20:375:20 | access to local variable s | empty | E.cs:374:21:374:31 | ... as ... | empty | -| E.cs:375:20:375:20 | access to local variable s | non-empty | E.cs:374:21:374:31 | ... as ... | non-empty | -| E.cs:375:20:375:20 | access to local variable s | non-null | E.cs:374:21:374:31 | ... as ... | non-null | -| E.cs:375:20:375:20 | access to local variable s | null | E.cs:374:21:374:31 | ... as ... | null | -| E.cs:382:13:382:68 | ... \|\| ... | false | E.cs:382:14:382:37 | ... && ... | false | -| E.cs:382:13:382:68 | ... \|\| ... | false | E.cs:382:44:382:67 | ... && ... | false | -| E.cs:382:14:382:23 | ... == ... | false | E.cs:382:14:382:15 | access to parameter e1 | non-null | -| E.cs:382:14:382:23 | ... == ... | true | E.cs:382:14:382:15 | access to parameter e1 | null | -| E.cs:382:14:382:37 | ... && ... | true | E.cs:382:14:382:23 | ... == ... | true | -| E.cs:382:14:382:37 | ... && ... | true | E.cs:382:28:382:37 | ... != ... | true | -| E.cs:382:28:382:37 | ... != ... | false | E.cs:382:28:382:29 | access to parameter e2 | null | -| E.cs:382:28:382:37 | ... != ... | true | E.cs:382:28:382:29 | access to parameter e2 | non-null | -| E.cs:382:44:382:53 | ... != ... | false | E.cs:382:44:382:45 | access to parameter e1 | null | -| E.cs:382:44:382:53 | ... != ... | true | E.cs:382:44:382:45 | access to parameter e1 | non-null | -| E.cs:382:44:382:67 | ... && ... | true | E.cs:382:44:382:53 | ... != ... | true | -| E.cs:382:44:382:67 | ... && ... | true | E.cs:382:58:382:67 | ... == ... | true | -| E.cs:382:58:382:67 | ... == ... | false | E.cs:382:58:382:59 | access to parameter e2 | non-null | -| E.cs:382:58:382:67 | ... == ... | true | E.cs:382:58:382:59 | access to parameter e2 | null | -| E.cs:384:13:384:22 | ... == ... | false | E.cs:384:13:384:14 | access to parameter e1 | non-null | -| E.cs:384:13:384:22 | ... == ... | true | E.cs:384:13:384:14 | access to parameter e1 | null | -| E.cs:384:13:384:36 | ... && ... | true | E.cs:384:13:384:22 | ... == ... | true | -| E.cs:384:13:384:36 | ... && ... | true | E.cs:384:27:384:36 | ... == ... | true | -| E.cs:384:27:384:36 | ... == ... | false | E.cs:384:27:384:28 | access to parameter e2 | non-null | -| E.cs:384:27:384:36 | ... == ... | true | E.cs:384:27:384:28 | access to parameter e2 | null | -| E.cs:404:9:404:9 | access to local variable i | non-null | E.cs:403:18:403:21 | null | non-null | -| E.cs:404:9:404:9 | access to local variable i | null | E.cs:403:18:403:21 | null | null | -| E.cs:404:9:404:18 | ... = ... | non-null | E.cs:404:9:404:9 | access to local variable i | non-null | -| E.cs:404:9:404:18 | ... = ... | non-null | E.cs:404:9:404:18 | ... ?? ... | non-null | -| E.cs:404:9:404:18 | ... = ... | null | E.cs:404:9:404:9 | access to local variable i | null | -| E.cs:404:9:404:18 | ... = ... | null | E.cs:404:9:404:18 | ... ?? ... | null | -| E.cs:404:9:404:18 | ... ?? ... | null | E.cs:404:9:404:9 | access to local variable i | null | -| E.cs:404:9:404:18 | ... ?? ... | null | E.cs:404:15:404:18 | null | null | -| E.cs:405:16:405:16 | access to local variable i | non-null | E.cs:404:9:404:18 | ... ?? ... | non-null | -| E.cs:405:16:405:16 | access to local variable i | null | E.cs:404:9:404:18 | ... ?? ... | null | -| E.cs:411:9:411:9 | access to local variable i | non-null | E.cs:410:18:410:18 | (...) ... | non-null | -| E.cs:411:9:411:9 | access to local variable i | null | E.cs:410:18:410:18 | (...) ... | null | -| E.cs:411:9:411:18 | ... = ... | non-null | E.cs:411:9:411:9 | access to local variable i | non-null | -| E.cs:411:9:411:18 | ... = ... | non-null | E.cs:411:9:411:18 | ... ?? ... | non-null | -| E.cs:411:9:411:18 | ... = ... | null | E.cs:411:9:411:9 | access to local variable i | null | -| E.cs:411:9:411:18 | ... = ... | null | E.cs:411:9:411:18 | ... ?? ... | null | -| E.cs:411:9:411:18 | ... ?? ... | null | E.cs:411:9:411:9 | access to local variable i | null | -| E.cs:411:9:411:18 | ... ?? ... | null | E.cs:411:15:411:18 | null | null | -| E.cs:412:16:412:16 | access to local variable i | non-null | E.cs:411:9:411:18 | ... ?? ... | non-null | -| E.cs:412:16:412:16 | access to local variable i | null | E.cs:411:9:411:18 | ... ?? ... | null | -| E.cs:417:16:417:41 | call to method Any | true | E.cs:417:16:417:18 | access to parameter is | non-empty | -| E.cs:422:13:422:22 | access to property HasValue | false | E.cs:422:13:422:13 | access to parameter i | null | -| E.cs:422:13:422:22 | access to property HasValue | true | E.cs:422:13:422:13 | access to parameter i | non-null | -| E.cs:423:20:423:45 | call to method Any | true | E.cs:423:20:423:22 | access to parameter is | non-empty | -| E.cs:429:13:429:22 | access to property HasValue | false | E.cs:429:13:429:13 | access to parameter i | null | -| E.cs:429:13:429:22 | access to property HasValue | true | E.cs:429:13:429:13 | access to parameter i | non-null | -| E.cs:432:16:432:24 | call to method Any | false | E.cs:432:16:432:18 | access to parameter is | empty | -| E.cs:432:16:432:24 | call to method Any | true | E.cs:432:16:432:18 | access to parameter is | non-empty | -| E.cs:437:13:437:21 | ... is ... | false | E.cs:437:13:437:13 | access to parameter s | non-null | -| E.cs:437:13:437:21 | ... is ... | true | E.cs:437:13:437:13 | access to parameter s | null | -| E.cs:442:13:442:29 | ... is ... | true | E.cs:442:13:442:13 | access to parameter s | non-null | -| E.cs:447:13:447:25 | ... is ... | true | E.cs:447:13:447:13 | access to parameter s | non-null | -| E.cs:452:13:452:23 | ... is ... | true | E.cs:452:13:452:13 | access to parameter s | non-null | -| F.cs:8:9:8:9 | access to local variable o | non-null | F.cs:7:20:7:23 | null | non-null | -| F.cs:8:9:8:9 | access to local variable o | null | F.cs:7:20:7:23 | null | null | -| F.cs:14:9:14:9 | access to local variable o | non-null | F.cs:13:21:13:24 | null | non-null | -| F.cs:14:9:14:9 | access to local variable o | null | F.cs:13:21:13:24 | null | null | -| Forwarding.cs:9:13:9:30 | !... | false | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | true | -| Forwarding.cs:9:13:9:30 | !... | true | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false | -| Forwarding.cs:9:14:9:14 | access to local variable s | empty | Forwarding.cs:7:20:7:23 | null | empty | -| Forwarding.cs:9:14:9:14 | access to local variable s | non-empty | Forwarding.cs:7:20:7:23 | null | non-empty | -| Forwarding.cs:9:14:9:14 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:9:14:9:14 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false | Forwarding.cs:9:14:9:14 | access to local variable s | non-null | -| Forwarding.cs:11:31:11:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:11:31:11:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:14:13:14:13 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:14:13:14:13 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | true | Forwarding.cs:14:13:14:13 | access to local variable s | non-null | -| Forwarding.cs:16:31:16:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:16:31:16:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:19:13:19:23 | !... | false | Forwarding.cs:19:14:19:23 | call to method IsNull | true | -| Forwarding.cs:19:13:19:23 | !... | true | Forwarding.cs:19:14:19:23 | call to method IsNull | false | -| Forwarding.cs:19:14:19:14 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:19:14:19:14 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:19:14:19:23 | call to method IsNull | false | Forwarding.cs:19:14:19:14 | access to local variable s | non-null | -| Forwarding.cs:19:14:19:23 | call to method IsNull | true | Forwarding.cs:19:14:19:14 | access to local variable s | null | -| Forwarding.cs:21:31:21:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:21:31:21:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:24:13:24:13 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:24:13:24:13 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:24:13:24:25 | call to method IsNotNull | false | Forwarding.cs:24:13:24:13 | access to local variable s | null | -| Forwarding.cs:24:13:24:25 | call to method IsNotNull | true | Forwarding.cs:24:13:24:13 | access to local variable s | non-null | -| Forwarding.cs:26:31:26:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:26:31:26:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:29:13:29:24 | call to method IsNotNull | true | Forwarding.cs:29:23:29:23 | access to local variable s | non-null | -| Forwarding.cs:29:23:29:23 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:29:23:29:23 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:31:31:31:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:31:31:31:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:34:13:34:29 | call to method IsNotNullWrong | false | Forwarding.cs:34:28:34:28 | access to local variable s | non-null | -| Forwarding.cs:34:28:34:28 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:34:28:34:28 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:36:31:36:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:36:31:36:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:39:25:39:25 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:39:25:39:25 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:40:27:40:27 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null | -| Forwarding.cs:40:27:40:27 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null | -| Forwarding.cs:45:16:45:26 | ... is ... | true | Forwarding.cs:45:16:45:16 | access to parameter o | non-null | -| Forwarding.cs:45:30:45:61 | !... | false | Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | true | -| Forwarding.cs:45:30:45:61 | !... | true | Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | false | -| Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | false | Forwarding.cs:45:52:45:60 | (...) ... | non-null | -| Forwarding.cs:45:52:45:60 | (...) ... | non-null | Forwarding.cs:45:60:45:60 | access to parameter o | non-null | -| Forwarding.cs:45:52:45:60 | (...) ... | null | Forwarding.cs:45:60:45:60 | access to parameter o | null | -| Forwarding.cs:45:65:45:75 | !... | false | Forwarding.cs:45:66:45:75 | call to method IsNull | true | -| Forwarding.cs:45:65:45:75 | !... | true | Forwarding.cs:45:66:45:75 | call to method IsNull | false | -| Forwarding.cs:45:66:45:75 | call to method IsNull | false | Forwarding.cs:45:66:45:66 | access to parameter o | non-null | -| Forwarding.cs:45:66:45:75 | call to method IsNull | true | Forwarding.cs:45:66:45:66 | access to parameter o | null | -| Forwarding.cs:50:13:50:23 | ... is ... | true | Forwarding.cs:50:13:50:13 | access to parameter o | non-null | -| Forwarding.cs:52:20:52:51 | !... | false | Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | true | -| Forwarding.cs:52:20:52:51 | !... | true | Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | false | -| Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | false | Forwarding.cs:52:42:52:50 | (...) ... | non-null | -| Forwarding.cs:52:42:52:50 | (...) ... | non-null | Forwarding.cs:52:50:52:50 | access to parameter o | non-null | -| Forwarding.cs:52:42:52:50 | (...) ... | null | Forwarding.cs:52:50:52:50 | access to parameter o | null | -| Forwarding.cs:59:13:59:21 | ... == ... | false | Forwarding.cs:59:13:59:13 | access to parameter o | non-null | -| Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:13:59:13 | access to parameter o | null | -| Forwarding.cs:68:16:68:38 | call to method IsNullOrEmpty | false | Forwarding.cs:68:37:68:37 | access to parameter s | non-null | -| Forwarding.cs:73:16:73:39 | !... | false | Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | true | -| Forwarding.cs:73:16:73:39 | !... | true | Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | false | -| Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | false | Forwarding.cs:73:38:73:38 | access to parameter s | non-null | -| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | false | Forwarding.cs:78:32:78:32 | access to parameter o | non-null | -| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:32:78:32 | access to parameter o | null | -| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:16:83:16 | access to parameter o | null | -| Forwarding.cs:83:16:83:24 | ... != ... | true | Forwarding.cs:83:16:83:16 | access to parameter o | non-null | -| GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | GuardedString.cs:7:31:7:32 | "" | non-null | -| GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | GuardedString.cs:7:24:7:27 | null | null | -| GuardedString.cs:9:13:9:36 | !... | false | GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | true | -| GuardedString.cs:9:13:9:36 | !... | true | GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false | -| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false | GuardedString.cs:9:35:9:35 | access to local variable s | non-null | -| GuardedString.cs:9:35:9:35 | access to local variable s | empty | GuardedString.cs:7:20:7:32 | ... ? ... : ... | empty | -| GuardedString.cs:9:35:9:35 | access to local variable s | non-empty | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-empty | -| GuardedString.cs:9:35:9:35 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:9:35:9:35 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:11:31:11:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:11:31:11:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:14:13:14:41 | !... | false | GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | true | -| GuardedString.cs:14:13:14:41 | !... | true | GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false | -| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false | GuardedString.cs:14:40:14:40 | access to local variable s | non-null | -| GuardedString.cs:14:40:14:40 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:14:40:14:40 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:16:31:16:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:16:31:16:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:19:13:19:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:19:13:19:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:19:13:19:21 | access to property Length | non-null | GuardedString.cs:19:13:19:13 | access to local variable s | non-null | -| GuardedString.cs:19:13:19:21 | access to property Length | null | GuardedString.cs:19:13:19:13 | access to local variable s | null | -| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:13:19:21 | access to property Length | non-null | -| GuardedString.cs:20:31:20:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:20:31:20:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:22:13:22:21 | access to property Length | non-null | GuardedString.cs:22:13:22:13 | access to local variable s | non-null | -| GuardedString.cs:22:13:22:21 | access to property Length | null | GuardedString.cs:22:13:22:13 | access to local variable s | null | -| GuardedString.cs:22:13:22:25 | ... > ... | true | GuardedString.cs:22:13:22:21 | access to property Length | non-null | -| GuardedString.cs:23:31:23:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:23:31:23:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:25:13:25:21 | access to property Length | non-null | GuardedString.cs:25:13:25:13 | access to local variable s | non-null | -| GuardedString.cs:25:13:25:21 | access to property Length | null | GuardedString.cs:25:13:25:13 | access to local variable s | null | -| GuardedString.cs:25:13:25:26 | ... >= ... | true | GuardedString.cs:25:13:25:21 | access to property Length | non-null | -| GuardedString.cs:26:31:26:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:26:31:26:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:28:13:28:21 | access to property Length | non-null | GuardedString.cs:28:13:28:13 | access to local variable s | non-null | -| GuardedString.cs:28:13:28:21 | access to property Length | null | GuardedString.cs:28:13:28:13 | access to local variable s | null | -| GuardedString.cs:28:13:28:26 | ... < ... | true | GuardedString.cs:28:13:28:21 | access to property Length | non-null | -| GuardedString.cs:29:31:29:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:29:31:29:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:31:13:31:21 | access to property Length | non-null | GuardedString.cs:31:13:31:13 | access to local variable s | non-null | -| GuardedString.cs:31:13:31:21 | access to property Length | null | GuardedString.cs:31:13:31:13 | access to local variable s | null | -| GuardedString.cs:31:13:31:27 | ... <= ... | true | GuardedString.cs:31:13:31:21 | access to property Length | non-null | -| GuardedString.cs:32:31:32:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:32:31:32:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false | -| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true | -| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:34:13:34:21 | access to property Length | non-null | GuardedString.cs:34:13:34:13 | access to local variable s | non-null | -| GuardedString.cs:34:13:34:21 | access to property Length | null | GuardedString.cs:34:13:34:13 | access to local variable s | null | -| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:13:34:21 | access to property Length | non-null | -| GuardedString.cs:35:31:35:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:35:31:35:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| GuardedString.cs:37:31:37:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null | -| GuardedString.cs:37:31:37:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null | -| ImplicitToString.cs:8:23:8:23 | access to local variable o | non-null | ImplicitToString.cs:7:20:7:23 | null | non-null | -| ImplicitToString.cs:8:23:8:23 | access to local variable o | null | ImplicitToString.cs:7:20:7:23 | null | null | -| NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | null | -| NullAlwaysBad.cs:9:17:9:25 | ... != ... | true | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | non-null | -| NullAlwaysBad.cs:9:17:9:41 | ... \|\| ... | false | NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | -| NullAlwaysBad.cs:9:17:9:41 | ... \|\| ... | false | NullAlwaysBad.cs:9:30:9:41 | ... > ... | false | -| NullAlwaysGood.cs:9:17:9:25 | ... != ... | false | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | null | -| NullAlwaysGood.cs:9:17:9:25 | ... != ... | true | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | non-null | -| NullAlwaysGood.cs:9:17:9:41 | ... && ... | true | NullAlwaysGood.cs:9:17:9:25 | ... != ... | true | -| NullAlwaysGood.cs:9:17:9:41 | ... && ... | true | NullAlwaysGood.cs:9:30:9:41 | ... > ... | true | -| NullMaybeGood.cs:7:13:7:21 | ... != ... | false | NullMaybeGood.cs:7:13:7:13 | access to parameter o | null | -| NullMaybeGood.cs:7:13:7:21 | ... != ... | true | NullMaybeGood.cs:7:13:7:13 | access to parameter o | non-null | -| StringConcatenation.cs:8:9:8:9 | access to local variable s | empty | StringConcatenation.cs:7:20:7:23 | null | empty | -| StringConcatenation.cs:8:9:8:9 | access to local variable s | non-empty | StringConcatenation.cs:7:20:7:23 | null | non-empty | -| StringConcatenation.cs:8:9:8:9 | access to local variable s | non-null | StringConcatenation.cs:7:20:7:23 | null | non-null | -| StringConcatenation.cs:8:9:8:9 | access to local variable s | null | StringConcatenation.cs:7:20:7:23 | null | null | -| StringConcatenation.cs:8:9:8:18 | ... + ... | non-null | StringConcatenation.cs:8:9:8:9 | access to local variable s | non-null | -| StringConcatenation.cs:8:9:8:18 | ... + ... | non-null | StringConcatenation.cs:8:14:8:18 | "abc" | non-null | -| StringConcatenation.cs:8:9:8:18 | ... + ... | null | StringConcatenation.cs:8:9:8:9 | access to local variable s | null | -| StringConcatenation.cs:8:9:8:18 | ... = ... | empty | StringConcatenation.cs:8:9:8:9 | access to local variable s | empty | -| StringConcatenation.cs:8:9:8:18 | ... = ... | empty | StringConcatenation.cs:8:9:8:18 | ... + ... | empty | -| StringConcatenation.cs:8:9:8:18 | ... = ... | non-empty | StringConcatenation.cs:8:9:8:9 | access to local variable s | non-empty | -| StringConcatenation.cs:8:9:8:18 | ... = ... | non-empty | StringConcatenation.cs:8:9:8:18 | ... + ... | non-empty | -| StringConcatenation.cs:8:9:8:18 | ... = ... | non-null | StringConcatenation.cs:8:9:8:9 | access to local variable s | non-null | -| StringConcatenation.cs:8:9:8:18 | ... = ... | non-null | StringConcatenation.cs:8:9:8:18 | ... + ... | non-null | -| StringConcatenation.cs:8:9:8:18 | ... = ... | null | StringConcatenation.cs:8:9:8:9 | access to local variable s | null | -| StringConcatenation.cs:8:9:8:18 | ... = ... | null | StringConcatenation.cs:8:9:8:18 | ... + ... | null | -| StringConcatenation.cs:9:13:9:13 | access to local variable s | empty | StringConcatenation.cs:8:9:8:18 | ... + ... | empty | -| StringConcatenation.cs:9:13:9:13 | access to local variable s | non-empty | StringConcatenation.cs:8:9:8:18 | ... + ... | non-empty | -| StringConcatenation.cs:9:13:9:13 | access to local variable s | non-null | StringConcatenation.cs:8:9:8:18 | ... + ... | non-null | -| StringConcatenation.cs:9:13:9:13 | access to local variable s | null | StringConcatenation.cs:8:9:8:18 | ... + ... | null | -| StringConcatenation.cs:15:16:15:22 | ... != ... | false | StringConcatenation.cs:15:16:15:16 | access to local variable s | non-null | -| StringConcatenation.cs:22:16:22:22 | ... != ... | false | StringConcatenation.cs:22:16:22:16 | access to local variable s | non-null | -| StringConcatenation.cs:23:13:23:22 | ... + ... | non-null | StringConcatenation.cs:23:13:23:13 | access to local variable s | non-null | -| StringConcatenation.cs:23:13:23:22 | ... + ... | non-null | StringConcatenation.cs:23:18:23:22 | "abc" | non-null | -| StringConcatenation.cs:23:13:23:22 | ... + ... | null | StringConcatenation.cs:23:13:23:13 | access to local variable s | null | -| StringConcatenation.cs:23:13:23:22 | ... = ... | empty | StringConcatenation.cs:23:13:23:13 | access to local variable s | empty | -| StringConcatenation.cs:23:13:23:22 | ... = ... | empty | StringConcatenation.cs:23:13:23:22 | ... + ... | empty | -| StringConcatenation.cs:23:13:23:22 | ... = ... | non-empty | StringConcatenation.cs:23:13:23:13 | access to local variable s | non-empty | -| StringConcatenation.cs:23:13:23:22 | ... = ... | non-empty | StringConcatenation.cs:23:13:23:22 | ... + ... | non-empty | -| StringConcatenation.cs:23:13:23:22 | ... = ... | non-null | StringConcatenation.cs:23:13:23:13 | access to local variable s | non-null | -| StringConcatenation.cs:23:13:23:22 | ... = ... | non-null | StringConcatenation.cs:23:13:23:22 | ... + ... | non-null | -| StringConcatenation.cs:23:13:23:22 | ... = ... | null | StringConcatenation.cs:23:13:23:13 | access to local variable s | null | -| StringConcatenation.cs:23:13:23:22 | ... = ... | null | StringConcatenation.cs:23:13:23:22 | ... + ... | null | -| StringConcatenation.cs:30:9:30:9 | access to local variable s | empty | StringConcatenation.cs:29:20:29:24 | "abc" | empty | -| StringConcatenation.cs:30:9:30:9 | access to local variable s | non-empty | StringConcatenation.cs:29:20:29:24 | "abc" | non-empty | -| StringConcatenation.cs:30:9:30:9 | access to local variable s | non-null | StringConcatenation.cs:29:20:29:24 | "abc" | non-null | -| StringConcatenation.cs:30:9:30:9 | access to local variable s | null | StringConcatenation.cs:29:20:29:24 | "abc" | null | -| StringConcatenation.cs:30:9:30:17 | ... + ... | non-null | StringConcatenation.cs:30:9:30:9 | access to local variable s | non-null | -| StringConcatenation.cs:30:9:30:17 | ... + ... | non-null | StringConcatenation.cs:30:14:30:17 | null | non-null | -| StringConcatenation.cs:30:9:30:17 | ... + ... | null | StringConcatenation.cs:30:14:30:17 | null | null | -| StringConcatenation.cs:30:9:30:17 | ... = ... | empty | StringConcatenation.cs:30:9:30:9 | access to local variable s | empty | -| StringConcatenation.cs:30:9:30:17 | ... = ... | empty | StringConcatenation.cs:30:9:30:17 | ... + ... | empty | -| StringConcatenation.cs:30:9:30:17 | ... = ... | non-empty | StringConcatenation.cs:30:9:30:9 | access to local variable s | non-empty | -| StringConcatenation.cs:30:9:30:17 | ... = ... | non-empty | StringConcatenation.cs:30:9:30:17 | ... + ... | non-empty | -| StringConcatenation.cs:30:9:30:17 | ... = ... | non-null | StringConcatenation.cs:30:9:30:9 | access to local variable s | non-null | -| StringConcatenation.cs:30:9:30:17 | ... = ... | non-null | StringConcatenation.cs:30:9:30:17 | ... + ... | non-null | -| StringConcatenation.cs:30:9:30:17 | ... = ... | null | StringConcatenation.cs:30:9:30:9 | access to local variable s | null | -| StringConcatenation.cs:30:9:30:17 | ... = ... | null | StringConcatenation.cs:30:9:30:17 | ... + ... | null | -| StringConcatenation.cs:31:13:31:13 | access to local variable s | empty | StringConcatenation.cs:30:9:30:17 | ... + ... | empty | -| StringConcatenation.cs:31:13:31:13 | access to local variable s | non-empty | StringConcatenation.cs:30:9:30:17 | ... + ... | non-empty | -| StringConcatenation.cs:31:13:31:13 | access to local variable s | non-null | StringConcatenation.cs:30:9:30:17 | ... + ... | non-null | -| StringConcatenation.cs:31:13:31:13 | access to local variable s | null | StringConcatenation.cs:30:9:30:17 | ... + ... | null | diff --git a/csharp/ql/test/query-tests/Nullness/Implications.ql b/csharp/ql/test/query-tests/Nullness/Implications.ql deleted file mode 100644 index 8f265616646..00000000000 --- a/csharp/ql/test/query-tests/Nullness/Implications.ql +++ /dev/null @@ -1,8 +0,0 @@ -import csharp -import semmle.code.csharp.controlflow.Guards - -query predicate impliesStep(Expr e1, AbstractValue v1, Expr e2, AbstractValue v2) { - e1.fromSource() and - e2.fromSource() and - Internal::impliesStep(e1, v1, e2, v2) -} diff --git a/csharp/ql/test/query-tests/Nullness/NullAlways.expected b/csharp/ql/test/query-tests/Nullness/NullAlways.expected index e2e594b2e2c..a633c4a1506 100644 --- a/csharp/ql/test/query-tests/Nullness/NullAlways.expected +++ b/csharp/ql/test/query-tests/Nullness/NullAlways.expected @@ -31,14 +31,13 @@ | D.cs:222:13:222:14 | access to local variable o4 | Variable $@ is always null at this dereference. | D.cs:220:13:220:14 | o4 | o4 | | D.cs:385:13:385:15 | access to local variable ioe | Variable $@ is always null at this dereference. | D.cs:378:19:378:21 | ioe | ioe | | E.cs:210:16:210:16 | access to parameter s | Variable $@ is always null at this dereference. | E.cs:206:28:206:28 | s | s | -| E.cs:220:13:220:13 | access to local variable x | Variable $@ is always null at this dereference. | E.cs:215:13:215:13 | x | x | -| E.cs:229:13:229:13 | access to local variable x | Variable $@ is always null at this dereference. | E.cs:225:13:225:13 | x | x | | E.cs:323:13:323:14 | access to parameter s1 | Variable $@ is always null at this dereference. | E.cs:319:29:319:30 | s1 | s1 | | E.cs:324:13:324:14 | access to parameter s2 | Variable $@ is always null at this dereference. | E.cs:319:40:319:41 | s2 | s2 | | E.cs:331:9:331:9 | access to local variable x | Variable $@ is always null at this dereference. | E.cs:330:13:330:13 | x | x | | E.cs:405:16:405:16 | access to local variable i | Variable $@ is always null at this dereference. | E.cs:403:14:403:14 | i | i | | E.cs:439:13:439:13 | access to parameter s | Variable $@ is always null at this dereference. | E.cs:435:29:435:29 | s | s | | F.cs:8:9:8:9 | access to local variable o | Variable $@ is always null at this dereference. | F.cs:7:16:7:16 | o | o | +| Forwarding.cs:31:31:31:31 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | Forwarding.cs:36:31:36:31 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | Forwarding.cs:40:27:40:27 | access to local variable s | Variable $@ is always null at this dereference. | Forwarding.cs:7:16:7:16 | s | s | | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | Variable $@ is always null at this dereference. | NullAlwaysBad.cs:7:29:7:29 | s | s | diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.expected b/csharp/ql/test/query-tests/Nullness/NullCheck.expected index 600699b6156..ada1054f02c 100644 --- a/csharp/ql/test/query-tests/Nullness/NullCheck.expected +++ b/csharp/ql/test/query-tests/Nullness/NullCheck.expected @@ -1,355 +1,149 @@ -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | false | true | -| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | true | false | -| Assert.cs:14:23:14:23 | access to local variable s | Assert.cs:14:23:14:23 | access to local variable s | non-null | false | -| Assert.cs:14:23:14:23 | access to local variable s | Assert.cs:14:23:14:23 | access to local variable s | null | true | -| Assert.cs:18:26:18:26 | access to local variable s | Assert.cs:18:26:18:26 | access to local variable s | non-null | false | -| Assert.cs:18:26:18:26 | access to local variable s | Assert.cs:18:26:18:26 | access to local variable s | null | true | -| Assert.cs:22:23:22:31 | ... == ... | Assert.cs:22:23:22:23 | access to local variable s | false | false | -| Assert.cs:22:23:22:31 | ... == ... | Assert.cs:22:23:22:23 | access to local variable s | true | true | -| Assert.cs:26:23:26:31 | ... != ... | Assert.cs:26:23:26:23 | access to local variable s | false | true | -| Assert.cs:26:23:26:31 | ... != ... | Assert.cs:26:23:26:23 | access to local variable s | true | false | -| Assert.cs:30:24:30:32 | ... != ... | Assert.cs:30:24:30:24 | access to local variable s | false | true | -| Assert.cs:30:24:30:32 | ... != ... | Assert.cs:30:24:30:24 | access to local variable s | true | false | -| Assert.cs:34:24:34:32 | ... == ... | Assert.cs:34:24:34:24 | access to local variable s | false | false | -| Assert.cs:34:24:34:32 | ... == ... | Assert.cs:34:24:34:24 | access to local variable s | true | true | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | false | true | -| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | true | false | -| Assert.cs:42:24:42:32 | ... == ... | Assert.cs:42:24:42:24 | access to local variable s | false | false | -| Assert.cs:42:24:42:32 | ... == ... | Assert.cs:42:24:42:24 | access to local variable s | true | true | -| Assert.cs:46:23:46:31 | ... == ... | Assert.cs:46:23:46:23 | access to local variable s | false | false | -| Assert.cs:46:23:46:31 | ... == ... | Assert.cs:46:23:46:23 | access to local variable s | true | true | -| Assert.cs:50:24:50:32 | ... != ... | Assert.cs:50:24:50:24 | access to local variable s | false | true | -| Assert.cs:50:24:50:32 | ... != ... | Assert.cs:50:24:50:24 | access to local variable s | true | false | -| B.cs:12:13:12:32 | call to operator == | B.cs:12:13:12:24 | access to local variable eqCallAlways | false | false | -| B.cs:12:13:12:32 | call to operator == | B.cs:12:13:12:24 | access to local variable eqCallAlways | true | true | -| B.cs:12:13:12:32 | call to operator == | B.cs:12:29:12:32 | null | false | false | -| B.cs:12:13:12:32 | call to operator == | B.cs:12:29:12:32 | null | true | true | -| B.cs:15:13:15:22 | call to operator != | B.cs:15:13:15:14 | access to local variable b2 | false | true | -| B.cs:15:13:15:22 | call to operator != | B.cs:15:13:15:14 | access to local variable b2 | true | false | -| B.cs:15:13:15:22 | call to operator != | B.cs:15:19:15:22 | null | false | true | -| B.cs:15:13:15:22 | call to operator != | B.cs:15:19:15:22 | null | true | false | -| B.cs:18:13:18:22 | call to operator == | B.cs:18:13:18:14 | access to local variable b3 | false | false | -| B.cs:18:13:18:22 | call to operator == | B.cs:18:13:18:14 | access to local variable b3 | true | true | -| B.cs:18:13:18:22 | call to operator == | B.cs:18:19:18:22 | null | false | false | -| B.cs:18:13:18:22 | call to operator == | B.cs:18:19:18:22 | null | true | true | -| B.cs:22:13:22:33 | call to operator != | B.cs:22:13:22:25 | access to local variable neqCallAlways | false | true | -| B.cs:22:13:22:33 | call to operator != | B.cs:22:13:22:25 | access to local variable neqCallAlways | true | false | -| B.cs:22:13:22:33 | call to operator != | B.cs:22:30:22:33 | null | false | true | -| B.cs:22:13:22:33 | call to operator != | B.cs:22:30:22:33 | null | true | false | -| B.cs:53:17:53:33 | ... != ... | B.cs:53:17:53:25 | (...) ... | false | true | -| B.cs:53:17:53:33 | ... != ... | B.cs:53:17:53:25 | (...) ... | true | false | -| B.cs:53:17:53:33 | ... != ... | B.cs:53:30:53:33 | null | false | true | -| B.cs:53:17:53:33 | ... != ... | B.cs:53:30:53:33 | null | true | false | -| B.cs:55:26:55:36 | call to method Equals | B.cs:55:26:55:26 | access to local variable o | false | false | -| B.cs:55:26:55:36 | call to method Equals | B.cs:55:26:55:26 | access to local variable o | true | true | -| B.cs:55:26:55:36 | call to method Equals | B.cs:55:35:55:35 | access to local variable o | false | false | -| B.cs:55:26:55:36 | call to method Equals | B.cs:55:35:55:35 | access to local variable o | true | true | -| C.cs:11:19:11:27 | ... == ... | C.cs:11:19:11:19 | access to local variable o | false | false | -| C.cs:11:19:11:27 | ... == ... | C.cs:11:19:11:19 | access to local variable o | true | true | -| C.cs:11:19:11:27 | ... == ... | C.cs:11:24:11:27 | null | false | false | -| C.cs:11:19:11:27 | ... == ... | C.cs:11:24:11:27 | null | true | true | -| C.cs:16:15:16:23 | ... != ... | C.cs:16:15:16:15 | access to local variable o | false | true | -| C.cs:16:15:16:23 | ... != ... | C.cs:16:15:16:15 | access to local variable o | true | false | -| C.cs:16:15:16:23 | ... != ... | C.cs:16:20:16:23 | null | false | true | -| C.cs:16:15:16:23 | ... != ... | C.cs:16:20:16:23 | null | true | false | -| C.cs:24:13:24:21 | ... != ... | C.cs:24:13:24:13 | access to parameter o | false | true | -| C.cs:24:13:24:21 | ... != ... | C.cs:24:13:24:13 | access to parameter o | true | false | -| C.cs:28:37:28:45 | ... == ... | C.cs:28:37:28:37 | access to parameter o | false | false | -| C.cs:28:37:28:45 | ... == ... | C.cs:28:37:28:37 | access to parameter o | true | true | -| C.cs:30:40:30:48 | ... != ... | C.cs:30:40:30:40 | access to parameter o | false | true | -| C.cs:30:40:30:48 | ... != ... | C.cs:30:40:30:40 | access to parameter o | true | false | -| C.cs:34:13:34:21 | ... == ... | C.cs:34:13:34:13 | access to parameter o | false | false | -| C.cs:34:13:34:21 | ... == ... | C.cs:34:13:34:13 | access to parameter o | true | true | -| C.cs:41:22:41:30 | ... == ... | C.cs:41:22:41:22 | access to local variable s | false | false | -| C.cs:41:22:41:30 | ... == ... | C.cs:41:22:41:22 | access to local variable s | true | true | -| C.cs:45:22:45:30 | ... != ... | C.cs:45:22:45:22 | access to local variable s | false | true | -| C.cs:45:22:45:30 | ... != ... | C.cs:45:22:45:22 | access to local variable s | true | false | -| C.cs:56:23:56:24 | access to local variable o2 | C.cs:56:23:56:24 | access to local variable o2 | non-null | false | -| C.cs:56:23:56:24 | access to local variable o2 | C.cs:56:23:56:24 | access to local variable o2 | null | true | -| C.cs:71:26:71:27 | access to local variable o3 | C.cs:71:26:71:27 | access to local variable o3 | non-null | false | -| C.cs:71:26:71:27 | access to local variable o3 | C.cs:71:26:71:27 | access to local variable o3 | null | true | -| C.cs:78:13:78:24 | call to method IsNotNull | C.cs:78:23:78:23 | access to local variable o | false | true | -| C.cs:78:13:78:24 | call to method IsNotNull | C.cs:78:23:78:23 | access to local variable o | true | false | -| C.cs:81:14:81:22 | call to method IsNull | C.cs:81:21:81:21 | access to local variable o | false | false | -| C.cs:81:14:81:22 | call to method IsNull | C.cs:81:21:81:21 | access to local variable o | true | true | -| C.cs:88:13:88:23 | ... is ... | C.cs:88:13:88:13 | access to local variable o | true | false | -| C.cs:113:22:113:36 | ... == ... | C.cs:113:22:113:28 | access to local variable colours | false | false | -| C.cs:113:22:113:36 | ... == ... | C.cs:113:22:113:28 | access to local variable colours | true | true | -| C.cs:113:22:113:36 | ... == ... | C.cs:113:33:113:36 | null | false | false | -| C.cs:113:22:113:36 | ... == ... | C.cs:113:33:113:36 | null | true | true | -| C.cs:120:13:120:28 | ... == ... | C.cs:120:13:120:20 | access to local variable children | false | false | -| C.cs:120:13:120:28 | ... == ... | C.cs:120:13:120:20 | access to local variable children | true | true | -| C.cs:120:13:120:28 | ... == ... | C.cs:120:25:120:28 | null | false | false | -| C.cs:120:13:120:28 | ... == ... | C.cs:120:25:120:28 | null | true | true | -| C.cs:129:13:129:38 | ... == ... | C.cs:129:14:129:29 | ... = ... | false | false | -| C.cs:129:13:129:38 | ... == ... | C.cs:129:14:129:29 | ... = ... | true | true | -| C.cs:129:13:129:38 | ... == ... | C.cs:129:35:129:38 | null | false | false | -| C.cs:129:13:129:38 | ... == ... | C.cs:129:35:129:38 | null | true | true | -| C.cs:145:13:145:39 | ... != ... | C.cs:145:14:145:30 | ... = ... | false | true | -| C.cs:145:13:145:39 | ... != ... | C.cs:145:14:145:30 | ... = ... | true | false | -| C.cs:145:13:145:39 | ... != ... | C.cs:145:36:145:39 | null | false | true | -| C.cs:145:13:145:39 | ... != ... | C.cs:145:36:145:39 | null | true | false | -| C.cs:157:16:157:24 | ... != ... | C.cs:157:16:157:16 | access to local variable s | false | true | -| C.cs:157:16:157:24 | ... != ... | C.cs:157:16:157:16 | access to local variable s | true | false | -| C.cs:157:16:157:24 | ... != ... | C.cs:157:21:157:24 | null | false | true | -| C.cs:157:16:157:24 | ... != ... | C.cs:157:21:157:24 | null | true | false | -| C.cs:165:16:165:24 | ... != ... | C.cs:165:16:165:16 | access to local variable s | false | true | -| C.cs:165:16:165:24 | ... != ... | C.cs:165:16:165:16 | access to local variable s | true | false | -| C.cs:165:16:165:24 | ... != ... | C.cs:165:21:165:24 | null | false | true | -| C.cs:165:16:165:24 | ... != ... | C.cs:165:21:165:24 | null | true | false | -| C.cs:172:16:172:24 | ... != ... | C.cs:172:16:172:16 | access to local variable s | false | true | -| C.cs:172:16:172:24 | ... != ... | C.cs:172:16:172:16 | access to local variable s | true | false | -| C.cs:172:16:172:24 | ... != ... | C.cs:172:21:172:24 | null | false | true | -| C.cs:172:16:172:24 | ... != ... | C.cs:172:21:172:24 | null | true | false | -| C.cs:186:16:186:24 | ... != ... | C.cs:186:16:186:16 | access to local variable s | false | true | -| C.cs:186:16:186:24 | ... != ... | C.cs:186:16:186:16 | access to local variable s | true | false | -| C.cs:211:13:211:21 | ... != ... | C.cs:211:13:211:13 | access to local variable s | false | true | -| C.cs:211:13:211:21 | ... != ... | C.cs:211:13:211:13 | access to local variable s | true | false | -| C.cs:217:13:217:21 | ... == ... | C.cs:217:13:217:13 | access to local variable s | false | false | -| C.cs:217:13:217:21 | ... == ... | C.cs:217:13:217:13 | access to local variable s | true | true | -| C.cs:221:13:221:21 | ... != ... | C.cs:221:13:221:13 | access to local variable s | false | true | -| C.cs:221:13:221:21 | ... != ... | C.cs:221:13:221:13 | access to local variable s | true | false | -| C.cs:221:13:221:21 | ... != ... | C.cs:221:18:221:21 | null | false | false | -| C.cs:229:22:229:30 | ... != ... | C.cs:229:22:229:22 | access to local variable s | false | true | -| C.cs:229:22:229:30 | ... != ... | C.cs:229:22:229:22 | access to local variable s | true | false | -| C.cs:235:24:235:32 | ... == ... | C.cs:235:24:235:24 | access to local variable s | false | false | -| C.cs:235:24:235:32 | ... == ... | C.cs:235:24:235:24 | access to local variable s | true | true | -| C.cs:235:24:235:32 | ... == ... | C.cs:235:29:235:32 | null | false | false | -| C.cs:235:24:235:32 | ... == ... | C.cs:235:29:235:32 | null | true | true | -| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | false | true | -| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | true | false | -| D.cs:37:13:37:23 | ... is ... | D.cs:37:13:37:13 | access to parameter x | true | false | -| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | false | false | -| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | true | true | -| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | false | false | -| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | true | true | -| D.cs:45:13:45:22 | ... != ... | D.cs:45:13:45:14 | access to local variable o1 | false | true | -| D.cs:45:13:45:22 | ... != ... | D.cs:45:13:45:14 | access to local variable o1 | true | false | -| D.cs:48:13:48:24 | ... is ... | D.cs:48:13:48:14 | access to local variable o2 | false | true | -| D.cs:48:13:48:24 | ... is ... | D.cs:48:13:48:14 | access to local variable o2 | true | false | -| D.cs:51:13:51:44 | ... != ... | D.cs:51:14:51:35 | ... = ... | false | true | -| D.cs:51:13:51:44 | ... != ... | D.cs:51:14:51:35 | ... = ... | true | false | -| D.cs:55:23:55:32 | ... != ... | D.cs:55:23:55:24 | access to local variable o4 | false | true | -| D.cs:55:23:55:32 | ... != ... | D.cs:55:23:55:24 | access to local variable o4 | true | false | -| D.cs:58:19:58:28 | ... != ... | D.cs:58:19:58:20 | access to local variable o4 | false | true | -| D.cs:58:19:58:28 | ... != ... | D.cs:58:19:58:20 | access to local variable o4 | true | false | -| D.cs:59:13:59:22 | ... != ... | D.cs:59:13:59:14 | access to local variable o5 | false | true | -| D.cs:59:13:59:22 | ... != ... | D.cs:59:13:59:14 | access to local variable o5 | true | false | -| D.cs:61:13:61:22 | ... != ... | D.cs:61:13:61:14 | access to local variable o4 | false | true | -| D.cs:61:13:61:22 | ... != ... | D.cs:61:13:61:14 | access to local variable o4 | true | false | -| D.cs:65:14:65:29 | call to method CustomIsNull | D.cs:65:27:65:28 | access to local variable o6 | false | false | -| D.cs:65:14:65:29 | call to method CustomIsNull | D.cs:65:27:65:28 | access to local variable o6 | true | true | -| D.cs:69:18:69:27 | ... != ... | D.cs:69:18:69:19 | access to local variable o7 | false | true | -| D.cs:69:18:69:27 | ... != ... | D.cs:69:18:69:19 | access to local variable o7 | true | false | -| D.cs:76:21:76:30 | ... == ... | D.cs:76:21:76:22 | access to local variable o8 | false | false | -| D.cs:76:21:76:30 | ... == ... | D.cs:76:21:76:22 | access to local variable o8 | true | true | -| D.cs:110:26:110:35 | ... != ... | D.cs:110:26:110:27 | access to local variable xs | false | true | -| D.cs:110:26:110:35 | ... != ... | D.cs:110:26:110:27 | access to local variable xs | true | false | -| D.cs:118:13:118:21 | ... == ... | D.cs:118:13:118:13 | access to local variable x | false | false | -| D.cs:118:13:118:21 | ... == ... | D.cs:118:13:118:13 | access to local variable x | true | true | -| D.cs:119:13:119:21 | ... == ... | D.cs:119:13:119:13 | access to local variable x | false | false | -| D.cs:119:13:119:21 | ... == ... | D.cs:119:13:119:13 | access to local variable x | true | true | -| D.cs:127:20:127:28 | ... == ... | D.cs:127:20:127:20 | access to parameter a | false | false | -| D.cs:127:20:127:28 | ... == ... | D.cs:127:20:127:20 | access to parameter a | true | true | -| D.cs:128:20:128:28 | ... == ... | D.cs:128:20:128:20 | access to parameter b | false | false | -| D.cs:128:20:128:28 | ... == ... | D.cs:128:20:128:20 | access to parameter b | true | true | -| D.cs:139:13:139:21 | ... != ... | D.cs:139:13:139:13 | access to parameter a | false | true | -| D.cs:139:13:139:21 | ... != ... | D.cs:139:13:139:13 | access to parameter a | true | false | -| D.cs:152:17:152:27 | ... != ... | D.cs:152:17:152:19 | access to parameter obj | false | true | -| D.cs:152:17:152:27 | ... != ... | D.cs:152:17:152:19 | access to parameter obj | true | false | -| D.cs:196:13:196:21 | ... == ... | D.cs:196:13:196:13 | access to local variable o | false | false | -| D.cs:196:13:196:21 | ... == ... | D.cs:196:13:196:13 | access to local variable o | true | true | -| D.cs:196:13:196:21 | ... == ... | D.cs:196:18:196:21 | null | true | false | -| D.cs:206:17:206:25 | ... == ... | D.cs:206:17:206:17 | access to local variable e | false | false | -| D.cs:206:17:206:25 | ... == ... | D.cs:206:17:206:17 | access to local variable e | true | true | -| D.cs:212:18:212:26 | ... == ... | D.cs:212:18:212:18 | access to local variable n | false | false | -| D.cs:212:18:212:26 | ... == ... | D.cs:212:18:212:18 | access to local variable n | true | true | -| D.cs:212:18:212:26 | ... == ... | D.cs:212:23:212:26 | null | false | false | -| D.cs:212:18:212:26 | ... == ... | D.cs:212:23:212:26 | null | true | true | -| D.cs:216:13:216:22 | ... == ... | D.cs:216:13:216:14 | access to local variable o3 | false | false | -| D.cs:216:13:216:22 | ... == ... | D.cs:216:13:216:14 | access to local variable o3 | true | true | -| D.cs:216:13:216:22 | ... == ... | D.cs:216:19:216:22 | null | true | false | -| D.cs:221:13:221:22 | ... == ... | D.cs:221:13:221:14 | access to local variable o4 | false | false | -| D.cs:221:13:221:22 | ... == ... | D.cs:221:13:221:14 | access to local variable o4 | true | true | -| D.cs:221:13:221:22 | ... == ... | D.cs:221:19:221:22 | null | true | false | -| D.cs:242:13:242:25 | ... == ... | D.cs:242:13:242:17 | access to local variable other | false | false | -| D.cs:242:13:242:25 | ... == ... | D.cs:242:13:242:17 | access to local variable other | true | true | -| D.cs:244:13:244:25 | ... != ... | D.cs:244:13:244:17 | access to local variable other | false | true | -| D.cs:244:13:244:25 | ... != ... | D.cs:244:13:244:17 | access to local variable other | true | false | -| D.cs:266:13:266:27 | ... is ... | D.cs:266:13:266:17 | access to local variable other | true | false | -| D.cs:336:13:336:23 | ... == ... | D.cs:336:13:336:15 | access to parameter obj | false | false | -| D.cs:336:13:336:23 | ... == ... | D.cs:336:13:336:15 | access to parameter obj | true | true | -| D.cs:341:13:341:23 | ... != ... | D.cs:341:13:341:15 | access to local variable msg | false | true | -| D.cs:341:13:341:23 | ... != ... | D.cs:341:13:341:15 | access to local variable msg | true | false | -| D.cs:367:27:367:35 | ... == ... | D.cs:367:27:367:27 | access to local variable b | false | false | -| D.cs:367:27:367:35 | ... == ... | D.cs:367:27:367:27 | access to local variable b | true | true | -| D.cs:382:13:382:23 | ... != ... | D.cs:382:13:382:15 | access to local variable ioe | false | true | -| D.cs:382:13:382:23 | ... != ... | D.cs:382:13:382:15 | access to local variable ioe | true | false | -| D.cs:390:20:390:28 | ... == ... | D.cs:390:20:390:20 | access to parameter a | false | false | -| D.cs:390:20:390:28 | ... == ... | D.cs:390:20:390:20 | access to parameter a | true | true | -| D.cs:397:20:397:28 | ... == ... | D.cs:397:20:397:20 | access to parameter b | false | false | -| D.cs:397:20:397:28 | ... == ... | D.cs:397:20:397:20 | access to parameter b | true | true | -| D.cs:407:14:407:22 | ... != ... | D.cs:407:14:407:14 | access to parameter x | false | true | -| D.cs:407:14:407:22 | ... != ... | D.cs:407:14:407:14 | access to parameter x | true | false | -| D.cs:407:27:407:35 | ... == ... | D.cs:407:27:407:27 | access to parameter y | false | false | -| D.cs:407:27:407:35 | ... == ... | D.cs:407:27:407:27 | access to parameter y | true | true | -| D.cs:407:42:407:50 | ... == ... | D.cs:407:42:407:42 | access to parameter x | false | false | -| D.cs:407:42:407:50 | ... == ... | D.cs:407:42:407:42 | access to parameter x | true | true | -| D.cs:407:55:407:63 | ... != ... | D.cs:407:55:407:55 | access to parameter y | false | true | -| D.cs:407:55:407:63 | ... != ... | D.cs:407:55:407:55 | access to parameter y | true | false | -| D.cs:409:13:409:21 | ... != ... | D.cs:409:13:409:13 | access to parameter x | false | true | -| D.cs:409:13:409:21 | ... != ... | D.cs:409:13:409:13 | access to parameter x | true | false | -| D.cs:411:13:411:21 | ... != ... | D.cs:411:13:411:13 | access to parameter y | false | true | -| D.cs:411:13:411:21 | ... != ... | D.cs:411:13:411:13 | access to parameter y | true | false | -| E.cs:10:34:10:54 | ... != ... | E.cs:10:35:10:45 | ... = ... | false | true | -| E.cs:10:34:10:54 | ... != ... | E.cs:10:35:10:45 | ... = ... | true | false | -| E.cs:12:32:12:52 | ... != ... | E.cs:12:33:12:43 | ... = ... | false | true | -| E.cs:12:32:12:52 | ... != ... | E.cs:12:33:12:43 | ... = ... | true | false | -| E.cs:20:19:20:28 | ... == ... | E.cs:20:19:20:20 | access to local variable s1 | false | false | -| E.cs:20:19:20:28 | ... == ... | E.cs:20:19:20:20 | access to local variable s1 | true | true | -| E.cs:21:13:21:22 | ... == ... | E.cs:21:13:21:14 | access to local variable s2 | false | false | -| E.cs:21:13:21:22 | ... == ... | E.cs:21:13:21:14 | access to local variable s2 | true | true | -| E.cs:24:19:24:28 | ... == ... | E.cs:24:19:24:20 | access to local variable s1 | false | false | -| E.cs:24:19:24:28 | ... == ... | E.cs:24:19:24:20 | access to local variable s1 | true | true | -| E.cs:26:13:26:22 | ... != ... | E.cs:26:13:26:14 | access to local variable s2 | false | true | -| E.cs:26:13:26:22 | ... != ... | E.cs:26:13:26:14 | access to local variable s2 | true | false | -| E.cs:70:22:70:32 | ... == ... | E.cs:70:22:70:24 | access to parameter arr | false | false | -| E.cs:70:22:70:32 | ... == ... | E.cs:70:22:70:24 | access to parameter arr | true | true | -| E.cs:83:13:83:24 | ... != ... | E.cs:83:13:83:16 | access to parameter vals | false | true | -| E.cs:83:13:83:24 | ... != ... | E.cs:83:13:83:16 | access to parameter vals | true | false | -| E.cs:85:18:85:29 | ... != ... | E.cs:85:18:85:21 | access to parameter vals | false | true | -| E.cs:85:18:85:29 | ... != ... | E.cs:85:18:85:21 | access to parameter vals | true | false | -| E.cs:153:13:153:24 | ... != ... | E.cs:153:13:153:16 | access to local variable obj2 | false | true | -| E.cs:153:13:153:24 | ... != ... | E.cs:153:13:153:16 | access to local variable obj2 | true | false | -| E.cs:164:17:164:25 | ... == ... | E.cs:164:17:164:17 | access to parameter a | false | false | -| E.cs:164:17:164:25 | ... == ... | E.cs:164:17:164:17 | access to parameter a | true | true | -| E.cs:175:19:175:29 | ... == ... | E.cs:175:19:175:21 | access to parameter obj | false | false | -| E.cs:175:19:175:29 | ... == ... | E.cs:175:19:175:21 | access to parameter obj | true | true | -| E.cs:176:13:176:22 | ... == ... | E.cs:176:13:176:14 | (...) ... | false | false | -| E.cs:176:13:176:22 | ... == ... | E.cs:176:13:176:14 | (...) ... | true | true | -| E.cs:176:13:176:22 | ... == ... | E.cs:176:19:176:22 | null | true | false | -| E.cs:180:13:180:23 | ... == ... | E.cs:180:13:180:15 | access to parameter obj | false | false | -| E.cs:180:13:180:23 | ... == ... | E.cs:180:13:180:15 | access to parameter obj | true | true | -| E.cs:184:13:184:22 | ... == ... | E.cs:184:13:184:14 | (...) ... | false | false | -| E.cs:184:13:184:22 | ... == ... | E.cs:184:13:184:14 | (...) ... | true | true | -| E.cs:184:13:184:22 | ... == ... | E.cs:184:19:184:22 | null | true | false | -| E.cs:193:17:193:17 | access to parameter o | E.cs:193:17:193:17 | access to parameter o | non-null | false | -| E.cs:193:17:193:17 | access to parameter o | E.cs:193:17:193:17 | access to parameter o | null | true | -| E.cs:208:13:208:23 | ... is ... | E.cs:208:13:208:13 | access to parameter s | false | true | -| E.cs:208:13:208:23 | ... is ... | E.cs:208:13:208:13 | access to parameter s | true | false | -| E.cs:245:13:245:22 | access to property HasValue | E.cs:245:13:245:13 | access to parameter i | false | true | -| E.cs:245:13:245:22 | access to property HasValue | E.cs:245:13:245:13 | access to parameter i | true | false | -| E.cs:252:13:252:21 | ... != ... | E.cs:252:13:252:13 | access to parameter i | false | true | -| E.cs:252:13:252:21 | ... != ... | E.cs:252:13:252:13 | access to parameter i | true | false | -| E.cs:259:13:259:21 | ... == ... | E.cs:259:13:259:13 | access to parameter i | false | false | -| E.cs:259:13:259:21 | ... == ... | E.cs:259:13:259:13 | access to parameter i | true | true | -| E.cs:274:17:274:25 | ... != ... | E.cs:274:17:274:17 | access to local variable o | false | true | -| E.cs:274:17:274:25 | ... != ... | E.cs:274:17:274:17 | access to local variable o | true | false | -| E.cs:284:9:284:9 | access to local variable o | E.cs:284:9:284:9 | access to local variable o | non-null | false | -| E.cs:284:9:284:9 | access to local variable o | E.cs:284:9:284:9 | access to local variable o | null | true | -| E.cs:293:13:293:13 | access to local variable s | E.cs:293:13:293:13 | access to local variable s | non-null | false | -| E.cs:293:13:293:13 | access to local variable s | E.cs:293:13:293:13 | access to local variable s | null | true | -| E.cs:293:13:293:24 | ... == ... | E.cs:293:13:293:19 | call to method M2 | true | false | -| E.cs:306:31:306:31 | access to field l | E.cs:306:31:306:31 | access to field l | non-null | false | -| E.cs:306:31:306:31 | access to field l | E.cs:306:31:306:31 | access to field l | null | true | -| E.cs:309:13:309:22 | access to property HasValue | E.cs:309:13:309:13 | access to field l | false | true | -| E.cs:309:13:309:22 | access to property HasValue | E.cs:309:13:309:13 | access to field l | true | false | -| E.cs:321:13:321:30 | ... is ... | E.cs:321:14:321:21 | ... ?? ... | false | false | -| E.cs:321:13:321:30 | ... is ... | E.cs:321:14:321:21 | ... ?? ... | true | true | -| E.cs:321:14:321:15 | access to parameter s1 | E.cs:321:14:321:15 | access to parameter s1 | non-null | false | -| E.cs:321:14:321:15 | access to parameter s1 | E.cs:321:14:321:15 | access to parameter s1 | null | true | -| E.cs:330:17:330:28 | (...) ... | E.cs:330:17:330:28 | (...) ... | null | true | -| E.cs:336:17:336:17 | access to parameter s | E.cs:336:17:336:17 | access to parameter s | non-null | false | -| E.cs:336:17:336:17 | access to parameter s | E.cs:336:17:336:17 | access to parameter s | null | true | -| E.cs:342:17:342:17 | access to parameter s | E.cs:342:17:342:17 | access to parameter s | non-null | false | -| E.cs:342:17:342:17 | access to parameter s | E.cs:342:17:342:17 | access to parameter s | null | true | -| E.cs:348:21:348:21 | access to parameter s | E.cs:348:21:348:21 | access to parameter s | non-null | false | -| E.cs:348:21:348:21 | access to parameter s | E.cs:348:21:348:21 | access to parameter s | null | true | -| E.cs:354:21:354:21 | access to parameter s | E.cs:354:21:354:21 | access to parameter s | non-null | false | -| E.cs:354:21:354:21 | access to parameter s | E.cs:354:21:354:21 | access to parameter s | null | true | -| E.cs:355:13:355:21 | dynamic call to operator != | E.cs:355:13:355:13 | access to local variable x | false | true | -| E.cs:355:13:355:21 | dynamic call to operator != | E.cs:355:13:355:13 | access to local variable x | true | false | -| E.cs:361:17:361:17 | access to parameter s | E.cs:361:17:361:17 | access to parameter s | non-null | false | -| E.cs:361:17:361:17 | access to parameter s | E.cs:361:17:361:17 | access to parameter s | null | true | -| E.cs:362:13:362:29 | ... != ... | E.cs:362:13:362:13 | access to local variable x | false | true | -| E.cs:362:13:362:29 | ... != ... | E.cs:362:13:362:13 | access to local variable x | true | false | -| E.cs:372:13:372:23 | ... is ... | E.cs:372:13:372:13 | access to parameter o | true | false | -| E.cs:382:14:382:23 | ... == ... | E.cs:382:14:382:15 | access to parameter e1 | false | false | -| E.cs:382:14:382:23 | ... == ... | E.cs:382:14:382:15 | access to parameter e1 | true | true | -| E.cs:382:28:382:37 | ... != ... | E.cs:382:28:382:29 | access to parameter e2 | false | true | -| E.cs:382:28:382:37 | ... != ... | E.cs:382:28:382:29 | access to parameter e2 | true | false | -| E.cs:382:44:382:53 | ... != ... | E.cs:382:44:382:45 | access to parameter e1 | false | true | -| E.cs:382:44:382:53 | ... != ... | E.cs:382:44:382:45 | access to parameter e1 | true | false | -| E.cs:382:58:382:67 | ... == ... | E.cs:382:58:382:59 | access to parameter e2 | false | false | -| E.cs:382:58:382:67 | ... == ... | E.cs:382:58:382:59 | access to parameter e2 | true | true | -| E.cs:384:13:384:22 | ... == ... | E.cs:384:13:384:14 | access to parameter e1 | false | false | -| E.cs:384:13:384:22 | ... == ... | E.cs:384:13:384:14 | access to parameter e1 | true | true | -| E.cs:384:27:384:36 | ... == ... | E.cs:384:27:384:28 | access to parameter e2 | false | false | -| E.cs:384:27:384:36 | ... == ... | E.cs:384:27:384:28 | access to parameter e2 | true | true | -| E.cs:391:9:391:9 | access to parameter i | E.cs:391:9:391:9 | access to parameter i | non-null | false | -| E.cs:391:9:391:9 | access to parameter i | E.cs:391:9:391:9 | access to parameter i | null | true | -| E.cs:397:9:397:13 | access to parameter color | E.cs:397:9:397:13 | access to parameter color | non-null | false | -| E.cs:397:9:397:13 | access to parameter color | E.cs:397:9:397:13 | access to parameter color | null | true | -| E.cs:404:9:404:9 | access to local variable i | E.cs:404:9:404:9 | access to local variable i | non-null | false | -| E.cs:404:9:404:9 | access to local variable i | E.cs:404:9:404:9 | access to local variable i | null | true | -| E.cs:411:9:411:9 | access to local variable i | E.cs:411:9:411:9 | access to local variable i | non-null | false | -| E.cs:411:9:411:9 | access to local variable i | E.cs:411:9:411:9 | access to local variable i | null | true | -| E.cs:422:13:422:22 | access to property HasValue | E.cs:422:13:422:13 | access to parameter i | false | true | -| E.cs:422:13:422:22 | access to property HasValue | E.cs:422:13:422:13 | access to parameter i | true | false | -| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | false | true | -| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | true | false | -| E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | false | false | -| E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | true | true | -| E.cs:442:13:442:29 | ... is ... | E.cs:442:13:442:13 | access to parameter s | true | false | -| E.cs:447:13:447:25 | ... is ... | E.cs:447:13:447:13 | access to parameter s | true | false | -| E.cs:452:13:452:23 | ... is ... | E.cs:452:13:452:13 | access to parameter s | true | false | -| Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | Forwarding.cs:9:14:9:14 | access to local variable s | false | false | -| Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | Forwarding.cs:14:13:14:13 | access to local variable s | true | false | -| Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | false | false | -| Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | true | true | -| Forwarding.cs:24:13:24:25 | call to method IsNotNull | Forwarding.cs:24:13:24:13 | access to local variable s | false | true | -| Forwarding.cs:24:13:24:25 | call to method IsNotNull | Forwarding.cs:24:13:24:13 | access to local variable s | true | false | -| Forwarding.cs:29:13:29:24 | call to method IsNotNull | Forwarding.cs:29:23:29:23 | access to local variable s | true | false | -| Forwarding.cs:34:13:34:29 | call to method IsNotNullWrong | Forwarding.cs:34:28:34:28 | access to local variable s | false | false | -| Forwarding.cs:45:16:45:26 | ... is ... | Forwarding.cs:45:16:45:16 | access to parameter o | true | false | -| Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | Forwarding.cs:45:52:45:60 | (...) ... | false | false | -| Forwarding.cs:45:66:45:75 | call to method IsNull | Forwarding.cs:45:66:45:66 | access to parameter o | false | false | -| Forwarding.cs:45:66:45:75 | call to method IsNull | Forwarding.cs:45:66:45:66 | access to parameter o | true | true | -| Forwarding.cs:50:13:50:23 | ... is ... | Forwarding.cs:50:13:50:13 | access to parameter o | true | false | -| Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | Forwarding.cs:52:42:52:50 | (...) ... | false | false | -| Forwarding.cs:59:13:59:21 | ... == ... | Forwarding.cs:59:13:59:13 | access to parameter o | false | false | -| Forwarding.cs:59:13:59:21 | ... == ... | Forwarding.cs:59:13:59:13 | access to parameter o | true | true | -| Forwarding.cs:68:16:68:38 | call to method IsNullOrEmpty | Forwarding.cs:68:37:68:37 | access to parameter s | false | false | -| Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | Forwarding.cs:73:38:73:38 | access to parameter s | false | false | -| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | Forwarding.cs:78:32:78:32 | access to parameter o | false | false | -| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | Forwarding.cs:78:32:78:32 | access to parameter o | true | true | -| Forwarding.cs:83:16:83:24 | ... != ... | Forwarding.cs:83:16:83:16 | access to parameter o | false | true | -| Forwarding.cs:83:16:83:24 | ... != ... | Forwarding.cs:83:16:83:16 | access to parameter o | true | false | -| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | GuardedString.cs:9:35:9:35 | access to local variable s | false | false | -| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | GuardedString.cs:14:40:14:40 | access to local variable s | false | false | -| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | non-null | false | -| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | null | true | -| GuardedString.cs:19:13:19:26 | ... == ... | GuardedString.cs:19:13:19:21 | access to property Length | true | false | -| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | non-null | false | -| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | null | true | -| GuardedString.cs:22:13:22:25 | ... > ... | GuardedString.cs:22:13:22:21 | access to property Length | true | false | -| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | non-null | false | -| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | null | true | -| GuardedString.cs:25:13:25:26 | ... >= ... | GuardedString.cs:25:13:25:21 | access to property Length | true | false | -| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | non-null | false | -| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | null | true | -| GuardedString.cs:28:13:28:26 | ... < ... | GuardedString.cs:28:13:28:21 | access to property Length | true | false | -| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | non-null | false | -| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | null | true | -| GuardedString.cs:31:13:31:27 | ... <= ... | GuardedString.cs:31:13:31:21 | access to property Length | true | false | -| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | non-null | false | -| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | null | true | -| GuardedString.cs:34:13:34:26 | ... != ... | GuardedString.cs:34:13:34:21 | access to property Length | false | false | -| NullAlwaysBad.cs:9:17:9:25 | ... != ... | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | false | true | -| NullAlwaysBad.cs:9:17:9:25 | ... != ... | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | true | false | -| NullAlwaysGood.cs:9:17:9:25 | ... != ... | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | false | true | -| NullAlwaysGood.cs:9:17:9:25 | ... != ... | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | true | false | -| NullMaybeGood.cs:7:13:7:21 | ... != ... | NullMaybeGood.cs:7:13:7:13 | access to parameter o | false | true | -| NullMaybeGood.cs:7:13:7:21 | ... != ... | NullMaybeGood.cs:7:13:7:13 | access to parameter o | true | false | -| StringConcatenation.cs:15:16:15:22 | ... != ... | StringConcatenation.cs:15:16:15:16 | access to local variable s | false | false | -| StringConcatenation.cs:22:16:22:22 | ... != ... | StringConcatenation.cs:22:16:22:16 | access to local variable s | false | false | +| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | +| Assert.cs:22:23:22:31 | ... == ... | Assert.cs:22:23:22:23 | access to local variable s | +| Assert.cs:26:23:26:31 | ... != ... | Assert.cs:26:23:26:23 | access to local variable s | +| Assert.cs:30:24:30:32 | ... != ... | Assert.cs:30:24:30:24 | access to local variable s | +| Assert.cs:34:24:34:32 | ... == ... | Assert.cs:34:24:34:24 | access to local variable s | +| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | +| Assert.cs:42:24:42:32 | ... == ... | Assert.cs:42:24:42:24 | access to local variable s | +| Assert.cs:46:23:46:31 | ... == ... | Assert.cs:46:23:46:23 | access to local variable s | +| Assert.cs:50:24:50:32 | ... != ... | Assert.cs:50:24:50:24 | access to local variable s | +| B.cs:12:13:12:32 | call to operator == | B.cs:12:13:12:24 | access to local variable eqCallAlways | +| B.cs:12:13:12:32 | call to operator == | B.cs:12:29:12:32 | null | +| B.cs:15:13:15:22 | call to operator != | B.cs:15:13:15:14 | access to local variable b2 | +| B.cs:15:13:15:22 | call to operator != | B.cs:15:19:15:22 | null | +| B.cs:18:13:18:22 | call to operator == | B.cs:18:13:18:14 | access to local variable b3 | +| B.cs:18:13:18:22 | call to operator == | B.cs:18:19:18:22 | null | +| B.cs:22:13:22:33 | call to operator != | B.cs:22:13:22:25 | access to local variable neqCallAlways | +| B.cs:22:13:22:33 | call to operator != | B.cs:22:30:22:33 | null | +| B.cs:53:17:53:33 | ... != ... | B.cs:53:17:53:25 | (...) ... | +| B.cs:53:17:53:33 | ... != ... | B.cs:53:30:53:33 | null | +| B.cs:55:26:55:36 | call to method Equals | B.cs:55:26:55:26 | access to local variable o | +| B.cs:55:26:55:36 | call to method Equals | B.cs:55:35:55:35 | access to local variable o | +| C.cs:11:19:11:27 | ... == ... | C.cs:11:19:11:19 | access to local variable o | +| C.cs:11:19:11:27 | ... == ... | C.cs:11:24:11:27 | null | +| C.cs:16:15:16:23 | ... != ... | C.cs:16:15:16:15 | access to local variable o | +| C.cs:16:15:16:23 | ... != ... | C.cs:16:20:16:23 | null | +| C.cs:24:13:24:21 | ... != ... | C.cs:24:13:24:13 | access to parameter o | +| C.cs:28:37:28:45 | ... == ... | C.cs:28:37:28:37 | access to parameter o | +| C.cs:30:40:30:48 | ... != ... | C.cs:30:40:30:40 | access to parameter o | +| C.cs:34:13:34:21 | ... == ... | C.cs:34:13:34:13 | access to parameter o | +| C.cs:41:22:41:30 | ... == ... | C.cs:41:22:41:22 | access to local variable s | +| C.cs:45:22:45:30 | ... != ... | C.cs:45:22:45:22 | access to local variable s | +| C.cs:78:13:78:24 | call to method IsNotNull | C.cs:78:23:78:23 | access to local variable o | +| C.cs:81:14:81:22 | call to method IsNull | C.cs:81:21:81:21 | access to local variable o | +| C.cs:113:22:113:36 | ... == ... | C.cs:113:22:113:28 | access to local variable colours | +| C.cs:113:22:113:36 | ... == ... | C.cs:113:33:113:36 | null | +| C.cs:120:13:120:28 | ... == ... | C.cs:120:13:120:20 | access to local variable children | +| C.cs:120:13:120:28 | ... == ... | C.cs:120:25:120:28 | null | +| C.cs:129:13:129:38 | ... == ... | C.cs:129:14:129:29 | ... = ... | +| C.cs:129:13:129:38 | ... == ... | C.cs:129:35:129:38 | null | +| C.cs:145:13:145:39 | ... != ... | C.cs:145:14:145:30 | ... = ... | +| C.cs:145:13:145:39 | ... != ... | C.cs:145:36:145:39 | null | +| C.cs:157:16:157:24 | ... != ... | C.cs:157:16:157:16 | access to local variable s | +| C.cs:157:16:157:24 | ... != ... | C.cs:157:21:157:24 | null | +| C.cs:165:16:165:24 | ... != ... | C.cs:165:16:165:16 | access to local variable s | +| C.cs:165:16:165:24 | ... != ... | C.cs:165:21:165:24 | null | +| C.cs:172:16:172:24 | ... != ... | C.cs:172:16:172:16 | access to local variable s | +| C.cs:172:16:172:24 | ... != ... | C.cs:172:21:172:24 | null | +| C.cs:186:16:186:24 | ... != ... | C.cs:186:16:186:16 | access to local variable s | +| C.cs:211:13:211:21 | ... != ... | C.cs:211:13:211:13 | access to local variable s | +| C.cs:217:13:217:21 | ... == ... | C.cs:217:13:217:13 | access to local variable s | +| C.cs:229:22:229:30 | ... != ... | C.cs:229:22:229:22 | access to local variable s | +| C.cs:235:24:235:32 | ... == ... | C.cs:235:24:235:24 | access to local variable s | +| C.cs:235:24:235:32 | ... == ... | C.cs:235:29:235:32 | null | +| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | +| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | +| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | +| D.cs:45:13:45:22 | ... != ... | D.cs:45:13:45:14 | access to local variable o1 | +| D.cs:48:13:48:24 | ... is ... | D.cs:48:13:48:14 | access to local variable o2 | +| D.cs:51:13:51:44 | ... != ... | D.cs:51:14:51:35 | ... = ... | +| D.cs:55:23:55:32 | ... != ... | D.cs:55:23:55:24 | access to local variable o4 | +| D.cs:58:19:58:28 | ... != ... | D.cs:58:19:58:20 | access to local variable o4 | +| D.cs:59:13:59:22 | ... != ... | D.cs:59:13:59:14 | access to local variable o5 | +| D.cs:61:13:61:22 | ... != ... | D.cs:61:13:61:14 | access to local variable o4 | +| D.cs:65:14:65:29 | call to method CustomIsNull | D.cs:65:27:65:28 | access to local variable o6 | +| D.cs:69:18:69:27 | ... != ... | D.cs:69:18:69:19 | access to local variable o7 | +| D.cs:76:21:76:30 | ... == ... | D.cs:76:21:76:22 | access to local variable o8 | +| D.cs:110:26:110:35 | ... != ... | D.cs:110:26:110:27 | access to local variable xs | +| D.cs:118:13:118:21 | ... == ... | D.cs:118:13:118:13 | access to local variable x | +| D.cs:119:13:119:21 | ... == ... | D.cs:119:13:119:13 | access to local variable x | +| D.cs:127:20:127:28 | ... == ... | D.cs:127:20:127:20 | access to parameter a | +| D.cs:128:20:128:28 | ... == ... | D.cs:128:20:128:20 | access to parameter b | +| D.cs:139:13:139:21 | ... != ... | D.cs:139:13:139:13 | access to parameter a | +| D.cs:152:17:152:27 | ... != ... | D.cs:152:17:152:19 | access to parameter obj | +| D.cs:206:17:206:25 | ... == ... | D.cs:206:17:206:17 | access to local variable e | +| D.cs:212:18:212:26 | ... == ... | D.cs:212:18:212:18 | access to local variable n | +| D.cs:212:18:212:26 | ... == ... | D.cs:212:23:212:26 | null | +| D.cs:242:13:242:25 | ... == ... | D.cs:242:13:242:17 | access to local variable other | +| D.cs:244:13:244:25 | ... != ... | D.cs:244:13:244:17 | access to local variable other | +| D.cs:336:13:336:23 | ... == ... | D.cs:336:13:336:15 | access to parameter obj | +| D.cs:341:13:341:23 | ... != ... | D.cs:341:13:341:15 | access to local variable msg | +| D.cs:367:27:367:35 | ... == ... | D.cs:367:27:367:27 | access to local variable b | +| D.cs:382:13:382:23 | ... != ... | D.cs:382:13:382:15 | access to local variable ioe | +| D.cs:390:20:390:28 | ... == ... | D.cs:390:20:390:20 | access to parameter a | +| D.cs:397:20:397:28 | ... == ... | D.cs:397:20:397:20 | access to parameter b | +| D.cs:407:14:407:22 | ... != ... | D.cs:407:14:407:14 | access to parameter x | +| D.cs:407:27:407:35 | ... == ... | D.cs:407:27:407:27 | access to parameter y | +| D.cs:407:42:407:50 | ... == ... | D.cs:407:42:407:42 | access to parameter x | +| D.cs:407:55:407:63 | ... != ... | D.cs:407:55:407:55 | access to parameter y | +| D.cs:409:13:409:21 | ... != ... | D.cs:409:13:409:13 | access to parameter x | +| D.cs:411:13:411:21 | ... != ... | D.cs:411:13:411:13 | access to parameter y | +| E.cs:10:34:10:54 | ... != ... | E.cs:10:35:10:45 | ... = ... | +| E.cs:12:32:12:52 | ... != ... | E.cs:12:33:12:43 | ... = ... | +| E.cs:20:19:20:28 | ... == ... | E.cs:20:19:20:20 | access to local variable s1 | +| E.cs:21:13:21:22 | ... == ... | E.cs:21:13:21:14 | access to local variable s2 | +| E.cs:24:19:24:28 | ... == ... | E.cs:24:19:24:20 | access to local variable s1 | +| E.cs:26:13:26:22 | ... != ... | E.cs:26:13:26:14 | access to local variable s2 | +| E.cs:70:22:70:32 | ... == ... | E.cs:70:22:70:24 | access to parameter arr | +| E.cs:83:13:83:24 | ... != ... | E.cs:83:13:83:16 | access to parameter vals | +| E.cs:85:18:85:29 | ... != ... | E.cs:85:18:85:21 | access to parameter vals | +| E.cs:153:13:153:24 | ... != ... | E.cs:153:13:153:16 | access to local variable obj2 | +| E.cs:164:17:164:25 | ... == ... | E.cs:164:17:164:17 | access to parameter a | +| E.cs:175:19:175:29 | ... == ... | E.cs:175:19:175:21 | access to parameter obj | +| E.cs:180:13:180:23 | ... == ... | E.cs:180:13:180:15 | access to parameter obj | +| E.cs:193:17:193:17 | access to parameter o | E.cs:193:17:193:17 | access to parameter o | +| E.cs:208:13:208:23 | ... is ... | E.cs:208:13:208:13 | access to parameter s | +| E.cs:245:13:245:22 | access to property HasValue | E.cs:245:13:245:13 | access to parameter i | +| E.cs:252:13:252:21 | ... != ... | E.cs:252:13:252:13 | access to parameter i | +| E.cs:259:13:259:21 | ... == ... | E.cs:259:13:259:13 | access to parameter i | +| E.cs:274:17:274:25 | ... != ... | E.cs:274:17:274:17 | access to local variable o | +| E.cs:284:9:284:9 | access to local variable o | E.cs:284:9:284:9 | access to local variable o | +| E.cs:293:13:293:13 | access to local variable s | E.cs:293:13:293:13 | access to local variable s | +| E.cs:306:31:306:31 | access to field l | E.cs:306:31:306:31 | access to field l | +| E.cs:309:13:309:22 | access to property HasValue | E.cs:309:13:309:13 | access to field l | +| E.cs:321:13:321:30 | ... is ... | E.cs:321:14:321:21 | ... ?? ... | +| E.cs:321:14:321:15 | access to parameter s1 | E.cs:321:14:321:15 | access to parameter s1 | +| E.cs:330:17:330:28 | (...) ... | E.cs:330:17:330:28 | (...) ... | +| E.cs:336:17:336:17 | access to parameter s | E.cs:336:17:336:17 | access to parameter s | +| E.cs:342:17:342:17 | access to parameter s | E.cs:342:17:342:17 | access to parameter s | +| E.cs:348:21:348:21 | access to parameter s | E.cs:348:21:348:21 | access to parameter s | +| E.cs:354:21:354:21 | access to parameter s | E.cs:354:21:354:21 | access to parameter s | +| E.cs:355:13:355:21 | dynamic call to operator != | E.cs:355:13:355:13 | access to local variable x | +| E.cs:361:17:361:17 | access to parameter s | E.cs:361:17:361:17 | access to parameter s | +| E.cs:362:13:362:29 | ... != ... | E.cs:362:13:362:13 | access to local variable x | +| E.cs:382:14:382:23 | ... == ... | E.cs:382:14:382:15 | access to parameter e1 | +| E.cs:382:28:382:37 | ... != ... | E.cs:382:28:382:29 | access to parameter e2 | +| E.cs:382:44:382:53 | ... != ... | E.cs:382:44:382:45 | access to parameter e1 | +| E.cs:382:58:382:67 | ... == ... | E.cs:382:58:382:59 | access to parameter e2 | +| E.cs:384:13:384:22 | ... == ... | E.cs:384:13:384:14 | access to parameter e1 | +| E.cs:384:27:384:36 | ... == ... | E.cs:384:27:384:28 | access to parameter e2 | +| E.cs:391:9:391:9 | access to parameter i | E.cs:391:9:391:9 | access to parameter i | +| E.cs:397:9:397:13 | access to parameter color | E.cs:397:9:397:13 | access to parameter color | +| E.cs:404:9:404:9 | access to local variable i | E.cs:404:9:404:9 | access to local variable i | +| E.cs:422:13:422:22 | access to property HasValue | E.cs:422:13:422:13 | access to parameter i | +| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | +| E.cs:437:23:437:31 | ... is ... | E.cs:437:23:437:23 | access to parameter s | +| E.cs:447:23:447:35 | ... is ... | E.cs:447:23:447:23 | access to parameter s | +| Forwarding.cs:45:66:45:75 | call to method IsNull | Forwarding.cs:45:66:45:66 | access to parameter o | +| Forwarding.cs:59:13:59:21 | ... == ... | Forwarding.cs:59:13:59:13 | access to parameter o | +| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | Forwarding.cs:78:32:78:32 | access to parameter o | +| Forwarding.cs:83:16:83:24 | ... != ... | Forwarding.cs:83:16:83:16 | access to parameter o | +| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | +| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | +| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | +| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | +| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | +| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | +| NullAlwaysBad.cs:9:17:9:25 | ... != ... | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | +| NullAlwaysGood.cs:9:17:9:25 | ... != ... | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | +| NullMaybeGood.cs:7:13:7:21 | ... != ... | NullMaybeGood.cs:7:13:7:13 | access to parameter o | diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.ql b/csharp/ql/test/query-tests/Nullness/NullCheck.ql index 4dbd80b7877..5ab3414b971 100644 --- a/csharp/ql/test/query-tests/Nullness/NullCheck.ql +++ b/csharp/ql/test/query-tests/Nullness/NullCheck.ql @@ -1,5 +1,6 @@ import csharp import semmle.code.csharp.controlflow.Guards -from DereferenceableExpr de, AbstractValue v, boolean isNull -select de.getANullCheck(v, isNull), de, v, isNull +from DereferenceableExpr de, Guards::Guard reason +where de.guardSuggestsMaybeNull(reason) +select reason, de diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 876cde548b6..6a0d8372e3e 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -1,936 +1,66 @@ -#select -| C.cs:64:9:64:10 | access to local variable o1 | C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | Variable $@ may be null at this access because of $@ assignment. | C.cs:62:13:62:14 | o1 | o1 | C.cs:62:13:62:46 | Object o1 = ... | this | -| C.cs:68:9:68:10 | access to local variable o2 | C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | C.cs:66:13:66:14 | o2 | o2 | C.cs:66:13:66:46 | Object o2 = ... | this | -| C.cs:95:15:95:15 | access to local variable o | C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | C.cs:94:13:94:13 | o | o | C.cs:94:13:94:45 | Object o = ... | this | -| C.cs:103:27:103:30 | access to parameter list | C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | Variable $@ may be null at this access because of $@ assignment. | C.cs:99:42:99:45 | list | list | C.cs:102:13:102:23 | ... = ... | this | -| C.cs:177:13:177:13 | access to local variable s | C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:151:13:151:13 | s | s | C.cs:178:13:178:20 | ... = ... | this | -| C.cs:203:13:203:13 | access to local variable s | C.cs:204:13:204:20 | SSA def(s) | C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this | -| C.cs:223:9:223:9 | access to local variable s | C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this | -| C.cs:242:13:242:13 | access to local variable s | C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this | -| D.cs:23:9:23:13 | access to parameter param | D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this | -| D.cs:32:9:32:13 | access to parameter param | D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this | -| D.cs:62:13:62:14 | access to local variable o5 | D.cs:58:13:58:41 | SSA def(o5) | D.cs:62:13:62:14 | access to local variable o5 | Variable $@ may be null at this access because of $@ assignment. | D.cs:58:13:58:14 | o5 | o5 | D.cs:58:13:58:41 | String o5 = ... | this | -| D.cs:73:13:73:14 | access to local variable o7 | D.cs:68:13:68:34 | SSA def(o7) | D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this | -| D.cs:82:13:82:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:82:13:82:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | -| D.cs:84:13:84:14 | access to local variable o8 | D.cs:75:13:75:34 | SSA def(o8) | D.cs:84:13:84:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | -| D.cs:91:13:91:14 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:94:21:94:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:94:21:94:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:98:21:98:22 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:98:21:98:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:102:31:102:32 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:102:31:102:32 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:105:19:105:20 | access to local variable xs | D.cs:89:15:89:44 | SSA def(xs) | D.cs:105:19:105:20 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | -| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | -| D.cs:134:24:134:24 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | -| D.cs:135:24:135:24 | access to parameter b | D.cs:125:44:125:44 | SSA param(b) | D.cs:135:24:135:24 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:44:125:44 | b | b | D.cs:128:20:128:28 | ... == ... | this | -| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | -| D.cs:145:20:145:20 | access to parameter a | D.cs:125:35:125:35 | SSA param(a) | D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | -| D.cs:151:9:151:11 | access to parameter obj | D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:149:36:149:38 | obj | obj | D.cs:152:17:152:27 | ... != ... | this | -| D.cs:171:9:171:11 | access to local variable obj | D.cs:163:16:163:25 | SSA def(obj) | D.cs:171:9:171:11 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | D.cs:163:16:163:18 | obj | obj | D.cs:163:16:163:25 | Object obj = ... | this | -| D.cs:245:13:245:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:245:13:245:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | -| D.cs:247:13:247:13 | access to local variable o | D.cs:240:9:240:16 | SSA def(o) | D.cs:247:13:247:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | -| D.cs:253:13:253:14 | access to local variable o2 | D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | D.cs:249:13:249:14 | o2 | o2 | D.cs:249:13:249:38 | String o2 = ... | this | -| D.cs:267:13:267:13 | access to local variable o | D.cs:258:16:258:23 | SSA def(o) | D.cs:267:13:267:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:258:16:258:23 | Object o = ... | this | -| D.cs:291:13:291:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | -| D.cs:291:13:291:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | -| D.cs:294:13:294:13 | access to local variable o | D.cs:269:9:269:16 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | -| D.cs:294:13:294:13 | access to local variable o | D.cs:283:17:283:24 | SSA def(o) | D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | -| D.cs:300:17:300:20 | access to local variable prev | D.cs:296:16:296:26 | SSA def(prev) | D.cs:300:17:300:20 | access to local variable prev | Variable $@ may be null at this access because of $@ assignment. | D.cs:296:16:296:19 | prev | prev | D.cs:296:16:296:26 | Object prev = ... | this | -| D.cs:313:17:313:17 | access to local variable s | D.cs:304:16:304:23 | SSA def(s) | D.cs:313:17:313:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | D.cs:304:16:304:16 | s | s | D.cs:304:16:304:23 | String s = ... | this | -| D.cs:324:9:324:9 | access to local variable r | D.cs:316:16:316:23 | SSA def(r) | D.cs:324:9:324:9 | access to local variable r | Variable $@ may be null at this access because of $@ assignment. | D.cs:316:16:316:16 | r | r | D.cs:316:16:316:23 | Object r = ... | this | -| D.cs:356:13:356:13 | access to local variable a | D.cs:351:15:351:22 | SSA def(a) | D.cs:356:13:356:13 | access to local variable a | Variable $@ may be null at this access because of $@ assignment. | D.cs:351:15:351:15 | a | a | D.cs:351:15:351:22 | Int32[] a = ... | this | -| D.cs:363:13:363:16 | access to local variable last | D.cs:360:20:360:30 | SSA def(last) | D.cs:363:13:363:16 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | D.cs:360:20:360:23 | last | last | D.cs:360:20:360:30 | String last = ... | this | -| D.cs:372:13:372:13 | access to local variable b | D.cs:366:15:366:47 | SSA def(b) | D.cs:372:13:372:13 | access to local variable b | Variable $@ may be null at this access because of $@ assignment. | D.cs:366:15:366:15 | b | b | D.cs:366:15:366:47 | Int32[] b = ... | this | -| D.cs:395:20:395:20 | access to parameter a | D.cs:388:36:388:36 | SSA param(a) | D.cs:395:20:395:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:36:388:36 | a | a | D.cs:390:20:390:28 | ... == ... | this | -| D.cs:400:20:400:20 | access to parameter b | D.cs:388:45:388:45 | SSA param(b) | D.cs:400:20:400:20 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:45:388:45 | b | b | D.cs:397:20:397:28 | ... == ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:27:407:35 | ... == ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:407:55:407:63 | ... != ... | this | -| D.cs:410:13:410:13 | access to parameter y | D.cs:405:45:405:45 | SSA param(y) | D.cs:410:13:410:13 | access to parameter y | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:45:405:45 | y | y | D.cs:411:13:411:21 | ... != ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:14:407:22 | ... != ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:407:42:407:50 | ... == ... | this | -| D.cs:412:13:412:13 | access to parameter x | D.cs:405:35:405:35 | SSA param(x) | D.cs:412:13:412:13 | access to parameter x | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:409:13:409:21 | ... != ... | this | -| E.cs:12:38:12:39 | access to local variable a2 | E.cs:9:18:9:26 | SSA def(a2) | E.cs:12:38:12:39 | access to local variable a2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:9:18:9:19 | a2 | a2 | E.cs:9:18:9:26 | Int64[][] a2 = ... | this | -| E.cs:14:13:14:14 | access to local variable a3 | E.cs:11:16:11:24 | SSA def(a3) | E.cs:14:13:14:14 | access to local variable a3 | Variable $@ may be null at this access because of $@ assignment. | E.cs:11:16:11:17 | a3 | a3 | E.cs:11:16:11:24 | Int64[] a3 = ... | this | -| E.cs:27:13:27:14 | access to local variable s1 | E.cs:23:13:23:30 | SSA def(s1) | E.cs:27:13:27:14 | access to local variable s1 | Variable $@ may be null at this access because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:23:13:23:30 | ... = ... | this | -| E.cs:61:13:61:17 | access to local variable slice | E.cs:51:22:51:33 | SSA def(slice) | E.cs:61:13:61:17 | access to local variable slice | Variable $@ may be null at this access because of $@ assignment. | E.cs:51:22:51:26 | slice | slice | E.cs:51:22:51:33 | List slice = ... | this | -| E.cs:73:13:73:15 | access to parameter arr | E.cs:66:40:66:42 | SSA param(arr) | E.cs:73:13:73:15 | access to parameter arr | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:66:40:66:42 | arr | arr | E.cs:70:22:70:32 | ... == ... | this | -| E.cs:112:13:112:16 | access to local variable arr2 | E.cs:107:15:107:25 | SSA def(arr2) | E.cs:112:13:112:16 | access to local variable arr2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:107:15:107:18 | arr2 | arr2 | E.cs:107:15:107:25 | Int32[] arr2 = ... | this | -| E.cs:125:33:125:35 | access to local variable obj | E.cs:137:25:137:34 | SSA def(obj) | E.cs:125:33:125:35 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | E.cs:119:13:119:15 | obj | obj | E.cs:137:25:137:34 | ... = ... | this | -| E.cs:159:13:159:16 | access to local variable obj2 | E.cs:152:16:152:26 | SSA def(obj2) | E.cs:159:13:159:16 | access to local variable obj2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:152:16:152:19 | obj2 | obj2 | E.cs:153:13:153:24 | ... != ... | this | -| E.cs:167:21:167:21 | access to parameter a | E.cs:162:28:162:28 | SSA param(a) | E.cs:167:21:167:21 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:162:28:162:28 | a | a | E.cs:164:17:164:25 | ... == ... | this | -| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | -| E.cs:178:13:178:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:178:13:178:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | -| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:175:19:175:29 | ... == ... | this | -| E.cs:186:13:186:15 | access to parameter obj | E.cs:173:29:173:31 | SSA param(obj) | E.cs:186:13:186:15 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:173:29:173:31 | obj | obj | E.cs:180:13:180:23 | ... == ... | this | -| E.cs:192:17:192:17 | access to parameter o | E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:190:29:190:29 | o | o | E.cs:193:17:193:17 | access to parameter o | this | -| E.cs:201:13:201:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | -| E.cs:203:13:203:13 | access to local variable o | E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | -| E.cs:218:9:218:9 | access to local variable x | E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:215:13:215:13 | x | x | E.cs:217:13:217:20 | ... = ... | this | -| E.cs:230:9:230:9 | access to local variable x | E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:230:9:230:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:225:13:225:13 | x | x | E.cs:227:13:227:20 | ... = ... | this | -| E.cs:235:16:235:16 | access to parameter i | E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:233:26:233:26 | i | i | E.cs:233:26:233:26 | i | this | -| E.cs:240:21:240:21 | access to parameter i | E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:238:26:238:26 | i | i | E.cs:238:26:238:26 | i | this | -| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | -| E.cs:285:9:285:9 | access to local variable o | E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | -| E.cs:302:9:302:9 | access to local variable s | E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:301:13:301:13 | s | s | E.cs:301:13:301:27 | String s = ... | this | -| E.cs:343:9:343:9 | access to local variable x | E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:342:13:342:13 | x | x | E.cs:342:13:342:32 | String x = ... | this | -| E.cs:349:9:349:9 | access to local variable x | E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:348:17:348:17 | x | x | E.cs:348:17:348:36 | dynamic x = ... | this | -| E.cs:366:41:366:41 | access to parameter s | E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because the parameter has a null default value. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | -| E.cs:375:20:375:20 | access to local variable s | E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:374:17:374:17 | s | s | E.cs:374:17:374:31 | String s = ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:14:382:23 | ... == ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:382:44:382:53 | ... != ... | this | -| E.cs:386:16:386:17 | access to parameter e1 | E.cs:380:24:380:25 | SSA param(e1) | E.cs:386:16:386:17 | access to parameter e1 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:24:380:25 | e1 | e1 | E.cs:384:13:384:22 | ... == ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:28:382:37 | ... != ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:382:58:382:67 | ... == ... | this | -| E.cs:386:27:386:28 | access to parameter e2 | E.cs:380:30:380:31 | SSA param(e2) | E.cs:386:27:386:28 | access to parameter e2 | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:380:30:380:31 | e2 | e2 | E.cs:384:27:384:36 | ... == ... | this | -| E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | -| E.cs:423:38:423:38 | access to parameter i | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | -| E.cs:430:39:430:39 | access to parameter i | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this | -| GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | -| NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | -| Params.cs:14:17:14:20 | access to parameter args | Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this | -| StringConcatenation.cs:16:17:16:17 | access to local variable s | StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:16:17:16:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | StringConcatenation.cs:14:16:14:16 | s | s | StringConcatenation.cs:14:16:14:23 | String s = ... | this | -edges -| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:8:15:8:32 | access to local variable synchronizedAlways | -| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | A.cs:10:13:10:30 | access to local variable synchronizedAlways | -| A.cs:16:15:16:30 | SSA def(arrayNull) | A.cs:17:9:17:17 | access to local variable arrayNull | -| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:31:27:31:37 | access to local variable arrayAccess | -| A.cs:26:15:26:32 | SSA def(arrayAccess) | A.cs:36:27:36:37 | access to local variable arrayAccess | -| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:32:27:32:37 | access to local variable fieldAccess | -| A.cs:27:18:27:35 | SSA def(fieldAccess) | A.cs:37:27:37:37 | access to local variable fieldAccess | -| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:33:28:33:39 | access to local variable methodAccess | -| A.cs:28:16:28:34 | SSA def(methodAccess) | A.cs:38:15:38:26 | access to local variable methodAccess | -| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:34:27:34:36 | access to local variable methodCall | -| A.cs:29:16:29:32 | SSA def(methodCall) | A.cs:39:27:39:36 | access to local variable methodCall | -| A.cs:48:16:48:28 | SSA def(varRef) | A.cs:50:9:50:14 | access to local variable varRef | -| Assert.cs:13:9:13:25 | [b (line 7): false] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:13:9:13:25 | [b (line 7): true] SSA def(s) | Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:21:9:21:25 | [b (line 7): false] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:21:9:21:25 | [b (line 7): true] SSA def(s) | Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:29:9:29:25 | [b (line 7): false] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:29:9:29:25 | [b (line 7): true] SSA def(s) | Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:45:9:45:25 | [b (line 7): true] SSA def(s) | Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | -| Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | Assert.cs:47:27:47:27 | access to local variable s | -| Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | -| Assert.cs:49:9:49:25 | [b (line 7): true] SSA def(s) | Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | -| Assert.cs:50:24:50:38 | [false] ... \|\| ... | Assert.cs:51:27:51:27 | access to local variable s | -| Assert.cs:50:37:50:38 | [false] !... | Assert.cs:50:24:50:38 | [false] ... \|\| ... | -| Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | Assert.cs:50:37:50:38 | [false] !... | -| B.cs:7:11:7:29 | SSA def(eqCallAlways) | B.cs:13:13:13:24 | access to local variable eqCallAlways | -| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:13:13:13:36 | ...; | -| B.cs:10:11:10:30 | SSA def(neqCallAlways) | B.cs:15:9:16:26 | if (...) ... | -| B.cs:13:13:13:36 | ...; | B.cs:15:9:16:26 | if (...) ... | -| B.cs:15:9:16:26 | if (...) ... | B.cs:16:13:16:26 | ...; | -| B.cs:15:9:16:26 | if (...) ... | B.cs:18:9:20:26 | if (...) ... | -| B.cs:16:13:16:26 | ...; | B.cs:18:9:20:26 | if (...) ... | -| B.cs:18:9:20:26 | if (...) ... | B.cs:18:25:18:27 | {...} | -| B.cs:18:9:20:26 | if (...) ... | B.cs:20:13:20:26 | ...; | -| B.cs:18:25:18:27 | {...} | B.cs:22:9:24:37 | if (...) ... | -| B.cs:20:13:20:26 | ...; | B.cs:22:9:24:37 | if (...) ... | -| B.cs:22:9:24:37 | if (...) ... | B.cs:24:13:24:25 | access to local variable neqCallAlways | -| C.cs:10:16:10:23 | SSA def(o) | C.cs:11:17:11:28 | [false] !... | -| C.cs:11:13:11:30 | [false] !... | C.cs:16:9:19:9 | if (...) ... | -| C.cs:11:15:11:29 | [true] !... | C.cs:11:13:11:30 | [false] !... | -| C.cs:11:17:11:28 | [false] !... | C.cs:11:15:11:29 | [true] !... | -| C.cs:16:9:19:9 | if (...) ... | C.cs:16:13:16:24 | [true] !... | -| C.cs:16:13:16:24 | [true] !... | C.cs:18:13:18:13 | access to local variable o | -| C.cs:40:13:40:35 | SSA def(s) | C.cs:42:9:42:9 | access to local variable s | -| C.cs:55:13:55:36 | SSA def(o2) | C.cs:57:9:57:10 | access to local variable o2 | -| C.cs:62:13:62:46 | SSA def(o1) | C.cs:64:9:64:10 | access to local variable o1 | -| C.cs:66:13:66:46 | SSA def(o2) | C.cs:68:9:68:10 | access to local variable o2 | -| C.cs:94:13:94:45 | SSA def(o) | C.cs:95:15:95:15 | access to local variable o | -| C.cs:94:13:94:45 | SSA def(o) | C.cs:96:13:96:13 | access to local variable o | -| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | -| C.cs:102:13:102:23 | SSA def(list) | C.cs:103:27:103:30 | access to parameter list | -| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:103:22:103:22 | Int32 x | -| C.cs:103:9:107:9 | foreach (... ... in ...) ... | C.cs:106:13:106:16 | access to parameter list | -| C.cs:103:22:103:22 | Int32 x | C.cs:103:9:107:9 | foreach (... ... in ...) ... | -| C.cs:103:27:103:30 | access to parameter list | C.cs:103:9:107:9 | foreach (... ... in ...) ... | -| C.cs:159:9:159:16 | SSA def(s) | C.cs:162:13:162:13 | access to local variable s | -| C.cs:167:9:167:16 | SSA def(s) | C.cs:170:13:170:13 | access to local variable s | -| C.cs:178:13:178:20 | SSA def(s) | C.cs:177:13:177:13 | access to local variable s | -| C.cs:193:9:193:16 | SSA def(s) | C.cs:196:13:196:13 | access to local variable s | -| C.cs:197:13:197:20 | [b (line 192): true] SSA def(s) | C.cs:196:13:196:13 | access to local variable s | -| C.cs:201:16:201:19 | true | C.cs:203:13:203:13 | access to local variable s | -| C.cs:204:13:204:20 | SSA def(s) | C.cs:201:16:201:19 | true | -| C.cs:210:13:210:35 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | -| C.cs:214:13:214:20 | SSA def(s) | C.cs:217:9:218:25 | if (...) ... | -| C.cs:217:9:218:25 | if (...) ... | C.cs:218:13:218:13 | access to local variable s | -| C.cs:222:13:222:20 | SSA def(s) | C.cs:223:9:223:9 | access to local variable s | -| C.cs:229:22:229:22 | access to local variable s | C.cs:233:9:233:9 | access to local variable s | -| C.cs:229:33:229:40 | SSA def(s) | C.cs:229:22:229:22 | access to local variable s | -| C.cs:235:14:235:21 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | -| C.cs:235:24:235:24 | access to local variable s | C.cs:237:13:237:13 | access to local variable s | -| C.cs:235:35:235:42 | SSA def(s) | C.cs:235:24:235:24 | access to local variable s | -| C.cs:240:24:240:31 | SSA def(s) | C.cs:242:13:242:13 | access to local variable s | -| C.cs:248:15:248:22 | SSA def(a) | C.cs:249:9:249:9 | access to local variable a | -| C.cs:257:15:257:23 | SSA def(ia) | C.cs:260:9:260:10 | access to local variable ia | -| C.cs:257:15:257:23 | SSA def(ia) | C.cs:263:9:263:10 | access to local variable ia | -| C.cs:258:18:258:26 | SSA def(sa) | C.cs:261:20:261:21 | access to local variable sa | -| C.cs:258:18:258:26 | SSA def(sa) | C.cs:264:16:264:17 | access to local variable sa | -| D.cs:17:17:17:20 | null | D.cs:23:9:23:13 | access to parameter param | -| D.cs:26:32:26:36 | SSA param(param) | D.cs:32:9:32:13 | access to parameter param | -| D.cs:58:13:58:41 | SSA def(o5) | D.cs:61:9:62:26 | if (...) ... | -| D.cs:61:9:62:26 | if (...) ... | D.cs:62:13:62:14 | access to local variable o5 | -| D.cs:68:13:68:34 | SSA def(o7) | D.cs:69:18:69:36 | ... && ... | -| D.cs:69:18:69:36 | ... && ... | D.cs:73:13:73:14 | access to local variable o7 | -| D.cs:75:13:75:34 | SSA def(o8) | D.cs:76:34:76:35 | 42 | -| D.cs:76:21:76:43 | ... ? ... : ... | D.cs:79:9:80:26 | if (...) ... | -| D.cs:76:34:76:35 | 42 | D.cs:76:21:76:43 | ... ? ... : ... | -| D.cs:79:9:80:26 | if (...) ... | D.cs:81:9:82:26 | if (...) ... | -| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:14 | access to local variable o8 | -| D.cs:81:9:82:26 | if (...) ... | D.cs:82:13:82:26 | ...; | -| D.cs:81:9:82:26 | if (...) ... | D.cs:83:9:84:26 | if (...) ... | -| D.cs:82:13:82:26 | ...; | D.cs:83:9:84:26 | if (...) ... | -| D.cs:83:9:84:26 | if (...) ... | D.cs:84:13:84:14 | access to local variable o8 | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:14 | access to local variable xs | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:91:13:91:22 | ...; | -| D.cs:89:15:89:44 | SSA def(xs) | D.cs:93:9:94:30 | if (...) ... | -| D.cs:91:13:91:22 | ...; | D.cs:93:9:94:30 | if (...) ... | -| D.cs:93:9:94:30 | if (...) ... | D.cs:94:13:94:30 | ...; | -| D.cs:93:9:94:30 | if (...) ... | D.cs:94:21:94:22 | access to local variable xs | -| D.cs:93:9:94:30 | if (...) ... | D.cs:96:9:99:9 | if (...) ... | -| D.cs:94:13:94:30 | ...; | D.cs:96:9:99:9 | if (...) ... | -| D.cs:96:9:99:9 | if (...) ... | D.cs:97:9:99:9 | {...} | -| D.cs:96:9:99:9 | if (...) ... | D.cs:98:21:98:22 | access to local variable xs | -| D.cs:96:9:99:9 | if (...) ... | D.cs:101:9:102:35 | if (...) ... | -| D.cs:97:9:99:9 | {...} | D.cs:101:9:102:35 | if (...) ... | -| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | -| D.cs:101:9:102:35 | if (...) ... | D.cs:102:31:102:32 | access to local variable xs | -| D.cs:101:9:102:35 | if (...) ... | D.cs:104:9:106:30 | if (...) ... | -| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:102:26:102:26 | Int32 _ | -| D.cs:102:13:102:35 | foreach (... ... in ...) ... | D.cs:104:9:106:30 | if (...) ... | -| D.cs:102:26:102:26 | Int32 _ | D.cs:102:13:102:35 | foreach (... ... in ...) ... | -| D.cs:102:31:102:32 | access to local variable xs | D.cs:102:13:102:35 | foreach (... ... in ...) ... | -| D.cs:104:9:106:30 | if (...) ... | D.cs:105:19:105:20 | access to local variable xs | -| D.cs:104:9:106:30 | if (...) ... | D.cs:106:17:106:18 | access to local variable xs | -| D.cs:118:9:118:30 | SSA def(x) | D.cs:120:13:120:13 | access to local variable x | -| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | -| D.cs:125:35:125:35 | SSA param(a) | D.cs:127:32:127:32 | 0 | -| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:32:127:32 | 0 | -| D.cs:125:44:125:44 | SSA param(b) | D.cs:127:36:127:36 | access to parameter a | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:32:128:32 | 0 | -| D.cs:127:20:127:43 | ... ? ... : ... | D.cs:128:36:128:36 | access to parameter b | -| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:32:127:32 | 0 | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:36:127:36 | access to parameter a | D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:131:9:137:9 | {...} | -| D.cs:128:20:128:43 | ... ? ... : ... | D.cs:138:9:138:18 | ... ...; | -| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:32:128:32 | 0 | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:36:128:36 | access to parameter b | D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:131:9:137:9 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | -| D.cs:132:29:132:29 | access to local variable i | D.cs:133:13:136:13 | {...} | -| D.cs:132:29:132:29 | access to local variable i | D.cs:134:24:134:24 | access to parameter a | -| D.cs:132:29:132:29 | access to local variable i | D.cs:135:24:135:24 | access to parameter b | -| D.cs:132:29:132:29 | access to local variable i | D.cs:138:9:138:18 | ... ...; | -| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:133:13:136:13 | {...} | D.cs:132:29:132:29 | access to local variable i | -| D.cs:138:9:138:18 | ... ...; | D.cs:142:13:142:22 | ...; | -| D.cs:142:13:142:22 | ...; | D.cs:143:9:146:9 | for (...;...;...) ... | -| D.cs:143:9:146:9 | for (...;...;...) ... | D.cs:143:25:143:25 | access to local variable i | -| D.cs:143:25:143:25 | access to local variable i | D.cs:144:9:146:9 | {...} | -| D.cs:143:25:143:25 | access to local variable i | D.cs:145:20:145:20 | access to parameter a | -| D.cs:144:9:146:9 | {...} | D.cs:143:25:143:25 | access to local variable i | -| D.cs:149:36:149:38 | SSA param(obj) | D.cs:151:9:151:11 | access to parameter obj | -| D.cs:163:16:163:25 | SSA def(obj) | D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | -| D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | D.cs:168:26:168:26 | [exception: Exception] Exception e | -| D.cs:168:26:168:26 | [exception: Exception] Exception e | D.cs:171:9:171:11 | access to local variable obj | -| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:29:241:32 | null | -| D.cs:240:9:240:16 | SSA def(o) | D.cs:241:36:241:37 | "" | -| D.cs:241:21:241:37 | ... ? ... : ... | D.cs:244:9:247:25 | if (...) ... | -| D.cs:241:29:241:32 | null | D.cs:241:21:241:37 | ... ? ... : ... | -| D.cs:241:36:241:37 | "" | D.cs:241:21:241:37 | ... ? ... : ... | -| D.cs:244:9:247:25 | if (...) ... | D.cs:245:13:245:13 | access to local variable o | -| D.cs:244:9:247:25 | if (...) ... | D.cs:247:13:247:13 | access to local variable o | -| D.cs:249:13:249:38 | SSA def(o2) | D.cs:253:13:253:14 | access to local variable o2 | -| D.cs:258:16:258:23 | SSA def(o) | D.cs:266:9:267:25 | if (...) ... | -| D.cs:266:9:267:25 | if (...) ... | D.cs:266:13:266:27 | [true] ... is ... | -| D.cs:266:13:266:27 | [true] ... is ... | D.cs:267:13:267:13 | access to local variable o | -| D.cs:269:9:269:16 | SSA def(o) | D.cs:272:25:272:25 | access to local variable i | -| D.cs:272:25:272:25 | access to local variable i | D.cs:273:9:288:9 | {...} | -| D.cs:272:25:272:25 | access to local variable i | D.cs:290:9:291:25 | if (...) ... | -| D.cs:272:39:272:39 | access to local variable i | D.cs:272:25:272:25 | access to local variable i | -| D.cs:273:9:288:9 | {...} | D.cs:281:13:287:13 | if (...) ... | -| D.cs:281:13:287:13 | if (...) ... | D.cs:272:39:272:39 | access to local variable i | -| D.cs:283:17:283:24 | SSA def(o) | D.cs:285:28:285:30 | {...} | -| D.cs:283:17:283:24 | SSA def(o) | D.cs:286:17:286:30 | ...; | -| D.cs:285:28:285:30 | {...} | D.cs:286:17:286:30 | ...; | -| D.cs:286:17:286:30 | ...; | D.cs:272:39:272:39 | access to local variable i | -| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:13 | access to local variable o | -| D.cs:290:9:291:25 | if (...) ... | D.cs:291:13:291:25 | ...; | -| D.cs:290:9:291:25 | if (...) ... | D.cs:293:9:294:25 | if (...) ... | -| D.cs:291:13:291:25 | ...; | D.cs:293:9:294:25 | if (...) ... | -| D.cs:293:9:294:25 | if (...) ... | D.cs:294:13:294:13 | access to local variable o | -| D.cs:296:16:296:26 | SSA def(prev) | D.cs:297:25:297:25 | access to local variable i | -| D.cs:297:25:297:25 | access to local variable i | D.cs:298:9:302:9 | {...} | -| D.cs:298:9:302:9 | {...} | D.cs:300:17:300:20 | access to local variable prev | -| D.cs:304:16:304:23 | SSA def(s) | D.cs:307:13:311:13 | foreach (... ... in ...) ... | -| D.cs:307:13:311:13 | foreach (... ... in ...) ... | D.cs:312:13:313:29 | if (...) ... | -| D.cs:312:13:313:29 | if (...) ... | D.cs:312:17:312:23 | [true] !... | -| D.cs:312:17:312:23 | [true] !... | D.cs:313:17:313:17 | access to local variable s | -| D.cs:316:16:316:23 | SSA def(r) | D.cs:318:16:318:19 | access to local variable stat | -| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | -| D.cs:318:16:318:19 | access to local variable stat | D.cs:318:41:318:44 | access to local variable stat | -| D.cs:318:16:318:62 | [false] ... && ... | D.cs:324:9:324:9 | access to local variable r | -| D.cs:318:41:318:44 | access to local variable stat | D.cs:318:16:318:62 | [false] ... && ... | -| D.cs:351:15:351:22 | SSA def(a) | D.cs:355:9:356:21 | for (...;...;...) ... | -| D.cs:355:9:356:21 | for (...;...;...) ... | D.cs:355:25:355:25 | access to local variable i | -| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:13 | access to local variable a | -| D.cs:355:25:355:25 | access to local variable i | D.cs:356:13:356:21 | ...; | -| D.cs:356:13:356:21 | ...; | D.cs:355:25:355:25 | access to local variable i | -| D.cs:360:20:360:30 | SSA def(last) | D.cs:361:29:361:29 | access to local variable i | -| D.cs:361:29:361:29 | access to local variable i | D.cs:363:13:363:16 | access to local variable last | -| D.cs:366:15:366:47 | SSA def(b) | D.cs:367:13:367:56 | [false] ... && ... | -| D.cs:367:13:367:56 | [false] ... && ... | D.cs:370:9:373:9 | for (...;...;...) ... | -| D.cs:370:9:373:9 | for (...;...;...) ... | D.cs:370:25:370:25 | access to local variable i | -| D.cs:370:25:370:25 | access to local variable i | D.cs:371:9:373:9 | {...} | -| D.cs:370:25:370:25 | access to local variable i | D.cs:372:13:372:13 | access to local variable b | -| D.cs:371:9:373:9 | {...} | D.cs:370:25:370:25 | access to local variable i | -| D.cs:378:19:378:28 | SSA def(ioe) | D.cs:382:9:385:27 | if (...) ... | -| D.cs:382:9:385:27 | if (...) ... | D.cs:385:13:385:15 | access to local variable ioe | -| D.cs:388:36:388:36 | SSA param(a) | D.cs:390:32:390:32 | 0 | -| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:32:390:32 | 0 | -| D.cs:388:45:388:45 | SSA param(b) | D.cs:390:36:390:36 | access to parameter a | -| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | -| D.cs:390:20:390:43 | ... ? ... : ... | D.cs:393:21:393:21 | access to local variable i | -| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:32:390:32 | 0 | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:36:390:36 | access to parameter a | D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | -| D.cs:393:21:393:21 | access to local variable i | D.cs:394:9:396:9 | {...} | -| D.cs:393:21:393:21 | access to local variable i | D.cs:395:20:395:20 | access to parameter a | -| D.cs:393:21:393:21 | access to local variable i | D.cs:397:9:397:44 | ... ...; | -| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | -| D.cs:394:9:396:9 | {...} | D.cs:393:21:393:21 | access to local variable i | -| D.cs:397:9:397:44 | ... ...; | D.cs:397:32:397:32 | 0 | -| D.cs:397:20:397:43 | ... ? ... : ... | D.cs:398:21:398:21 | access to local variable i | -| D.cs:397:32:397:32 | 0 | D.cs:397:20:397:43 | ... ? ... : ... | -| D.cs:398:21:398:21 | access to local variable i | D.cs:399:9:401:9 | {...} | -| D.cs:398:21:398:21 | access to local variable i | D.cs:400:20:400:20 | access to parameter b | -| D.cs:399:9:401:9 | {...} | D.cs:398:21:398:21 | access to local variable i | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:35:405:35 | SSA param(x) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:405:45:405:45 | SSA param(y) | D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | -| D.cs:407:13:407:64 | [false] ... \|\| ... | D.cs:409:9:410:25 | if (...) ... | -| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:14:407:35 | [false] ... && ... | D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | -| D.cs:407:42:407:42 | access to parameter x | D.cs:407:55:407:55 | access to parameter y | -| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:42:407:63 | [false] ... && ... | D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:55:407:55 | access to parameter y | D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:409:9:410:25 | if (...) ... | D.cs:410:13:410:13 | access to parameter y | -| D.cs:409:9:410:25 | if (...) ... | D.cs:411:9:412:25 | if (...) ... | -| D.cs:411:9:412:25 | if (...) ... | D.cs:412:13:412:13 | access to parameter x | -| E.cs:9:18:9:26 | SSA def(a2) | E.cs:10:22:10:54 | ... && ... | -| E.cs:10:22:10:54 | ... && ... | E.cs:12:38:12:39 | access to local variable a2 | -| E.cs:11:16:11:24 | SSA def(a3) | E.cs:12:22:12:52 | ... && ... | -| E.cs:12:22:12:52 | ... && ... | E.cs:14:13:14:14 | access to local variable a3 | -| E.cs:23:13:23:30 | SSA def(s1) | E.cs:24:33:24:36 | null | -| E.cs:24:18:24:41 | ... ? ... : ... | E.cs:26:9:27:26 | if (...) ... | -| E.cs:24:33:24:36 | null | E.cs:24:18:24:41 | ... ? ... : ... | -| E.cs:26:9:27:26 | if (...) ... | E.cs:27:13:27:14 | access to local variable s1 | -| E.cs:51:22:51:33 | SSA def(slice) | E.cs:53:16:53:19 | access to local variable iter | -| E.cs:53:16:53:19 | access to local variable iter | E.cs:54:9:63:9 | {...} | -| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:17 | access to local variable slice | -| E.cs:54:9:63:9 | {...} | E.cs:61:13:61:27 | ...; | -| E.cs:61:13:61:27 | ...; | E.cs:53:16:53:19 | access to local variable iter | -| E.cs:66:40:66:42 | SSA param(arr) | E.cs:70:13:70:50 | ...; | -| E.cs:66:40:66:42 | SSA param(arr) | E.cs:72:9:73:23 | if (...) ... | -| E.cs:70:13:70:50 | ...; | E.cs:70:36:70:36 | 0 | -| E.cs:70:22:70:49 | ... ? ... : ... | E.cs:72:9:73:23 | if (...) ... | -| E.cs:70:36:70:36 | 0 | E.cs:70:22:70:49 | ... ? ... : ... | -| E.cs:72:9:73:23 | if (...) ... | E.cs:73:13:73:15 | access to parameter arr | -| E.cs:107:15:107:25 | SSA def(arr2) | E.cs:111:9:112:30 | for (...;...;...) ... | -| E.cs:111:9:112:30 | for (...;...;...) ... | E.cs:111:25:111:25 | access to local variable i | -| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:16 | access to local variable arr2 | -| E.cs:111:25:111:25 | access to local variable i | E.cs:112:13:112:30 | ...; | -| E.cs:112:13:112:30 | ...; | E.cs:111:25:111:25 | access to local variable i | -| E.cs:120:16:120:20 | [true] !... | E.cs:121:9:143:9 | {...} | -| E.cs:120:17:120:20 | access to local variable stop | E.cs:120:16:120:20 | [true] !... | -| E.cs:121:9:143:9 | {...} | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:123:20:123:24 | [false] !... | E.cs:123:20:123:35 | [false] ... && ... | -| E.cs:123:20:123:24 | [true] !... | E.cs:123:29:123:29 | access to local variable j | -| E.cs:123:20:123:35 | [false] ... && ... | E.cs:120:17:120:20 | access to local variable stop | -| E.cs:123:20:123:35 | [true] ... && ... | E.cs:124:13:142:13 | {...} | -| E.cs:123:20:123:35 | [true] ... && ... | E.cs:125:33:125:35 | access to local variable obj | -| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [false] !... | -| E.cs:123:21:123:24 | access to local variable stop | E.cs:123:20:123:24 | [true] !... | -| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [false] ... && ... | -| E.cs:123:29:123:29 | access to local variable j | E.cs:123:20:123:35 | [true] ... && ... | -| E.cs:124:13:142:13 | {...} | E.cs:128:21:128:23 | access to local variable obj | -| E.cs:124:13:142:13 | {...} | E.cs:141:17:141:26 | ...; | -| E.cs:137:25:137:34 | SSA def(obj) | E.cs:139:21:139:29 | continue; | -| E.cs:139:21:139:29 | continue; | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:141:17:141:26 | ...; | E.cs:123:21:123:24 | access to local variable stop | -| E.cs:152:16:152:26 | SSA def(obj2) | E.cs:153:13:153:54 | [false] ... && ... | -| E.cs:153:13:153:54 | [false] ... && ... | E.cs:158:9:159:28 | if (...) ... | -| E.cs:158:9:159:28 | if (...) ... | E.cs:159:13:159:16 | access to local variable obj2 | -| E.cs:162:28:162:28 | SSA param(a) | E.cs:164:29:164:29 | 0 | -| E.cs:164:17:164:40 | ... ? ... : ... | E.cs:165:25:165:25 | access to local variable i | -| E.cs:164:29:164:29 | 0 | E.cs:164:17:164:40 | ... ? ... : ... | -| E.cs:165:25:165:25 | access to local variable i | E.cs:166:9:170:9 | {...} | -| E.cs:165:25:165:25 | access to local variable i | E.cs:167:21:167:21 | access to parameter a | -| E.cs:165:32:165:32 | access to local variable i | E.cs:165:25:165:25 | access to local variable i | -| E.cs:166:9:170:9 | {...} | E.cs:165:32:165:32 | access to local variable i | -| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | -| E.cs:173:29:173:31 | SSA param(obj) | E.cs:175:33:175:37 | false | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:177:9:179:9 | {...} | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:178:13:178:15 | access to parameter obj | -| E.cs:175:19:175:42 | ... ? ... : ... | E.cs:180:9:183:9 | if (...) ... | -| E.cs:175:33:175:37 | false | E.cs:175:19:175:42 | ... ? ... : ... | -| E.cs:177:9:179:9 | {...} | E.cs:180:9:183:9 | if (...) ... | -| E.cs:180:9:183:9 | if (...) ... | E.cs:181:9:183:9 | {...} | -| E.cs:181:9:183:9 | {...} | E.cs:184:9:187:9 | if (...) ... | -| E.cs:184:9:187:9 | if (...) ... | E.cs:186:13:186:15 | access to parameter obj | -| E.cs:190:29:190:29 | SSA param(o) | E.cs:192:17:192:17 | access to parameter o | -| E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | E.cs:203:13:203:13 | access to local variable o | -| E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | E.cs:201:13:201:13 | access to local variable o | -| E.cs:206:28:206:28 | SSA param(s) | E.cs:208:13:208:23 | [false] ... is ... | -| E.cs:208:13:208:23 | [false] ... is ... | E.cs:210:16:210:16 | access to parameter s | -| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:218:9:218:9 | access to local variable x | -| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | E.cs:220:13:220:13 | access to local variable x | -| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:13 | access to local variable x | -| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | E.cs:229:13:229:25 | ...; | -| E.cs:229:13:229:25 | ...; | E.cs:230:9:230:9 | access to local variable x | -| E.cs:233:26:233:26 | SSA param(i) | E.cs:235:16:235:16 | access to parameter i | -| E.cs:238:26:238:26 | SSA param(i) | E.cs:240:21:240:21 | access to parameter i | -| E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | -| E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | E.cs:285:9:285:9 | access to local variable o | -| E.cs:301:13:301:27 | SSA def(s) | E.cs:302:9:302:9 | access to local variable s | -| E.cs:319:29:319:30 | SSA param(s1) | E.cs:321:20:321:21 | access to parameter s2 | -| E.cs:321:13:321:30 | [true] ... is ... | E.cs:323:13:323:14 | access to parameter s1 | -| E.cs:321:14:321:21 | ... ?? ... | E.cs:321:13:321:30 | [true] ... is ... | -| E.cs:321:20:321:21 | access to parameter s2 | E.cs:321:14:321:21 | ... ?? ... | -| E.cs:330:13:330:36 | SSA def(x) | E.cs:331:9:331:9 | access to local variable x | -| E.cs:342:13:342:32 | SSA def(x) | E.cs:343:9:343:9 | access to local variable x | -| E.cs:348:17:348:36 | SSA def(x) | E.cs:349:9:349:9 | access to local variable x | -| E.cs:366:28:366:28 | SSA param(s) | E.cs:366:41:366:41 | access to parameter s | -| E.cs:374:17:374:31 | SSA def(s) | E.cs:375:20:375:20 | access to local variable s | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:24:380:25 | SSA param(e1) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:380:30:380:31 | SSA param(e2) | E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | -| E.cs:382:13:382:68 | [false] ... \|\| ... | E.cs:384:9:385:24 | if (...) ... | -| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:14:382:37 | [false] ... && ... | E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:28:382:29 | access to parameter e2 | E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:382:44:382:45 | access to parameter e1 | E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:382:44:382:67 | [false] ... && ... | E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:384:9:385:24 | if (...) ... | E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:384:9:385:24 | if (...) ... | E.cs:384:27:384:28 | access to parameter e2 | -| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:16:386:17 | access to parameter e1 | -| E.cs:384:13:384:36 | [false] ... && ... | E.cs:386:27:386:28 | access to parameter e2 | -| E.cs:384:27:384:28 | access to parameter e2 | E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | -| E.cs:404:9:404:18 | SSA def(i) | E.cs:405:16:405:16 | access to local variable i | -| E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | -| E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | -| E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | -| E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... | -| E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s | -| F.cs:7:16:7:23 | SSA def(o) | F.cs:8:9:8:9 | access to local variable o | -| Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... | -| Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... | -| Forwarding.cs:14:9:17:9 | if (...) ... | Forwarding.cs:19:9:22:9 | if (...) ... | -| Forwarding.cs:19:9:22:9 | if (...) ... | Forwarding.cs:19:13:19:23 | [false] !... | -| Forwarding.cs:19:13:19:23 | [false] !... | Forwarding.cs:24:9:27:9 | if (...) ... | -| Forwarding.cs:24:9:27:9 | if (...) ... | Forwarding.cs:29:9:32:9 | if (...) ... | -| Forwarding.cs:29:9:32:9 | if (...) ... | Forwarding.cs:34:9:37:9 | if (...) ... | -| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:35:9:37:9 | {...} | -| Forwarding.cs:34:9:37:9 | if (...) ... | Forwarding.cs:36:31:36:31 | access to local variable s | -| Forwarding.cs:35:9:37:9 | {...} | Forwarding.cs:40:27:40:27 | access to local variable s | -| GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:9:13:9:36 | [false] !... | -| GuardedString.cs:9:13:9:36 | [false] !... | GuardedString.cs:14:9:17:9 | if (...) ... | -| GuardedString.cs:14:9:17:9 | if (...) ... | GuardedString.cs:14:13:14:41 | [false] !... | -| GuardedString.cs:14:13:14:41 | [false] !... | GuardedString.cs:19:9:20:40 | if (...) ... | -| GuardedString.cs:19:9:20:40 | if (...) ... | GuardedString.cs:19:26:19:26 | 0 | -| GuardedString.cs:19:26:19:26 | 0 | GuardedString.cs:22:9:23:40 | if (...) ... | -| GuardedString.cs:22:9:23:40 | if (...) ... | GuardedString.cs:22:25:22:25 | 0 | -| GuardedString.cs:22:25:22:25 | 0 | GuardedString.cs:25:9:26:40 | if (...) ... | -| GuardedString.cs:25:9:26:40 | if (...) ... | GuardedString.cs:25:26:25:26 | 0 | -| GuardedString.cs:25:26:25:26 | 0 | GuardedString.cs:28:9:29:40 | if (...) ... | -| GuardedString.cs:28:9:29:40 | if (...) ... | GuardedString.cs:28:25:28:26 | 10 | -| GuardedString.cs:28:25:28:26 | 10 | GuardedString.cs:31:9:32:40 | if (...) ... | -| GuardedString.cs:31:9:32:40 | if (...) ... | GuardedString.cs:31:26:31:27 | 10 | -| GuardedString.cs:31:26:31:27 | 10 | GuardedString.cs:34:9:37:40 | if (...) ... | -| GuardedString.cs:34:9:37:40 | if (...) ... | GuardedString.cs:34:26:34:26 | 0 | -| GuardedString.cs:34:26:34:26 | 0 | GuardedString.cs:35:31:35:31 | access to local variable s | -| NullAlwaysBad.cs:7:29:7:29 | SSA param(s) | NullAlwaysBad.cs:9:30:9:30 | access to parameter s | -| NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | -| Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | -| StringConcatenation.cs:14:16:14:23 | SSA def(s) | StringConcatenation.cs:15:16:15:16 | access to local variable s | -| StringConcatenation.cs:15:16:15:16 | access to local variable s | StringConcatenation.cs:16:17:16:17 | access to local variable s | -nodes -| A.cs:7:16:7:40 | SSA def(synchronizedAlways) | -| A.cs:8:15:8:32 | access to local variable synchronizedAlways | -| A.cs:10:13:10:30 | access to local variable synchronizedAlways | -| A.cs:16:15:16:30 | SSA def(arrayNull) | -| A.cs:17:9:17:17 | access to local variable arrayNull | -| A.cs:26:15:26:32 | SSA def(arrayAccess) | -| A.cs:27:18:27:35 | SSA def(fieldAccess) | -| A.cs:28:16:28:34 | SSA def(methodAccess) | -| A.cs:29:16:29:32 | SSA def(methodCall) | -| A.cs:31:27:31:37 | access to local variable arrayAccess | -| A.cs:32:27:32:37 | access to local variable fieldAccess | -| A.cs:33:28:33:39 | access to local variable methodAccess | -| A.cs:34:27:34:36 | access to local variable methodCall | -| A.cs:36:27:36:37 | access to local variable arrayAccess | -| A.cs:37:27:37:37 | access to local variable fieldAccess | -| A.cs:38:15:38:26 | access to local variable methodAccess | -| A.cs:39:27:39:36 | access to local variable methodCall | -| A.cs:48:16:48:28 | SSA def(varRef) | -| A.cs:50:9:50:14 | access to local variable varRef | -| Assert.cs:13:9:13:25 | [b (line 7): false] SSA def(s) | -| Assert.cs:13:9:13:25 | [b (line 7): true] SSA def(s) | -| Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:15:27:15:27 | access to local variable s | -| Assert.cs:21:9:21:25 | [b (line 7): false] SSA def(s) | -| Assert.cs:21:9:21:25 | [b (line 7): true] SSA def(s) | -| Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:23:27:23:27 | access to local variable s | -| Assert.cs:29:9:29:25 | [b (line 7): false] SSA def(s) | -| Assert.cs:29:9:29:25 | [b (line 7): true] SSA def(s) | -| Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:31:27:31:27 | access to local variable s | -| Assert.cs:45:9:45:25 | [b (line 7): true] SSA def(s) | -| Assert.cs:46:23:46:36 | [true, b (line 7): true] ... && ... | -| Assert.cs:46:36:46:36 | [b (line 7): true] access to parameter b | -| Assert.cs:47:27:47:27 | access to local variable s | -| Assert.cs:49:9:49:25 | [b (line 7): true] SSA def(s) | -| Assert.cs:50:24:50:38 | [false] ... \|\| ... | -| Assert.cs:50:37:50:38 | [false] !... | -| Assert.cs:50:38:50:38 | [b (line 7): true] access to parameter b | -| Assert.cs:51:27:51:27 | access to local variable s | -| B.cs:7:11:7:29 | SSA def(eqCallAlways) | -| B.cs:10:11:10:30 | SSA def(neqCallAlways) | -| B.cs:13:13:13:24 | access to local variable eqCallAlways | -| B.cs:13:13:13:36 | ...; | -| B.cs:15:9:16:26 | if (...) ... | -| B.cs:16:13:16:26 | ...; | -| B.cs:18:9:20:26 | if (...) ... | -| B.cs:18:25:18:27 | {...} | -| B.cs:20:13:20:26 | ...; | -| B.cs:22:9:24:37 | if (...) ... | -| B.cs:24:13:24:25 | access to local variable neqCallAlways | -| C.cs:10:16:10:23 | SSA def(o) | -| C.cs:11:13:11:30 | [false] !... | -| C.cs:11:15:11:29 | [true] !... | -| C.cs:11:17:11:28 | [false] !... | -| C.cs:16:9:19:9 | if (...) ... | -| C.cs:16:13:16:24 | [true] !... | -| C.cs:18:13:18:13 | access to local variable o | -| C.cs:40:13:40:35 | SSA def(s) | -| C.cs:42:9:42:9 | access to local variable s | -| C.cs:55:13:55:36 | SSA def(o2) | -| C.cs:57:9:57:10 | access to local variable o2 | -| C.cs:62:13:62:46 | SSA def(o1) | -| C.cs:64:9:64:10 | access to local variable o1 | -| C.cs:66:13:66:46 | SSA def(o2) | -| C.cs:68:9:68:10 | access to local variable o2 | -| C.cs:94:13:94:45 | SSA def(o) | -| C.cs:95:15:95:15 | access to local variable o | -| C.cs:96:13:96:13 | access to local variable o | -| C.cs:102:13:102:23 | SSA def(list) | -| C.cs:103:9:107:9 | foreach (... ... in ...) ... | -| C.cs:103:22:103:22 | Int32 x | -| C.cs:103:27:103:30 | access to parameter list | -| C.cs:103:27:103:30 | access to parameter list | -| C.cs:106:13:106:16 | access to parameter list | -| C.cs:159:9:159:16 | SSA def(s) | -| C.cs:162:13:162:13 | access to local variable s | -| C.cs:167:9:167:16 | SSA def(s) | -| C.cs:170:13:170:13 | access to local variable s | -| C.cs:177:13:177:13 | access to local variable s | -| C.cs:178:13:178:20 | SSA def(s) | -| C.cs:193:9:193:16 | SSA def(s) | -| C.cs:196:13:196:13 | access to local variable s | -| C.cs:197:13:197:20 | [b (line 192): true] SSA def(s) | -| C.cs:201:16:201:19 | true | -| C.cs:203:13:203:13 | access to local variable s | -| C.cs:204:13:204:20 | SSA def(s) | -| C.cs:210:13:210:35 | SSA def(s) | -| C.cs:214:13:214:20 | SSA def(s) | -| C.cs:217:9:218:25 | if (...) ... | -| C.cs:218:13:218:13 | access to local variable s | -| C.cs:222:13:222:20 | SSA def(s) | -| C.cs:223:9:223:9 | access to local variable s | -| C.cs:229:22:229:22 | access to local variable s | -| C.cs:229:33:229:40 | SSA def(s) | -| C.cs:233:9:233:9 | access to local variable s | -| C.cs:235:14:235:21 | SSA def(s) | -| C.cs:235:24:235:24 | access to local variable s | -| C.cs:235:35:235:42 | SSA def(s) | -| C.cs:237:13:237:13 | access to local variable s | -| C.cs:240:24:240:31 | SSA def(s) | -| C.cs:242:13:242:13 | access to local variable s | -| C.cs:248:15:248:22 | SSA def(a) | -| C.cs:249:9:249:9 | access to local variable a | -| C.cs:257:15:257:23 | SSA def(ia) | -| C.cs:258:18:258:26 | SSA def(sa) | -| C.cs:260:9:260:10 | access to local variable ia | -| C.cs:261:20:261:21 | access to local variable sa | -| C.cs:263:9:263:10 | access to local variable ia | -| C.cs:264:16:264:17 | access to local variable sa | -| D.cs:17:17:17:20 | null | -| D.cs:23:9:23:13 | access to parameter param | -| D.cs:26:32:26:36 | SSA param(param) | -| D.cs:32:9:32:13 | access to parameter param | -| D.cs:58:13:58:41 | SSA def(o5) | -| D.cs:61:9:62:26 | if (...) ... | -| D.cs:62:13:62:14 | access to local variable o5 | -| D.cs:68:13:68:34 | SSA def(o7) | -| D.cs:69:18:69:36 | ... && ... | -| D.cs:73:13:73:14 | access to local variable o7 | -| D.cs:75:13:75:34 | SSA def(o8) | -| D.cs:76:21:76:43 | ... ? ... : ... | -| D.cs:76:34:76:35 | 42 | -| D.cs:79:9:80:26 | if (...) ... | -| D.cs:81:9:82:26 | if (...) ... | -| D.cs:82:13:82:14 | access to local variable o8 | -| D.cs:82:13:82:26 | ...; | -| D.cs:83:9:84:26 | if (...) ... | -| D.cs:84:13:84:14 | access to local variable o8 | -| D.cs:89:15:89:44 | SSA def(xs) | -| D.cs:91:13:91:14 | access to local variable xs | -| D.cs:91:13:91:22 | ...; | -| D.cs:93:9:94:30 | if (...) ... | -| D.cs:94:13:94:30 | ...; | -| D.cs:94:21:94:22 | access to local variable xs | -| D.cs:96:9:99:9 | if (...) ... | -| D.cs:97:9:99:9 | {...} | -| D.cs:98:21:98:22 | access to local variable xs | -| D.cs:101:9:102:35 | if (...) ... | -| D.cs:102:13:102:35 | foreach (... ... in ...) ... | -| D.cs:102:26:102:26 | Int32 _ | -| D.cs:102:31:102:32 | access to local variable xs | -| D.cs:102:31:102:32 | access to local variable xs | -| D.cs:104:9:106:30 | if (...) ... | -| D.cs:105:19:105:20 | access to local variable xs | -| D.cs:106:17:106:18 | access to local variable xs | -| D.cs:118:9:118:30 | SSA def(x) | -| D.cs:120:13:120:13 | access to local variable x | -| D.cs:125:35:125:35 | SSA param(a) | -| D.cs:125:35:125:35 | SSA param(a) | -| D.cs:125:44:125:44 | SSA param(b) | -| D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:20:127:43 | ... ? ... : ... | -| D.cs:127:32:127:32 | 0 | -| D.cs:127:32:127:32 | 0 | -| D.cs:127:36:127:36 | access to parameter a | -| D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:20:128:43 | ... ? ... : ... | -| D.cs:128:32:128:32 | 0 | -| D.cs:128:32:128:32 | 0 | -| D.cs:128:36:128:36 | access to parameter b | -| D.cs:131:9:137:9 | {...} | -| D.cs:131:9:137:9 | {...} | -| D.cs:132:29:132:29 | access to local variable i | -| D.cs:132:29:132:29 | access to local variable i | -| D.cs:133:13:136:13 | {...} | -| D.cs:133:13:136:13 | {...} | -| D.cs:134:24:134:24 | access to parameter a | -| D.cs:135:24:135:24 | access to parameter b | -| D.cs:138:9:138:18 | ... ...; | -| D.cs:142:13:142:22 | ...; | -| D.cs:143:9:146:9 | for (...;...;...) ... | -| D.cs:143:25:143:25 | access to local variable i | -| D.cs:144:9:146:9 | {...} | -| D.cs:145:20:145:20 | access to parameter a | -| D.cs:149:36:149:38 | SSA param(obj) | -| D.cs:151:9:151:11 | access to parameter obj | -| D.cs:163:16:163:25 | SSA def(obj) | -| D.cs:168:9:170:9 | [exception: Exception] catch (...) {...} | -| D.cs:168:26:168:26 | [exception: Exception] Exception e | -| D.cs:171:9:171:11 | access to local variable obj | -| D.cs:240:9:240:16 | SSA def(o) | -| D.cs:241:21:241:37 | ... ? ... : ... | -| D.cs:241:29:241:32 | null | -| D.cs:241:36:241:37 | "" | -| D.cs:244:9:247:25 | if (...) ... | -| D.cs:245:13:245:13 | access to local variable o | -| D.cs:247:13:247:13 | access to local variable o | -| D.cs:249:13:249:38 | SSA def(o2) | -| D.cs:253:13:253:14 | access to local variable o2 | -| D.cs:258:16:258:23 | SSA def(o) | -| D.cs:266:9:267:25 | if (...) ... | -| D.cs:266:13:266:27 | [true] ... is ... | -| D.cs:267:13:267:13 | access to local variable o | -| D.cs:269:9:269:16 | SSA def(o) | -| D.cs:272:25:272:25 | access to local variable i | -| D.cs:272:39:272:39 | access to local variable i | -| D.cs:273:9:288:9 | {...} | -| D.cs:281:13:287:13 | if (...) ... | -| D.cs:283:17:283:24 | SSA def(o) | -| D.cs:285:28:285:30 | {...} | -| D.cs:286:17:286:30 | ...; | -| D.cs:290:9:291:25 | if (...) ... | -| D.cs:291:13:291:13 | access to local variable o | -| D.cs:291:13:291:25 | ...; | -| D.cs:293:9:294:25 | if (...) ... | -| D.cs:294:13:294:13 | access to local variable o | -| D.cs:296:16:296:26 | SSA def(prev) | -| D.cs:297:25:297:25 | access to local variable i | -| D.cs:298:9:302:9 | {...} | -| D.cs:300:17:300:20 | access to local variable prev | -| D.cs:304:16:304:23 | SSA def(s) | -| D.cs:307:13:311:13 | foreach (... ... in ...) ... | -| D.cs:312:13:313:29 | if (...) ... | -| D.cs:312:17:312:23 | [true] !... | -| D.cs:313:17:313:17 | access to local variable s | -| D.cs:316:16:316:23 | SSA def(r) | -| D.cs:318:16:318:19 | access to local variable stat | -| D.cs:318:16:318:62 | [false] ... && ... | -| D.cs:318:41:318:44 | access to local variable stat | -| D.cs:324:9:324:9 | access to local variable r | -| D.cs:351:15:351:22 | SSA def(a) | -| D.cs:355:9:356:21 | for (...;...;...) ... | -| D.cs:355:25:355:25 | access to local variable i | -| D.cs:356:13:356:13 | access to local variable a | -| D.cs:356:13:356:21 | ...; | -| D.cs:360:20:360:30 | SSA def(last) | -| D.cs:361:29:361:29 | access to local variable i | -| D.cs:363:13:363:16 | access to local variable last | -| D.cs:366:15:366:47 | SSA def(b) | -| D.cs:367:13:367:56 | [false] ... && ... | -| D.cs:370:9:373:9 | for (...;...;...) ... | -| D.cs:370:25:370:25 | access to local variable i | -| D.cs:371:9:373:9 | {...} | -| D.cs:372:13:372:13 | access to local variable b | -| D.cs:378:19:378:28 | SSA def(ioe) | -| D.cs:382:9:385:27 | if (...) ... | -| D.cs:385:13:385:15 | access to local variable ioe | -| D.cs:388:36:388:36 | SSA param(a) | -| D.cs:388:45:388:45 | SSA param(b) | -| D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:20:390:43 | ... ? ... : ... | -| D.cs:390:32:390:32 | 0 | -| D.cs:390:32:390:32 | 0 | -| D.cs:390:36:390:36 | access to parameter a | -| D.cs:393:21:393:21 | access to local variable i | -| D.cs:393:21:393:21 | access to local variable i | -| D.cs:394:9:396:9 | {...} | -| D.cs:394:9:396:9 | {...} | -| D.cs:395:20:395:20 | access to parameter a | -| D.cs:397:9:397:44 | ... ...; | -| D.cs:397:20:397:43 | ... ? ... : ... | -| D.cs:397:32:397:32 | 0 | -| D.cs:398:21:398:21 | access to local variable i | -| D.cs:399:9:401:9 | {...} | -| D.cs:400:20:400:20 | access to parameter b | -| D.cs:405:35:405:35 | SSA param(x) | -| D.cs:405:35:405:35 | SSA param(x) | -| D.cs:405:35:405:35 | SSA param(x) | -| D.cs:405:45:405:45 | SSA param(y) | -| D.cs:405:45:405:45 | SSA param(y) | -| D.cs:405:45:405:45 | SSA param(y) | -| D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:13:407:64 | [false] ... \|\| ... | -| D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:407:14:407:35 | [false] ... && ... | -| D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:42:407:42 | access to parameter x | -| D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:42:407:63 | [false] ... && ... | -| D.cs:407:55:407:55 | access to parameter y | -| D.cs:407:55:407:55 | access to parameter y | -| D.cs:409:9:410:25 | if (...) ... | -| D.cs:409:9:410:25 | if (...) ... | -| D.cs:410:13:410:13 | access to parameter y | -| D.cs:411:9:412:25 | if (...) ... | -| D.cs:412:13:412:13 | access to parameter x | -| E.cs:9:18:9:26 | SSA def(a2) | -| E.cs:10:22:10:54 | ... && ... | -| E.cs:11:16:11:24 | SSA def(a3) | -| E.cs:12:22:12:52 | ... && ... | -| E.cs:12:38:12:39 | access to local variable a2 | -| E.cs:14:13:14:14 | access to local variable a3 | -| E.cs:23:13:23:30 | SSA def(s1) | -| E.cs:24:18:24:41 | ... ? ... : ... | -| E.cs:24:33:24:36 | null | -| E.cs:26:9:27:26 | if (...) ... | -| E.cs:27:13:27:14 | access to local variable s1 | -| E.cs:51:22:51:33 | SSA def(slice) | -| E.cs:53:16:53:19 | access to local variable iter | -| E.cs:54:9:63:9 | {...} | -| E.cs:61:13:61:17 | access to local variable slice | -| E.cs:61:13:61:27 | ...; | -| E.cs:66:40:66:42 | SSA param(arr) | -| E.cs:70:13:70:50 | ...; | -| E.cs:70:22:70:49 | ... ? ... : ... | -| E.cs:70:36:70:36 | 0 | -| E.cs:72:9:73:23 | if (...) ... | -| E.cs:73:13:73:15 | access to parameter arr | -| E.cs:107:15:107:25 | SSA def(arr2) | -| E.cs:111:9:112:30 | for (...;...;...) ... | -| E.cs:111:25:111:25 | access to local variable i | -| E.cs:112:13:112:16 | access to local variable arr2 | -| E.cs:112:13:112:30 | ...; | -| E.cs:120:16:120:20 | [true] !... | -| E.cs:120:17:120:20 | access to local variable stop | -| E.cs:121:9:143:9 | {...} | -| E.cs:123:20:123:24 | [false] !... | -| E.cs:123:20:123:24 | [true] !... | -| E.cs:123:20:123:35 | [false] ... && ... | -| E.cs:123:20:123:35 | [true] ... && ... | -| E.cs:123:21:123:24 | access to local variable stop | -| E.cs:123:29:123:29 | access to local variable j | -| E.cs:124:13:142:13 | {...} | -| E.cs:125:33:125:35 | access to local variable obj | -| E.cs:128:21:128:23 | access to local variable obj | -| E.cs:137:25:137:34 | SSA def(obj) | -| E.cs:139:21:139:29 | continue; | -| E.cs:141:17:141:26 | ...; | -| E.cs:152:16:152:26 | SSA def(obj2) | -| E.cs:153:13:153:54 | [false] ... && ... | -| E.cs:158:9:159:28 | if (...) ... | -| E.cs:159:13:159:16 | access to local variable obj2 | -| E.cs:162:28:162:28 | SSA param(a) | -| E.cs:164:17:164:40 | ... ? ... : ... | -| E.cs:164:29:164:29 | 0 | -| E.cs:165:25:165:25 | access to local variable i | -| E.cs:165:32:165:32 | access to local variable i | -| E.cs:166:9:170:9 | {...} | -| E.cs:167:21:167:21 | access to parameter a | -| E.cs:173:29:173:31 | SSA param(obj) | -| E.cs:173:29:173:31 | SSA param(obj) | -| E.cs:175:19:175:42 | ... ? ... : ... | -| E.cs:175:33:175:37 | false | -| E.cs:177:9:179:9 | {...} | -| E.cs:178:13:178:15 | access to parameter obj | -| E.cs:180:9:183:9 | if (...) ... | -| E.cs:181:9:183:9 | {...} | -| E.cs:184:9:187:9 | if (...) ... | -| E.cs:186:13:186:15 | access to parameter obj | -| E.cs:190:29:190:29 | SSA param(o) | -| E.cs:192:17:192:17 | access to parameter o | -| E.cs:198:13:198:29 | [b (line 196): false] SSA def(o) | -| E.cs:198:13:198:29 | [b (line 196): true] SSA def(o) | -| E.cs:201:13:201:13 | access to local variable o | -| E.cs:203:13:203:13 | access to local variable o | -| E.cs:206:28:206:28 | SSA param(s) | -| E.cs:208:13:208:23 | [false] ... is ... | -| E.cs:210:16:210:16 | access to parameter s | -| E.cs:217:13:217:20 | [b (line 213): true] SSA def(x) | -| E.cs:218:9:218:9 | access to local variable x | -| E.cs:220:13:220:13 | access to local variable x | -| E.cs:227:13:227:20 | [b (line 223): true] SSA def(x) | -| E.cs:229:13:229:13 | access to local variable x | -| E.cs:229:13:229:25 | ...; | -| E.cs:230:9:230:9 | access to local variable x | -| E.cs:233:26:233:26 | SSA param(i) | -| E.cs:235:16:235:16 | access to parameter i | -| E.cs:238:26:238:26 | SSA param(i) | -| E.cs:240:21:240:21 | access to parameter i | -| E.cs:283:13:283:22 | [b (line 279): false] SSA def(o) | -| E.cs:283:13:283:22 | [b (line 279): true] SSA def(o) | -| E.cs:285:9:285:9 | access to local variable o | -| E.cs:285:9:285:9 | access to local variable o | -| E.cs:301:13:301:27 | SSA def(s) | -| E.cs:302:9:302:9 | access to local variable s | -| E.cs:319:29:319:30 | SSA param(s1) | -| E.cs:321:13:321:30 | [true] ... is ... | -| E.cs:321:14:321:21 | ... ?? ... | -| E.cs:321:20:321:21 | access to parameter s2 | -| E.cs:323:13:323:14 | access to parameter s1 | -| E.cs:330:13:330:36 | SSA def(x) | -| E.cs:331:9:331:9 | access to local variable x | -| E.cs:342:13:342:32 | SSA def(x) | -| E.cs:343:9:343:9 | access to local variable x | -| E.cs:348:17:348:36 | SSA def(x) | -| E.cs:349:9:349:9 | access to local variable x | -| E.cs:366:28:366:28 | SSA param(s) | -| E.cs:366:41:366:41 | access to parameter s | -| E.cs:374:17:374:31 | SSA def(s) | -| E.cs:375:20:375:20 | access to local variable s | -| E.cs:380:24:380:25 | SSA param(e1) | -| E.cs:380:24:380:25 | SSA param(e1) | -| E.cs:380:24:380:25 | SSA param(e1) | -| E.cs:380:30:380:31 | SSA param(e2) | -| E.cs:380:30:380:31 | SSA param(e2) | -| E.cs:380:30:380:31 | SSA param(e2) | -| E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:382:13:382:68 | [false] ... \|\| ... | -| E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:14:382:37 | [false] ... && ... | -| E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:382:28:382:29 | access to parameter e2 | -| E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:44:382:45 | access to parameter e1 | -| E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:382:44:382:67 | [false] ... && ... | -| E.cs:384:9:385:24 | if (...) ... | -| E.cs:384:9:385:24 | if (...) ... | -| E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:384:13:384:36 | [false] ... && ... | -| E.cs:384:27:384:28 | access to parameter e2 | -| E.cs:386:16:386:17 | access to parameter e1 | -| E.cs:386:27:386:28 | access to parameter e2 | -| E.cs:404:9:404:18 | SSA def(i) | -| E.cs:404:9:404:18 | SSA def(i) | -| E.cs:405:16:405:16 | access to local variable i | -| E.cs:417:24:417:40 | SSA capture def(i) | -| E.cs:417:34:417:34 | access to parameter i | -| E.cs:423:28:423:44 | SSA capture def(i) | -| E.cs:423:38:423:38 | access to parameter i | -| E.cs:430:29:430:45 | SSA capture def(i) | -| E.cs:430:39:430:39 | access to parameter i | -| E.cs:435:29:435:29 | SSA param(s) | -| E.cs:437:13:437:21 | [true] ... is ... | -| E.cs:439:13:439:13 | access to parameter s | -| F.cs:7:16:7:23 | SSA def(o) | -| F.cs:8:9:8:9 | access to local variable o | -| Forwarding.cs:7:16:7:23 | SSA def(s) | -| Forwarding.cs:9:13:9:30 | [false] !... | -| Forwarding.cs:14:9:17:9 | if (...) ... | -| Forwarding.cs:19:9:22:9 | if (...) ... | -| Forwarding.cs:19:13:19:23 | [false] !... | -| Forwarding.cs:24:9:27:9 | if (...) ... | -| Forwarding.cs:29:9:32:9 | if (...) ... | -| Forwarding.cs:34:9:37:9 | if (...) ... | -| Forwarding.cs:35:9:37:9 | {...} | -| Forwarding.cs:36:31:36:31 | access to local variable s | -| Forwarding.cs:40:27:40:27 | access to local variable s | -| GuardedString.cs:7:16:7:32 | SSA def(s) | -| GuardedString.cs:9:13:9:36 | [false] !... | -| GuardedString.cs:14:9:17:9 | if (...) ... | -| GuardedString.cs:14:13:14:41 | [false] !... | -| GuardedString.cs:19:9:20:40 | if (...) ... | -| GuardedString.cs:19:26:19:26 | 0 | -| GuardedString.cs:22:9:23:40 | if (...) ... | -| GuardedString.cs:22:25:22:25 | 0 | -| GuardedString.cs:25:9:26:40 | if (...) ... | -| GuardedString.cs:25:26:25:26 | 0 | -| GuardedString.cs:28:9:29:40 | if (...) ... | -| GuardedString.cs:28:25:28:26 | 10 | -| GuardedString.cs:31:9:32:40 | if (...) ... | -| GuardedString.cs:31:26:31:27 | 10 | -| GuardedString.cs:34:9:37:40 | if (...) ... | -| GuardedString.cs:34:26:34:26 | 0 | -| GuardedString.cs:35:31:35:31 | access to local variable s | -| NullAlwaysBad.cs:7:29:7:29 | SSA param(s) | -| NullAlwaysBad.cs:9:30:9:30 | access to parameter s | -| NullMaybeBad.cs:7:27:7:27 | access to parameter o | -| NullMaybeBad.cs:13:17:13:20 | null | -| Params.cs:14:17:14:20 | access to parameter args | -| Params.cs:20:12:20:15 | null | -| StringConcatenation.cs:14:16:14:23 | SSA def(s) | -| StringConcatenation.cs:15:16:15:16 | access to local variable s | -| StringConcatenation.cs:16:17:16:17 | access to local variable s | +| C.cs:64:9:64:10 | access to local variable o1 | Variable $@ may be null at this access because of $@ assignment. | C.cs:62:13:62:14 | o1 | o1 | C.cs:62:13:62:46 | Object o1 = ... | this | +| C.cs:68:9:68:10 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | C.cs:66:13:66:14 | o2 | o2 | C.cs:66:13:66:46 | Object o2 = ... | this | +| C.cs:95:15:95:15 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | C.cs:94:13:94:13 | o | o | C.cs:94:13:94:45 | Object o = ... | this | +| C.cs:103:27:103:30 | access to parameter list | Variable $@ may be null at this access because of $@ assignment. | C.cs:99:42:99:45 | list | list | C.cs:102:13:102:23 | ... = ... | this | +| C.cs:177:13:177:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:151:13:151:13 | s | s | C.cs:178:13:178:20 | ... = ... | this | +| C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this | +| C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this | +| C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this | +| D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this | +| D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this | +| D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this | +| D.cs:82:13:82:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | +| D.cs:84:13:84:14 | access to local variable o8 | Variable $@ may be null at this access because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this | +| D.cs:91:13:91:14 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:94:21:94:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:98:21:98:22 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:102:31:102:32 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:105:19:105:20 | access to local variable xs | Variable $@ may be null at this access because of $@ assignment. | D.cs:89:15:89:16 | xs | xs | D.cs:89:15:89:44 | Int32[] xs = ... | this | +| D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | +| D.cs:134:24:134:24 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | +| D.cs:135:24:135:24 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:44:125:44 | b | b | D.cs:128:20:128:28 | ... == ... | this | +| D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:127:20:127:28 | ... == ... | this | +| D.cs:145:20:145:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:125:35:125:35 | a | a | D.cs:139:13:139:21 | ... != ... | this | +| D.cs:151:9:151:11 | access to parameter obj | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:149:36:149:38 | obj | obj | D.cs:152:17:152:27 | ... != ... | this | +| D.cs:171:9:171:11 | access to local variable obj | Variable $@ may be null at this access because of $@ assignment. | D.cs:163:16:163:18 | obj | obj | D.cs:163:16:163:25 | Object obj = ... | this | +| D.cs:245:13:245:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:228:16:228:16 | o | o | D.cs:240:9:240:16 | ... = ... | this | +| D.cs:253:13:253:14 | access to local variable o2 | Variable $@ may be null at this access because of $@ assignment. | D.cs:249:13:249:14 | o2 | o2 | D.cs:249:13:249:38 | String o2 = ... | this | +| D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:269:9:269:16 | ... = ... | this | +| D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | D.cs:258:16:258:16 | o | o | D.cs:283:17:283:24 | ... = ... | this | +| D.cs:356:13:356:13 | access to local variable a | Variable $@ may be null at this access because of $@ assignment. | D.cs:351:15:351:15 | a | a | D.cs:351:15:351:22 | Int32[] a = ... | this | +| D.cs:363:13:363:16 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | D.cs:360:20:360:23 | last | last | D.cs:360:20:360:30 | String last = ... | this | +| D.cs:372:13:372:13 | access to local variable b | Variable $@ may be null at this access because of $@ assignment. | D.cs:366:15:366:15 | b | b | D.cs:366:15:366:47 | Int32[] b = ... | this | +| D.cs:395:20:395:20 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:36:388:36 | a | a | D.cs:390:20:390:28 | ... == ... | this | +| D.cs:400:20:400:20 | access to parameter b | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:388:45:388:45 | b | b | D.cs:397:20:397:28 | ... == ... | this | +| E.cs:12:38:12:39 | access to local variable a2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:9:18:9:19 | a2 | a2 | E.cs:9:18:9:26 | Int64[][] a2 = ... | this | +| E.cs:14:13:14:14 | access to local variable a3 | Variable $@ may be null at this access because of $@ assignment. | E.cs:11:16:11:17 | a3 | a3 | E.cs:11:16:11:24 | Int64[] a3 = ... | this | +| E.cs:27:13:27:14 | access to local variable s1 | Variable $@ may be null at this access because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:23:13:23:30 | ... = ... | this | +| E.cs:35:9:35:12 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | E.cs:32:16:32:19 | last | last | E.cs:32:16:32:26 | String last = ... | this | +| E.cs:43:13:43:16 | access to local variable last | Variable $@ may be null at this access because of $@ assignment. | E.cs:32:16:32:19 | last | last | E.cs:37:9:37:19 | ... = ... | this | +| E.cs:61:13:61:17 | access to local variable slice | Variable $@ may be null at this access because of $@ assignment. | E.cs:51:22:51:26 | slice | slice | E.cs:51:22:51:33 | List slice = ... | this | +| E.cs:73:13:73:15 | access to parameter arr | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:66:40:66:42 | arr | arr | E.cs:70:22:70:32 | ... == ... | this | +| E.cs:112:13:112:16 | access to local variable arr2 | Variable $@ may be null at this access because of $@ assignment. | E.cs:107:15:107:18 | arr2 | arr2 | E.cs:107:15:107:25 | Int32[] arr2 = ... | this | +| E.cs:167:21:167:21 | access to parameter a | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:162:28:162:28 | a | a | E.cs:164:17:164:25 | ... == ... | this | +| E.cs:192:17:192:17 | access to parameter o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:190:29:190:29 | o | o | E.cs:193:17:193:17 | access to parameter o | this | +| E.cs:201:13:201:13 | access to local variable o | Variable $@ may be null at this access because of $@ assignment. | E.cs:198:13:198:13 | o | o | E.cs:198:13:198:29 | String o = ... | this | +| E.cs:218:9:218:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:215:13:215:13 | x | x | E.cs:217:13:217:20 | ... = ... | this | +| E.cs:229:13:229:13 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:225:13:225:13 | x | x | E.cs:227:13:227:20 | ... = ... | this | +| E.cs:235:16:235:16 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:233:26:233:26 | i | i | E.cs:233:26:233:26 | i | this | +| E.cs:240:21:240:21 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:238:26:238:26 | i | i | E.cs:238:26:238:26 | i | this | +| E.cs:285:9:285:9 | access to local variable o | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:283:13:283:13 | o | o | E.cs:284:9:284:9 | access to local variable o | this | +| E.cs:302:9:302:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:301:13:301:13 | s | s | E.cs:301:13:301:27 | String s = ... | this | +| E.cs:343:9:343:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:342:13:342:13 | x | x | E.cs:342:13:342:32 | String x = ... | this | +| E.cs:349:9:349:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:348:17:348:17 | x | x | E.cs:348:17:348:36 | dynamic x = ... | this | +| E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because the parameter has a null default value. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | +| E.cs:375:20:375:20 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:374:17:374:17 | s | s | E.cs:374:17:374:31 | String s = ... | this | +| E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | +| E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | +| E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this | +| E.cs:444:13:444:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:23:437:31 | ... is ... | this | +| E.cs:444:13:444:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:447:23:447:35 | ... is ... | this | +| E.cs:459:13:459:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:23:437:31 | ... is ... | this | +| E.cs:459:13:459:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:447:23:447:35 | ... is ... | this | +| GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this | +| NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this | +| Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this | +| StringConcatenation.cs:16:17:16:17 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | StringConcatenation.cs:14:16:14:16 | s | s | StringConcatenation.cs:14:16:14:23 | String s = ... | this | diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/CookieWithoutHttpOnly.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/CookieWithoutHttpOnly.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/Program.cs similarity index 77% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/Program.cs index 4f51bdb5bc5..ba92978ec49 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/CookieBuilder/Program.cs @@ -10,14 +10,14 @@ public class Startup { services.AddAuthentication().AddCookie(o => { - o.Cookie.HttpOnly = false; - o.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; + o.Cookie.HttpOnly = false; // $ Alert + o.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; }); services.AddSession(options => { - options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; - options.Cookie.HttpOnly = false; + options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; + options.Cookie.HttpOnly = false; // $ Alert }); } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.expected new file mode 100644 index 00000000000..1e71f06bfb6 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.expected @@ -0,0 +1,4 @@ +| Program.cs:5:9:5:48 | call to method Append | Cookie attribute 'HttpOnly' is not set to true. | +| Program.cs:10:29:10:73 | object creation of type CookieOptions | Cookie attribute 'HttpOnly' is not set to true. | +| Program.cs:42:29:42:73 | object creation of type CookieOptions | Cookie attribute 'HttpOnly' is not set to true. | +| Program.cs:49:29:49:94 | object creation of type CookieOptions | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/Program.cs similarity index 80% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/Program.cs index 6f12958fba7..4df46f20c8c 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/NoPolicy/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/NoPolicy/Program.cs @@ -1,11 +1,29 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller { + public void CookieDefault() + { + Response.Cookies.Append("auth", "value"); // $Alert // BAD: HttpOnly is set to false by default + } + + public void CookieDefault2() + { + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $Alert + Response.Cookies.Append("auth", "value", cookieOptions); // BAD: HttpOnly is set to false by default + } + public void CookieDelete() { var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); Response.Cookies.Delete("auth", cookieOptions); // GOOD: Delete call } + void CookieDirectFalseForgery() + { + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + cookieOptions.HttpOnly = false; + Response.Cookies.Append("antiforgerytoken", "secret", cookieOptions); // GOOD: not an auth cookie + } + void CookieDirectTrue() { var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); @@ -21,21 +39,14 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller void CookieDirectFalse() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $Alert cookieOptions.HttpOnly = false; Response.Cookies.Append("auth", "secret", cookieOptions); // BAD } - void CookieDirectFalseForgery() - { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); - cookieOptions.HttpOnly = false; - Response.Cookies.Append("antiforgerytoken", "secret", cookieOptions); // GOOD: not an auth cookie - } - void CookieDirectFalseInitializer() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = false }; + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = false }; // $Alert Response.Cookies.Append("auth", "secret", cookieOptions); // BAD } @@ -56,16 +67,16 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller void CookieIntermediateFalse() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $MISSING:Alert bool v = false; cookieOptions.HttpOnly = v; - Response.Cookies.Append("auth", "secret", cookieOptions); // BAD + Response.Cookies.Append("auth", "secret", cookieOptions); // BAD, but not detected } void CookieIntermediateFalseInitializer() { bool v = false; - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = v }; - Response.Cookies.Append("auth", "secret", cookieOptions); // BAD + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { HttpOnly = v }; // $MISSING:Alert + Response.Cookies.Append("auth", "secret", cookieOptions); // BAD, but not detected } } diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/CookieWithoutHttpOnly.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/UseCookiePolicyCallback/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/CookieWithoutHttpOnly.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/Program.cs similarity index 92% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/Program.cs index 115f448a39b..cdb8a9081d1 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyAlways/Program.cs @@ -20,6 +20,6 @@ public class Startup // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { - app.UseCookiePolicy(new CookiePolicyOptions() { HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.Always}); + app.UseCookiePolicy(new CookiePolicyOptions() { HttpOnly = Microsoft.AspNetCore.CookiePolicy.HttpOnlyPolicy.Always }); } } diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/CookieWithoutHttpOnly.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyAlways/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/CookieWithoutHttpOnly.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/Program.cs similarity index 88% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/Program.cs index 417b1f77277..6d44521e85f 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyCallback/Program.cs @@ -6,6 +6,11 @@ using Microsoft.AspNetCore.Http; public class MyController : Microsoft.AspNetCore.Mvc.Controller { public void CookieDefault() + { + Response.Cookies.Append("auth", "secret"); // GOOD: HttpOnly is set in callback + } + + public void CookieDefault2() { var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); Response.Cookies.Append("auth", "secret", cookieOptions); // GOOD: HttpOnly is set in callback diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/CookieWithoutHttpOnly.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/CookieWithoutHttpOnly.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/Program.cs similarity index 85% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/Program.cs index 7be845aadfe..187a02e71dc 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyNone/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/PolicyNone/Program.cs @@ -5,12 +5,12 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller { public void CookieDefault() { - Response.Cookies.Append("auth", "secret"); // Bad: HttpOnly policy set to None + Response.Cookies.Append("auth", "secret"); // $ Alert // Bad: HttpOnly policy set to None } public void CookieDefault2() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $ Alert Response.Cookies.Append("auth", "secret", cookieOptions); // Bad: HttpOnly policy set to None } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/options b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/options new file mode 100644 index 00000000000..3282ecf48f6 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/AspNetCore/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.expected new file mode 100644 index 00000000000..3a3d027e1f9 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.expected @@ -0,0 +1,3 @@ +| Program.cs:16:22:16:59 | object creation of type HttpCookie | Cookie attribute 'HttpOnly' is not set to true. | +| Program.cs:32:22:32:59 | object creation of type HttpCookie | Cookie attribute 'HttpOnly' is not set to true. | +| Program.cs:38:22:38:80 | object creation of type HttpCookie | Cookie attribute 'HttpOnly' is not set to true. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/Program.cs similarity index 71% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/Program.cs index 6ab389f63cc..3e63963712f 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/Program.cs @@ -11,6 +11,16 @@ class Program var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = true }; // GOOD } + void CookieDefault() + { + var cookie = new System.Web.HttpCookie("sessionID"); // $Alert // BAD: httpOnlyCookies is set to false by default + } + + void CookieDefaultForgery() + { + var cookie = new System.Web.HttpCookie("anticsrftoken"); // GOOD: not an auth cookie + } + void CookieForgeryDirectFalse() { var cookie = new System.Web.HttpCookie("antiforgerytoken"); @@ -19,13 +29,13 @@ class Program void CookieDirectFalse() { - var cookie = new System.Web.HttpCookie("sessionID"); + var cookie = new System.Web.HttpCookie("sessionID"); // $Alert cookie.HttpOnly = false; // BAD } void CookieDirectFalseInitializer() { - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = false }; // BAD + var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = false }; // $Alert // BAD } void CookieIntermediateTrue() @@ -43,7 +53,7 @@ class Program void CookieIntermediateFalse() { - var cookie = new System.Web.HttpCookie("sessionID"); + var cookie = new System.Web.HttpCookie("sessionID"); // MISSING:Alert bool v = false; cookie.HttpOnly = v; // BAD } @@ -51,6 +61,6 @@ class Program void CookieIntermediateFalseInitializer() { bool v = false; - var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = v }; // BAD + var cookie = new System.Web.HttpCookie("sessionID") { HttpOnly = v }; // $MISSING:Alert // BAD } } diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/Web.config similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseSystemWeb/Web.config rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesFalse/Web.config diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/CookieWithoutHttpOnly.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlyAspNetCore/UseCookiePolicyCallback/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/CookieWithoutHttpOnly.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/CookieWithoutHttpOnly.qlref b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/CookieWithoutHttpOnly.qlref new file mode 100644 index 00000000000..9cfe2cba268 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/CookieWithoutHttpOnly.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-1004/CookieWithoutHttpOnly.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Program.cs new file mode 100644 index 00000000000..cd60e4df262 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Program.cs @@ -0,0 +1,7 @@ +class Program +{ + void CookieDefault() + { + var cookie = new System.Web.HttpCookie("auth"); // GOOD: httpOnlyCookies is set to true in config + } +} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Web.config similarity index 70% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Web.config rename to csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Web.config index fc262149211..8bb37742741 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/Web.config +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/HttpOnlyCookiesTrue/Web.config @@ -1,6 +1,6 @@ - + diff --git a/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/options b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/options new file mode 100644 index 00000000000..9414f8d8ef8 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-1004/HttpOnlyCookie/SystemWeb/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.cs b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.cs new file mode 100644 index 00000000000..48073a309fd --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.cs @@ -0,0 +1,18 @@ +using System; +using System.Web; + +public class AddXFrameOptions : IHttpHandler +{ + + public void ProcessRequest(HttpContext ctx) + { + } + + public bool IsReusable + { + get + { + return true; + } + } +} diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/HttpOnly.expected b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/HttpCookiesTrue/HttpOnly.expected rename to csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.qlref b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.qlref new file mode 100644 index 00000000000..b8a963200e5 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/MissingXFrameOptions.qlref @@ -0,0 +1 @@ +Security Features/CWE-451/MissingXFrameOptions.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/Web.config new file mode 100644 index 00000000000..ce837c2b981 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/Web.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/options b/csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/options similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/options rename to csharp/ql/test/query-tests/Security Features/CWE-451/MissingXFrameOptions/WebConfigAddedHeaderInLocation/options diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected index c3377fcb04f..88d0baa4943 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected @@ -11,9 +11,9 @@ edges | BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:13:31:13:84 | object creation of type MemoryStream | provenance | MaD:1 | | BinaryFormatterUntrustedInputBad.cs:13:71:13:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | provenance | MaD:3 | | BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | provenance | MaD:2 | -| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | provenance | MaD:1 | +| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | provenance | MaD:1 | | BinaryFormatterUntrustedInputBad.cs:23:73:23:76 | access to parameter data : TextBox | BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | provenance | MaD:3 | -| BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | provenance | MaD:4 | +| BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | provenance | MaD:4 | | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | MaD:1 | | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | MaD:3 | | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | MaD:2 | @@ -34,14 +34,14 @@ models | 1 | Summary: System.IO; MemoryStream; false; MemoryStream; (System.Byte[]); ; Argument[0].Element; Argument[this]; taint; manual | | 2 | Summary: System.Text; Encoding; true; GetBytes; (System.String); ; Argument[0]; ReturnValue; taint; manual | | 3 | Summary: System.Web.UI.WebControls; TextBox; false; get_Text; (); ; Argument[this]; ReturnValue; taint; manual | -| 4 | Summary: System; Convert; false; FromBase64String; (System.String); ; Argument[0]; ReturnValue.Element; taint; manual | +| 4 | Summary: System; Convert; false; FromBase64String; (System.String); ; Argument[0]; ReturnValue; taint; manual | nodes | BinaryFormatterUntrustedInputBad.cs:13:31:13:84 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream | | BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | semmle.label | call to method GetBytes : Byte[] | | BinaryFormatterUntrustedInputBad.cs:13:71:13:77 | access to parameter textBox : TextBox | semmle.label | access to parameter textBox : TextBox | | BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | semmle.label | access to property Text : String | | BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream | -| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | semmle.label | call to method FromBase64String : Byte[] [element] : Object | +| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | semmle.label | call to method FromBase64String : Byte[] | | BinaryFormatterUntrustedInputBad.cs:23:73:23:76 | access to parameter data : TextBox | semmle.label | access to parameter data : TextBox | | BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | semmle.label | access to property Text : String | | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-611/stubs.cs b/csharp/ql/test/query-tests/Security Features/CWE-611/stubs.cs index 04c39623cac..6375ac035c1 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-611/stubs.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-611/stubs.cs @@ -1,3 +1,9 @@ -namespace System.Web; +namespace System +{ + public class Uri { } -public interface IHtmlString { } + namespace Web + { + public interface IHtmlString { } + } +} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/RequireSSL.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/CookieWithoutSecure.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/CookieBuilder/RequireSSL.expected rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/CookieWithoutSecure.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/Program.cs similarity index 89% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/Program.cs index 4f51bdb5bc5..245c693f513 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieHttpOnlyFalseAspNetCore/CookieBuilder/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/CookieBuilder/Program.cs @@ -11,12 +11,12 @@ public class Startup services.AddAuthentication().AddCookie(o => { o.Cookie.HttpOnly = false; - o.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; + o.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; // $ Alert }); services.AddSession(options => { - options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; + options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.None; // $ Alert options.Cookie.HttpOnly = false; }); } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.expected new file mode 100644 index 00000000000..4c2bbcca1ca --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.expected @@ -0,0 +1,4 @@ +| Program.cs:5:9:5:48 | call to method Append | Cookie attribute 'Secure' is not set to true. | +| Program.cs:10:29:10:73 | object creation of type CookieOptions | Cookie attribute 'Secure' is not set to true. | +| Program.cs:35:29:35:73 | object creation of type CookieOptions | Cookie attribute 'Secure' is not set to true. | +| Program.cs:42:29:42:92 | object creation of type CookieOptions | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/Program.cs similarity index 78% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/Program.cs index b1ad1aede91..733e2d71fcc 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/NoPolicy/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/NoPolicy/Program.cs @@ -1,5 +1,16 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller { + public void CookieDefault() + { + Response.Cookies.Append("name", "value"); // $Alert // BAD: Secure is set to false by default + } + + public void CookieDefault2() + { + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $Alert + Response.Cookies.Append("name", "value", cookieOptions); // BAD: Secure is set to false by default + } + public void CookieDelete() { var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); @@ -21,14 +32,14 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller void CookieDirectFalse() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $Alert cookieOptions.Secure = false; Response.Cookies.Append("auth", "secret", cookieOptions); // BAD } void CookieDirectFalseInitializer() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = false }; + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = false }; // $Alert Response.Cookies.Append("auth", "secret", cookieOptions); // BAD } @@ -49,16 +60,16 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller void CookieIntermediateFalse() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $MISSING:Alert bool v = false; cookieOptions.Secure = v; - Response.Cookies.Append("auth", "secret", cookieOptions); // BAD + Response.Cookies.Append("auth", "secret", cookieOptions); // BAD, but not detected } void CookieIntermediateFalseInitializer() { bool v = false; - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = v }; - Response.Cookies.Append("auth", "secret", cookieOptions); // BAD + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions() { Secure = v }; // $MISSING:Alert + Response.Cookies.Append("auth", "secret", cookieOptions); // BAD, but not detected } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.expected new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.expected @@ -0,0 +1 @@ + diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/Program.cs similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyAlways/Program.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.expected new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.expected @@ -0,0 +1 @@ + diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/Program.cs similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyCallback/Program.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/RequireSSL.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/CookieWithoutSecure.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/RequireSSL.expected rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/CookieWithoutSecure.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/Program.cs similarity index 86% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/Program.cs index 9db1f5380d4..989412e3d02 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyNone/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/PolicyNone/Program.cs @@ -5,12 +5,12 @@ public class MyController : Microsoft.AspNetCore.Mvc.Controller { public void CookieDefault() { - Response.Cookies.Append("auth", "secret"); // Bad: Secure policy set to None + Response.Cookies.Append("auth", "secret"); // $ Alert // Bad: Secure policy set to None } public void CookieDefault2() { - var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); + var cookieOptions = new Microsoft.AspNetCore.Http.CookieOptions(); // $ Alert Response.Cookies.Append("auth", "secret", cookieOptions); // Bad: Secure policy set to None } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/options b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/options new file mode 100644 index 00000000000..3282ecf48f6 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/AspNetCore/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.expected new file mode 100644 index 00000000000..4ef56f10d55 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.expected @@ -0,0 +1,3 @@ +| Program.cs:5:22:5:60 | object creation of type HttpCookie | Cookie attribute 'Secure' is not set to true. | +| Program.cs:34:22:34:60 | object creation of type HttpCookie | Cookie attribute 'Secure' is not set to true. | +| Program.cs:40:22:40:79 | object creation of type HttpCookie | Cookie attribute 'Secure' is not set to true. | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/Program.cs similarity index 68% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Program.cs rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/Program.cs index 3a6d80b50c9..250b1f7780e 100644 --- a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseSystemWeb/Program.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/Program.cs @@ -1,5 +1,10 @@ class Program { + void CookieDefault() + { + var cookie = new System.Web.HttpCookie("cookieName"); // $Alert // BAD: requireSSL is set to false by default + } + void CookieDirectTrue() { var cookie = new System.Web.HttpCookie("cookieName"); @@ -11,17 +16,6 @@ class Program var cookie = new System.Web.HttpCookie("cookieName") { Secure = true }; // GOOD } - void CookieDirectFalse() - { - var cookie = new System.Web.HttpCookie("cookieName"); - cookie.Secure = false; // BAD - } - - void CookieDirectFalseInitializer() - { - var cookie = new System.Web.HttpCookie("cookieName") { Secure = false }; // BAD - } - void CookieIntermediateTrue() { var cookie = new System.Web.HttpCookie("cookieName"); @@ -35,16 +29,27 @@ class Program var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // GOOD: should track local data flow } - void CookieIntermediateFalse() + void CookieDirectFalse() { - var cookie = new System.Web.HttpCookie("cookieName"); + var cookie = new System.Web.HttpCookie("cookieName"); // $Alert + cookie.Secure = false; // BAD + } + + void CookieDirectFalseInitializer() + { + var cookie = new System.Web.HttpCookie("cookieName") { Secure = false }; // $Alert // BAD + } + + void CookieIntermediateFalse() + { + var cookie = new System.Web.HttpCookie("cookieName"); // $MISSING:Alert bool v = false; - cookie.Secure = v; // BAD + cookie.Secure = v; // BAD, but not detected } void CookieIntermediateFalseInitializer() { bool v = false; - var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // BAD + var cookie = new System.Web.HttpCookie("cookieName") { Secure = v }; // $MISSING:Alert // BAD, but not detected } } diff --git a/csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/Web.config similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-1004/CookieWithoutHttpOnlySystemWeb/ConfigEmpty/Web.config rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/Web.config diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/options b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/options new file mode 100644 index 00000000000..9414f8d8ef8 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLFalse/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/RequireSSL.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/CookieWithoutSecure.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyAlways/RequireSSL.expected rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/CookieWithoutSecure.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/Program.cs new file mode 100644 index 00000000000..8f2c4cce0a4 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/Program.cs @@ -0,0 +1,7 @@ +class Program +{ + void CookieDefault() + { + var cookie = new System.Web.HttpCookie("cookieName"); // GOOD: requireSSL is set to true in config + } +} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/Web.config similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/Web.config rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/FormsTrue/Web.config diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/RequireSSL.expected b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/CookieWithoutSecure.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLAspNetCore/UseCookiePolicyCallback/RequireSSL.expected rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/CookieWithoutSecure.expected diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/CookieWithoutSecure.qlref b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/CookieWithoutSecure.qlref new file mode 100644 index 00000000000..bb0094e7d8f --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/CookieWithoutSecure.qlref @@ -0,0 +1,2 @@ +query: Security Features/CWE-614/CookieWithoutSecure.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/Program.cs b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/Program.cs new file mode 100644 index 00000000000..8f2c4cce0a4 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/Program.cs @@ -0,0 +1,7 @@ +class Program +{ + void CookieDefault() + { + var cookie = new System.Web.HttpCookie("cookieName"); // GOOD: requireSSL is set to true in config + } +} diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/Web.config b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/Web.config similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/Web.config rename to csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/HttpCookiesTrue/Web.config diff --git a/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/options b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/options new file mode 100644 index 00000000000..488c2bc3705 --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-614/InsecureCookie/SystemWeb/RequireSSLTrue/options @@ -0,0 +1,3 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../../../../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj +semmle-extractor-options: ${testdir}/../../../../../../../resources/stubs/System.Web.cs diff --git a/csharp/ql/test/query-tests/standalone/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected b/csharp/ql/test/query-tests/standalone/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected index 25ed39bebb7..b00cfb3115e 100644 --- a/csharp/ql/test/query-tests/standalone/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected +++ b/csharp/ql/test/query-tests/standalone/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected @@ -1,2 +1,2 @@ -| ConstantCondition.cs:15:13:15:26 | ... is ... | Condition always evaluates to 'false'. | -| ConstantCondition.cs:15:24:15:26 | access to type Int32 | Pattern never matches. | +| ConstantCondition.cs:15:13:15:26 | ... is ... | Condition always evaluates to 'false'. | ConstantCondition.cs:15:13:15:26 | ... is ... | dummy | +| ConstantCondition.cs:15:24:15:26 | access to type Int32 | Pattern never matches. | ConstantCondition.cs:15:24:15:26 | access to type Int32 | dummy | diff --git a/csharp/ql/test/resources/stubs/System.Web.cs b/csharp/ql/test/resources/stubs/System.Web.cs index f0572742f88..c15b871095f 100644 --- a/csharp/ql/test/resources/stubs/System.Web.cs +++ b/csharp/ql/test/resources/stubs/System.Web.cs @@ -178,6 +178,13 @@ namespace System.Web public string RawUrl { get; set; } public HttpCookieCollection Cookies => null; public bool IsAuthenticated { get; set; } + public NameValueCollection Form { get; } + public NameValueCollection Headers { get; } + public NameValueCollection Params { get; } + public string UserAgent { get; } + public Uri UrlReferrer { get; } + public NameValueCollection ServerVariables { get; } + public String this[String key] => null; } public class HttpRequestWrapper : System.Web.HttpRequestBase diff --git a/csharp/scripts/create-extractor-pack.sh b/csharp/scripts/create-extractor-pack.sh index c3e6090a635..a1b5a044ebc 100755 --- a/csharp/scripts/create-extractor-pack.sh +++ b/csharp/scripts/create-extractor-pack.sh @@ -21,7 +21,7 @@ mkdir -p extractor-pack mkdir -p extractor-pack/tools/${platform} function dotnet_publish { - dotnet publish --self-contained --configuration Release --runtime ${dotnet_platform} -p:RuntimeFrameworkVersion=9.0.0 $1 --output extractor-pack/tools/${platform} + dotnet publish --self-contained --configuration Release --runtime ${dotnet_platform} -p:RuntimeFrameworkVersion=9.0.5 $1 --output extractor-pack/tools/${platform} } dotnet tool restore diff --git a/csharp/scripts/stubs/helpers.py b/csharp/scripts/stubs/helpers.py index d1f3bdb59c2..f3810e4f8cc 100644 --- a/csharp/scripts/stubs/helpers.py +++ b/csharp/scripts/stubs/helpers.py @@ -118,7 +118,7 @@ class Generator: bqrsFile = os.path.join(rawOutputDir, outputName + '.bqrs') jsonFile = os.path.join(rawOutputDir, outputName + '.json') - sdk_version = '9.0.100' + sdk_version = '9.0.300' print("\n* Creating new global.json file and setting SDK to " + sdk_version) self.run_cmd(['dotnet', 'new', 'globaljson', '--force', '--sdk-version', sdk_version, '--output', self.workDir]) diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua index a48a93c073c..13ede12a237 100644 --- a/csharp/tools/tracing-config.lua +++ b/csharp/tools/tracing-config.lua @@ -221,9 +221,9 @@ function RegisterExtractorPack(id) } local posixMatchers = { DotnetMatcherBuild, - CreatePatternMatcher({ '^mcs%.exe$', '^csc%.exe$' }, MatchCompilerName, + CreatePatternMatcher({ '^mcs%.exe$', '^csc%.exe$', '^csc$' }, MatchCompilerName, extractor, { - prepend = { '--compiler', '"${compiler}"' }, + prepend = { '--compiler', '${compiler}' }, order = ORDER_BEFORE }), MsBuildMatcher, diff --git a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst index 94b291a69b8..3c2f44fcf15 100644 --- a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst +++ b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst @@ -74,7 +74,7 @@ To use the starter workspace: * Make sure you include the submodules, either by using ``git clone --recursive``, or using by ``git submodule update --init --remote`` after cloning. * Use ``git submodule update --remote`` regularly to keep the submodules up to date. -#. In VS Code, use the **File** > **Open Workspace** option to open the ``vscode-codeql-starter.code-workspace`` file from your checkout of the workspace repository. +#. In VS Code, use the **File** > **Open Workspace from File** option to open the ``vscode-codeql-starter.code-workspace`` file from your checkout of the workspace repository. Remember to update the ``ql`` submodule in the starter workspace periodically to ensure that it remains compatible with newer versions of the VS Code extension and the CodeQL CLI. diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp.rst index e04cdac3deb..2f2381f32ad 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-cpp.rst @@ -314,7 +314,7 @@ Exercise 2: Write a query that finds all hard-coded strings used to create a ``h Exercise 3: Write a class that represents flow sources from ``getenv``. (`Answer <#exercise-3>`__) -Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``getenv`` to ``gethostbyname``. (`Answer <#exercise-4>`__) +Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``getenv`` to ``gethostbyname``. (`Answer <#exercise-4>`__ `Answer as a path query <#path-query-example>`__) Answers ------- @@ -411,6 +411,48 @@ Exercise 4 GetenvToGethostbynameFlow::flow(source, sink) select getenv, fc +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the answer to exercise 4 above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id getenv-to-gethostbyname + */ + + import cpp + import semmle.code.cpp.dataflow.new.DataFlow + + class GetenvSource extends DataFlow::Node { + GetenvSource() { this.asIndirectExpr(1).(FunctionCall).getTarget().hasGlobalName("getenv") } + } + + module GetenvToGethostbynameConfiguration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof GetenvSource } + + predicate isSink(DataFlow::Node sink) { + exists(FunctionCall fc | + sink.asIndirectExpr(1) = fc.getArgument(0) and + fc.getTarget().hasName("gethostbyname") + ) + } + } + + module GetenvToGethostbynameFlow = DataFlow::Global; + + import GetenvToGethostbynameFlow::PathGraph + + from GetenvToGethostbynameFlow::PathNode source, GetenvToGethostbynameFlow::PathNode sink + where GetenvToGethostbynameFlow::flowPath(source, sink) + select sink.getNode(), source, sink, "This file access uses data from $@.", + source, "user-controllable input." + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-csharp.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-csharp.rst index 7e60956a5a9..af196d314ed 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-csharp.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-csharp.rst @@ -287,7 +287,7 @@ Exercise 2: Find all hard-coded strings passed to ``System.Uri``, using global d Exercise 3: Define a class that represents flow sources from ``System.Environment.GetEnvironmentVariable``. (`Answer <#exercise-3>`__) -Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``System.Environment.GetEnvironmentVariable`` to ``System.Uri``. (`Answer <#exercise-4>`__) +Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``System.Environment.GetEnvironmentVariable`` to ``System.Uri``. (`Answer <#exercise-4>`__ `Answer as a path query <#path-query-example>`__) Extending library data flow --------------------------- @@ -537,6 +537,48 @@ This can be adapted from the ``SystemUriFlow`` class: } } +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the answer to exercise 4 above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id getenv-to-gethostbyname + */ + + import csharp + + class EnvironmentVariableFlowSource extends DataFlow::ExprNode { + EnvironmentVariableFlowSource() { + this.getExpr().(MethodCall).getTarget().hasQualifiedName("System.Environment.GetEnvironmentVariable") + } + } + + module EnvironmentToUriConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { + src instanceof EnvironmentVariableFlowSource + } + + predicate isSink(DataFlow::Node sink) { + exists(Call c | c.getTarget().(Constructor).getDeclaringType().hasQualifiedName("System.Uri") + and sink.asExpr()=c.getArgument(0)) + } + } + + module EnvironmentToUriFlow = DataFlow::Global; + + import EnvironmentToUriFlow::PathGraph + + from EnvironmentToUriFlow::PathNode src, EnvironmentToUriFlow::PathNode sink + where EnvironmentToUriFlow::flowPath(src, sink) + select src.getNode(), src, sink, "This environment variable constructs a 'System.Uri' $@.", sink, "here" + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-go.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-go.rst index 537a2308203..3b71f28c0ce 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-go.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-go.rst @@ -224,7 +224,7 @@ The resulting module has an identical signature to the one obtained from ``DataF Flow sources ~~~~~~~~~~~~ -The data flow library contains some predefined flow sources. The class ``RemoteFlowSource`` (defined in ``semmle.code.java.dataflow.FlowSources``) represents data flow sources that may be controlled by a remote user, which is useful for finding security problems. +The data flow library contains some predefined flow sources. The class ``RemoteFlowSource`` represents data flow sources that may be controlled by a remote user, which is useful for finding security problems. Examples ~~~~~~~~ @@ -252,7 +252,7 @@ Exercise 2: Write a query that finds all hard-coded strings used to create a ``u Exercise 3: Write a class that represents flow sources from ``os.Getenv(..)``. (`Answer <#exercise-3>`__) -Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``os.Getenv`` to ``url.URL``. (`Answer <#exercise-4>`__) +Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``os.Getenv`` to ``url.URL``. (`Answer <#exercise-4>`__ `Answer as a path query <#path-query-example>`__) Answers ------- @@ -312,7 +312,7 @@ Exercise 3 import go - class GetenvSource extends CallExpr { + class GetenvSource extends DataFlow::CallNode { GetenvSource() { exists(Function m | m = this.getTarget() | m.hasQualifiedName("os", "Getenv") @@ -327,7 +327,7 @@ Exercise 4 import go - class GetenvSource extends CallExpr { + class GetenvSource extends DataFlow::CallNode { GetenvSource() { exists(Function m | m = this.getTarget() | m.hasQualifiedName("os", "Getenv") @@ -350,7 +350,6 @@ Exercise 4 sink.asExpr() = call.getArgument(0) ) } - } } module GetenvToURLFlow = DataFlow::Global; @@ -359,6 +358,56 @@ Exercise 4 where GetenvToURLFlow::flow(src, sink) select src, "This environment variable constructs a URL $@.", sink, "here" +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the answer to exercise 4 above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id getenv-to-url + */ + + import go + + class GetenvSource extends DataFlow::CallNode { + GetenvSource() { + exists(Function m | m = this.getTarget() | + m.hasQualifiedName("os", "Getenv") + ) + } + } + + module GetenvToURLConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof GetenvSource + } + + predicate isSink(DataFlow::Node sink) { + exists(Function urlParse, CallExpr call | + ( + urlParse.hasQualifiedName("url", "Parse") or + urlParse.hasQualifiedName("url", "ParseRequestURI") + ) and + call.getTarget() = urlParse and + sink.asExpr() = call.getArgument(0) + ) + } + } + + module GetenvToURLFlow = DataFlow::Global; + + import GetenvToURLFlow::PathGraph + + from GetenvToURLFlow::PathNode src, GetenvToURLFlow::PathNode sink + where GetenvToURLFlow::flowPath(src, sink) + select src.getNode(), src, sink, "This environment variable constructs a URL $@.", sink, "here" + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst index bade378d3a0..6273c03e5d9 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-java.rst @@ -262,7 +262,7 @@ Exercise 2: Write a query that finds all hard-coded strings used to create a ``j Exercise 3: Write a class that represents flow sources from ``java.lang.System.getenv(..)``. (`Answer <#exercise-3>`__) -Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``getenv`` to ``java.net.URL``. (`Answer <#exercise-4>`__) +Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from ``getenv`` to ``java.net.URL``. (`Answer <#exercise-4>`__ `Answer as a path query <#path-query-example>`__) Answers ------- @@ -361,6 +361,54 @@ Exercise 4 where GetenvToURLFlow::flow(src, sink) select src, "This environment variable constructs a URL $@.", sink, "here" +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the answer to exercise 4 above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id getenv-to-url + */ + + import java + import semmle.code.java.dataflow.DataFlow + + class GetenvSource extends DataFlow::ExprNode { + GetenvSource() { + exists(Method m | m = this.asExpr().(MethodCall).getMethod() | + m.hasName("getenv") and + m.getDeclaringType() instanceof TypeSystem + ) + } + } + + module GetenvToURLConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof GetenvSource + } + + predicate isSink(DataFlow::Node sink) { + exists(Call call | + sink.asExpr() = call.getArgument(0) and + call.getCallee().(Constructor).getDeclaringType().hasQualifiedName("java.net", "URL") + ) + } + } + + module GetenvToURLFlow = DataFlow::Global; + + import GetenvToURLFlow::PathGraph + + from GetenvToURLFlow::PathNode src, GetenvToURLFlow::PathNode sink + where GetenvToURLFlow::flowPath(src, sink) + select src.getNode(), src, sink, "This environment variable constructs a URL $@.", sink, "here" + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-javascript-and-typescript.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-javascript-and-typescript.rst index d6e6621e578..a0e62706041 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-javascript-and-typescript.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-javascript-and-typescript.rst @@ -456,7 +456,7 @@ Exercise 3: Write a class which represents flow sources from the array elements Hint: array indices are properties with numeric names; you can use regular expression matching to check this. (`Answer <#exercise-3>`__) Exercise 4: Using the answers from 2 and 3, write a query which finds all global data flow paths from array elements of the result of a call to the ``tagName`` argument to the -``createElement`` function. (`Answer <#exercise-4>`__) +``createElement`` function. (`Answer <#exercise-4>`__ `Answer as a path query <#path-query-example>`__) Answers ------- @@ -541,6 +541,48 @@ Exercise 4 where HardCodedTagNameFlow::flow(source, sink) select source, sink +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the answer to exercise 4 above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id hard-coded-tag-name + */ + + import javascript + + class ArrayEntryCallResult extends DataFlow::Node { + ArrayEntryCallResult() { + exists(DataFlow::CallNode call, string index | + this = call.getAPropertyRead(index) and + index.regexpMatch("\\d+") + ) + } + } + + module HardCodedTagNameConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof ArrayEntryCallResult } + + predicate isSink(DataFlow::Node sink) { + sink = DataFlow::globalVarRef("document").getAMethodCall("createElement").getArgument(0) + } + } + + module HardCodedTagNameFlow = DataFlow::Global; + + import HardCodedTagNameFlow::PathGraph + + from HardCodedTagNameFlow::PathNode source, HardCodedTagNameFlow::PathNode sink + where HardCodedTagNameFlow::flowPath(source, sink) + select sink.getNode(), source, sink, "Hard-coded tag name $@.", source, "here" + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-python.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-python.rst index 4bce178d41f..143c54e6fbd 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-python.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-python.rst @@ -354,11 +354,50 @@ This data flow configuration tracks data flow from environment variables to open select fileOpen, "This call to 'os.open' uses data from $@.", environment, "call to 'os.getenv'" +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the network input example above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id file-system-access-from-remote-input + */ + + import python + import semmle.python.dataflow.new.DataFlow + import semmle.python.dataflow.new.TaintTracking + import semmle.python.dataflow.new.RemoteFlowSources + import semmle.python.Concepts + + module RemoteToFileConfiguration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source instanceof RemoteFlowSource + } + + predicate isSink(DataFlow::Node sink) { + sink = any(FileSystemAccess fa).getAPathArgument() + } + } + + module RemoteToFileFlow = TaintTracking::Global; + + import RemoteToFileFlow::PathGraph + + from RemoteToFileFlow::PathNode input, RemoteToFileFlow::PathNode fileAccess + where RemoteToFileFlow::flowPath(input, fileAccess) + select fileAccess.getNode(), input, fileAccess, "This file access uses data from $@.", + input, "user-controllable input." + +For more information, see "`Creating path queries `__". Further reading --------------- -- `Exploring data flow with path queries `__ in the GitHub documentation. +- `Creating path queries `__. .. include:: ../reusables/python-further-reading.rst diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-ruby.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-ruby.rst index 53d6dfa2d1c..c0dd373f39b 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-ruby.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-ruby.rst @@ -372,6 +372,43 @@ The following global data-flow query finds calls to ``File.open`` where the file select fileOpen, "This call to 'File.open' uses data from $@.", environment, "an environment variable" +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the taint-tracking example above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id file-system-access-from-remote-input + */ + + import codeql.ruby.DataFlow + import codeql.ruby.TaintTracking + import codeql.ruby.Concepts + import codeql.ruby.dataflow.RemoteFlowSources + + module RemoteToFileConfiguration implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + predicate isSink(DataFlow::Node sink) { + sink = any(FileSystemAccess fa).getAPathArgument() + } + } + + module RemoteToFileFlow = TaintTracking::Global; + + import RemoteToFileFlow::PathGraph + + from RemoteToFileFlow::PathNode input, RemoteToFileFlow::PathNode fileAccess + where RemoteToFileFlow::flowPath(input, fileAccess) + select fileAccess.getNode(), input, fileAccess, "This file access uses data from $@.", + input, "user-controllable input." + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-rust.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-rust.rst index 8aed9fc9326..7623e1f4465 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-rust.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-rust.rst @@ -231,6 +231,46 @@ The following global taint-tracking query finds places where a string literal is where ConstantPasswordFlow::flow(sourceNode, sinkNode) select sinkNode, "The value $@ is used as a constant password.", sourceNode, sourceNode.toString() +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the taint-tracking example above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id constant-password + */ + + import rust + import codeql.rust.dataflow.DataFlow + import codeql.rust.dataflow.TaintTracking + + module ConstantPasswordConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node.asExpr().getExpr() instanceof StringLiteralExpr } + + predicate isSink(DataFlow::Node node) { + // any argument going to a parameter called `password` + exists(Function f, CallExpr call, int index | + call.getArg(index) = node.asExpr().getExpr() and + call.getStaticTarget() = f and + f.getParam(index).getPat().(IdentPat).getName().getText() = "password" + ) + } + } + + module ConstantPasswordFlow = TaintTracking::Global; + + import ConstantPasswordFlow::PathGraph + + from ConstantPasswordFlow::PathNode sourceNode, ConstantPasswordFlow::PathNode sinkNode + where ConstantPasswordFlow::flowPath(sourceNode, sinkNode) + select sinkNode.getNode(), sourceNode, sinkNode, "The value $@ is used as a constant password.", sourceNode, sourceNode.toString() + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst index b41c82ca7ef..8bded333654 100644 --- a/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst +++ b/docs/codeql/codeql-language-guides/analyzing-data-flow-in-swift.rst @@ -278,6 +278,45 @@ The following global taint-tracking query finds places where a value from a remo where SqlInjectionFlow::flow(sourceNode, sinkNode) select sinkNode, "This query depends on a $@.", sourceNode, "user-provided value" +Path query example +~~~~~~~~~~~~~~~~~~ + +Here is the string literal example above, converted into a path query: + +.. code-block:: ql + + /** + * @kind path-problem + * @problem.severity warning + * @id sql-injection + */ + + import swift + import codeql.swift.dataflow.DataFlow + import codeql.swift.dataflow.TaintTracking + import codeql.swift.dataflow.FlowSources + + module SqlInjectionConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node node) { node instanceof FlowSource } + + predicate isSink(DataFlow::Node node) { + exists(CallExpr call | + call.getStaticTarget().(Method).hasQualifiedName("Connection", "execute(_:)") and + call.getArgument(0).getExpr() = node.asExpr() + ) + } + } + + module SqlInjectionFlow = TaintTracking::Global; + + import SqlInjectionFlow::PathGraph + + from SqlInjectionFlow::PathNode sourceNode, SqlInjectionFlow::PathNode sinkNode + where SqlInjectionFlow::flowPath(sourceNode, sinkNode) + select sinkNode.getNode(), sourceNode, sinkNode, "This query depends on a $@.", sourceNode, "user-provided value" + +For more information, see "`Creating path queries `__". + Further reading --------------- diff --git a/docs/codeql/codeql-language-guides/basic-query-for-rust-code.rst b/docs/codeql/codeql-language-guides/basic-query-for-rust-code.rst new file mode 100644 index 00000000000..75892e41d42 --- /dev/null +++ b/docs/codeql/codeql-language-guides/basic-query-for-rust-code.rst @@ -0,0 +1,131 @@ +.. _basic-query-for-rust-code: + +Basic query for Rust code +========================== + +Learn to write and run a simple CodeQL query using Visual Studio Code with the CodeQL extension. + +.. include:: ../reusables/vs-code-basic-instructions/setup-to-run-queries.rst + +About the query +--------------- + +The query we're going to run performs a basic search of the code for ``if`` expressions that are redundant, in the sense that they have an empty ``then`` branch. For example, code such as: + +.. code-block:: rust + + if error { + // we should handle the error + } + +.. include:: ../reusables/vs-code-basic-instructions/find-database.rst + +Running a quick query +--------------------- + +.. include:: ../reusables/vs-code-basic-instructions/run-quick-query-1.rst + +#. In the quick query tab, delete the content and paste in the following query. + + .. code-block:: ql + + import rust + + from IfExpr ifExpr + where ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0 + select ifExpr, "This 'if' expression is redundant." + +.. include:: ../reusables/vs-code-basic-instructions/run-quick-query-2.rst + +.. image:: ../images/codeql-for-visual-studio-code/basic-rust-query-results-1.png + :align: center + +If any matching code is found, click a link in the ``ifExpr`` column to open the file and highlight the matching ``if`` expression. + +.. image:: ../images/codeql-for-visual-studio-code/basic-rust-query-results-2.png + :align: center + +.. include:: ../reusables/vs-code-basic-instructions/note-store-quick-query.rst + +About the query structure +~~~~~~~~~~~~~~~~~~~~~~~~~ + +After the initial ``import`` statement, this simple query comprises three parts that serve similar purposes to the FROM, WHERE, and SELECT parts of an SQL query. + ++----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+ +| Query part | Purpose | Details | ++==================================================================================+===================================================================================================================+======================================================================================================+ +| ``import rust`` | Imports the standard CodeQL AST libraries for Rust. | Every query begins with one or more ``import`` statements. | ++----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+ +| ``from IfExpr ifExpr`` | Defines the variables for the query. | We use: an ``IfExpr`` variable for ``if`` expressions. | +| | Declarations are of the form: | | +| | `` `` | | ++----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+ +| ``where ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0`` | Defines a condition on the variables. | ``ifExpr.getThen()``: gets the ``then`` branch of the ``if`` expression. | +| | | ``.(BlockExpr)``: requires that the ``then`` branch is a block expression (``{ }``). | +| | | ``.getStmtList()``: gets the list of things in the block. | +| | | ``.getNumberOfStmtOrExpr() = 0``: requires that there are no statements or expressions in the block. | ++----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+ +| ``select ifExpr, "This 'if' expression is redundant."`` | Defines what to report for each match. | Reports the resulting ``if`` expression with a string that explains the problem. | +| | | | +| | ``select`` statements for queries that are used to find instances of poor coding practice are always in the form: | | +| | ``select , ""`` | | ++----------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+ + +Extend the query +---------------- + +Query writing is an inherently iterative process. You write a simple query and then, when you run it, you discover examples that you had not previously considered, or opportunities for improvement. + +Remove false positive results +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Browsing the results of our basic query shows that it could be improved. Among the results you are likely to find examples of ``if`` expressions with an ``else`` branch, where an empty ``then`` branch does serve a purpose. For example: + +.. code-block:: rust + + if (option == "-verbose") { + // nothing to do - handled earlier + } else { + handleError("unrecognized option") + } + +In this case, identifying the ``if`` expression with the empty ``then`` branch as redundant is a false positive. One solution to this is to modify the query to select ``if`` expressions where both the ``then`` and ``else`` branches are missing. + +To exclude ``if`` expressions that have an ``else`` branch: + +#. Add the following to the where clause: + + .. code-block:: ql + + and not exists(ifExpr.getElse()) + + The ``where`` clause is now: + + .. code-block:: ql + + where + ifExpr.getThen().(BlockExpr).getStmtList().getNumberOfStmtOrExpr() = 0 and + not exists(ifExpr.getElse()) + +#. Re-run the query. + + There are now fewer results because ``if`` expressions with an ``else`` branch are no longer included. + +Further reading +--------------- + +.. include:: ../reusables/rust-further-reading.rst +.. include:: ../reusables/codeql-ref-tools-further-reading.rst + +.. Article-specific substitutions for the reusables used in docs/codeql/reusables/vs-code-basic-instructions + +.. |language-text| replace:: Rust + +.. |language-code| replace:: ``rust`` + +.. |example-url| replace:: https://github.com/rust-lang/rustlings + +.. |image-quick-query| image:: ../images/codeql-for-visual-studio-code/quick-query-tab-rust.png + +.. |result-col-1| replace:: The first column corresponds to the expression ``ifExpr`` and is linked to the location in the source code of the project where ``ifExpr`` occurs. diff --git a/docs/codeql/codeql-language-guides/codeql-for-rust.rst b/docs/codeql/codeql-language-guides/codeql-for-rust.rst index 24292909467..1c08acbf2fb 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-rust.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-rust.rst @@ -9,8 +9,12 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat .. toctree:: :hidden: + basic-query-for-rust-code codeql-library-for-rust analyzing-data-flow-in-rust +- :doc:`Basic query for Rust code `: Learn to write and run a simple CodeQL query. + - :doc:`CodeQL library for Rust `: When analyzing Rust code, you can make use of the large collection of classes in the CodeQL library for Rust. + - :doc:`Analyzing data flow in Rust `: You can use CodeQL to track the flow of data through a Rust program to places where the data is used. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.0.rst index 96826b25608..7b7cba95fd3 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.0.rst @@ -9,7 +9,7 @@ CodeQL 2.10.0 (2022-06-27) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.1.rst index b059afcfc9e..17c0589c596 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.1.rst @@ -9,7 +9,7 @@ CodeQL 2.10.1 (2022-07-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.2.rst index 37e094f7495..93794d214ce 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.2.rst @@ -9,7 +9,7 @@ CodeQL 2.10.2 (2022-08-02) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.3.rst index 75d3183d4dd..f66721b9128 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.3.rst @@ -9,7 +9,7 @@ CodeQL 2.10.3 (2022-08-15) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.4.rst index c6d9c4c7805..7e15085db02 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.4.rst @@ -9,7 +9,7 @@ CodeQL 2.10.4 (2022-08-31) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.5.rst index 9c2373e358c..72082e16d70 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.10.5.rst @@ -9,7 +9,7 @@ CodeQL 2.10.5 (2022-09-13) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.0.rst index a9b32080979..332d060068e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.0.rst @@ -9,7 +9,7 @@ CodeQL 2.11.0 (2022-09-28) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.1.rst index d7aff79a078..3847694a0fe 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.1.rst @@ -9,7 +9,7 @@ CodeQL 2.11.1 (2022-10-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.2.rst index 83083a9c3a9..9e0dd258b07 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.2.rst @@ -9,7 +9,7 @@ CodeQL 2.11.2 (2022-10-25) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.3.rst index 893d8b52ae1..fb3948cdfce 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.3.rst @@ -9,7 +9,7 @@ CodeQL 2.11.3 (2022-11-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.4.rst index ab22a245583..37b52835a7f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.4.rst @@ -9,7 +9,7 @@ CodeQL 2.11.4 (2022-11-24) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.5.rst index 1ccd87c81ad..9a0f23f55c6 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.5.rst @@ -9,7 +9,7 @@ CodeQL 2.11.5 (2022-12-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.6.rst index cc4dabd21ac..2455de41316 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.11.6.rst @@ -9,7 +9,7 @@ CodeQL 2.11.6 (2022-12-13) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst index 0b7c47773d6..0993702172f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.0.rst @@ -9,7 +9,7 @@ CodeQL 2.12.0 (2023-01-10) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.1.rst index c0dd4057e9e..88d9a9d202f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.1.rst @@ -9,7 +9,7 @@ CodeQL 2.12.1 (2023-01-23) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.2.rst index 22df6d46a06..fc78c1bfb2b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.2.rst @@ -9,7 +9,7 @@ CodeQL 2.12.2 (2023-02-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.3.rst index f3258301786..f954f436150 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.3.rst @@ -9,7 +9,7 @@ CodeQL 2.12.3 (2023-02-23) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.4.rst index 8545a2f77ca..9c84debe0a9 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.4.rst @@ -9,7 +9,7 @@ CodeQL 2.12.4 (2023-03-09) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.5.rst index 5a0c6ae4f92..a25613a96e6 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.5.rst @@ -9,7 +9,7 @@ CodeQL 2.12.5 (2023-03-21) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst index aa61cc37f8b..cf542efebda 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.6.rst @@ -9,7 +9,7 @@ CodeQL 2.12.6 (2023-04-04) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.7.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.7.rst index f9c0b12d10f..6fd4d8f416c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.7.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.12.7.rst @@ -9,7 +9,7 @@ CodeQL 2.12.7 (2023-04-18) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst index 046e0f548ca..3d3bb548598 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.0.rst @@ -9,7 +9,7 @@ CodeQL 2.13.0 (2023-04-20) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.1.rst index 3af28abf08b..ba78f5fc2f4 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.1.rst @@ -9,7 +9,7 @@ CodeQL 2.13.1 (2023-05-03) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst index 1cff5244519..09c97c03ff6 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.3.rst @@ -9,7 +9,7 @@ CodeQL 2.13.3 (2023-05-31) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.4.rst index 6bc1dc9daec..8443cea4738 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.4.rst @@ -9,7 +9,7 @@ CodeQL 2.13.4 (2023-06-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.5.rst index f559a2d6154..b0877954388 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.13.5.rst @@ -9,7 +9,7 @@ CodeQL 2.13.5 (2023-07-05) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.0.rst index 3583785a082..9c2a459120a 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.0.rst @@ -9,7 +9,7 @@ CodeQL 2.14.0 (2023-07-13) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.1.rst index 736f48e5ddc..bcdebcae4f7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.1.rst @@ -9,7 +9,7 @@ CodeQL 2.14.1 (2023-07-27) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.2.rst index ccc388fe210..82362f17567 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.2.rst @@ -9,7 +9,7 @@ CodeQL 2.14.2 (2023-08-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.3.rst index 2707003615b..fc6861d094c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.3.rst @@ -9,7 +9,7 @@ CodeQL 2.14.3 (2023-08-25) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.4.rst index 9ad1517025f..7880af6540e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.4.rst @@ -9,7 +9,7 @@ CodeQL 2.14.4 (2023-09-12) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.5.rst index c56fced5e1d..d3cc1ba634c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.5.rst @@ -9,7 +9,7 @@ CodeQL 2.14.5 (2023-09-14) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.6.rst index a6e8643624c..ef518ba829b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.14.6.rst @@ -9,7 +9,7 @@ CodeQL 2.14.6 (2023-09-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.0.rst index 14635c0fb50..320d322cf19 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.0.rst @@ -9,7 +9,7 @@ CodeQL 2.15.0 (2023-10-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.1.rst index b98fcd1cd3c..d82569c71f7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.1.rst @@ -9,7 +9,7 @@ CodeQL 2.15.1 (2023-10-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.2.rst index c542a4df350..60baabb9e5a 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.2.rst @@ -9,7 +9,7 @@ CodeQL 2.15.2 (2023-11-13) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.3.rst index 1bcadd72b5a..fc9e283ecfc 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.3.rst @@ -9,7 +9,7 @@ CodeQL 2.15.3 (2023-11-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.4.rst index f7cbcd80210..f72f1cb8c06 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.4.rst @@ -9,7 +9,7 @@ CodeQL 2.15.4 (2023-12-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.5.rst index 31977c61599..c674850e7cd 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.15.5.rst @@ -9,7 +9,7 @@ CodeQL 2.15.5 (2023-12-20) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.0.rst index 127994f2999..c516ae0fb62 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.0.rst @@ -9,7 +9,7 @@ CodeQL 2.16.0 (2024-01-16) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst index cd328246d8c..99a675dbe77 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.1.rst @@ -9,7 +9,7 @@ CodeQL 2.16.1 (2024-01-25) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst index db04b157756..c7529d18cf4 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.2.rst @@ -9,7 +9,7 @@ CodeQL 2.16.2 (2024-02-12) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst index 016bf7583fb..5071c80291c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.3.rst @@ -9,7 +9,7 @@ CodeQL 2.16.3 (2024-02-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst index a73ce5982fd..f3200dfa5fa 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.4.rst @@ -9,7 +9,7 @@ CodeQL 2.16.4 (2024-03-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst index cb602e126d1..f416159c3ee 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.5.rst @@ -9,7 +9,7 @@ CodeQL 2.16.5 (2024-03-21) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst index dba880ceaae..16c87249130 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.16.6.rst @@ -9,7 +9,7 @@ CodeQL 2.16.6 (2024-03-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst index 9551941ea38..51c18155920 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.0.rst @@ -9,7 +9,7 @@ CodeQL 2.17.0 (2024-04-04) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.1.rst index c162c3f9554..de95f2a7d8b 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.1.rst @@ -9,7 +9,7 @@ CodeQL 2.17.1 (2024-04-24) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.2.rst index 9fb2aee867b..6f6fc6f2427 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.2.rst @@ -9,7 +9,7 @@ CodeQL 2.17.2 (2024-05-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.3.rst index 45286dd2723..345c66059a9 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.3.rst @@ -9,7 +9,7 @@ CodeQL 2.17.3 (2024-05-17) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.4.rst index e705d8fe17f..9ae59714b90 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.4.rst @@ -9,7 +9,7 @@ CodeQL 2.17.4 (2024-06-03) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.5.rst index e86eb795b1e..d32b5a327e7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.5.rst @@ -9,7 +9,7 @@ CodeQL 2.17.5 (2024-06-12) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.6.rst index 584d45889d5..74abb31897e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.17.6.rst @@ -9,7 +9,7 @@ CodeQL 2.17.6 (2024-06-27) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.0.rst index c299355c00e..99764e480a5 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.0.rst @@ -9,7 +9,7 @@ CodeQL 2.18.0 (2024-07-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.1.rst index a13cd9cdc5d..5d4dd5179a1 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.1.rst @@ -9,7 +9,7 @@ CodeQL 2.18.1 (2024-07-25) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.2.rst index 3bc21179a89..bc67ac410d4 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.2.rst @@ -9,7 +9,7 @@ CodeQL 2.18.2 (2024-08-13) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.3.rst index 31ecd6e0ed7..77792853900 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.3.rst @@ -9,7 +9,7 @@ CodeQL 2.18.3 (2024-08-28) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.4.rst index 14f7cb96647..18556314725 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.18.4.rst @@ -9,7 +9,7 @@ CodeQL 2.18.4 (2024-09-12) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.0.rst index 0184b811817..ce5973268db 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.0.rst @@ -9,7 +9,7 @@ CodeQL 2.19.0 (2024-09-18) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst index 352a229a422..f2948d0db67 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.1.rst @@ -9,7 +9,7 @@ CodeQL 2.19.1 (2024-10-04) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.2.rst index b21bc2566a8..edc40712dc0 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.2.rst @@ -9,7 +9,7 @@ CodeQL 2.19.2 (2024-10-21) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.3.rst index c078993aa3f..183adc77e41 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.3.rst @@ -9,7 +9,7 @@ CodeQL 2.19.3 (2024-11-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst index 9235d63fe2c..2135aa8f759 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst @@ -9,7 +9,7 @@ CodeQL 2.19.4 (2024-12-02) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.0.rst index 70fed1e9cfd..1d1422d381c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.0.rst @@ -9,7 +9,7 @@ CodeQL 2.20.0 (2024-12-09) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.1.rst index 11f30e96086..5d3d2d99f9e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.1.rst @@ -9,7 +9,7 @@ CodeQL 2.20.1 (2025-01-09) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.2.rst index ed4d502ea2d..c657bf0c48e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.2.rst @@ -9,7 +9,7 @@ CodeQL 2.20.2 (2025-01-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.3.rst index 053d11610a4..1fca15790f1 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.3.rst @@ -9,7 +9,7 @@ CodeQL 2.20.3 (2025-01-24) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst index c3012e020c7..673d4a55d59 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst @@ -9,7 +9,7 @@ CodeQL 2.20.4 (2025-02-06) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.5.rst index 855f25655ec..d3264090af1 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.5.rst @@ -9,7 +9,7 @@ CodeQL 2.20.5 (2025-02-20) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.6.rst index 76c038bded2..841b637cc34 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.6.rst @@ -9,7 +9,7 @@ CodeQL 2.20.6 (2025-03-06) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.7.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.7.rst index fd6885b025e..144382c9737 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.7.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.7.rst @@ -9,7 +9,7 @@ CodeQL 2.20.7 (2025-03-18) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst index b6396b2be4e..a9a27208831 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst @@ -9,7 +9,7 @@ CodeQL 2.21.0 (2025-04-03) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.1.rst index 40587985d9d..ada0a6102fc 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.1.rst @@ -9,7 +9,7 @@ CodeQL 2.21.1 (2025-04-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.2.rst index 636cf2fe63d..97d52abf744 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.2.rst @@ -9,7 +9,7 @@ CodeQL 2.21.2 (2025-05-01) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst index d499f27dcb1..71a8e3a6824 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.3.rst @@ -9,7 +9,7 @@ CodeQL 2.21.3 (2025-05-15) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst index c21a9940b4b..6fcbc0cd0ca 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst @@ -9,7 +9,7 @@ CodeQL 2.21.4 (2025-06-02) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst index d60b0e95769..4288b9c2e98 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst @@ -9,7 +9,7 @@ CodeQL 2.22.0 (2025-06-11) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst index 0b051d5473f..6aed611d5cf 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst @@ -9,7 +9,7 @@ CodeQL 2.22.1 (2025-06-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst index 92c440a05af..6164266e10f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst @@ -9,7 +9,7 @@ CodeQL 2.22.2 (2025-07-29) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst index 7a1d554855d..4f1d34ff2dd 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst @@ -9,7 +9,7 @@ CodeQL 2.22.3 (2025-08-06) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst new file mode 100644 index 00000000000..1a592436a8f --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst @@ -0,0 +1,108 @@ +.. _codeql-cli-2.22.4: + +========================== +CodeQL 2.22.4 (2025-08-21) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.22.4 runs a total of 478 security queries when configured with the Default suite (covering 169 CWE). The Extended suite enables an additional 130 queries (covering 32 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +There are no user-facing CLI changes in this release. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The :code:`cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself. +* Fixed a false positive in :code:`cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type. + +JavaScript/TypeScript +""""""""""""""""""""" + +* The :code:`js/regex-injection` query no longer considers environment variables as sources by default. Environment variables can be re-enabled as sources by setting the threat model to include the "environment" category. + +New Queries +~~~~~~~~~~~ + +Rust +"""" + +* Added a new query, :code:`rust/cleartext-storage-database`, for detecting cases where sensitive information is stored non-encrypted in a database. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +Ruby +"""" + +* Made the following changes to :code:`NetHttpRequest` + + * Adds :code:`connectionNode`, like other Ruby HTTP clients + * Makes :code:`requestNode` and :code:`connectionNode` public so subclasses can use them + * Adds detection of :code:`Net::HTTP.start`, a common way to make HTTP requests in Ruby + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* Added library models for the relevant method calls under :code:`jakarta.servlet.ServletRequest` and :code:`jakarta.servlet.http.HttpServletRequest` as remote flow sources. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The guards libraries (:code:`semmle.code.cpp.controlflow.Guards` and :code:`semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards. +* Improved dataflow through global variables in the new dataflow library (:code:`semmle.code.cpp.dataflow.new.DataFlow` and :code:`semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables. +* The global value numbering library (:code:`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and :code:`semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number. + +Golang +"""""" + +* Go 1.25 is now supported. + +Java/Kotlin +""""""""""" + +* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for :code:`java/dereferenced-value-may-be-null`. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Improved modeling of command-line argument parsing libraries `arg `__, `args `__, `command-line-args `__ and `commander `__ + +Rust +"""" + +* |link-code-let-chains-in-code-if-and-code-while-1|_ are now supported, as well as |link-code-if-let-guards-in-code-match-expressions-2|_. +* Added more detail to models of :code:`postgres`, :code:`rusqlite`, :code:`sqlx` and :code:`tokio-postgres`. This may improve query results, particularly for :code:`rust/sql-injection` and :code:`rust/cleartext-storage-database`. + +.. |link-code-let-chains-in-code-if-and-code-while-1| replace:: :code:`let` chains in :code:`if` and :code:`while`\ +.. _link-code-let-chains-in-code-if-and-code-while-1: https://doc.rust-lang.org/edition-guide/rust-2024/let-chains.html + +.. |link-code-if-let-guards-in-code-match-expressions-2| replace:: :code:`if let` guards in :code:`match` expressions +.. _link-code-if-let-guards-in-code-match-expressions-2: https://rust-lang.github.io/rfcs/2294-if-let-guard.html + diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.0.rst new file mode 100644 index 00000000000..4091be0911e --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.0.rst @@ -0,0 +1,149 @@ +.. _codeql-cli-2.23.0: + +========================== +CodeQL 2.23.0 (2025-09-04) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.0 runs a total of 479 security queries when configured with the Default suite (covering 169 CWE). The Extended suite enables an additional 131 queries (covering 32 more CWE). 2 security queries have been added with this release. + +CodeQL CLI +---------- + +Miscellaneous +~~~~~~~~~~~~~ + +* The build of Eclipse Temurin OpenJDK that is used to run the CodeQL CLI has been updated to version 21.0.8. + +Query Packs +----------- + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* Fixed an inconsistency across languages where most have a :code:`Customizations.qll` file for adding customizations, but not all did. + +Swift +""""" + +* Fixed an inconsistency across languages where most have a :code:`Customizations.qll` file for adding customizations, but not all did. + +Rust +"""" + +* The "Low Rust analysis quality" query (:code:`rust/diagnostic/database-quality`) has been tuned so that it won't trigger on databases that have extracted normally. This will remove spurious messages of "Low Rust analysis quality" on the CodeQL status page. +* Fixed an inconsistency across languages where most have a :code:`Customizations.qll` file for adding customizations, but not all did. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* Fixed a bug that was causing false negatives in rare cases in the query :code:`java/dereferenced-value-may-be-null`. +* Removed the :code:`java/empty-statement` query that was subsumed by the :code:`java/empty-block` query. + +Python +"""""" + +* The :code:`py/unexpected-raise-in-special-method` query has been modernized. It produces additional results in cases where the exception is + only raised conditionally. Its precision has been changed from :code:`very-high` to :code:`high`. +* The queries :code:`py/incomplete-ordering`, :code:`py/inconsistent-equality`, and :code:`py/equals-hash-mismatch` have been modernized; no longer relying on outdated libraries, improved documentation, and no longer producing alerts for problems specific to Python 2. + +New Queries +~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The query :code:`java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as :code:`java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query `by @luchua-bc `__. + +Rust +"""" + +* Added a new query, :code:`rust/log-injection`, for detecting cases where log entries could be forged by a malicious user. + +Query Metadata Changes +~~~~~~~~~~~~~~~~~~~~~~ + +Java/Kotlin +""""""""""" + +* The tag :code:`maintainability` has been removed from :code:`java/run-finalizers-on-exit` and the tags :code:`quality`, :code:`correctness`, and :code:`performance` have been added. +* The tag :code:`maintainability` has been removed from :code:`java/garbage-collection` and the tags :code:`quality` and :code:`correctness` have been added. + +Language Libraries +------------------ + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Rust +"""" + +* Path resolution has been removed from the Rust extractor. For the majority of purposes CodeQL computed paths have been in use for several previous releases, this completes the transition. Extraction is now faster and more reliable. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* Added flow summaries for the :code:`Microsoft::WRL::ComPtr` member functions. +* The new dataflow/taint-tracking library (:code:`semmle.code.cpp.dataflow.new.DataFlow` and :code:`semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects. + +C# +"" + +* A bug has been fixed in the data flow analysis, which means that flow through calls using the :code:`base` qualifier may now be tracked more accurately. +* Added summary models for :code:`System.Xml.XmlReader`, :code:`System.Xml.XmlTextReader` and :code:`System.Xml.XmlDictionaryReader`. +* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives. +* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Removed :code:`libxmljs` as an XML bomb sink. The underlying libxml2 library now includes `entity reference loop detection `__ that prevents XML bomb attacks. + +Python +"""""" + +* The modelling of Psycopg2 now supports the use of :code:`psycopg2.pool` connection pools for handling database connections. +* Removed :code:`lxml` as an XML bomb sink. The underlying libxml2 library now includes `entity reference loop detection `__ that prevents XML bomb attacks. + +Rust +"""" + +* Attribute macros are now taken into account when identifying macro-expanded code. This affects the queries :code:`rust/unused-variable` and :code:`rust/unused-value`, which exclude results in macro-expanded code. +* Improved modelling of the :code:`std::fs`, :code:`async_std::fs` and :code:`tokio::fs` libraries. This may cause more alerts to be found by Rust injection queries, particularly :code:`rust/path-injection`. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added a new class :code:`PchFile` representing precompiled header (PCH) files used during project compilation. + +Shared Libraries +---------------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Utility Classes +""""""""""""""" + +* Added :code:`LocatableOption` and :code:`OptionWithLocationInfo` as modules providing option types with location information. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst new file mode 100644 index 00000000000..ff22a3f647c --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.1.rst @@ -0,0 +1,176 @@ +.. _codeql-cli-2.23.1: + +========================== +CodeQL 2.23.1 (2025-09-23) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.1 runs a total of 478 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 3 security queries have been added with this release. + +CodeQL CLI +---------- + +New Features +~~~~~~~~~~~~ + +* CodeQL now adds the sources and sinks of path alerts to the :code:`relatedLocations` property of SARIF results if they are not included as the primary location or within the alert message. This means that path alerts will show on PRs if a source or sink is added or modified, even for queries that don't follow the common convention of selecting the sink as the primary location and mentioning the source in the alert message. + +* CodeQL now populates file coverage information for GitHub Actions on + \ `the tool status page for code scanning `__. + +Query Packs +----------- + +Bug Fixes +~~~~~~~~~ + +C/C++ +""""" + +* The predicate :code:`occurenceCount` in the file module :code:`MagicConstants` has been deprecated. Use :code:`occurrenceCount` instead. +* The predicate :code:`additionalAdditionOrSubstractionCheckForLeapYear` in the file module :code:`LeapYear` has been deprecated. Use :code:`additionalAdditionOrSubtractionCheckForLeapYear` instead. + +C# +"" + +* The message for :code:`csharp/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +Java/Kotlin +""""""""""" + +* The message for :code:`java/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +Rust +"""" + +* The message for :code:`rust/diagnostic/database-quality` has been updated to include detailed database health metrics. These changes are visible on the tool status page. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The queries :code:`cpp/wrong-type-format-argument`, :code:`cpp/comparison-with-wider-type`, :code:`cpp/integer-multiplication-cast-to-long`, :code:`cpp/implicit-function-declaration` and :code:`cpp/suspicious-add-sizeof` have had their precisions reduced from :code:`high` to :code:`medium`. They will also now give alerts for projects built with :code:`build-mode: none`. +* The queries :code:`cpp/wrong-type-format-argument`, :code:`cpp/comparison-with-wider-type`, :code:`cpp/integer-multiplication-cast-to-long` and :code:`cpp/suspicious-add-sizeof` are no longer included in the :code:`code-scanning` suite. + +Java/Kotlin +""""""""""" + +* The implementation of :code:`java/dereferenced-value-may-be-null` has been completely replaced with a new general control-flow reachability library. This improves precision by reducing false positives. However, since the entire calculation has been reworked, there can be small corner cases where precision regressions might occur and new false positives may occur, but these cases should be rare. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added support for TypeScript 5.9 +* Added support for :code:`import defer` syntax in JavaScript and TypeScript. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The query :code:`cs/call-to-object-tostring` has been improved to remove false positives for enum types. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions. +* Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. +* The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`. +* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query `__! + +Python +"""""" + +* The queries :code:`py/missing-call-to-init`, :code:`py/missing-calls-to-del`, :code:`py/multiple-calls-to-init`, and :code:`py/multiple-calls-to-del` queries have been modernized; no longer relying on outdated libraries, producing more precise results with more descriptive alert messages, and improved documentation. + +GitHub Actions +"""""""""""""" + +* Actions analysis now reports file coverage information on the CodeQL status page. + +Deprecated Queries +~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The query :code:`cs/captured-foreach-variable` has been deprecated as the semantics of capturing a 'foreach' variable and using it outside the loop has been stable since C# version 5. + +New Queries +~~~~~~~~~~~ + +Rust +"""" + +* Added a new query, :code:`rust/request-forgery`, for detecting server-side request forgery vulnerabilities. + +Language Libraries +------------------ + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go. +* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning. + +Java/Kotlin +""""""""""" + +* Improved support for various assertion libraries, in particular JUnit. This affects the control-flow graph slightly, and in turn affects several queries (mainly quality queries). Most queries should see improved precision (new true positives and fewer false positives), in particular :code:`java/constant-comparison`, :code:`java/index-out-of-bounds`, :code:`java/dereferenced-value-may-be-null`, and :code:`java/useless-null-check`. Some medium precision queries like :code:`java/toctou-race-condition` and :code:`java/unreleased-lock` may see mixed result changes (both slight improvements and slight regressions). +* Added taint flow model for :code:`java.crypto.KDF`. +* Added taint flow model for :code:`java.lang.ScopedValue`. + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added modeling for promisification libraries :code:`@gar/promisify`, :code:`es6-promisify`, :code:`util.promisify`, :code:`thenify-all`, :code:`call-me-maybe`, :code:`@google-cloud/promisify`, and :code:`util-promisify`. +* Data flow is now tracked through promisified user-defined functions. + +Swift +""""" + +* Updated to allow analysis of Swift 6.1.3. + +Rust +"""" + +* Added cryptography related models for the :code:`cookie` and :code:`biscotti` crates. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The predicate :code:`getAContructorCall` in the class :code:`SslContextClass` has been deprecated. Use :code:`getAConstructorCall` instead. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* Added predicates :code:`getTransitiveNumberOfVlaDimensionStmts`, :code:`getTransitiveVlaDimensionStmt`, and :code:`getParentVlaDecl` to :code:`VlaDeclStmt` for handling :code:`VlaDeclStmt`\ s whose base type is defined in terms of another :code:`VlaDeclStmt` via a :code:`typedef`. + +Java/Kotlin +""""""""""" + +* The Java extractor and QL libraries now support Java 25. +* Added support for Java 25 compact source files (JEP 512). The new predicate :code:`Class.isImplicit()` identifies classes that are implicitly declared when using compact source files, and the new predicate :code:`CompilationUnit.isCompactSourceFile()` identifies compilation units that contain compact source files. +* Added support for Java 25 module import declarations. +* Add :code:`ModuleImportDeclaration` class. diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.2.rst new file mode 100644 index 00000000000..246af4c3be1 --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.2.rst @@ -0,0 +1,89 @@ +.. _codeql-cli-2.23.2: + +========================== +CodeQL 2.23.2 (2025-10-02) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.2 runs a total of 479 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 1 security query has been added with this release. + +CodeQL CLI +---------- + +Bug Fixes +~~~~~~~~~ + +* The :code:`codeql generate query-help` command now prepends the query's name (taken from the :code:`.ql` file) as a level-one heading when processing markdown query help, for consistency with help generated from a :code:`.qhelp` file. + +New Features +~~~~~~~~~~~~ + +* CodeQL Go analysis now supports the "Git Source" type for `private package registries `__. This is in addition to the existing support for the "GOPROXY server" type. + +Query Packs +----------- + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query :code:`cs/dereferenced-value-may-be-null` by removing false positives. +* The query :code:`cs/xmldoc/missing-summary` has been removed from the :code:`code-quality` suite, to align with other languages. + +Python +"""""" + +* The queries that check for unmatchable :code:`$` and :code:`^` in regular expressions did not account correctly for occurrences inside lookahead and lookbehind assertions. These occurrences are now handled correctly, eliminating this source of false positives. +* The :code:`py/inheritance/signature-mismatch` query has been modernized. It produces more precise results and more descriptive alert messages. +* The :code:`py/inheritance/incorrect-overriding-signature` query has been deprecated. Its results have been consolidated into the :code:`py/inheritance/signature-mismatch` query. + +New Queries +~~~~~~~~~~~ + +Rust +"""" + +* Added a new query, :code:`rust/non-https-url`, for detecting the use of non-HTTPS URLs that can be intercepted by third parties. + +Language Libraries +------------------ + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +JavaScript/TypeScript +""""""""""""""""""""" + +* Added modeling of :code:`GraphQLObjectType` resolver function parameters as remote sources. +* Support for the `graphql `__ library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. +* Added support for the :code:`aws-sdk` and :code:`@aws-sdk/client-dynamodb`, :code:`@aws-sdk/client-athena`, :code:`@aws-sdk/client-s3`, and :code:`@aws-sdk/client-rds-data` packages. + +Python +"""""" + +* Data flow tracking through global variables now supports nested field access patterns such as :code:`global_var.obj.field`. This improves the precision of taint tracking analysis when data flows through complex global variable structures. + +New Features +~~~~~~~~~~~~ + +Ruby +"""" + +* Initial modeling for the Ruby Grape framework in :code:`Grape.qll` has been added to detect API endpoints, parameters, and headers within Grape API classes. + +Rust +"""" + +* The models-as-data format for sources now supports access paths of the form + :code:`Argument[i].Parameter[j]`. This denotes that the source passes tainted data to the :code:`j`\ th parameter of its :code:`i`\ th argument (which must be a function or a closure). diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.3.rst new file mode 100644 index 00000000000..8abbc879c3e --- /dev/null +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.23.3.rst @@ -0,0 +1,136 @@ +.. _codeql-cli-2.23.3: + +========================== +CodeQL 2.23.3 (2025-10-17) +========================== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: none + +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. + +Security Coverage +----------------- + +CodeQL 2.23.3 runs a total of 480 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE). 1 security query has been added with this release. + +CodeQL CLI +---------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + +* The :code:`--permissive` command line option has been removed from the C/C++ extractor, + and passing the option will make the extractor fail. The option was introduced to make the extractor accept the following invalid code, which is accepted by gcc with the :code:`-fpermissive` flag: + + .. code-block:: cpp + + void f(char*); + void g() { + const char* str = "string"; + f(str); + } + + The :code:`--permissive` option was removed, as under some circumstances it would break the extractor's ability to parse valid C++ code. When calling the extractor directly, + :code:`--permissive` should no longer be passed. The above code will fail to parse, and we recommend the code being made :code:`const`\ -correct. + +Bug Fixes +~~~~~~~~~ + +* Fixed a bug that made many :code:`codeql` subcommands fail with the message :code:`not in while, until, select, or repeat loop` on Linux or macOS systems where :code:`/bin/sh` is :code:`zsh`. + +Query Packs +----------- + +New Queries +~~~~~~~~~~~ + +Rust +"""" + +* Added a new query, :code:`rust/insecure-cookie`, to detect cookies created without the 'Secure' attribute. + +Language Libraries +------------------ + +Bug Fixes +~~~~~~~~~ + +Python +"""""" + +* The Python extractor no longer crashes with an :code:`ImportError` when run using Python 3.14. + +Breaking Changes +~~~~~~~~~~~~~~~~ + +C/C++ +""""" + +* The "Guards" libraries (:code:`semmle.code.cpp.controlflow.Guards` and :code:`semmle.code.cpp.controlflow.IRGuards`) have been totally rewritten to recognize many more guards. The API remains unchanged, but the :code:`GuardCondition` class now extends :code:`Element` instead of :code:`Expr`. + +Golang +"""""" + +* The member predicate :code:`writesField` on :code:`DataFlow::Write` now uses the post-update node for :code:`base` when that is the node being updated, which is in all cases except initializing a struct literal. A new member predicate :code:`writesFieldPreUpdate` has been added for cases where this behaviour is not desired. +* The member predicate :code:`writesElement` on :code:`DataFlow::Write` now uses the post-update node for :code:`base` when that is the node being updated, which is in all cases except initializing an array/slice/map literal. A new member predicate :code:`writesElementPreUpdate` has been added for cases where this behaviour is not desired. + +Major Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The shape of the Go data-flow graph has changed. Previously for code like :code:`x := def(); use1(x); use2(x)`, there would be edges from the definition of :code:`x` to each use. Now there is an edge from the definition to the first use, then another from the first use to the second, and so on. This means that data-flow barriers work differently - flow will not reach any uses after the barrier node. Where this is not desired it may be necessary to add an additional flow step to propagate the flow forward. Additionally, when a variable may be subject to a side-effect, such as updating an array, passing a pointer to a function that might write through it or writing to a field of a struct, there is now a dedicated post-update node representing the variable after this side-effect has taken place. Previously post-update nodes were aliases for either a variable's definition, or were equal to the pre-update node. This led to backwards steps in the data-flow graph, which could cause false positives. For example, in the previous code there would be an edge from :code:`x` in :code:`use2(x)` back to the definition of :code:`x`. If we define our sources as any argument of :code:`use2` and our sinks as any argument of :code:`use1` then this would lead to a false positive path. Now there are distinct post-update nodes and no backwards edge to the definition, so we will not find this false positive path. + +Minor Analysis Improvements +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +C# +"" + +* The extraction of location information for parameters, fields, constructors, destructors and user operators has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. +* The extraction of location information for type parameters and tuples types has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of location information for named types (classes, structs, etc.) has been optimized. Previously, location information was extracted multiple times for each type when it was declared across multiple files. Now, the extraction context is respected during the extraction phase, ensuring locations are only extracted within the appropriate context. This change should be transparent to end-users but may improve extraction performance in some cases. +* The extraction of the location for bound generic entities (methods, accessors, indexers, properties, and events) has been optimized. Previously, location information was extracted multiple times for each bound generic. Now, only the location of the unbound generic declaration is extracted during the extraction phase, and the QL library explicitly reuses this location for all bound instances of the same generic. + +Golang +"""""" + +* The query :code:`go/request-forgery` will no longer report alerts when the user input is of a simple type, like a number or a boolean. +* For the query :code:`go/unvalidated-url-redirection`, when untrusted data is assigned to the :code:`Host` field of a :code:`url.URL` struct, we consider the whole struct untrusted. We now also include the case when this happens during struct initialization, for example :code:`&url.URL{Host: untrustedData}`. +* :code:`go/unvalidated-url-redirection` and :code:`go/request-forgery` have a shared notion of a safe URL, which is known to not be malicious. Some URLs which were incorrectly considered safe are now correctly considered unsafe. This may lead to more alerts for those two queries. + +Java/Kotlin +""""""""""" + +* Fields of certain objects are considered tainted if the object is tainted. This holds, for example, for objects that occur directly as sources in the active threat model (for instance, a remote flow source). This has now been amended to also include array types, such that if an array like :code:`MyPojo[]` is a source, then fields of a tainted :code:`MyPojo` are now also considered tainted. + +Rust +"""" + +* Improve data flow through functions being passed as function pointers. + +Deprecated APIs +~~~~~~~~~~~~~~~ + +Golang +"""""" + +* The class :code:`SqlInjection::NumericOrBooleanSanitizer` has been deprecated. Use :code:`SimpleTypeSanitizer` from :code:`semmle.go.security.Sanitizers` instead. +* The member predicate :code:`writesComponent` on :code:`DataFlow::Write` has been deprecated. Instead, use :code:`writesFieldPreUpdate` and :code:`writesElementPreUpdate`, or their new versions :code:`writesField` and :code:`writesElement`. + +New Features +~~~~~~~~~~~~ + +C/C++ +""""" + +* C/C++ :code:`build-mode: none` support is now generally available. + +Rust +"""" + +* Rust analysis is now Generally Available (GA). diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.1.rst index 58d7f61cba8..af61c689885 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.1.rst @@ -9,7 +9,7 @@ CodeQL 2.4.1 (2020-12-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.2.rst index 26cd430bd5f..dcbd51e613a 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.2.rst @@ -9,7 +9,7 @@ CodeQL 2.4.2 (2021-01-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.3.rst index 7bd90f4e621..6936a0a200e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.3.rst @@ -9,7 +9,7 @@ CodeQL 2.4.3 (2021-01-29) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.4.rst index 5b918dc90e8..8c0709928af 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.4.rst @@ -9,7 +9,7 @@ CodeQL 2.4.4 (2021-02-12) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.5.rst index 9d4a5b329b1..9ef2182c9f5 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.5.rst @@ -9,7 +9,7 @@ CodeQL 2.4.5 (2021-03-08) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.6.rst index c5f1a57ea0d..ba551f3333d 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.4.6.rst @@ -9,7 +9,7 @@ CodeQL 2.4.6 (2021-03-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.0.rst index 45b21c0d03c..0e983e5cacb 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.0.rst @@ -9,7 +9,7 @@ CodeQL 2.5.0 (2021-03-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.1.rst index 7aa11611c71..8f259708fdc 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.1.rst @@ -9,7 +9,7 @@ CodeQL 2.5.1 (2021-04-19) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.2.rst index dde165f5f3c..09049680fae 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.2.rst @@ -9,7 +9,7 @@ CodeQL 2.5.2 (2021-04-21) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.3.rst index 05717dacb04..518a699fbf3 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.3.rst @@ -9,7 +9,7 @@ CodeQL 2.5.3 (2021-04-30) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.4.rst index 85cb5102041..33a1ee1e802 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.4.rst @@ -9,7 +9,7 @@ CodeQL 2.5.4 (2021-05-03) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.5.rst index 349d9c2ab4c..02946e207ff 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.5.rst @@ -9,7 +9,7 @@ CodeQL 2.5.5 (2021-05-17) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.6.rst index 5d9b4fab3aa..8f7444f3339 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.6.rst @@ -9,7 +9,7 @@ CodeQL 2.5.6 (2021-06-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.7.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.7.rst index 31c0fcbc387..a79252fdbe8 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.7.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.7.rst @@ -9,7 +9,7 @@ CodeQL 2.5.7 (2021-07-02) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.8.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.8.rst index 753da44a257..da7e793d1c6 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.8.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.8.rst @@ -9,7 +9,7 @@ CodeQL 2.5.8 (2021-07-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.9.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.9.rst index e142a305026..cc9120def9e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.9.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.5.9.rst @@ -9,7 +9,7 @@ CodeQL 2.5.9 (2021-08-09) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.0.rst index 494f9ed2d71..6b7a81e5ac5 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.0.rst @@ -9,7 +9,7 @@ CodeQL 2.6.0 (2021-08-24) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.1.rst index 0ff5d4bd9f0..a9e030c403a 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.1.rst @@ -9,7 +9,7 @@ CodeQL 2.6.1 (2021-09-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.2.rst index af7c4b7042b..6a67b21f33c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.2.rst @@ -9,7 +9,7 @@ CodeQL 2.6.2 (2021-09-21) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.3.rst index e566b818a00..d5c4e3e3f57 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.6.3.rst @@ -9,7 +9,7 @@ CodeQL 2.6.3 (2021-10-06) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.0.rst index dbbd36aea5e..9ac5b7f3e92 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.0.rst @@ -9,7 +9,7 @@ CodeQL 2.7.0 (2021-10-27) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.1.rst index f28740575f3..09aead4a36e 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.1.rst @@ -9,7 +9,7 @@ CodeQL 2.7.1 (2021-11-15) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.2.rst index ecd7d53c3e0..c2c0d35179c 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.2.rst @@ -9,7 +9,7 @@ CodeQL 2.7.2 (2021-11-22) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.3.rst index ffac75543ca..af2cac49d3f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.3.rst @@ -9,7 +9,7 @@ CodeQL 2.7.3 (2021-12-06) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.5.rst index d754aec07cb..c3107ea0386 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.5.rst @@ -9,7 +9,7 @@ CodeQL 2.7.5 (2022-01-17) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.6.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.6.rst index ef418261258..6d9820c064d 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.6.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.7.6.rst @@ -9,7 +9,7 @@ CodeQL 2.7.6 (2022-01-24) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.0.rst index 03e16acf5d9..602465d13f6 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.0.rst @@ -9,7 +9,7 @@ CodeQL 2.8.0 (2022-02-04) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.1.rst index 184a488ca4a..d25904b4028 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.1.rst @@ -9,7 +9,7 @@ CodeQL 2.8.1 (2022-02-15) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.2.rst index 6c778328d9b..1f7aba69555 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.2.rst @@ -9,7 +9,7 @@ CodeQL 2.8.2 (2022-02-28) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.3.rst index 0a5c75d06d6..9fcc89afbc9 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.3.rst @@ -9,7 +9,7 @@ CodeQL 2.8.3 (2022-03-14) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.4.rst index a9cb1ddde70..83766ab58bc 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.4.rst @@ -9,7 +9,7 @@ CodeQL 2.8.4 (2022-03-29) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.5.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.5.rst index e9dcb93b10c..9cd2e1b7a67 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.5.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.8.5.rst @@ -9,7 +9,7 @@ CodeQL 2.8.5 (2022-04-07) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.0.rst index 3b289245398..bf104cfb5d3 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.0.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.0.rst @@ -9,7 +9,7 @@ CodeQL 2.9.0 (2022-04-26) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.1.rst index 0a2cd31ba3b..0e983c973d7 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.1.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.1.rst @@ -9,7 +9,7 @@ CodeQL 2.9.1 (2022-05-05) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.2.rst index ff7548ce259..a3ae2394118 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.2.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.2.rst @@ -9,7 +9,7 @@ CodeQL 2.9.2 (2022-05-16) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.3.rst index fe8834674d5..c5f14565820 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.3.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.3.rst @@ -9,7 +9,7 @@ CodeQL 2.9.3 (2022-05-31) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.4.rst index 1cd748682c5..0bac2d62b6f 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.4.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.9.4.rst @@ -9,7 +9,7 @@ CodeQL 2.9.4 (2022-06-20) :local: :backlinks: none -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. Security Coverage ----------------- diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst index dcf6c7bcba0..4b3e1f5bb98 100644 --- a/docs/codeql/codeql-overview/codeql-changelog/index.rst +++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst @@ -4,13 +4,18 @@ CodeQL change logs ================== -This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. +This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__. A list of queries for each suite and language `is available here `__. .. toctree:: :maxdepth: 1 + codeql-cli-2.23.3 + codeql-cli-2.23.2 + codeql-cli-2.23.1 + codeql-cli-2.23.0 + codeql-cli-2.22.4 codeql-cli-2.22.3 codeql-cli-2.22.2 codeql-cli-2.22.1 diff --git a/docs/codeql/codeql-overview/system-requirements.rst b/docs/codeql/codeql-overview/system-requirements.rst index cc46db60c35..9f477a9b39b 100644 --- a/docs/codeql/codeql-overview/system-requirements.rst +++ b/docs/codeql/codeql-overview/system-requirements.rst @@ -42,6 +42,14 @@ For Ruby extraction: - On Windows, the ``msvcp140.dll`` must be installed and available on the system. This can be installed by downloading the appropriate Microsoft Visual C++ Redistributable for Visual Studio. +For Rust extraction: + +- ``rustup`` and ``cargo`` must be installed. + +For Swift extraction: + +- Only macOS is supported as a host platform. + For Java extraction: - There must be a ``java`` or ``java.exe`` executable available on the ``PATH``, and the ``JAVA_HOME`` environment variable must point to the corresponding JDK's home directory. diff --git a/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-1.png b/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-1.png new file mode 100644 index 00000000000..8bbd3f6fa99 Binary files /dev/null and b/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-1.png differ diff --git a/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-2.png b/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-2.png new file mode 100644 index 00000000000..6b67bf7a87f Binary files /dev/null and b/docs/codeql/images/codeql-for-visual-studio-code/basic-rust-query-results-2.png differ diff --git a/docs/codeql/images/codeql-for-visual-studio-code/quick-query-tab-rust.png b/docs/codeql/images/codeql-for-visual-studio-code/quick-query-tab-rust.png new file mode 100644 index 00000000000..467785fb3b4 Binary files /dev/null and b/docs/codeql/images/codeql-for-visual-studio-code/quick-query-tab-rust.png differ diff --git a/docs/codeql/ql-language-reference/aliases.rst b/docs/codeql/ql-language-reference/aliases.rst index efbbef65cda..ebecbdf0a2b 100644 --- a/docs/codeql/ql-language-reference/aliases.rst +++ b/docs/codeql/ql-language-reference/aliases.rst @@ -137,6 +137,6 @@ During :ref:`name resolution `, ambiguity between aliases from for the same module/type/predicate is allowed, but ambiguity between between aliases from distinct **strong** alias definitions is invalid QL. Likewise, for the purpose of applicative instantiation of :ref:`parameterised modules ` -and `:ref:`parameterised module signatures `, aliases from **weak** alias +and :ref:`parameterised module signatures `, aliases from **weak** alias definitions for instantiation arguments do not result in separate instantiations, but aliases from **strong** alias definitions for instantiation arguments do. diff --git a/docs/codeql/ql-language-reference/annotations.rst b/docs/codeql/ql-language-reference/annotations.rst index 0ddb28c3a9d..b792e807c93 100644 --- a/docs/codeql/ql-language-reference/annotations.rst +++ b/docs/codeql/ql-language-reference/annotations.rst @@ -16,9 +16,9 @@ For example, to declare a module ``M`` as private, you could use: } Note that some annotations act on an entity itself, whilst others act on a particular *name* for the entity: - - Act on an **entity**: ``abstract``, ``cached``, ``external``, ``transient``, ``override``, ``pragma``, ``language``, - and ``bindingset`` - - Act on a **name**: ``deprecated``, ``library``, ``private``, ``final``, and ``query`` + - Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``extensible``, ``external``, ``language``, + ``override``, ``pragma``, and ``transient`` + - Act on a **name**: ``additional``, ``deprecated``, ``final``, ``library``, ``private``, and ``query`` For example, if you annotate an entity with ``private``, then only that particular name is private. You could still access that entity under a different name (using an :ref:`alias `). @@ -97,13 +97,27 @@ own body, or they must inherit from another class that overrides ``isSource``: // doesn't need to override `isSource`, because it inherits it from ConfigA } +.. index:: additional +.. _additional: + +``additional`` +============== + +**Available for**: |classes|, |algebraic datatypes|, |type unions|, |non-member predicates|, |modules|, |aliases|, |signatures| + +The ``additional`` annotation can be used on declarations in explicit modules. +All declarations that are not required by a module signature in modules that implement |module signatures| must be annotated with ``additional``. + +Omitting ``additional`` on such declarations, or using the annotation in any other context, will result in a compiler error. +Other than that, the annotation has no effect. + .. index:: cached .. _cached: ``cached`` ========== -**Available for**: |classes|, |algebraic datatypes|, |characteristic predicates|, |member predicates|, |non-member predicates|, |modules| +**Available for**: |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|, |modules| The ``cached`` annotation indicates that an entity should be evaluated in its entirety and stored in the evaluation cache. All later references to this entity will use the @@ -126,7 +140,7 @@ body must also be annotated with ``cached``, otherwise a compiler error is repor ``deprecated`` ============== -**Available for**: |classes|, |algebraic datatypes|, |member predicates|, |non-member predicates|, |imports|, |fields|, |modules|, |aliases| +**Available for**: |classes|, |algebraic datatypes|, |type unions|, |member predicates|, |non-member predicates|, |imports|, |fields|, |modules|, |aliases|, |signatures| The ``deprecated`` annotation is applied to names that are outdated and scheduled for removal in a future release of QL. @@ -151,6 +165,16 @@ For example, the name ``DataFlowNode`` is deprecated and has the following QLDoc This QLDoc comment appears when you use the name ``DataFlowNode`` in a QL editor. +.. index:: extensible +.. _extensible: + +``extensible`` +============== + +**Available for**: |non-member predicates| + +The ``extensible`` annotation is used to mark predicates that are populated at evaluation time through data extensions. + .. index:: external .. _external: @@ -235,7 +259,7 @@ warning. ``private`` =========== -**Available for**: |classes|, |algebraic datatypes|, |member predicates|, |non-member predicates|, |imports|, |fields|, |modules|, |aliases| +**Available for**: |classes|, |algebraic datatypes|, |type unions|, |member predicates|, |non-member predicates|, |imports|, |fields|, |modules|, |aliases|, |signatures| The ``private`` annotation is used to prevent names from being exported. @@ -461,7 +485,7 @@ For more information, see ":ref:`monotonic-aggregates`." Binding sets ============ -**Available for**: |classes|, |characteristic predicates|, |member predicates|, |non-member predicates| +**Available for**: |classes|, |characteristic predicates|, |member predicates|, |non-member predicates|, |predicate signatures|, |type signatures| ``bindingset[...]`` ------------------- @@ -490,4 +514,9 @@ The ``bindingset`` annotation takes a comma-separated list of variables. .. |aliases| replace:: :ref:`aliases ` .. |type-aliases| replace:: :ref:`type aliases ` .. |algebraic datatypes| replace:: :ref:`algebraic datatypes ` +.. |type unions| replace:: :ref:`type unions ` .. |expressions| replace:: :ref:`expressions ` +.. |signatures| replace:: :ref:`signatures ` +.. |predicate signatures| replace:: :ref:`predicate signatures ` +.. |type signatures| replace:: :ref:`type signatures ` +.. |module signatures| replace:: :ref:`module signatures ` diff --git a/docs/codeql/ql-language-reference/expressions.rst b/docs/codeql/ql-language-reference/expressions.rst index 5c73681f7aa..327cabb6181 100644 --- a/docs/codeql/ql-language-reference/expressions.rst +++ b/docs/codeql/ql-language-reference/expressions.rst @@ -625,7 +625,7 @@ Then the evaluation of the ``depth`` predicate proceeds as follows: +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Stage** | **depth** | **Comments** | +===========+============================================+==========================================================================================================================================================================+ -| 0 |   | We always begin with the empty set. | +| 0 | | We always begin with the empty set. | +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 1 | ``(0, b), (0, d), (0, e)`` | The nodes with no children have depth 0. The recursive step for **a** and **c** fails to produce a value, since some of their children do not have values for ``depth``. | +-----------+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/codeql/ql-language-reference/formulas.rst b/docs/codeql/ql-language-reference/formulas.rst index 8745217decc..c17ba858ed7 100644 --- a/docs/codeql/ql-language-reference/formulas.rst +++ b/docs/codeql/ql-language-reference/formulas.rst @@ -193,7 +193,7 @@ information on cartesian products, see ":ref:`Troubleshooting query performance `". It is possible to enable warnings about implicit this receivers for `CodeQL packs -`__ +`__ through the ``warnOnImplicitThis`` property. .. _parenthesized-formulas: diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 9989c73e5dc..1d84cc31c73 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -36,7 +36,7 @@ Architecture A *QL program* consists of a query module defined in a QL file and a number of library modules defined in QLL files that it imports (see "`Import directives <#import-directives>`__"). The module in the QL file includes one or more queries (see "`Queries <#queries>`__"). A module may also include *import directives* (see "`Import directives <#import-directives>`__"), non-member predicates (see "`Non-member predicates <#non-member-predicates>`__"), class definitions (see "`Classes <#classes>`__"), and module definitions (see "`Modules <#modules>`__"). -QL programs are interpreted in the context of a *database* and a *library path* . The database provides a number of definitions: database types (see "`Types <#types>`__"), entities (see "`Values <#values>`__"), built-in predicates (see "`Built-ins <#built-ins>`__"), and the *database content* of built-in predicates and external predicates (see "`Evaluation <#evaluation>`__"). The library path is a sequence of file-system directories that hold QLL files. +QL programs are interpreted in the context of a *database* and a *library path* . The database provides a number of definitions: database types (see "`Types <#types>`__"), entities (see "`Values <#values>`__"), built-in predicates (see "`Built-ins <#built-ins>`__"), and the *database content* of built-in predicates, external predicates, and extensible predicates (see "`Evaluation <#evaluation>`__"). The library path is a sequence of file-system directories that hold QLL files. A QL program can be *evaluated* (see "`Evaluation <#evaluation>`__") to produce a set of tuples of values (see "`Values <#values>`__"). @@ -761,17 +761,17 @@ Various kinds of syntax can have *annotations* applied to them. Annotations are annotation ::= simpleAnnotation | argsAnnotation simpleAnnotation ::= "abstract" - | "cached" - | "external" - | "extensible" - | "final" - | "transient" - | "library" - | "private" - | "deprecated" - | "override" | "additional" + | "cached" + | "deprecated" + | "extensible" + | "external" + | "final" + | "library" + | "override" + | "private" | "query" + | "transient" argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]" | "language" "[" "monotonicAggregates" "]" @@ -791,28 +791,28 @@ The following table summarizes the syntactic constructs which can be marked with +================+=========+============+===================+=======================+=========+========+=========+=========+============+ | ``abstract`` | yes | | yes | | | | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``additional`` | yes | | | yes | | | yes | yes | yes | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``cached`` | yes | yes | yes | yes | | | yes | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``external`` | | | | yes | | | | | | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``extensible`` | | | | yes | | | | | | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``final`` | yes | | yes | | | yes | | (yes) | | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``transient`` | | | | yes | | | | | | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``library`` | (yes) | | | | | | | | | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``private`` | yes | | yes | yes | yes | yes | yes | yes | yes | -+----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``deprecated`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``extensible`` | | | | yes | | | | | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``external`` | | | | yes | | | | | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``final`` | yes | | yes | | | yes | | (yes) | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``library`` | (yes) | | | | | | | | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``override`` | | | yes | | | yes | | | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ -| ``additional`` | yes | | | yes | | | yes | yes | yes | +| ``private`` | yes | | yes | yes | yes | yes | yes | yes | yes | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ | ``query`` | | | | yes | | | | yes | | +----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ +| ``transient`` | | | | yes | | | | | | ++----------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+------------+ The ``library`` annotation is only usable within a QLL file, not a QL file. The ``final`` annotation is usable on type aliases, but not on module aliases and predicate aliases. @@ -933,7 +933,9 @@ A predicate definition adds a mapping from the predicate name and arity to the p When a predicate is a top-level clause in a module, it is called a non-member predicate. See below for "`Member predicates <#member-predicates>`__." -A valid non-member predicate can be annotated with ``cached``, ``deprecated``, ``external``, ``transient``, ``private``, and ``query``. Note, the ``transient`` annotation can only be applied if the non-member predicate is also annotated with ``external``. +A valid non-member predicate can be annotated with ``additional``, ``cached``, ``deprecated``, ``extensible``, ``external``, ``transient``, ``private``, and ``query``. +Note, the ``transient`` annotation can only be applied if the non-member predicate is also annotated with ``external``. +Note, the annotations ``extensible`` and ``external`` cannot both be used on the same non-member predicate. The head of the predicate gives a name, an optional *result type*, and a sequence of variables declarations that are *arguments*: @@ -951,7 +953,7 @@ The body of a predicate is of one of three forms: In the first form, with just a semicolon, the predicate is said to not have a body. In the second form, the body of the predicate is the given formula (see "`Formulas <#formulas>`__"). In the third form, the body is a higher-order relation. -A valid non-member predicate must have a body, either a formula or a higher-order relation, unless it is external, in which case it must not have a body. +A valid non-member predicate must have a body, either a formula or a higher-order relation, unless it is external or extensible, in which case it must not have a body. The typing environment for the body of the formula, if present, maps the variables in the head of the predicate to their associated types. If the predicate has a result type, then the typing environment also maps ``result`` to the result type. @@ -979,7 +981,7 @@ A class type is said to *final inherit* from base types that are final or refere A class adds a mapping from the class name to the class declaration to the current module's declared type environment. -A valid class can be annotated with ``abstract``, ``final``, ``library``, and ``private``. Any other annotation renders the class invalid. +A valid class can be annotated with ``abstract``, ``additional``, ``final``, ``library``, and ``private``. Any other annotation renders the class invalid. A valid class may not inherit from itself, or from more than one primitive type. The set of types that a valid class inherits from must be disjoint from the set of types that it final inherits from. @@ -1052,7 +1054,7 @@ A member predicate ``p`` with enclosing class ``C`` *shadows* a member predicate Member predicates have one or more *root definitions*. If a member predicate overrides no other member predicate, then it is its own root definition. Otherwise, its root definitions are those of any member predicate that it overrides. -A valid member predicate must have a body unless it is abstract or external, in which case it must not have a body. +A valid member predicate must have a body unless it is abstract, in which case it must not have a body. A valid member predicate must override another member predicate if it is annotated override. @@ -2179,7 +2181,7 @@ If a QL program has no valid stratification, then the program itself is not vali Layer evaluation ~~~~~~~~~~~~~~~~ -The store is first initialized with the *database content* of all built-in predicates and external predicates. The database content of a predicate is a set of ordered tuples that are included in the database. +The store is first initialized with the *database content* of all built-in predicates, external predicates, and extensible predicates. The database content of a predicate is a set of ordered tuples that are included in the database. Each layer of the stratification is *populated* in order. To populate a layer, each predicate in the layer is repeatedly populated until the store stops changing. The way that a predicate is populated is as follows: @@ -2292,17 +2294,17 @@ The complete grammar for QL is as follows: annotation ::= simpleAnnotation | argsAnnotation simpleAnnotation ::= "abstract" - | "cached" - | "external" - | "extensible" - | "final" - | "transient" - | "library" - | "private" - | "deprecated" - | "override" | "additional" + | "cached" + | "deprecated" + | "extensible" + | "external" + | "final" + | "library" + | "override" + | "private" | "query" + | "transient" argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]" | "language" "[" "monotonicAggregates" "]" diff --git a/docs/codeql/ql-language-reference/signatures.rst b/docs/codeql/ql-language-reference/signatures.rst index e80c54c47e4..f0fb8c03d7f 100644 --- a/docs/codeql/ql-language-reference/signatures.rst +++ b/docs/codeql/ql-language-reference/signatures.rst @@ -10,6 +10,10 @@ Signatures Parameterized modules use signatures as a type system for their parameters. There are three categories of signatures: **predicate signatures**, **type signatures**, and **module signatures**. +.. index:: predicate signature + +.. _predicate-signatures: + Predicate signatures ==================== @@ -36,6 +40,10 @@ For example: signature int operator(int lhs, int rhs); +.. index:: type signature + +.. _type-signatures: + Type signatures =============== @@ -66,6 +74,10 @@ For example: string toString(); } +.. index:: module signature + +.. _module-signatures: + Module signatures ================= diff --git a/docs/codeql/reusables/extractors.rst b/docs/codeql/reusables/extractors.rst index c09926666b0..4365d106258 100644 --- a/docs/codeql/reusables/extractors.rst +++ b/docs/codeql/reusables/extractors.rst @@ -20,7 +20,7 @@ - ``python`` * - Ruby - ``ruby`` - - Rust + * - Rust - ``rust`` * - Swift - ``swift`` diff --git a/docs/codeql/reusables/supported-frameworks.rst b/docs/codeql/reusables/supported-frameworks.rst index 3d89a663004..472e463cf79 100644 --- a/docs/codeql/reusables/supported-frameworks.rst +++ b/docs/codeql/reusables/supported-frameworks.rst @@ -313,7 +313,6 @@ Rust built-in support Provided by the current versions of the CodeQL query pack ``codeql/rust-queries`` (`changelog `__, `source `__) and the CodeQL library pack ``codeql/rust-all`` (`changelog `__, `source `__). -All support is experimental. .. csv-table:: :header-rows: 1 @@ -324,16 +323,21 @@ All support is experimental. Name, Category `actix-web `__, Web framework alloc, Standard library + `async-std `__, Asynchronous programming library + `biscotti `__, Cookie management `clap `__, Utility library + `cookie `__, Cookie management core, Standard library `digest `__, Cryptography library - `futures-executor `__, Utility library + `futures `__, Asynchronous programming library + `futures-rustls `__, Network communicator `hyper `__, HTTP library - `hyper-util `__, HTTP library `libc `__, Utility library `log `__, Logging library `md5 `__, Utility library `memchr `__, Utility library + `mysql `__, Database + `mysql_async `__, Database `once_cell `__, Utility library `poem `__, Web framework `postgres `__, Database @@ -345,12 +349,14 @@ All support is experimental. `rusqlite `__, Database std, Standard library `rust-crypto `__, Cryptography library + `rustls `__, Network communicator `serde `__, Serialization `smallvec `__, Utility library `sqlx `__, Database `tokio `__, Asynchronous IO `tokio-postgres `__, Database `url `__, Utility library + `warp `__, Web framework Swift built-in support ================================ diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 78641764660..8dcfd1a5dc0 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -17,8 +17,8 @@ .NET 5, .NET 6, .NET 7, .NET 8, .NET 9","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" GitHub Actions,"Not applicable",Not applicable,"``.github/workflows/*.yml``, ``.github/workflows/*.yaml``, ``**/action.yml``, ``**/action.yaml``" - Go (aka Golang), "Go up to 1.24", "Go 1.11 or more recent", ``.go`` - Java,"Java 7 to 24 [6]_","javac (OpenJDK and Oracle JDK), + Go (aka Golang), "Go up to 1.25", "Go 1.11 or more recent", ``.go`` + Java,"Java 7 to 25 [6]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [7]_",``.java`` Kotlin,"Kotlin 1.6.0 to 2.2.2\ *x*","kotlinc",``.kt`` @@ -26,8 +26,8 @@ Python [9]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13",Not applicable,``.py`` Ruby [10]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``" Rust [11]_,"Rust editions 2021 and 2024","Rust compiler","``.rs``, ``Cargo.toml``" - Swift [12]_,"Swift 5.4-6.1","Swift compiler","``.swift``" - TypeScript [13]_,"2.6-5.8",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" + Swift [12]_ [13]_,"Swift 5.4-6.2","Swift compiler","``.swift``" + TypeScript [14]_,"2.6-5.9",Standard TypeScript compiler,"``.ts``, ``.tsx``, ``.mts``, ``.cts``" .. container:: footnote-group @@ -36,11 +36,12 @@ .. [3] Objective-C, Objective-C++, C++/CLI, and C++/CX are not supported. .. [4] Support for the clang-cl compiler is preliminary. .. [5] Support for the Arm Compiler (armcc) is preliminary. - .. [6] Builds that execute on Java 7 to 24 can be analyzed. The analysis understands standard language features in Java 8 to 24; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code. + .. [6] Builds that execute on Java 7 to 25 can be analyzed. The analysis understands standard language features in Java 8 to 25; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code. .. [7] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin. .. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. .. [9] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. .. [10] Requires glibc 2.17. .. [11] Requires ``rustup`` and ``cargo`` to be installed. Features from nightly toolchains are not supported. .. [12] Support for the analysis of Swift requires macOS. - .. [13] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. + .. [13] Embedded Swift is not supported. + .. [14] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. diff --git a/docs/codeql/writing-codeql-queries/creating-path-queries.rst b/docs/codeql/writing-codeql-queries/creating-path-queries.rst index 7e178f94b44..2e439baa7f4 100644 --- a/docs/codeql/writing-codeql-queries/creating-path-queries.rst +++ b/docs/codeql/writing-codeql-queries/creating-path-queries.rst @@ -33,6 +33,7 @@ For more language-specific information on analyzing data flow, see: - ":ref:`Analyzing data flow in JavaScript/TypeScript `" - ":ref:`Analyzing data flow in Python `" - ":ref:`Analyzing data flow in Ruby `" +- ":ref:`Analyzing data flow in Rust `" - ":ref:`Analyzing data flow in Swift `" Path query examples @@ -59,7 +60,7 @@ You should use the following template: */ import - // For some languages (Java/C++/Python/Swift) you need to explicitly import the data flow library, such as + // For some languages (Java/C++/Python/Rust/Swift) you need to explicitly import the data flow library, such as // import semmle.code.java.dataflow.DataFlow or import codeql.swift.dataflow.DataFlow ... @@ -124,7 +125,7 @@ Declaring sources and sinks You must provide information about the ``source`` and ``sink`` in your path query. These are objects that correspond to the nodes of the paths that you are exploring. The name and the type of the ``source`` and the ``sink`` must be declared in the ``from`` statement of the query, and the types must be compatible with the nodes of the graph computed by the ``edges`` predicate. -If you are querying C/C++, C#, Go, Java/Kotlin, JavaScript/TypeScript, Python, or Ruby code (and you have used ``import MyFlow::PathGraph`` in your query), the definitions of the ``source`` and ``sink`` are accessed via the module resulting from the application of the ``Global<..>`` module in the data flow library. You should declare both of these objects in the ``from`` statement. +If you are querying C/C++, C#, Go, Java/Kotlin, JavaScript/TypeScript, Python, Ruby, or Rust code (and you have used ``import MyFlow::PathGraph`` in your query), the definitions of the ``source`` and ``sink`` are accessed via the module resulting from the application of the ``Global<..>`` module in the data flow library. You should declare both of these objects in the ``from`` statement. For example: .. code-block:: ql @@ -145,7 +146,7 @@ The configuration module must be defined to include definitions of sources and s - ``isSource()`` defines where data may flow from. - ``isSink()`` defines where data may flow to. -For more information on using the configuration class in your analysis see the sections on global data flow in ":ref:`Analyzing data flow in C/C++ `," ":ref:`Analyzing data flow in C# `," and ":ref:`Analyzing data flow in Python `." +For more information on using the configuration class in your analysis see the sections on global data flow in ":ref:`Analyzing data flow in C/C++ `," ":ref:`Analyzing data flow in C# `," ":ref:`Analyzing data flow in Python `," and ":ref:`Analyzing data flow in Rust `." You can also create a configuration for different frameworks and environments by extending the ``Configuration`` class. For more information, see ":ref:`Types `" in the QL language reference. diff --git a/docs/supported-queries.md b/docs/supported-queries.md index fa4cf1ea5d8..8ff2fb12046 100644 --- a/docs/supported-queries.md +++ b/docs/supported-queries.md @@ -2,8 +2,8 @@ Queries and libraries outside [the `experimental` directories](experimental.md) are _supported_ by GitHub, allowing our users to rely on their continued existence and functionality in the future: -1. Once a query or library has appeared in a stable release, a one-year deprecation period is required before we can remove it. There can be exceptions to this when it's not technically possible to mark it as deprecated. -2. Major changes to supported queries and libraries are always announced in the [change notes for stable releases](../change-notes/). +1. Once a query has appeared in a stable release, a one-year deprecation period is required before we can remove it. +2. Major changes to supported queries and libraries are always announced in the change notes for stable releases. 3. We will do our best to address user reports of false positives or false negatives. Because of these commitments, we set a high bar for accepting new supported queries. The requirements are detailed in the rest of this document. diff --git a/go/codeql-extractor.yml b/go/codeql-extractor.yml index 49c8c75232f..7a009fb2610 100644 --- a/go/codeql-extractor.yml +++ b/go/codeql-extractor.yml @@ -9,6 +9,8 @@ column_kind: "utf8" build_modes: - autobuild - manual +default_queries: + - codeql/go-queries github_api_languages: - Go scc_languages: @@ -19,6 +21,7 @@ file_types: extensions: - .go legacy_qltest_extraction: true +overlay_support_version: 20250626 options: extract_tests: title: Whether to include Go test files in the CodeQL database. diff --git a/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/go.dbscheme b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/go.dbscheme new file mode 100644 index 00000000000..b3da71c3ac2 --- /dev/null +++ b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/go.dbscheme @@ -0,0 +1,552 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref, + int endLine: int ref, int endColumn: int ref); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @definedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int defined: @definedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @definedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @definedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/old.dbscheme b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/old.dbscheme new file mode 100644 index 00000000000..b1341734d68 --- /dev/null +++ b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/old.dbscheme @@ -0,0 +1,563 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + +/** Overlay support **/ + +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref, + int endLine: int ref, int endColumn: int ref); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @definedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int defined: @definedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @definedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @definedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/upgrade.properties b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/upgrade.properties new file mode 100644 index 00000000000..1a7cdb0ad71 --- /dev/null +++ b/go/downgrades/b1341734d6870b105e5c9d168ce7dec25d7f72d0/upgrade.properties @@ -0,0 +1,4 @@ +description: Add databaseMetadata and overlayChangedFiles relations +compatibility: full +databaseMetadata.rel: delete +overlayChangedFiles.rel: delete diff --git a/go/extractor/cli/go-autobuilder/BUILD.bazel b/go/extractor/cli/go-autobuilder/BUILD.bazel index 0c705d5b194..003836b0874 100644 --- a/go/extractor/cli/go-autobuilder/BUILD.bazel +++ b/go/extractor/cli/go-autobuilder/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//go/extractor/autobuilder", "//go/extractor/diagnostics", "//go/extractor/project", + "//go/extractor/srcarchive", "//go/extractor/toolchain", "//go/extractor/util", ], diff --git a/go/extractor/cli/go-autobuilder/go-autobuilder.go b/go/extractor/cli/go-autobuilder/go-autobuilder.go index 1601b5659d3..756bd19b45e 100644 --- a/go/extractor/cli/go-autobuilder/go-autobuilder.go +++ b/go/extractor/cli/go-autobuilder/go-autobuilder.go @@ -13,6 +13,7 @@ import ( "github.com/github/codeql-go/extractor/autobuilder" "github.com/github/codeql-go/extractor/diagnostics" "github.com/github/codeql-go/extractor/project" + "github.com/github/codeql-go/extractor/srcarchive" "github.com/github/codeql-go/extractor/toolchain" "github.com/github/codeql-go/extractor/util" ) @@ -273,7 +274,7 @@ func createPathTransformerFile(newdir string) *os.File { log.Fatalf("Failed to chdir into %s: %s\n", newdir, err.Error()) } - // set up SEMMLE_PATH_TRANSFORMER to ensure paths in the source archive and the snapshot + // set up CODEQL_PATH_TRANSFORMER to ensure paths in the source archive and the snapshot // match the original source location, not the location we moved it to pt, err := os.CreateTemp("", "path-transformer") if err != nil { @@ -283,7 +284,7 @@ func createPathTransformerFile(newdir string) *os.File { } // Writes the path transformer file -func writePathTransformerFile(pt *os.File, realSrc, root, newdir string) { +func writePathTransformerFile(pt *os.File, realSrc, newdir string) { _, err := pt.WriteString("#" + realSrc + "\n" + newdir + "//\n") if err != nil { log.Fatalf("Unable to write path transformer file: %s.", err.Error()) @@ -292,9 +293,9 @@ func writePathTransformerFile(pt *os.File, realSrc, root, newdir string) { if err != nil { log.Fatalf("Unable to close path transformer file: %s.", err.Error()) } - err = os.Setenv("SEMMLE_PATH_TRANSFORMER", pt.Name()) + err = os.Setenv("CODEQL_PATH_TRANSFORMER", pt.Name()) if err != nil { - log.Fatalf("Unable to set SEMMLE_PATH_TRANSFORMER environment variable: %s.\n", err.Error()) + log.Fatalf("Unable to set CODEQL_PATH_TRANSFORMER environment variable: %s.\n", err.Error()) } } @@ -447,7 +448,7 @@ func installDependencies(workspace project.GoWorkspace) { } // Run the extractor. -func extract(workspace project.GoWorkspace) bool { +func extract(workspace project.GoWorkspace, sourceRoot string) bool { extractor, err := util.GetExtractorPath() if err != nil { log.Fatalf("Could not determine path of extractor: %v.\n", err) @@ -458,6 +459,12 @@ func extract(workspace project.GoWorkspace) bool { extractorArgs = append(extractorArgs, workspace.ModMode.ArgsForGoVersion(toolchain.GetEnvGoSemVer())...) } + if util.IsOverlayExtraction() { + // When we are extracting an overlay, pass the source root to the extractor so that it knows + // how to resolve the relative paths in the list of changed files. + extractorArgs = append(extractorArgs, "--source-root", sourceRoot) + } + if len(workspace.Modules) == 0 { // There may be no modules if we are using e.g. Dep or Glide extractorArgs = append(extractorArgs, "./...") @@ -501,9 +508,6 @@ func installDependenciesAndBuild() { srcdir := getSourceDir() - // we set `SEMMLE_PATH_TRANSFORMER` ourselves in some cases, so blank it out first for consistency - os.Setenv("SEMMLE_PATH_TRANSFORMER", "") - // determine how to install dependencies and whether a GOPATH needs to be set up before // extraction workspaces := project.GetWorkspaceInfo(true) @@ -534,7 +538,21 @@ func installDependenciesAndBuild() { pt := createPathTransformerFile(paths.newdir) defer os.Remove(pt.Name()) - writePathTransformerFile(pt, paths.realSrc, paths.root, paths.newdir) + // We're about to create out own path transformer, so that paths containing the + // temporary GOPATH point to the right location. However, if there was already an + // incoming path transformer, the right location will be what _it_ wanted to transform + // paths to. + existingPathTransformer, err := srcarchive.LoadProjectLayoutFromEnv() + if err != nil { + log.Fatalf("Unable to load path transformer: %s.\n", err.Error()) + } + var realSrc string + if existingPathTransformer == nil { + realSrc = paths.realSrc + } else { + realSrc = existingPathTransformer.To + } + writePathTransformerFile(pt, realSrc, paths.newdir) setGopath(paths.root) } } @@ -575,6 +593,12 @@ func installDependenciesAndBuild() { buildWithCustomCommands(inst) } + // The autobuilder is invoked with its working directory set to the source directory. + sourceRoot, err := os.Getwd() + if err != nil { + log.Fatalf("Failed to get current working directory: %s\n", err.Error()) + } + // Attempt to extract all workspaces; we will tolerate individual extraction failures here for i, workspace := range workspaces { if workspace.ModMode == project.ModVendor { @@ -595,7 +619,7 @@ func installDependenciesAndBuild() { } } - workspaces[i].Extracted = extract(workspace) + workspaces[i].Extracted = extract(workspace, sourceRoot) if !workspaces[i].Extracted { unsuccessfulProjects = append(unsuccessfulProjects, workspace.BaseDir) @@ -620,9 +644,13 @@ func installDependenciesAndBuild() { } else { log.Printf("Success: extraction succeeded for all %d discovered project(s).\n", len(workspaces)) } + + util.WriteOverlayBaseMetadata() } func main() { + util.SetLogLevel() + if len(os.Args) == 1 { installDependenciesAndBuild() } else if len(os.Args) == 2 && os.Args[1] == "--identify-environment" { diff --git a/go/extractor/cli/go-extractor/BUILD.bazel b/go/extractor/cli/go-extractor/BUILD.bazel index 769e4a7b09b..ec7cf150f0a 100644 --- a/go/extractor/cli/go-extractor/BUILD.bazel +++ b/go/extractor/cli/go-extractor/BUILD.bazel @@ -11,6 +11,7 @@ go_library( deps = [ "//go/extractor", "//go/extractor/diagnostics", + "//go/extractor/util", ], ) diff --git a/go/extractor/cli/go-extractor/go-extractor.go b/go/extractor/cli/go-extractor/go-extractor.go index 425af6cd55d..d394d5fde40 100644 --- a/go/extractor/cli/go-extractor/go-extractor.go +++ b/go/extractor/cli/go-extractor/go-extractor.go @@ -10,6 +10,7 @@ import ( "github.com/github/codeql-go/extractor" "github.com/github/codeql-go/extractor/diagnostics" + "github.com/github/codeql-go/extractor/util" ) var cpuprofile, memprofile string @@ -23,9 +24,10 @@ func usage() { // extractTests is set (a) if we were manually commanded to extract tests via the relevant // environment variable / extractor option, or (b) we're mimicking a `go test` command. -func parseFlags(args []string, mimic bool, extractTests bool) ([]string, []string, bool) { +func parseFlags(args []string, mimic bool, extractTests bool) ([]string, []string, bool, string) { i := 0 buildFlags := []string{} + var sourceRoot string for ; i < len(args) && strings.HasPrefix(args[i], "-"); i++ { if args[i] == "--" { i++ @@ -60,6 +62,18 @@ func parseFlags(args []string, mimic bool, extractTests bool) ([]string, []strin } else { log.Fatalf("--mimic requires an argument, e.g. --mimic go") } + case "--source-root": + // The extractor can be called by the autobuilder with the working directory set to + // the directory containing the workspace we're extracting, and this may be a + // subdirectory of the actual source root. This argument lets us resolve paths that + // are relative to that source root, e.g. for the list of overlay changed files. + if i+1 < len(args) { + i++ + sourceRoot = args[i] + log.Printf("Source root is %s", sourceRoot) + } else { + log.Fatalf("--source-root requires an argument, e.g. --source-root /path/to/root") + } } } @@ -92,12 +106,14 @@ func parseFlags(args []string, mimic bool, extractTests bool) ([]string, []strin cpuprofile = os.Getenv("CODEQL_EXTRACTOR_GO_CPU_PROFILE") memprofile = os.Getenv("CODEQL_EXTRACTOR_GO_MEM_PROFILE") - return buildFlags, args[i:], extractTests + return buildFlags, args[i:], extractTests, sourceRoot } func main() { + util.SetLogLevel() + extractTestsDefault := os.Getenv("CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_TESTS") == "true" - buildFlags, patterns, extractTests := parseFlags(os.Args[1:], false, extractTestsDefault) + buildFlags, patterns, extractTests, sourceRoot := parseFlags(os.Args[1:], false, extractTestsDefault) if cpuprofile != "" { f, err := os.Create(cpuprofile) @@ -117,7 +133,7 @@ func main() { } log.Printf("Build flags: '%s'; patterns: '%s'\n", strings.Join(buildFlags, " "), strings.Join(patterns, " ")) - err := extractor.ExtractWithFlags(buildFlags, patterns, extractTests) + err := extractor.ExtractWithFlags(buildFlags, patterns, extractTests, sourceRoot) if err != nil { errString := err.Error() if strings.Contains(errString, "unexpected directory layout:") { diff --git a/go/extractor/dbscheme/tables.go b/go/extractor/dbscheme/tables.go index 665ecdcc240..9c537fbaf89 100644 --- a/go/extractor/dbscheme/tables.go +++ b/go/extractor/dbscheme/tables.go @@ -43,6 +43,17 @@ externalData( snapshotDate(unique date snapshotDate : date ref); sourceLocationPrefix(varchar(900) prefix : string ref); + +/** Overlay support **/ + +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); `) // Copied directly from the XML dbscheme diff --git a/go/extractor/extractor.go b/go/extractor/extractor.go index 67c12737584..09dd1b3f575 100644 --- a/go/extractor/extractor.go +++ b/go/extractor/extractor.go @@ -11,6 +11,7 @@ import ( "go/types" "io" "log" + "log/slog" "os" "path/filepath" "reflect" @@ -58,16 +59,11 @@ func init() { } } -// Extract extracts the packages specified by the given patterns -func Extract(patterns []string) error { - return ExtractWithFlags(nil, patterns, false) -} - // ExtractWithFlags extracts the packages specified by the given patterns and build flags -func ExtractWithFlags(buildFlags []string, patterns []string, extractTests bool) error { +func ExtractWithFlags(buildFlags []string, patterns []string, extractTests bool, sourceRoot string) error { startTime := time.Now() - extraction := NewExtraction(buildFlags, patterns) + extraction := NewExtraction(buildFlags, patterns, sourceRoot) defer extraction.StatWriter.Close() modEnabled := os.Getenv("GO111MODULE") != "off" @@ -323,16 +319,17 @@ func ExtractWithFlags(buildFlags []string, patterns []string, extractTests bool) type Extraction struct { // A lock for preventing concurrent writes to maps and the stat trap writer, as they are not // thread-safe - Lock sync.Mutex - LabelKey string - Label trap.Label - StatWriter *trap.Writer - WaitGroup sync.WaitGroup - GoroutineSem *semaphore - FdSem *semaphore - NextFileId int - FileInfo map[string]*FileInfo - SeenGoMods map[string]bool + Lock sync.Mutex + LabelKey string + Label trap.Label + StatWriter *trap.Writer + WaitGroup sync.WaitGroup + GoroutineSem *semaphore + FdSem *semaphore + NextFileId int + FileInfo map[string]*FileInfo + SeenGoMods map[string]bool + OverlayChanges map[string]bool } type FileInfo struct { @@ -367,7 +364,7 @@ func (extraction *Extraction) GetNextErr(path string) int { return res } -func NewExtraction(buildFlags []string, patterns []string) *Extraction { +func NewExtraction(buildFlags []string, patterns []string, sourceRoot string) *Extraction { hash := md5.New() io.WriteString(hash, "go") for _, buildFlag := range buildFlags { @@ -379,6 +376,22 @@ func NewExtraction(buildFlags []string, patterns []string) *Extraction { } sum := hash.Sum(nil) + overlayChangeList := util.GetOverlayChanges(sourceRoot) + var overlayChanges map[string]bool + if overlayChangeList == nil { + overlayChanges = nil + } else { + overlayChanges = make(map[string]bool) + for _, changedFilePath := range overlayChangeList { + absPath, err := filepath.Abs(changedFilePath) + if err != nil { + log.Fatalf("Error resolving absolute path of overlay change %s: %s", changedFilePath, err.Error()) + } + overlayChanges[absPath] = true + slog.Info("Overlay changed file", "path", absPath) + } + } + i := 0 var path string // split compilation files into directories to avoid filling a single directory with too many files @@ -438,10 +451,11 @@ func NewExtraction(buildFlags []string, patterns []string) *Extraction { FdSem: newSemaphore(100), // this semaphore is used to limit the number of goroutines spawned, so we // don't run into memory issues - GoroutineSem: newSemaphore(MaxGoRoutines), - NextFileId: 0, - FileInfo: make(map[string]*FileInfo), - SeenGoMods: make(map[string]bool), + GoroutineSem: newSemaphore(MaxGoRoutines), + NextFileId: 0, + FileInfo: make(map[string]*FileInfo), + SeenGoMods: make(map[string]bool), + OverlayChanges: overlayChanges, } } @@ -720,6 +734,16 @@ func (extraction *Extraction) extractFile(ast *ast.File, pkg *packages.Package) return nil } path := normalizedPath(ast, fset) + // If we're extracting an overlay, we want to skip extraction of files that haven't changed. + // Since some files may be outside the source directory (e.g. files preprocessed by cgo) we + // can't easily know if they have changed (or came from source files that changed), so we always + // extract a file if it's not in the package directory. + if extraction.OverlayChanges != nil && + !extraction.OverlayChanges[path] && + strings.HasPrefix(path+string(filepath.Separator), pkg.Dir) { + slog.Info("Skipping unchanged file in overlay extraction", "path", path) + return nil + } extraction.FdSem.acquire(3) @@ -791,12 +815,12 @@ func (extraction *Extraction) extractFileInfo(tw *trap.Writer, file string, isDu displayPath = rawPath } if i == len(components)-1 { - lbl := tw.Labeler.FileLabelFor(file) + lbl := tw.Labeler.FileLabelFor(path) dbscheme.FilesTable.Emit(tw, lbl, displayPath) dbscheme.ContainerParentTable.Emit(tw, parentLbl, lbl) dbscheme.HasLocationTable.Emit(tw, lbl, emitLocation(tw, lbl, 0, 0, 0, 0)) extraction.Lock.Lock() - slbl := extraction.StatWriter.Labeler.FileLabelFor(file) + slbl := extraction.StatWriter.Labeler.FileLabelFor(path) if !isDummy { dbscheme.CompilationCompilingFilesTable.Emit(extraction.StatWriter, extraction.Label, extraction.GetFileIdx(file), slbl) } diff --git a/go/extractor/go.mod b/go/extractor/go.mod index 8ec7ec72fc2..e581fdb652c 100644 --- a/go/extractor/go.mod +++ b/go/extractor/go.mod @@ -9,8 +9,8 @@ toolchain go1.25.0 // when adding or removing dependencies, run // bazel mod tidy require ( - golang.org/x/mod v0.26.0 - golang.org/x/tools v0.35.0 + golang.org/x/mod v0.30.0 + golang.org/x/tools v0.39.0 ) -require golang.org/x/sync v0.16.0 // indirect +require golang.org/x/sync v0.18.0 // indirect diff --git a/go/extractor/go.sum b/go/extractor/go.sum index 58f0d0b933b..6579b482848 100644 --- a/go/extractor/go.sum +++ b/go/extractor/go.sum @@ -1,8 +1,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= -golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= -golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= +golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= diff --git a/go/extractor/gomodextractor.go b/go/extractor/gomodextractor.go index be52af59760..8dce96b6e6a 100644 --- a/go/extractor/gomodextractor.go +++ b/go/extractor/gomodextractor.go @@ -20,6 +20,11 @@ func (extraction *Extraction) extractGoMod(path string) error { path = normPath } + if extraction.OverlayChanges != nil && !extraction.OverlayChanges[path] { + // This go.mod did not change since the base was extracted + return nil + } + extraction.Lock.Lock() if extraction.SeenGoMods[path] { extraction.Lock.Unlock() diff --git a/go/extractor/srcarchive/BUILD.bazel b/go/extractor/srcarchive/BUILD.bazel index e72e2e7ca08..6d8776abce7 100644 --- a/go/extractor/srcarchive/BUILD.bazel +++ b/go/extractor/srcarchive/BUILD.bazel @@ -10,6 +10,7 @@ go_library( ], importpath = "github.com/github/codeql-go/extractor/srcarchive", visibility = ["//visibility:public"], + deps = ["//go/extractor/util"], ) go_test( diff --git a/go/extractor/srcarchive/projectlayout.go b/go/extractor/srcarchive/projectlayout.go index 6301755ef8a..0a628f38424 100644 --- a/go/extractor/srcarchive/projectlayout.go +++ b/go/extractor/srcarchive/projectlayout.go @@ -6,6 +6,8 @@ import ( "fmt" "os" "strings" + + "github.com/github/codeql-go/extractor/util" ) // ProjectLayout describes a very simple project layout rewriting paths starting @@ -16,7 +18,7 @@ import ( // # to // from// type ProjectLayout struct { - from, to string + From, To string } // normaliseSlashes adds an initial slash to `path` if there isn't one, and trims @@ -28,6 +30,25 @@ func normaliseSlashes(path string) string { return strings.TrimSuffix(path, "/") } +// LoadProjectLayoutFromEnv loads a project layout from the file referenced by the +// {CODEQL,SEMMLE}_PATH_TRANSFORMER environment variable. If neither env var is set, returns nil. If +// the file cannot be read or does not have the right format, it returns an error. +func LoadProjectLayoutFromEnv() (*ProjectLayout, error) { + pt := util.Getenv("CODEQL_PATH_TRANSFORMER", "SEMMLE_PATH_TRANSFORMER") + if pt == "" { + return nil, nil + } + ptf, err := os.Open(pt) + if err != nil { + return nil, err + } + projLayout, err := LoadProjectLayout(ptf) + if err != nil { + return nil, err + } + return projLayout, nil +} + // LoadProjectLayout loads a project layout from the given file, returning an error // if the file does not have the right format func LoadProjectLayout(file *os.File) (*ProjectLayout, error) { @@ -41,7 +62,7 @@ func LoadProjectLayout(file *os.File) (*ProjectLayout, error) { if !strings.HasPrefix(line, "#") { return nil, fmt.Errorf("first line of project layout should start with #, but got %s", line) } - res.to = normaliseSlashes(strings.TrimSpace(strings.TrimPrefix(line, "#"))) + res.To = normaliseSlashes(strings.TrimSpace(strings.TrimPrefix(line, "#"))) if !scanner.Scan() { return nil, errors.New("empty section in project-layout file") @@ -57,7 +78,7 @@ func LoadProjectLayout(file *os.File) (*ProjectLayout, error) { if strings.HasPrefix(line, "-") || strings.Contains(line, "*") || strings.Contains(line, "//") { return nil, errors.New("unsupported project-layout feature") } - res.from = normaliseSlashes(line) + res.From = normaliseSlashes(line) for scanner.Scan() { if strings.TrimSpace(scanner.Text()) != "" { @@ -71,11 +92,11 @@ func LoadProjectLayout(file *os.File) (*ProjectLayout, error) { // transformString transforms `str` as specified by the project layout: if it starts with the `from` // prefix, that prefix is relaced by `to`; otherwise the string is returned unchanged func (p *ProjectLayout) transformString(str string) string { - if str == p.from { - return p.to + if str == p.From { + return p.To } - if strings.HasPrefix(str, p.from+"/") { - return p.to + "/" + str[len(p.from)+1:] + if strings.HasPrefix(str, p.From+"/") { + return p.To + "/" + str[len(p.From)+1:] } return str } diff --git a/go/extractor/srcarchive/projectlayout_test.go b/go/extractor/srcarchive/projectlayout_test.go index 8fb17607cae..507ee183d9a 100644 --- a/go/extractor/srcarchive/projectlayout_test.go +++ b/go/extractor/srcarchive/projectlayout_test.go @@ -28,6 +28,32 @@ func mkProjectLayout(projectLayoutSource string, t *testing.T) (*ProjectLayout, return LoadProjectLayout(pt) } +func mkProjectLayoutFromEnv(projectLayoutSource string, t *testing.T) (*ProjectLayout, error) { + pt, err := os.CreateTemp("", "path-transformer-from-env") + if err != nil { + t.Fatalf("Unable to create temporary file for project layout: %s", err.Error()) + } + defer os.Remove(pt.Name()) + _, err = pt.WriteString(projectLayoutSource) + if err != nil { + t.Fatalf("Unable to write to temporary file for project layout: %s", err.Error()) + } + err = pt.Close() + if err != nil { + t.Fatalf("Unable to close path transformer file: %s.", err.Error()) + } + + pt, err = os.Open(pt.Name()) + if err != nil { + t.Fatalf("Unable to open path transformer file: %s.", err.Error()) + } + + os.Setenv("CODEQL_PATH_TRANSFORMER", pt.Name()) + defer os.Unsetenv("CODEQL_PATH_TRANSFORMER") + + return LoadProjectLayoutFromEnv() +} + func testTransformation(projectLayout *ProjectLayout, t *testing.T, path string, expected string) { actual := projectLayout.Transform(path) if actual != expected { @@ -35,16 +61,12 @@ func testTransformation(projectLayout *ProjectLayout, t *testing.T, path string, } } -func TestValidProjectLayout(t *testing.T) { - p, err := mkProjectLayout(` +const validProjectLayoutSource = ` # /opt/src /opt/src/root/src/org/repo// -`, t) - - if err != nil { - t.Fatalf("Error loading project layout: %s", err.Error()) - } +` +func testTransformationsForValidProjectLayout(p *ProjectLayout, t *testing.T) { testTransformation(p, t, "/opt/src/root/src/org/repo", "/opt/src") testTransformation(p, t, "/opt/src/root/src/org/repo/", "/opt/src/") testTransformation(p, t, "/opt/src/root/src/org/repo/main.go", "/opt/src/main.go") @@ -53,6 +75,26 @@ func TestValidProjectLayout(t *testing.T) { testTransformation(p, t, "opt/src/root/src/org/repo", "opt/src/root/src/org/repo") } +func TestValidProjectLayout(t *testing.T) { + p, err := mkProjectLayout(validProjectLayoutSource, t) + + if err != nil { + t.Fatalf("Error loading project layout: %s", err.Error()) + } + + testTransformationsForValidProjectLayout(p, t) +} + +func TestValidProjectLayoutFromEnv(t *testing.T) { + p, err := mkProjectLayoutFromEnv(validProjectLayoutSource, t) + + if err != nil { + t.Fatalf("Error loading project layout: %s", err.Error()) + } + + testTransformationsForValidProjectLayout(p, t) +} + func TestWindowsPaths(t *testing.T) { p, err := mkProjectLayout(` # /c:/virtual diff --git a/go/extractor/srcarchive/srcarchive.go b/go/extractor/srcarchive/srcarchive.go index ee9aea43064..3f4c1d1a90d 100644 --- a/go/extractor/srcarchive/srcarchive.go +++ b/go/extractor/srcarchive/srcarchive.go @@ -4,6 +4,7 @@ import ( "errors" "io" "log" + "log/slog" "os" "path/filepath" "strings" @@ -12,16 +13,14 @@ import ( var pathTransformer *ProjectLayout func init() { - pt := os.Getenv("SEMMLE_PATH_TRANSFORMER") - if pt != "" { - ptf, err := os.Open(pt) - if err != nil { - log.Fatalf("Unable to open path transformer %s: %s.\n", pt, err.Error()) - } - pathTransformer, err = LoadProjectLayout(ptf) - if err != nil { - log.Fatalf("Unable to initialize path transformer: %s.\n", err.Error()) + pt, err := LoadProjectLayoutFromEnv() + if err == nil { + pathTransformer = pt + if pathTransformer != nil { + slog.Info("Loaded path transformer", "from", pathTransformer.From, "to", pathTransformer.To) } + } else { + log.Fatalf("Unable to load path transformer: %s.\n", err.Error()) } } @@ -69,7 +68,7 @@ func srcArchive() (string, error) { return srcArchive, nil } -// TransformPath applies the transformations specified by `SEMMLE_PATH_TRANSFORMER` (if any) to the +// TransformPath applies the transformations specified by `CODEQL_PATH_TRANSFORMER` (if any) to the // given path func TransformPath(path string) string { if pathTransformer != nil { diff --git a/go/extractor/trap/labels.go b/go/extractor/trap/labels.go index 2822da61ff1..3fc02d066cf 100644 --- a/go/extractor/trap/labels.go +++ b/go/extractor/trap/labels.go @@ -3,7 +3,9 @@ package trap import ( "fmt" "go/types" + "path/filepath" + "github.com/github/codeql-go/extractor/srcarchive" "github.com/github/codeql-go/extractor/util" ) @@ -67,14 +69,14 @@ func (l *Labeler) GlobalID(key string) Label { // FileLabel returns the label for a file with path `path`. func (l *Labeler) FileLabel() Label { if l.fileLabel == InvalidLabel { - l.fileLabel = l.FileLabelFor(l.tw.path) + l.fileLabel = l.FileLabelFor(srcarchive.TransformPath(l.tw.path)) } return l.fileLabel } // FileLabelFor returns the label for the file for which the trap writer `tw` is associated func (l *Labeler) FileLabelFor(path string) Label { - return l.GlobalID(util.EscapeTrapSpecialChars(path) + ";sourcefile") + return l.GlobalID(util.EscapeTrapSpecialChars(filepath.ToSlash(path)) + ";sourcefile") } // LocalID associates a label with the given AST node `nd` and returns it diff --git a/go/extractor/util/BUILD.bazel b/go/extractor/util/BUILD.bazel index dd294a63a9c..ee090607ced 100644 --- a/go/extractor/util/BUILD.bazel +++ b/go/extractor/util/BUILD.bazel @@ -6,6 +6,8 @@ go_library( name = "util", srcs = [ "extractvendordirs.go", + "logging.go", + "overlays.go", "registryproxy.go", "semver.go", "util.go", @@ -18,6 +20,7 @@ go_library( go_test( name = "util_test", srcs = [ + "logging_test.go", "registryproxy_test.go", "semver_test.go", "util_test.go", diff --git a/go/extractor/util/logging.go b/go/extractor/util/logging.go new file mode 100644 index 00000000000..b0919151edf --- /dev/null +++ b/go/extractor/util/logging.go @@ -0,0 +1,45 @@ +package util + +import ( + "log/slog" + "os" + "strings" +) + +// Mirrors the verbosity definitions in the CodeQL CLI, which are passed to us +// in the `CODEQL_VERBOSITY` environment variable. +type Verbosity string + +const ( + // Only print error messages. + Errors Verbosity = "errors" + // Print warnings and error messages. + Warnings Verbosity = "warnings" + // Default verbosity. + Progress Verbosity = "progress" + // More details of normal operations. + Details Verbosity = "progress+" + // Debug level set by e.g. the CodeQL Action. + Spammy Verbosity = "progress++" + // The most detailed. + Spammier Verbosity = "progress+++" +) + +func parseLogLevel(value string) slog.Level { + value = strings.ToLower(value) + if strings.HasPrefix(value, string(Details)) { + return slog.LevelDebug + } else if value == string(Errors) { + return slog.LevelError + } else if value == string(Warnings) { + return slog.LevelWarn + } else { + // Default + return slog.LevelInfo + } +} + +// Sets the log level for the default `slog` logger, based on `CODEQL_VERBOSITY`. +func SetLogLevel() { + slog.SetLogLoggerLevel(parseLogLevel(os.Getenv("CODEQL_VERBOSITY"))) +} diff --git a/go/extractor/util/logging_test.go b/go/extractor/util/logging_test.go new file mode 100644 index 00000000000..1409f7b8d9a --- /dev/null +++ b/go/extractor/util/logging_test.go @@ -0,0 +1,33 @@ +package util + +import ( + "log/slog" + "strings" + "testing" +) + +func assertLogLevel(t *testing.T, value string, level slog.Level) { + actual := parseLogLevel(value) + if actual != level { + t.Errorf("Expected %s to parse as %s, but got %s", value, level, actual) + } +} + +func TestParseLogLevel(t *testing.T) { + // Known verbosity levels. + assertLogLevel(t, string(Errors), slog.LevelError) + assertLogLevel(t, string(Warnings), slog.LevelWarn) + assertLogLevel(t, string(Progress), slog.LevelInfo) + assertLogLevel(t, string(Details), slog.LevelDebug) + assertLogLevel(t, string(Spammy), slog.LevelDebug) + assertLogLevel(t, string(Spammier), slog.LevelDebug) + + // Ignore case + assertLogLevel(t, strings.ToUpper(string(Spammier)), slog.LevelDebug) + assertLogLevel(t, strings.ToUpper(string(Errors)), slog.LevelError) + + // Other values default to LevelInfo + assertLogLevel(t, "", slog.LevelInfo) + assertLogLevel(t, "unknown", slog.LevelInfo) + assertLogLevel(t, "none", slog.LevelInfo) +} diff --git a/go/extractor/util/overlays.go b/go/extractor/util/overlays.go new file mode 100644 index 00000000000..6a5c3760549 --- /dev/null +++ b/go/extractor/util/overlays.go @@ -0,0 +1,70 @@ +package util + +import ( + "encoding/json" + "log" + "os" + "path/filepath" +) + +func IsOverlayExtraction() bool { + _, present := os.LookupEnv("CODEQL_EXTRACTOR_GO_OVERLAY_METADATA_IN") + return present +} + +// If the relevant environment variable is set, indicating that we are extracting an overlay +// database, GetOverlayChanges returns the list of relative paths of files that have changed (or +// been deleted). Otherwise, it returns `nil`. +func GetOverlayChanges(sourceRoot string) []string { + if overlayChangesJsonPath, present := os.LookupEnv("CODEQL_EXTRACTOR_GO_OVERLAY_CHANGES"); present { + log.Printf("Reading overlay changes from: %s", overlayChangesJsonPath) + + file, err := os.Open(overlayChangesJsonPath) + if err != nil { + log.Fatalf("Failed to open overlay changes JSON file: %s", err) + } + defer file.Close() + + var overlayData struct { + Changes []string `json:"changes"` + } + + decoder := json.NewDecoder(file) + if err := decoder.Decode(&overlayData); err != nil { + log.Fatalf("Failed to decode overlay changes JSON file: %s", err) + } + + absPaths := make([]string, 0, len(overlayData.Changes)) + if sourceRoot == "" { + // This shouldn't happen, because it implies the extractor was invoked in some way other + // than from the autobuilder. However, we'll only attempt to build an overlay if there + // exists an overlay _base_, and only the autobuilder writes the metadata file that + // ensures a database is created as an overlay-base. + log.Fatalf("Extractor is running in overlay mode, but --source-root was not provided") + } + for _, relPath := range overlayData.Changes { + absPaths = append(absPaths, filepath.Clean(sourceRoot+"/"+relPath)) + } + + return absPaths + } else { + return nil + } +} + +// WriteOverlayBaseMetadata creates an empty metadata file if we are extracting an overlay base; +// otherwise, it does nothing. +func WriteOverlayBaseMetadata() { + if metadataPath, present := os.LookupEnv("CODEQL_EXTRACTOR_GO_OVERLAY_BASE_METADATA_OUT"); present { + log.Printf("Writing overlay base metadata to: %s", metadataPath) + + // In principle, we could store some metadata here and read it back when extracting the + // overlay. For now, we don't need to store anything, but the CLI still requires us to write + // something, so just create an empty file. + file, err := os.Create(metadataPath) + if err != nil { + log.Fatalf("Failed to create overlay base metadata file: %s", err) + } + file.Close() + } +} diff --git a/go/extractor/util/registryproxy.go b/go/extractor/util/registryproxy.go index 301d45896d2..1f20832e8d8 100644 --- a/go/extractor/util/registryproxy.go +++ b/go/extractor/util/registryproxy.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "log/slog" + "net/url" "os" "os/exec" "strings" @@ -14,6 +15,7 @@ const PROXY_PORT = "CODEQL_PROXY_PORT" const PROXY_CA_CERTIFICATE = "CODEQL_PROXY_CA_CERTIFICATE" const PROXY_URLS = "CODEQL_PROXY_URLS" const GOPROXY_SERVER = "goproxy_server" +const GIT_SOURCE = "git_source" type RegistryConfig struct { Type string `json:"type"` @@ -26,9 +28,11 @@ var proxy_address string // The path to the temporary file that stores the proxy certificate, if any. var proxy_cert_file string -// An array of registry configurations that are relevant to Go. -// This excludes other registry configurations that may be available, but are not relevant to Go. -var proxy_configs []RegistryConfig +// An array of goproxy server URLs. +var goproxy_servers []string + +// An array of Git URLs. +var git_sources []string // Stores the environment variables that we wish to pass on to `go` commands. var proxy_vars []string = nil @@ -53,7 +57,13 @@ func getEnvVars() []string { if proxy_host, proxy_host_set := os.LookupEnv(PROXY_HOST); proxy_host_set && proxy_host != "" { if proxy_port, proxy_port_set := os.LookupEnv(PROXY_PORT); proxy_port_set && proxy_port != "" { proxy_address = fmt.Sprintf("http://%s:%s", proxy_host, proxy_port) - result = append(result, fmt.Sprintf("HTTP_PROXY=%s", proxy_address), fmt.Sprintf("HTTPS_PROXY=%s", proxy_address)) + result = append( + result, + fmt.Sprintf("HTTP_PROXY=%s", proxy_address), + fmt.Sprintf("HTTPS_PROXY=%s", proxy_address), + fmt.Sprintf("http_proxy=%s", proxy_address), + fmt.Sprintf("https_proxy=%s", proxy_address), + ) slog.Info("Found private registry proxy", slog.String("proxy_address", proxy_address)) } @@ -91,20 +101,49 @@ func getEnvVars() []string { // filter others out at this point. for _, cfg := range val { if cfg.Type == GOPROXY_SERVER { - proxy_configs = append(proxy_configs, cfg) + goproxy_servers = append(goproxy_servers, cfg.URL) slog.Info("Found GOPROXY server", slog.String("url", cfg.URL)) + } else if cfg.Type == GIT_SOURCE { + parsed, err := url.Parse(cfg.URL) + if err == nil && parsed.Hostname() != "" { + git_source := parsed.Hostname() + parsed.Path + "*" + git_sources = append(git_sources, git_source) + slog.Info("Found Git source", slog.String("source", git_source)) + } else { + slog.Warn("Not a valid URL for Git source", slog.String("url", cfg.URL)) + } } } - if len(proxy_configs) > 0 { + goprivate := []string{} + + if len(goproxy_servers) > 0 { goproxy_val := "https://proxy.golang.org,direct" - for _, cfg := range proxy_configs { - goproxy_val = cfg.URL + "," + goproxy_val + for _, url := range goproxy_servers { + goproxy_val = url + "," + goproxy_val } - result = append(result, fmt.Sprintf("GOPROXY=%s", goproxy_val), "GOPRIVATE=", "GONOPROXY=") + result = append(result, fmt.Sprintf("GOPROXY=%s", goproxy_val), "GONOPROXY=") } + + if len(git_sources) > 0 { + goprivate = append(goprivate, git_sources...) + + if proxy_cert_file != "" { + slog.Info("Configuring `git` to use proxy certificate", slog.String("path", proxy_cert_file)) + cmd := exec.Command("git", "config", "--global", "http.sslCAInfo", proxy_cert_file) + + out, cmdErr := cmd.CombinedOutput() + slog.Info(string(out)) + + if cmdErr != nil { + slog.Error("Failed to configure `git` to accept the certificate file", slog.String("error", cmdErr.Error())) + } + } + } + + result = append(result, fmt.Sprintf("GOPRIVATE=%s", strings.Join(goprivate, ","))) } } @@ -113,11 +152,6 @@ func getEnvVars() []string { // Applies private package proxy related environment variables to `cmd`. func ApplyProxyEnvVars(cmd *exec.Cmd) { - slog.Debug( - "Applying private registry proxy environment variables", - slog.String("cmd_args", strings.Join(cmd.Args, " ")), - ) - // If we haven't done so yet, check whether the proxy environment variables are set // and extract information from them. if !proxy_vars_checked { @@ -131,4 +165,10 @@ func ApplyProxyEnvVars(cmd *exec.Cmd) { if proxy_vars != nil { cmd.Env = append(os.Environ(), proxy_vars...) } + + slog.Debug( + "Applying private registry proxy environment variables", + slog.String("cmd_args", strings.Join(cmd.Args, " ")), + slog.String("proxy_vars", strings.Join(proxy_vars, ",")), + ) } diff --git a/go/extractor/util/registryproxy_test.go b/go/extractor/util/registryproxy_test.go index a21b1a215c1..ef63bd9d3f8 100644 --- a/go/extractor/util/registryproxy_test.go +++ b/go/extractor/util/registryproxy_test.go @@ -47,3 +47,31 @@ func TestParseRegistryConfigs(t *testing.T) { t.Fatalf("Expected `URL` to be `https://proxy.example.com/mod`, but got `%s`", first.URL) } } + +func TestParseRegistryConfigsMultiple(t *testing.T) { + multiple := parseRegistryConfigsSuccess(t, "[{ \"type\": \"git_source\", \"url\": \"https://github.com/github\" }, { \"type\": \"goproxy_server\", \"url\": \"https://proxy.example.com/mod\" }]") + + if len(multiple) != 2 { + t.Fatalf("Expected `parseRegistryConfigs` to return two configurations, but got %d.", len(multiple)) + } + + first := multiple[0] + + if first.Type != "git_source" { + t.Fatalf("Expected `Type` to be `git_source`, but got `%s`", first.Type) + } + + if first.URL != "https://github.com/github" { + t.Fatalf("Expected `URL` to be `https://github.com/github`, but got `%s`", first.URL) + } + + second := multiple[1] + + if second.Type != "goproxy_server" { + t.Fatalf("Expected `Type` to be `goproxy_server`, but got `%s`", second.Type) + } + + if second.URL != "https://proxy.example.com/mod" { + t.Fatalf("Expected `URL` to be `https://proxy.example.com/mod`, but got `%s`", second.URL) + } +} diff --git a/go/old-change-notes/2020-10-01-gomod-extraction.md b/go/old-change-notes/2020-10-01-gomod-extraction.md index ca0c0c72d50..a975a15973a 100644 --- a/go/old-change-notes/2020-10-01-gomod-extraction.md +++ b/go/old-change-notes/2020-10-01-gomod-extraction.md @@ -1,2 +1,2 @@ lgtm,codescanning -* The extractor now only extracts go.mod files belonging to extracted packages. In particular, vendored go.mod files will no longer be extracted unless the vendored package is explicitly passed to the extractor. This will remove unexpected `GoModExpr` and similar expressions seen by queries. +* The extractor now only extracts go.mod files belonging to extracted packages. In particular, vendored go.mod files will no longer be extracted unless the vendored package is explicitly passed to the extractor. This will remove unexpected `GoModExpr` and similar expressions seen by queries. diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 6e50e04a514..870695d684c 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,27 @@ +## 1.0.34 + +No user-facing changes. + +## 1.0.33 + +No user-facing changes. + +## 1.0.32 + +No user-facing changes. + +## 1.0.31 + +No user-facing changes. + +## 1.0.30 + +No user-facing changes. + +## 1.0.29 + +No user-facing changes. + ## 1.0.28 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.29.md b/go/ql/consistency-queries/change-notes/released/1.0.29.md new file mode 100644 index 00000000000..e6b79b88ef3 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.29.md @@ -0,0 +1,3 @@ +## 1.0.29 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.30.md b/go/ql/consistency-queries/change-notes/released/1.0.30.md new file mode 100644 index 00000000000..cb2cf6d0a27 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.30.md @@ -0,0 +1,3 @@ +## 1.0.30 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.31.md b/go/ql/consistency-queries/change-notes/released/1.0.31.md new file mode 100644 index 00000000000..b2642bbb5f8 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.31.md @@ -0,0 +1,3 @@ +## 1.0.31 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.32.md b/go/ql/consistency-queries/change-notes/released/1.0.32.md new file mode 100644 index 00000000000..05c4073731c --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.32.md @@ -0,0 +1,3 @@ +## 1.0.32 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.33.md b/go/ql/consistency-queries/change-notes/released/1.0.33.md new file mode 100644 index 00000000000..3a65838479f --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.33.md @@ -0,0 +1,3 @@ +## 1.0.33 + +No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.34.md b/go/ql/consistency-queries/change-notes/released/1.0.34.md new file mode 100644 index 00000000000..7e097cfe937 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.34.md @@ -0,0 +1,3 @@ +## 1.0.34 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index 328402fb34f..b736654032c 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.28 +lastReleaseVersion: 1.0.34 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 706e295580e..be82fc786d2 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.29-dev +version: 1.0.35-dev groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index b047f838925..e2d2a71f6bd 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,50 @@ +## 5.0.1 + +No user-facing changes. + +## 5.0.0 + +### Breaking Changes + +* The member predicate `writesField` on `DataFlow::Write` now uses the post-update node for `base` when that is the node being updated, which is in all cases except initializing a struct literal. A new member predicate `writesFieldPreUpdate` has been added for cases where this behaviour is not desired. +* The member predicate `writesElement` on `DataFlow::Write` now uses the post-update node for `base` when that is the node being updated, which is in all cases except initializing an array/slice/map literal. A new member predicate `writesElementPreUpdate` has been added for cases where this behaviour is not desired. + +### Deprecated APIs + +* The class `SqlInjection::NumericOrBooleanSanitizer` has been deprecated. Use `SimpleTypeSanitizer` from `semmle.go.security.Sanitizers` instead. +* The member predicate `writesComponent` on `DataFlow::Write` has been deprecated. Instead, use `writesFieldPreUpdate` and `writesElementPreUpdate`, or their new versions `writesField` and `writesElement`. + +### Major Analysis Improvements + +* The shape of the Go data-flow graph has changed. Previously for code like `x := def(); use1(x); use2(x)`, there would be edges from the definition of `x` to each use. Now there is an edge from the definition to the first use, then another from the first use to the second, and so on. This means that data-flow barriers work differently - flow will not reach any uses after the barrier node. Where this is not desired it may be necessary to add an additional flow step to propagate the flow forward. Additionally, when a variable may be subject to a side-effect, such as updating an array, passing a pointer to a function that might write through it or writing to a field of a struct, there is now a dedicated post-update node representing the variable after this side-effect has taken place. Previously post-update nodes were aliases for either a variable's definition, or were equal to the pre-update node. This led to backwards steps in the data-flow graph, which could cause false positives. For example, in the previous code there would be an edge from `x` in `use2(x)` back to the definition of `x`. If we define our sources as any argument of `use2` and our sinks as any argument of `use1` then this would lead to a false positive path. Now there are distinct post-update nodes and no backwards edge to the definition, so we will not find this false positive path. + +### Minor Analysis Improvements + +* The query `go/request-forgery` will no longer report alerts when the user input is of a simple type, like a number or a boolean. +* For the query `go/unvalidated-url-redirection`, when untrusted data is assigned to the `Host` field of a `url.URL` struct, we consider the whole struct untrusted. We now also include the case when this happens during struct initialization, for example `&url.URL{Host: untrustedData}`. +* `go/unvalidated-url-redirection` and `go/request-forgery` have a shared notion of a safe URL, which is known to not be malicious. Some URLs which were incorrectly considered safe are now correctly considered unsafe. This may lead to more alerts for those two queries. + +## 4.3.5 + +No user-facing changes. + +## 4.3.4 + +### Minor Analysis Improvements + +* The second argument of the `CreateTemp` function, from the `os` package, is no longer a path-injection sink due to proper sanitization by Go. +* The query "Uncontrolled data used in path expression" (`go/path-injection`) now detects sanitizing a path by adding `os.PathSeparator` or `\` to the beginning. + +## 4.3.3 + +No user-facing changes. + +## 4.3.2 + +### Minor Analysis Improvements + +* Go 1.25 is now supported. + ## 4.3.1 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-11-11-path-transformer.md b/go/ql/lib/change-notes/2025-11-11-path-transformer.md new file mode 100644 index 00000000000..c36cf8fb83e --- /dev/null +++ b/go/ql/lib/change-notes/2025-11-11-path-transformer.md @@ -0,0 +1,7 @@ +--- +category: fix +--- +* Some fixes relating to use of path transformers when extracting a database: + * Fixed a problem where the path transformer would be ignored when extracting older codebases that predate the use of Go modules. + * The environment variable `CODEQL_PATH_TRANSFORMER` is now recognized, in addition to `SEMMLE_PATH_TRANSFORMER`. + * Fixed some cases where the extractor emitted paths without applying the path transformer. diff --git a/go/ql/lib/change-notes/released/4.3.2.md b/go/ql/lib/change-notes/released/4.3.2.md new file mode 100644 index 00000000000..18a80c84a81 --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.2.md @@ -0,0 +1,5 @@ +## 4.3.2 + +### Minor Analysis Improvements + +* Go 1.25 is now supported. diff --git a/go/ql/lib/change-notes/released/4.3.3.md b/go/ql/lib/change-notes/released/4.3.3.md new file mode 100644 index 00000000000..d6710bacd7f --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.3.md @@ -0,0 +1,3 @@ +## 4.3.3 + +No user-facing changes. diff --git a/go/ql/lib/change-notes/released/4.3.4.md b/go/ql/lib/change-notes/released/4.3.4.md new file mode 100644 index 00000000000..cc1b662d14c --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.4.md @@ -0,0 +1,6 @@ +## 4.3.4 + +### Minor Analysis Improvements + +* The second argument of the `CreateTemp` function, from the `os` package, is no longer a path-injection sink due to proper sanitization by Go. +* The query "Uncontrolled data used in path expression" (`go/path-injection`) now detects sanitizing a path by adding `os.PathSeparator` or `\` to the beginning. diff --git a/go/ql/lib/change-notes/released/4.3.5.md b/go/ql/lib/change-notes/released/4.3.5.md new file mode 100644 index 00000000000..e386c2fbd98 --- /dev/null +++ b/go/ql/lib/change-notes/released/4.3.5.md @@ -0,0 +1,3 @@ +## 4.3.5 + +No user-facing changes. diff --git a/go/ql/lib/change-notes/released/5.0.0.md b/go/ql/lib/change-notes/released/5.0.0.md new file mode 100644 index 00000000000..096e0b350bf --- /dev/null +++ b/go/ql/lib/change-notes/released/5.0.0.md @@ -0,0 +1,21 @@ +## 5.0.0 + +### Breaking Changes + +* The member predicate `writesField` on `DataFlow::Write` now uses the post-update node for `base` when that is the node being updated, which is in all cases except initializing a struct literal. A new member predicate `writesFieldPreUpdate` has been added for cases where this behaviour is not desired. +* The member predicate `writesElement` on `DataFlow::Write` now uses the post-update node for `base` when that is the node being updated, which is in all cases except initializing an array/slice/map literal. A new member predicate `writesElementPreUpdate` has been added for cases where this behaviour is not desired. + +### Deprecated APIs + +* The class `SqlInjection::NumericOrBooleanSanitizer` has been deprecated. Use `SimpleTypeSanitizer` from `semmle.go.security.Sanitizers` instead. +* The member predicate `writesComponent` on `DataFlow::Write` has been deprecated. Instead, use `writesFieldPreUpdate` and `writesElementPreUpdate`, or their new versions `writesField` and `writesElement`. + +### Major Analysis Improvements + +* The shape of the Go data-flow graph has changed. Previously for code like `x := def(); use1(x); use2(x)`, there would be edges from the definition of `x` to each use. Now there is an edge from the definition to the first use, then another from the first use to the second, and so on. This means that data-flow barriers work differently - flow will not reach any uses after the barrier node. Where this is not desired it may be necessary to add an additional flow step to propagate the flow forward. Additionally, when a variable may be subject to a side-effect, such as updating an array, passing a pointer to a function that might write through it or writing to a field of a struct, there is now a dedicated post-update node representing the variable after this side-effect has taken place. Previously post-update nodes were aliases for either a variable's definition, or were equal to the pre-update node. This led to backwards steps in the data-flow graph, which could cause false positives. For example, in the previous code there would be an edge from `x` in `use2(x)` back to the definition of `x`. If we define our sources as any argument of `use2` and our sinks as any argument of `use1` then this would lead to a false positive path. Now there are distinct post-update nodes and no backwards edge to the definition, so we will not find this false positive path. + +### Minor Analysis Improvements + +* The query `go/request-forgery` will no longer report alerts when the user input is of a simple type, like a number or a boolean. +* For the query `go/unvalidated-url-redirection`, when untrusted data is assigned to the `Host` field of a `url.URL` struct, we consider the whole struct untrusted. We now also include the case when this happens during struct initialization, for example `&url.URL{Host: untrustedData}`. +* `go/unvalidated-url-redirection` and `go/request-forgery` have a shared notion of a safe URL, which is known to not be malicious. Some URLs which were incorrectly considered safe are now correctly considered unsafe. This may lead to more alerts for those two queries. diff --git a/go/ql/lib/change-notes/released/5.0.1.md b/go/ql/lib/change-notes/released/5.0.1.md new file mode 100644 index 00000000000..b99e1ae0268 --- /dev/null +++ b/go/ql/lib/change-notes/released/5.0.1.md @@ -0,0 +1,3 @@ +## 5.0.1 + +No user-facing changes. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 70ac3707fcd..ae7df5e18b7 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.3.1 +lastReleaseVersion: 5.0.1 diff --git a/go/ql/lib/ext/os.model.yml b/go/ql/lib/ext/os.model.yml index b4f074146b7..7d2070b53ba 100644 --- a/go/ql/lib/ext/os.model.yml +++ b/go/ql/lib/ext/os.model.yml @@ -28,7 +28,7 @@ extensions: - ["os", "", False, "ReadDir", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "ReadFile", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "MkdirTemp", "", "", "Argument[0..1]", "path-injection", "manual"] - - ["os", "", False, "CreateTemp", "", "", "Argument[0..1]", "path-injection", "manual"] + - ["os", "", False, "CreateTemp", "", "", "Argument[0]", "path-injection", "manual"] - ["os", "", False, "WriteFile", "", "", "Argument[0]", "path-injection", "manual"] # command-injection - ["os", "", False, "StartProcess", "", "", "Argument[0]", "command-injection", "manual"] diff --git a/go/ql/lib/go.dbscheme b/go/ql/lib/go.dbscheme index b3da71c3ac2..b1341734d68 100644 --- a/go/ql/lib/go.dbscheme +++ b/go/ql/lib/go.dbscheme @@ -36,6 +36,17 @@ snapshotDate(unique date snapshotDate : date ref); sourceLocationPrefix(varchar(900) prefix : string ref); +/** Overlay support **/ + +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + /* * XML Files diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 391245fa689..058e65978f2 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.3.2-dev +version: 5.0.2-dev groups: go dbscheme: go.dbscheme extractor: go @@ -14,3 +14,4 @@ dependencies: dataExtensions: - ext/*.model.yml warnOnImplicitThis: true +compileForOverlayEval: true diff --git a/go/ql/lib/semmle/go/Architectures.qll b/go/ql/lib/semmle/go/Architectures.qll index e509de4bc68..bb4face2407 100644 --- a/go/ql/lib/semmle/go/Architectures.qll +++ b/go/ql/lib/semmle/go/Architectures.qll @@ -28,7 +28,7 @@ class Architecture extends string { } /** - * Gets the integer and pointer type width for this architecture. + * Gets the integer and pointer type width for this architecture. * * As of the time of writing, this appears to always be identical -- there aren't * Go architectures with 64-bit pointers but 32-bit ints, for example. diff --git a/go/ql/lib/semmle/go/Locations.qll b/go/ql/lib/semmle/go/Locations.qll index 817fea56f00..7503421c0ff 100644 --- a/go/ql/lib/semmle/go/Locations.qll +++ b/go/ql/lib/semmle/go/Locations.qll @@ -1,6 +1,7 @@ /** Provides classes for working with locations and program elements that have locations. */ import go +private import semmle.go.Overlay /** * A location as given by a file, a start line, a start column, diff --git a/go/ql/lib/semmle/go/Overlay.qll b/go/ql/lib/semmle/go/Overlay.qll new file mode 100644 index 00000000000..97d7f788fdb --- /dev/null +++ b/go/ql/lib/semmle/go/Overlay.qll @@ -0,0 +1,91 @@ +/** + * Defines entity discard predicates for Go overlay analysis. + */ +overlay[local] +module; + +/** + * A local predicate that always holds for the overlay variant and never holds for the base variant. + * This is used to define local predicates that behave differently for the base and overlay variant. + */ +private predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +/** Gets the file containing the given `locatable`. */ +private @file getFile(@locatable locatable) { + exists(@location_default location | has_location(locatable, location) | + locations_default(location, result, _, _, _, _) + ) +} + +/** Holds if the `locatable` is in the `file` and is part of the overlay base database. */ +private predicate discardableLocatable(@file file, @locatable locatable) { + not isOverlay() and + file = getFile(locatable) and + // Avoid discarding @file entities, since they are shared between base and overlay. + not locatable instanceof @file +} + +/** + * Holds if the given `path` is for a file in the base database whose entities should be discarded. + */ +bindingset[path] +private predicate discardableFile(string path) { + isOverlay() and + ( + overlayChangedFiles(path) + or + // The extractor unconditionally extracts files outside of the source directory (these are + // typically cgo-processed source files), so all entities in such files should be discarded. + not exists(string srcLoc | sourceLocationPrefix(srcLoc) | + path.substring(0, srcLoc.length()) = srcLoc + ) + ) +} + +/** + * Holds if the given `locatable` should be discarded, because it is part of the overlay base and is + * in a file that was also extracted as part of the overlay database. + */ +overlay[discard_entity] +private predicate discardLocatable(@locatable locatable) { + exists(@file file, string path | files(file, path) | + discardableLocatable(file, locatable) and discardableFile(path) + ) +} + +private @file getXmlFile(@xmllocatable locatable) { + exists(@location_default location | xmllocations(locatable, location) | + locations_default(location, result, _, _, _, _) + ) +} + +private @file getXmlFileInBase(@xmllocatable locatable) { + not isOverlay() and + result = getXmlFile(locatable) +} + +/** + * Holds if the given `file` was extracted as part of the overlay and was extracted by the HTML/XML + * extractor. + */ +private predicate overlayXmlExtracted(@file file) { + isOverlay() and + exists(@xmllocatable locatable | + not files(locatable, _) and not xmlNs(locatable, _, _, _) and file = getXmlFile(locatable) + ) +} + +/** + * Holds if the given XML `locatable` should be discarded, because it is part of the overlay base + * and is in a file that was also extracted as part of the overlay database. + */ +overlay[discard_entity] +private predicate discardXmlLocatable(@xmllocatable locatable) { + exists(@file file | file = getXmlFileInBase(locatable) | + exists(string path | files(file, path) | overlayChangedFiles(path)) + or + // The HTML/XML extractor is currently not incremental and may extract more files than those + // included in overlayChangedFiles. + overlayXmlExtracted(file) + ) +} diff --git a/go/ql/lib/semmle/go/StringOps.qll b/go/ql/lib/semmle/go/StringOps.qll index 351617abf9d..3463e4fdf87 100644 --- a/go/ql/lib/semmle/go/StringOps.qll +++ b/go/ql/lib/semmle/go/StringOps.qll @@ -306,11 +306,12 @@ module StringOps { */ class StringFormatCall extends DataFlow::CallNode { string fmt; - Range f; StringFormatCall() { - this = f.getACall() and - fmt = this.getArgument(f.getFormatStringIndex()).getStringValue() and + exists(Range f | + this = f.getACall() and + fmt = this.getArgument(f.getFormatStringIndex()).getStringValue() + ) and fmt.regexpMatch(getFormatComponentRegex() + "*") } diff --git a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll index f5905b89bea..1e66bc61dc4 100644 --- a/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll +++ b/go/ql/lib/semmle/go/controlflow/ControlFlowGraph.qll @@ -118,6 +118,8 @@ module ControlFlow { /** Gets the left-hand side of this write. */ IR::WriteTarget getLhs() { result = super.getLhs() } + private predicate isInitialization() { super.isInitialization() } + /** Gets the right-hand side of this write. */ DataFlow::Node getRhs() { super.getRhs() = result.asInstruction() } @@ -132,21 +134,45 @@ module ControlFlow { /** * Holds if this node sets the value of field `f` on `base` (or its implicit dereference) to - * `rhs`. + * `rhs`, where `base` represents the post-update value. + * + * For example, for the assignment `x.width = newWidth`, `base` is the post-update node of + * either the data-flow node corresponding to `x` or (if `x` is a pointer) the data-flow node + * corresponding to the implicit dereference `*x`, `f` is the field referenced by `width`, and + * `rhs` is the data-flow node corresponding to `newWidth`. If this `WriteNode` is a struct + * initialization then there is no post-update node and `base` is the struct literal being + * initialized. + */ + predicate writesField(DataFlow::Node base, Field f, DataFlow::Node rhs) { + exists(DataFlow::Node b | this.writesFieldPreUpdate(b, f, rhs) | + this.isInitialization() and base = b + or + not this.isInitialization() and + b = base.(DataFlow::PostUpdateNode).getPreUpdateNode() + ) + } + + /** + * Holds if this node sets the value of field `f` on `base` (or its implicit dereference) to + * `rhs`, where `base` represents the pre-update value. * * For example, for the assignment `x.width = newWidth`, `base` is either the data-flow node * corresponding to `x` or (if `x` is a pointer) the data-flow node corresponding to the - * implicit dereference `*x`, `f` is the field referenced by `width`, and `rhs` is the data-flow - * node corresponding to `newWidth`. + * implicit dereference `*x`, `f` is the field referenced by `width`, and `rhs` is the + * data-flow node corresponding to `newWidth`. */ - predicate writesField(DataFlow::Node base, Field f, DataFlow::Node rhs) { + predicate writesFieldPreUpdate(DataFlow::Node base, Field f, DataFlow::Node rhs) { + this.writesFieldInsn(base.asInstruction(), f, rhs.asInstruction()) + } + + private predicate writesFieldInsn(IR::Instruction base, Field f, IR::Instruction rhs) { exists(IR::FieldTarget trg | trg = super.getLhs() | ( - trg.getBase() = base.asInstruction() or - trg.getBase() = MkImplicitDeref(base.asExpr()) + trg.getBase() = base or + trg.getBase() = MkImplicitDeref(base.(IR::EvalInstruction).getExpr()) ) and trg.getField() = f and - super.getRhs() = rhs.asInstruction() + super.getRhs() = rhs ) } @@ -154,27 +180,66 @@ module ControlFlow { * Holds if this node sets the value of element `index` on `base` (or its implicit dereference) * to `rhs`. * - * For example, for the assignment `xs[i] = v`, `base` is either the data-flow node - * corresponding to `xs` or (if `xs` is a pointer) the data-flow node corresponding to the - * implicit dereference `*xs`, `index` is the data-flow node corresponding to `i`, and `rhs` - * is the data-flow node corresponding to `base`. + * For example, for the assignment `xs[i] = v`, `base` is the post-update node of the data-flow + * node corresponding to `xs` or (if `xs` is a pointer) the implicit dereference `*xs`, `index` + * is the data-flow node corresponding to `i`, and `rhs` is the data-flow node corresponding to + * `base`. If this `WriteNode` corresponds to the initialization of an array/slice/map then + * there is no need for a post-update node and `base` is the array/slice/map literal being + * initialized. */ predicate writesElement(DataFlow::Node base, DataFlow::Node index, DataFlow::Node rhs) { + exists(DataFlow::Node b | this.writesElementPreUpdate(b, index, rhs) | + this.isInitialization() and base = b + or + not this.isInitialization() and + b = base.(DataFlow::PostUpdateNode).getPreUpdateNode() + ) + } + + /** + * Holds if this node sets the value of element `index` on `base` (or its implicit dereference) + * to `rhs`. + * + * For example, for the assignment `xs[i] = v`, `base` is the post-update node of the data-flow + * node corresponding to `xs` or (if `xs` is a pointer) the implicit dereference `*xs`, `index` + * is the data-flow node corresponding to `i`, and `rhs` is the data-flow node corresponding to + * `base`. If this `WriteNode` corresponds to the initialization of an array/slice/map then + * there is no need for a post-update node and `base` is the array/slice/map literal being + * initialized. + */ + predicate writesElementPreUpdate(DataFlow::Node base, DataFlow::Node index, DataFlow::Node rhs) { + this.writesElementInsn(base.asInstruction(), index.asInstruction(), rhs.asInstruction()) + } + + private predicate writesElementInsn( + IR::Instruction base, IR::Instruction index, IR::Instruction rhs + ) { exists(IR::ElementTarget trg | trg = super.getLhs() | ( - trg.getBase() = base.asInstruction() or - trg.getBase() = MkImplicitDeref(base.asExpr()) + trg.getBase() = base or + trg.getBase() = MkImplicitDeref(base.(IR::EvalInstruction).getExpr()) ) and - trg.getIndex() = index.asInstruction() and - super.getRhs() = rhs.asInstruction() + trg.getIndex() = index and + super.getRhs() = rhs ) } + /** + * DEPRECATED: Use the disjunct of `writesElement` and `writesField`, or `writesFieldPreUpdate` + * and `writesElementPreUpdate`, instead. + * + * Holds if this node sets any field or element of `base` (or its implicit dereference) to + * `rhs`, where `base` represents the pre-update value. + */ + deprecated predicate writesComponent(DataFlow::Node base, DataFlow::Node rhs) { + this.writesElementPreUpdate(base, _, rhs) or this.writesFieldPreUpdate(base, _, rhs) + } + /** * Holds if this node sets any field or element of `base` to `rhs`. */ - predicate writesComponent(DataFlow::Node base, DataFlow::Node rhs) { - this.writesElement(base, _, rhs) or this.writesField(base, _, rhs) + predicate writesComponentInstruction(IR::Instruction base, IR::Instruction rhs) { + this.writesElementInsn(base, _, rhs) or this.writesFieldInsn(base, _, rhs) } } diff --git a/go/ql/lib/semmle/go/controlflow/IR.qll b/go/ql/lib/semmle/go/controlflow/IR.qll index 1a56dfcf2dc..2c8b673184e 100644 --- a/go/ql/lib/semmle/go/controlflow/IR.qll +++ b/go/ql/lib/semmle/go/controlflow/IR.qll @@ -430,18 +430,25 @@ module IR { */ class WriteInstruction extends Instruction { WriteTarget lhs; + Boolean initialization; WriteInstruction() { - lhs = MkLhs(this, _) + ( + lhs = MkLhs(this, _) + or + lhs = MkResultWriteTarget(this) + ) and + initialization = false or - lhs = MkLiteralElementTarget(this) - or - lhs = MkResultWriteTarget(this) + lhs = MkLiteralElementTarget(this) and initialization = true } /** Gets the target to which this instruction writes. */ WriteTarget getLhs() { result = lhs } + /** Holds if this instruction initializes a literal. */ + predicate isInitialization() { initialization = true } + /** Gets the instruction computing the value this instruction writes. */ Instruction getRhs() { none() } diff --git a/go/ql/lib/semmle/go/dataflow/SSA.qll b/go/ql/lib/semmle/go/dataflow/SSA.qll index d13bbe2de63..98dae5f3d01 100644 --- a/go/ql/lib/semmle/go/dataflow/SSA.qll +++ b/go/ql/lib/semmle/go/dataflow/SSA.qll @@ -166,6 +166,13 @@ class SsaDefinition extends TSsaDefinition { ) { this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } + + /** + * Gets the first instruction that the value of this `SsaDefinition` can + * reach without passing through any other instructions, but possibly through + * phi nodes. + */ + IR::Instruction getAFirstUse() { firstUse(this, result) } } /** @@ -410,3 +417,12 @@ DataFlow::Node getASimilarReadNode(DataFlow::Node node) { result = readFields.similar().getAUse() ) } + +/** + * Gets an instruction such that `pred` and `result` form an adjacent + * use-use-pair of the same`SsaSourceVariable`, that is, the value read in + * `pred` can reach `result` without passing through any other use or any SSA + * definition of the variable except for phi nodes and uncertain implicit + * updates. + */ +IR::Instruction getAnAdjacentUse(IR::Instruction pred) { adjacentUseUse(pred, result) } diff --git a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll index 0db37ac03ce..8549d9b497a 100644 --- a/go/ql/lib/semmle/go/dataflow/SsaImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/SsaImpl.qll @@ -199,6 +199,8 @@ private module Internal { /** * Holds if the `i`th node of `bb` is a use or an SSA definition of variable `v`, with * `k` indicating whether it is the former or the latter. + * + * Note this includes phi nodes, whereas `ref` above only includes explicit writes and captures. */ private predicate ssaRef(ReachableBasicBlock bb, int i, SsaSourceVariable v, RefKind k) { useAt(bb, i, v) and k = ReadRef() @@ -290,6 +292,172 @@ private module Internal { or rewindReads(bb, i, v) = 1 and result = getDefReachingEndOf(bb.getImmediateDominator(), v) } + + private module AdjacentUsesImpl { + /** Holds if `v` is defined or used in `b`. */ + private predicate varOccursInBlock(SsaSourceVariable v, ReachableBasicBlock b) { + ssaRef(b, _, v, _) + } + + /** Holds if `v` occurs in `b` or one of `b`'s transitive successors. */ + private predicate blockPrecedesVar(SsaSourceVariable v, ReachableBasicBlock b) { + varOccursInBlock(v, b) + or + exists(getDefReachingEndOf(b, v)) + } + + /** + * Holds if `v` occurs in `b1` and `b2` is one of `b1`'s successors. + * + * Factored out of `varBlockReaches` to force join order compared to the larger + * set `blockPrecedesVar(v, b2)`. + */ + pragma[noinline] + private predicate varBlockReachesBaseCand( + SsaSourceVariable v, ReachableBasicBlock b1, ReachableBasicBlock b2 + ) { + varOccursInBlock(v, b1) and + b2 = b1.getASuccessor() + } + + /** + * Holds if `b2` is a transitive successor of `b1` and `v` occurs in `b1` and + * in `b2` or one of its transitive successors but not in any block on the path + * between `b1` and `b2`. Unlike `varBlockReaches` this may include blocks `b2` + * where `v` is dead. + * + * Factored out of `varBlockReaches` to force join order compared to the larger + * set `blockPrecedesVar(v, b2)`. + */ + pragma[noinline] + private predicate varBlockReachesRecCand( + SsaSourceVariable v, ReachableBasicBlock b1, ReachableBasicBlock mid, ReachableBasicBlock b2 + ) { + varBlockReaches(v, b1, mid) and + not varOccursInBlock(v, mid) and + b2 = mid.getASuccessor() + } + + /** + * Holds if `b2` is a transitive successor of `b1` and `v` occurs in `b1` and + * in `b2` or one of its transitive successors but not in any block on the path + * between `b1` and `b2`. + */ + private predicate varBlockReaches( + SsaSourceVariable v, ReachableBasicBlock b1, ReachableBasicBlock b2 + ) { + varBlockReachesBaseCand(v, b1, b2) and + blockPrecedesVar(v, b2) + or + varBlockReachesRecCand(v, b1, _, b2) and + blockPrecedesVar(v, b2) + } + + /** + * Holds if `b2` is a transitive successor of `b1` and `v` occurs in `b1` and + * `b2` but not in any block on the path between `b1` and `b2`. + */ + private predicate varBlockStep( + SsaSourceVariable v, ReachableBasicBlock b1, ReachableBasicBlock b2 + ) { + varBlockReaches(v, b1, b2) and + varOccursInBlock(v, b2) + } + + /** + * Gets the maximum rank among all SSA references to `v` in basic block `bb`. + */ + private int maxSsaRefRank(ReachableBasicBlock bb, SsaSourceVariable v) { + result = max(ssaRefRank(bb, _, v, _)) + } + + /** + * Holds if `v` occurs at index `i1` in `b1` and at index `i2` in `b2` and + * there is a path between them without any occurrence of `v`. + */ + pragma[nomagic] + predicate adjacentVarRefs( + SsaSourceVariable v, ReachableBasicBlock b1, int i1, ReachableBasicBlock b2, int i2 + ) { + exists(int rankix | + b1 = b2 and + ssaRefRank(b1, i1, v, _) = rankix and + ssaRefRank(b2, i2, v, _) = rankix + 1 + ) + or + maxSsaRefRank(b1, v) = ssaRefRank(b1, i1, v, _) and + varBlockStep(v, b1, b2) and + ssaRefRank(b2, i2, v, _) = 1 + } + + predicate variableUse(SsaSourceVariable v, IR::Instruction use, ReachableBasicBlock bb, int i) { + bb.getNode(i) = use and + exists(SsaVariable sv | + sv.getSourceVariable() = v and + use = sv.getAUse() + ) + } + } + + private import AdjacentUsesImpl + + /** + * Holds if the value defined at `def` can reach `use` without passing through + * any other uses, but possibly through phi nodes. + */ + cached + predicate firstUse(SsaDefinition def, IR::Instruction use) { + exists(SsaSourceVariable v, ReachableBasicBlock b1, int i1, ReachableBasicBlock b2, int i2 | + adjacentVarRefs(v, b1, i1, b2, i2) and + def.definesAt(b1, i1, v) and + variableUse(v, use, b2, i2) + ) + or + exists( + SsaSourceVariable v, SsaPhiNode redef, ReachableBasicBlock b1, int i1, ReachableBasicBlock b2, + int i2 + | + adjacentVarRefs(v, b1, i1, b2, i2) and + def.definesAt(b1, i1, v) and + redef.definesAt(b2, i2, v) and + firstUse(redef, use) + ) + } + + /** + * Holds if `use1` and `use2` form an adjacent use-use-pair of the same SSA + * variable, that is, the value read in `use1` can reach `use2` without passing + * through any other use or any SSA definition of the variable. + */ + cached + predicate adjacentUseUseSameVar(IR::Instruction use1, IR::Instruction use2) { + exists(SsaSourceVariable v, ReachableBasicBlock b1, int i1, ReachableBasicBlock b2, int i2 | + adjacentVarRefs(v, b1, i1, b2, i2) and + variableUse(v, use1, b1, i1) and + variableUse(v, use2, b2, i2) + ) + } + + /** + * Holds if `use1` and `use2` form an adjacent use-use-pair of the same + * `SsaSourceVariable`, that is, the value read in `use1` can reach `use2` + * without passing through any other use or any SSA definition of the variable + * except for phi nodes and uncertain implicit updates. + */ + cached + predicate adjacentUseUse(IR::Instruction use1, IR::Instruction use2) { + adjacentUseUseSameVar(use1, use2) + or + exists( + SsaSourceVariable v, SsaPhiNode def, ReachableBasicBlock b1, int i1, ReachableBasicBlock b2, + int i2 + | + adjacentVarRefs(v, b1, i1, b2, i2) and + variableUse(v, use1, b1, i1) and + def.definesAt(b2, i2, v) and + firstUse(def, use2) + ) + } } import Internal diff --git a/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll index 9f07693b7ea..e978cb3e587 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/ContainerFlow.qll @@ -22,7 +22,7 @@ predicate containerStoreStep(Node node1, Node node2, Content c) { t instanceof SliceType ) and ( - exists(Write w | w.writesElement(node2.(PostUpdateNode).getPreUpdateNode(), _, node1)) + exists(Write w | w.writesElement(node2, _, node1)) or node1 = node2.(ImplicitVarargsSlice).getCallNode().getAnImplicitVarargsArgument() or @@ -36,17 +36,19 @@ predicate containerStoreStep(Node node1, Node node2, Content c) { ) or c instanceof CollectionContent and - exists(SendStmt send | - send.getChannel() = node2.(ExprNode).asExpr() and send.getValue() = node1.(ExprNode).asExpr() + exists(SendStmt send, Node channelExprNode | + send.getChannel() = channelExprNode.(ExprNode).asExpr() and + node2.(PostUpdateNode).getPreUpdateNode() = channelExprNode and + send.getValue() = node1.(ExprNode).asExpr() ) or c instanceof MapKeyContent and t instanceof MapType and - exists(Write w | w.writesElement(node2.(PostUpdateNode).getPreUpdateNode(), node1, _)) + exists(Write w | w.writesElement(node2, node1, _)) or c instanceof MapValueContent and t instanceof MapType and - exists(Write w | w.writesElement(node2.(PostUpdateNode).getPreUpdateNode(), _, node1)) + exists(Write w | w.writesElement(node2, _, node1)) ) } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll index a770f047d65..d48335d299f 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll @@ -12,7 +12,8 @@ private newtype TNode = MkGlobalFunctionNode(Function f) or MkImplicitVarargsSlice(CallExpr c) { c.hasImplicitVarargs() } or MkSliceElementNode(SliceExpr se) or - MkFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) + MkFlowSummaryNode(FlowSummaryImpl::Private::SummaryNode sn) or + MkDefaultPostUpdateNode(IR::Instruction insn) { insnHasPostUpdateNode(insn) } /** Nodes intended for only use inside the data-flow libraries. */ module Private { @@ -760,18 +761,27 @@ module Public { predicate isReceiverOf(MethodDecl m) { parm.isReceiverOf(m) } } - private Node getADirectlyWrittenNode() { - exists(Write w | w.writesComponent(result, _)) or - result = DataFlow::exprNode(any(SendStmt s).getChannel()) - } - - private DataFlow::Node getAccessPathPredecessor(DataFlow::Node node) { - result = node.(PointerDereferenceNode).getOperand() + private IR::Instruction getADirectlyWrittenInsn() { + exists(Write w | w.writesComponentInstruction(result, _)) or - result = node.(ComponentReadNode).getBase() + result = IR::evalExprInstruction(any(SendStmt s).getChannel()) } - private Node getAWrittenNode() { result = getAccessPathPredecessor*(getADirectlyWrittenNode()) } + private IR::Instruction getAccessPathPredecessorInsn(IR::Instruction insn) { + exists(Expr e1, Expr e2 | + insn = IR::evalExprInstruction(e1) and result = IR::evalExprInstruction(e2) + | + e2 = e1.(DerefExpr).getOperand() or e2 = e1.(StarExpr).getBase() + ) + or + exists(Expr e | insn = IR::implicitDerefInstruction(e) and result = IR::evalExprInstruction(e)) + or + result = insn.(IR::ComponentReadInstruction).getBase() + } + + private IR::Instruction getAWrittenInsn() { + result = getAccessPathPredecessorInsn*(getADirectlyWrittenInsn()) + } /** * Holds if `tp` is a type that may (directly or indirectly) reference a memory location. @@ -807,31 +817,51 @@ module Public { abstract Node getPreUpdateNode(); } - private class DefaultPostUpdateNode extends PostUpdateNode { + /** Holds if the node corresponding to `insn` has a post-update node. */ + predicate insnHasPostUpdateNode(IR::Instruction insn) { + exists(Expr e | insn.(IR::EvalInstruction).getExpr() = e | + e instanceof AddressExpr or + e = any(AddressExpr ae).getOperand() or + e = any(StarExpr ae).getBase() or + e = any(DerefExpr ae).getOperand() or + e = any(IR::EvalImplicitDerefInstruction eidi).getOperand() + ) + or + exists(CallExpr ce | + ce.getArgument(0).getType() instanceof TupleType and + insn = IR::extractTupleElement(IR::evalExprInstruction(ce.getArgument(0)), _) + or + not ce.getArgument(0).getType() instanceof TupleType and + insn = IR::evalExprInstruction(ce.getAnArgument()) + or + // Receiver of a method call + exists(IR::MethodReadInstruction mri | + ce.getTarget() instanceof Method and + mri = IR::evalExprInstruction(ce.getCalleeExpr()) and + insn = mri.getReceiver() + ) + ) and + mutableType(insn.getResultType()) + or + insn = getAWrittenInsn() + } + + private class DefaultPostUpdateNode extends PostUpdateNode, MkDefaultPostUpdateNode { Node preupd; - DefaultPostUpdateNode() { - ( - preupd instanceof AddressOperationNode - or - preupd = any(AddressOperationNode addr).getOperand() - or - preupd = any(PointerDereferenceNode deref).getOperand() - or - preupd = getAWrittenNode() - or - preupd = any(ArgumentNode arg).getACorrespondingSyntacticArgument() and - mutableType(preupd.getType()) - ) and - ( - preupd = this.(SsaNode).getAUse() - or - preupd = this and - not basicLocalFlowStep(_, this) - ) - } + DefaultPostUpdateNode() { this = MkDefaultPostUpdateNode(preupd.asInstruction()) } override Node getPreUpdateNode() { result = preupd } + + override ControlFlow::Root getRoot() { result = preupd.getRoot() } + + override Type getType() { result = preupd.getType() } + + override string getNodeKind() { result = "post-update node" } + + override string toString() { result = preupd.toString() + " [postupdate]" } + + override Location getLocation() { result = preupd.getLocation() } } /** @@ -866,7 +896,7 @@ module Public { int getPosition() { result = i } /** - * Gets a data-flow node for a syntactic argument corresponding this this + * Gets a data-flow node for a syntactic argument corresponding to this * argument. If this argument is not an implicit varargs slice then this * will just be the argument itself. If this argument is an implicit * varargs slice then this will be a data-flow node that for an argument @@ -994,7 +1024,7 @@ module Public { class ComponentReadNode extends ReadNode { override IR::ComponentReadInstruction insn; - /** Gets the data-flow node representing the base from which the field or element is read. */ + /** Gets the data-flow node representing the base from which the field or element is read. */ Node getBase() { result = DataFlow::instructionNode(insn.getBase()) } } diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll index 2d05b211a57..94609d1c111 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowPrivate.qll @@ -65,23 +65,30 @@ predicate basicLocalFlowStep(Node nodeFrom, Node nodeTo) { else nodeTo.asInstruction() = evalAssert ) or - // Instruction -> SSA + // Instruction -> SSA defn exists(IR::Instruction pred, SsaExplicitDefinition succ | succ.getRhs() = pred and - nodeFrom = instructionNode(pred) and - nodeTo = ssaNode(succ) + ( + nodeFrom = instructionNode(pred) or + nodeFrom.(PostUpdateNode).getPreUpdateNode() = instructionNode(pred) + ) and + nodeTo = ssaNode(succ.getVariable()) ) or - // SSA -> SSA - exists(SsaDefinition pred, SsaPseudoDefinition succ | succ.getAnInput() = pred | - nodeFrom = ssaNode(pred) and - nodeTo = ssaNode(succ) + // SSA defn -> first SSA use + exists(SsaDefinition pred, IR::Instruction succ | succ = pred.getAFirstUse() | + (pred instanceof SsaExplicitDefinition or pred instanceof SsaVariableCapture) and + nodeFrom = ssaNode(pred.getVariable()) and + nodeTo = instructionNode(succ) ) or - // SSA -> Instruction - exists(SsaDefinition pred, IR::Instruction succ | - succ = pred.getVariable().getAUse() and - nodeFrom = ssaNode(pred) and + // SSA use -> successive SSA use + // Note this case includes Phi node traversal + exists(IR::Instruction pred, IR::Instruction succ | succ = getAnAdjacentUse(pred) | + ( + nodeFrom = instructionNode(pred) or + nodeFrom.(PostUpdateNode).getPreUpdateNode() = instructionNode(pred) + ) and nodeTo = instructionNode(succ) ) or @@ -96,6 +103,10 @@ private Field getASparselyUsedChannelTypedField() { count(result.getARead()) = 2 } +bindingset[v] +pragma[inline_late] +private predicate isValueEntityRead(ValueEntity v, Node n) { n = v.getARead() } + /** * Holds if data can flow from `node1` to `node2` in a way that loses the * calling context. For example, this would happen with flow through a @@ -110,14 +121,22 @@ predicate jumpStep(Node n1, Node n2) { or n1.(DataFlow::PostUpdateNode).getPreUpdateNode() = v.getARead() ) and - n2 = v.getARead() + isValueEntityRead(v, n2) ) or - exists(SsaDefinition pred, SsaDefinition succ | - succ.(SsaVariableCapture).getSourceVariable() = pred.(SsaExplicitDefinition).getSourceVariable() - | - n1 = ssaNode(pred) and + exists(SsaExplicitDefinition def, SsaVariableCapture succ | + succ.getSourceVariable() = def.getSourceVariable() and n2 = ssaNode(succ) + | + not exists(def.getAFirstUse()) and n1 = ssaNode(def) + or + exists(IR::Instruction lastUse | + lastUse = getAnAdjacentUse*(def.getAFirstUse()) and + not exists(getAnAdjacentUse(lastUse)) + | + n1 = instructionNode(lastUse) or + n1.(DataFlow::PostUpdateNode).getPreUpdateNode() = instructionNode(lastUse) + ) ) or // If a channel-typed field is referenced exactly once in the context of @@ -145,15 +164,17 @@ predicate jumpStep(Node n1, Node n2) { */ predicate storeStep(Node node1, ContentSet cs, Node node2) { exists(Content c | cs.asOneContent() = c | - // a write `(*p).f = rhs` is modeled as two store steps: `rhs` is flows into field `f` of `(*p)`, - // which in turn flows into the pointer content of `p` + // a write `(*p).f = rhs` is modeled as two store steps: `rhs` is flows into field `f` of the + // post-update node of `(*p)`, which in turn flows into the pointer content of the post-update + // node of `p` exists(Write w, Field f, DataFlow::Node base, DataFlow::Node rhs | w.writesField(base, f, rhs) | node1 = rhs and - node2.(PostUpdateNode).getPreUpdateNode() = base and + node2 = base and c = any(DataFlow::FieldContent fc | fc.getField() = f) or node1 = base and - node2.(PostUpdateNode).getPreUpdateNode() = node1.(PointerDereferenceNode).getOperand() and + node2.(PostUpdateNode).getPreUpdateNode() = + node1.(PostUpdateNode).getPreUpdateNode().(PointerDereferenceNode).getOperand() and c = any(DataFlow::PointerContent pc | pc.getPointerType() = node2.getType()) ) or diff --git a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll index 2cd1bbcc747..14ff455646c 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/DataFlowUtil.qll @@ -367,7 +367,7 @@ module BarrierGuard { } /** - * Holds if `guard` marks a point in the control-flow graph where this node + * Holds if `guard` marks a point in the control-flow graph where `g` * is known to validate `nd`, which is represented by `ap`. * * This predicate exists to enforce a good join order in `getAGuardedNode`. @@ -378,7 +378,7 @@ module BarrierGuard { } /** - * Holds if `guard` marks a point in the control-flow graph where this node + * Holds if `guard` marks a point in the control-flow graph where `g` * is known to validate `nd`. */ private predicate guards(Node g, ControlFlow::ConditionGuardNode guard, Node nd) { diff --git a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll index 35887d076c0..f12c9e6eeb1 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/FlowSummaryImpl.qll @@ -117,7 +117,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { ) } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } @@ -440,7 +442,7 @@ module SourceSinkInterpretationInput implements f = e.asFieldEntity() | c = "" and - fw.writesField(base, f, node.asNode()) and + fw.writesFieldPreUpdate(base, f, node.asNode()) and pragma[only_bind_into](e) = getElementWithQualifier(f, base) ) or diff --git a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll index c69a7f32e63..af28f7f4020 100644 --- a/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll +++ b/go/ql/lib/semmle/go/dataflow/internal/TaintTrackingUtil.qll @@ -83,23 +83,25 @@ class AdditionalTaintStep extends Unit { abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); } -/** - * Holds if the additional step from `pred` to `succ` should be included in all - * global taint flow configurations. - */ -predicate localAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ, string model) { - ( - referenceStep(pred, succ) or - elementWriteStep(pred, succ) or - fieldReadStep(pred, succ) or - elementStep(pred, succ) or - tupleStep(pred, succ) or - stringConcatStep(pred, succ) or - sliceStep(pred, succ) +private predicate localAdditionalForwardTaintStep( + DataFlow::Node pred, DataFlow::Node succ, string model +) { + exists(DataFlow::Node pred2 | + pred2 = pred + or + pred2 = pred.(DataFlow::PostUpdateNode).getPreUpdateNode() + | + referenceStep(pred2, succ) or + elementWriteStep(pred2, succ) or + fieldReadStep(pred2, succ) or + elementStep(pred2, succ) or + tupleStep(pred2, succ) or + stringConcatStep(pred2, succ) or + sliceStep(pred2, succ) ) and model = "" or - any(FunctionModel fm).taintStep(pred, succ) and model = "FunctionModel" + any(FunctionModel fm).forwardTaintStep(pred, succ) and model = "FunctionModel" or any(AdditionalTaintStep a).step(pred, succ) and model = "AdditionalTaintStep" or @@ -107,6 +109,43 @@ predicate localAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ, str .getSummaryNode(), succ.(DataFlowPrivate::FlowSummaryNode).getSummaryNode(), false, model) } +/** + * This is a helper predicate for `localAdditionalBackwardTaintStep`. It mixes + * local data flow with local forward taint steps. It should only ever be used + * via its transitive closure, which gives local forward taint flow, that is + * with backward steps excluded. + */ +private predicate partialLocalForwardTaintFlow(DataFlow::Node pred, DataFlow::Node succ) { + DataFlow::localFlow(pred, succ) or + localAdditionalForwardTaintStep(pred, succ, _) or + // Simple flow through library code is included in the exposed local + // step relation, even though flow is technically inter-procedural + FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(pred, succ, _) +} + +/** + * Holds if taint flows backwards from `pred` to `succ` via a function model. + */ +private predicate localAdditionalBackwardTaintStep( + DataFlow::Node pred, DataFlow::Node succ, string model +) { + // backward step through function model + exists(FunctionModel m, DataFlow::Node resultNode | + m.backwardTaintStep(resultNode, succ) and + partialLocalForwardTaintFlow+(resultNode, pred.(DataFlow::PostUpdateNode).getPreUpdateNode()) + ) and + model = "FunctionModel" +} + +/** + * Holds if the additional step from `pred` to `succ` should be included in all + * global taint flow configurations. + */ +predicate localAdditionalTaintStep(DataFlow::Node pred, DataFlow::Node succ, string model) { + localAdditionalForwardTaintStep(pred, succ, model) or + localAdditionalBackwardTaintStep(pred, succ, model) +} + /** * Holds if taint flows from `pred` to `succ` via a reference or dereference. * @@ -140,7 +179,7 @@ predicate referenceStep(DataFlow::Node pred, DataFlow::Node succ) { * `succ`. */ predicate elementWriteStep(DataFlow::Node pred, DataFlow::Node succ) { - any(DataFlow::Write w).writesElement(succ.(DataFlow::PostUpdateNode).getPreUpdateNode(), _, pred) + any(DataFlow::Write w).writesElement(succ, _, pred) or FlowSummaryImpl::Private::Steps::summaryStoreStep(pred.(DataFlowPrivate::FlowSummaryNode) .getSummaryNode(), any(DataFlow::ArrayContent ac).asContentSet(), @@ -195,23 +234,36 @@ abstract class FunctionModel extends Function { abstract predicate hasTaintFlow(FunctionInput input, FunctionOutput output); /** Gets an input node for this model for the call `c`. */ - DataFlow::Node getAnInputNode(DataFlow::CallNode c) { this.taintStepForCall(result, _, c) } + DataFlow::Node getAnInputNode(DataFlow::CallNode c) { this.taintStepForCall(result, _, c, _) } /** Gets an output node for this model for the call `c`. */ - DataFlow::Node getAnOutputNode(DataFlow::CallNode c) { this.taintStepForCall(_, result, c) } + DataFlow::Node getAnOutputNode(DataFlow::CallNode c) { this.taintStepForCall(_, result, c, _) } /** Holds if this function model causes taint to flow from `pred` to `succ` for the call `c`. */ - predicate taintStepForCall(DataFlow::Node pred, DataFlow::Node succ, DataFlow::CallNode c) { + predicate taintStepForCall( + DataFlow::Node pred, DataFlow::Node succ, DataFlow::CallNode c, Boolean forward + ) { c = this.getACall() and exists(FunctionInput inp, FunctionOutput outp | this.hasTaintFlow(inp, outp) | pred = pragma[only_bind_out](inp).getNode(c) and - succ = pragma[only_bind_out](outp).getNode(c) + succ = pragma[only_bind_out](outp).getNode(c) and + if inp.isResult() or inp.isResult(_) then forward = false else forward = true ) } /** Holds if this function model causes taint to flow from `pred` to `succ`. */ predicate taintStep(DataFlow::Node pred, DataFlow::Node succ) { - this.taintStepForCall(pred, succ, _) + this.taintStepForCall(pred, succ, _, _) + } + + /** Holds if this function model causes taint to flow forward from `pred` to `succ`. */ + predicate forwardTaintStep(DataFlow::Node pred, DataFlow::Node succ) { + this.taintStepForCall(pred, succ, _, true) + } + + /** Holds if this function model causes taint to flow backwards from `pred` to `succ`. */ + predicate backwardTaintStep(DataFlow::Node pred, DataFlow::Node succ) { + this.taintStepForCall(pred, succ, _, false) } } diff --git a/go/ql/lib/semmle/go/frameworks/Beego.qll b/go/ql/lib/semmle/go/frameworks/Beego.qll index a9e296a1f97..952958cebf0 100644 --- a/go/ql/lib/semmle/go/frameworks/Beego.qll +++ b/go/ql/lib/semmle/go/frameworks/Beego.qll @@ -109,7 +109,7 @@ module Beego { override string getAContentType() { // Super-method provides content-types for `Body`, which requires us to search - // for `ContentType` and `Header` calls against the same `BeegoOutput` instance + // for `ContentType` and `Header` calls against the same `BeegoOutput` instance result = super.getAContentType() or // Specifically describe methods that set the content-type and body in one operation: diff --git a/go/ql/lib/semmle/go/frameworks/Email.qll b/go/ql/lib/semmle/go/frameworks/Email.qll index a1d43d3c397..ba4cf8be415 100644 --- a/go/ql/lib/semmle/go/frameworks/Email.qll +++ b/go/ql/lib/semmle/go/frameworks/Email.qll @@ -26,9 +26,14 @@ module EmailData { private class SmtpData extends Range { SmtpData() { // func (c *Client) Data() (io.WriteCloser, error) - exists(Method data | + exists(Method data, DataFlow::Node n | data.hasQualifiedName("net/smtp", "Client", "Data") and - this.(DataFlow::SsaNode).getInit() = data.getACall().getResult(0) + // Deal with cases like + // w, _ := s.Data() + // io.WriteString(w, source()) // $ Alert + // w.Write(source()) // $ Alert + DataFlow::localFlow(data.getACall().getResult(0), n) and + this.(DataFlow::PostUpdateNode).getPreUpdateNode() = n ) or // func SendMail(addr string, a Auth, from string, to []string, msg []byte) error diff --git a/go/ql/lib/semmle/go/frameworks/GinCors.qll b/go/ql/lib/semmle/go/frameworks/GinCors.qll index 582ea368073..cc993ea4dee 100644 --- a/go/ql/lib/semmle/go/frameworks/GinCors.qll +++ b/go/ql/lib/semmle/go/frameworks/GinCors.qll @@ -27,7 +27,7 @@ module GinCors { AllowCredentialsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Config", "AllowCredentials") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.getType() instanceof BoolType ) } @@ -61,7 +61,7 @@ module GinCors { AllowOriginsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Config", "AllowOrigins") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.asExpr() instanceof SliceLit ) } @@ -95,7 +95,7 @@ module GinCors { AllowAllOriginsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Config", "AllowAllOrigins") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.getType() instanceof BoolType ) } @@ -109,14 +109,9 @@ module GinCors { * Get config variable holding header values */ override GinConfig getConfig() { - exists(GinConfig gc | - ( - gc.getV().getBaseVariable().getDefinition().(SsaExplicitDefinition).getRhs() = - base.asInstruction() or - gc.getV().getAUse() = base - ) and - result = gc - ) + result.getV().getBaseVariable().getDefinition().(SsaExplicitDefinition).getRhs() = + base.asInstruction() or + result.getV().getAUse() = base } } diff --git a/go/ql/lib/semmle/go/frameworks/NoSQL.qll b/go/ql/lib/semmle/go/frameworks/NoSQL.qll index 36932149628..5fa155395fc 100644 --- a/go/ql/lib/semmle/go/frameworks/NoSQL.qll +++ b/go/ql/lib/semmle/go/frameworks/NoSQL.qll @@ -38,9 +38,8 @@ module NoSql { */ predicate isAdditionalMongoTaintStep(DataFlow::Node pred, DataFlow::Node succ) { // Taint an entry if the `Value` is tainted - exists(Write w, DataFlow::Node base, Field f | w.writesField(base, f, pred) | - base = succ.(DataFlow::PostUpdateNode).getPreUpdateNode() and - base.getType().hasQualifiedName(package("go.mongodb.org/mongo-driver", "bson/primitive"), "E") and + exists(Write w, Field f | w.writesField(succ, f, pred) | + succ.getType().hasQualifiedName(package("go.mongodb.org/mongo-driver", "bson/primitive"), "E") and f.getName() = "Value" ) } diff --git a/go/ql/lib/semmle/go/frameworks/Protobuf.qll b/go/ql/lib/semmle/go/frameworks/Protobuf.qll index 550f9917560..62443eb46af 100644 --- a/go/ql/lib/semmle/go/frameworks/Protobuf.qll +++ b/go/ql/lib/semmle/go/frameworks/Protobuf.qll @@ -64,11 +64,10 @@ module Protobuf { */ private class MarshalStateStep extends TaintTracking::AdditionalTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - exists(DataFlow::PostUpdateNode marshalInput, DataFlow::CallNode marshalStateCall | + exists(DataFlow::Node marshalInput, DataFlow::CallNode marshalStateCall | marshalStateCall = marshalStateMethod().getACall() and // pred -> marshalInput.Message - any(DataFlow::Write w) - .writesField(marshalInput.getPreUpdateNode(), inputMessageField(), pred) and + any(DataFlow::Write w).writesField(marshalInput, inputMessageField(), pred) and // marshalInput -> marshalStateCall marshalStateCall.getArgument(0) = globalValueNumber(marshalInput).getANode() and // marshalStateCall -> succ @@ -142,10 +141,10 @@ module Protobuf { private class WriteMessageFieldStep extends TaintTracking::AdditionalTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { [succ.getType(), succ.getType().getPointerType()] instanceof MessageType and - exists(DataFlow::ReadNode base | - succ.(DataFlow::PostUpdateNode).getPreUpdateNode() = getUnderlyingNode(base) + exists(DataFlow::Write w, DataFlow::ReadNode base | + w.writesElementPreUpdate(base, _, pred) or w.writesFieldPreUpdate(base, _, pred) | - any(DataFlow::Write w).writesComponent(base, pred) + succ.(DataFlow::PostUpdateNode).getPreUpdateNode() = getUnderlyingNode(base) ) } } diff --git a/go/ql/lib/semmle/go/frameworks/RsCors.qll b/go/ql/lib/semmle/go/frameworks/RsCors.qll index b9cee2aa459..52b4a7fe6d0 100644 --- a/go/ql/lib/semmle/go/frameworks/RsCors.qll +++ b/go/ql/lib/semmle/go/frameworks/RsCors.qll @@ -54,7 +54,7 @@ module RsCors { AllowCredentialsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Options", "AllowCredentials") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.getType() instanceof BoolType ) } @@ -82,7 +82,7 @@ module RsCors { AllowOriginsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Options", "AllowedOrigins") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.asExpr() instanceof SliceLit ) } @@ -113,7 +113,7 @@ module RsCors { AllowAllOriginsWrite() { exists(Field f, Write w | f.hasQualifiedName(packagePath(), "Options", "AllowAllOrigins") and - w.writesField(base, f, this) and + w.writesFieldPreUpdate(base, f, this) and this.getType() instanceof BoolType ) } diff --git a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll index 9a917f05ff5..88c9605502f 100644 --- a/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll +++ b/go/ql/lib/semmle/go/frameworks/stdlib/NetHttp.qll @@ -52,7 +52,7 @@ module NetHttp { MapWrite() { this.getType().hasQualifiedName("net/http", "Header") and - any(Write write).writesElement(this, index, rhs) + any(Write write).writesElementPreUpdate(this, index, rhs) } override DataFlow::Node getName() { result = index } diff --git a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll index 9531e279812..079ab35ee36 100644 --- a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll +++ b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll @@ -56,6 +56,17 @@ module AllocationSizeOverflow { succ = c ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + exists(DataFlow::Node allocsz | + isSinkWithAllocationSize(sink, allocsz) and + result = allocsz.getLocation() + ) + } } /** Tracks taint flow to find allocation-size overflows. */ diff --git a/go/ql/lib/semmle/go/security/AllocationSizeOverflowCustomizations.qll b/go/ql/lib/semmle/go/security/AllocationSizeOverflowCustomizations.qll index 60841b048f4..3eced801f20 100644 --- a/go/ql/lib/semmle/go/security/AllocationSizeOverflowCustomizations.qll +++ b/go/ql/lib/semmle/go/security/AllocationSizeOverflowCustomizations.qll @@ -32,7 +32,10 @@ module AllocationSizeOverflow { /** * A data-flow node that is an operand to an operation that may overflow. */ - abstract class OverflowProneOperand extends DataFlow::Node { } + abstract class OverflowProneOperand extends DataFlow::Node { + /** Gets the operation that may overflow that `this` is an operand of. */ + abstract DataFlow::Node getOverflowProneOperation(); + } /** * A data-flow node that represents the size argument of an allocation, such as the `n` in @@ -91,8 +94,7 @@ module AllocationSizeOverflow { AllocationSize allocsz; DefaultSink() { - this instanceof OverflowProneOperand and - localStep*(this, allocsz) and + localStep*(this.(OverflowProneOperand).getOverflowProneOperation(), allocsz) and not allocsz instanceof AllocationSizeCheckBarrier } @@ -134,15 +136,18 @@ module AllocationSizeOverflow { /** An operand of an arithmetic expression that could cause overflow. */ private class DefaultOverflowProneOperand extends OverflowProneOperand { + OperatorExpr parent; + DefaultOverflowProneOperand() { - exists(OperatorExpr parent | isOverflowProne(parent) | - this.asExpr() = parent.getAnOperand() and - // only consider outermost operands to avoid double reporting - not exists(OperatorExpr grandparent | parent = grandparent.getAnOperand().stripParens() | - isOverflowProne(grandparent) - ) + isOverflowProne(parent) and + this.asExpr() = parent.getAnOperand() and + // only consider outermost operands to avoid double reporting + not exists(OperatorExpr grandparent | parent = grandparent.getAnOperand().stripParens() | + isOverflowProne(grandparent) ) } + + override DataFlow::Node getOverflowProneOperation() { result.asExpr() = parent } } /** diff --git a/go/ql/lib/semmle/go/security/CleartextLogging.qll b/go/ql/lib/semmle/go/security/CleartextLogging.qll index 5218d03d908..5254b3e3a29 100644 --- a/go/ql/lib/semmle/go/security/CleartextLogging.qll +++ b/go/ql/lib/semmle/go/security/CleartextLogging.qll @@ -35,9 +35,7 @@ module CleartextLogging { predicate isAdditionalFlowStep(DataFlow::Node src, DataFlow::Node trg) { // A taint propagating data-flow edge through structs: a tainted write taints the entire struct. - exists(Write write | - write.writesField(trg.(DataFlow::PostUpdateNode).getPreUpdateNode(), _, src) - ) + exists(Write write | write.writesField(trg, _, src)) or // taint steps that do not include flow through fields. Field reads would produce FPs due to // the additional taint step above that taints whole structs from individual field writes. diff --git a/go/ql/lib/semmle/go/security/CleartextLoggingCustomizations.qll b/go/ql/lib/semmle/go/security/CleartextLoggingCustomizations.qll index 6c95686cb8c..4abc9021268 100644 --- a/go/ql/lib/semmle/go/security/CleartextLoggingCustomizations.qll +++ b/go/ql/lib/semmle/go/security/CleartextLoggingCustomizations.qll @@ -55,6 +55,8 @@ module CleartextLogging { | this.asExpr().(Ident).getName() = name or + this.(DataFlow::SsaNode).getSourceVariable().getName() = name + or this.(DataFlow::FieldReadNode).getFieldName() = name or this.(DataFlow::CallNode).getCalleeName() = name @@ -143,7 +145,7 @@ module CleartextLogging { not this instanceof NonCleartextPassword and name.regexpMatch(maybePassword()) and ( - this.asExpr().(Ident).getName() = name + this.(DataFlow::SsaNode).getSourceVariable().getName() = name or exists(DataFlow::FieldReadNode fn | fn = this and diff --git a/go/ql/lib/semmle/go/security/CommandInjection.qll b/go/ql/lib/semmle/go/security/CommandInjection.qll index 7dc6f3991fc..face45358a9 100644 --- a/go/ql/lib/semmle/go/security/CommandInjection.qll +++ b/go/ql/lib/semmle/go/security/CommandInjection.qll @@ -24,6 +24,8 @@ module CommandInjection { } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } } /** @@ -80,6 +82,30 @@ module CommandInjection { node instanceof Sanitizer or node = any(ArgumentArrayWithDoubleDash array).getASanitizedElement() } + + predicate observeDiffInformedIncrementalMode() { any() } + + // Hack: with use-use flow, we might have x (use at line 1) -> x (use at line 2), + // x (use at line 1) -> array at line 1 and x (use at line 2) -> array at line 2, + // in the context + // + // array1 := {"--", x} + // array2 := {x, "--"} + // + // We want to taint array2 but not array1, which suggests excluding the edge x (use 1) -> array1 + // However isSanitizer only allows us to remove nodes (isSanitizerIn/Out permit removing all outgoing + // or incoming edges); we can't remove an individual edge, so instead we supply extra edges connecting + // the definition with the next use. + predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { + exists( + ArgumentArrayWithDoubleDash array, DataFlow::InstructionNode sanitized, + DataFlow::SsaNode defn + | + sanitized = array.getASanitizedElement() and sanitized = defn.getAUse() + | + pred = defn and succ = sanitized.getASuccessor() + ) + } } /** diff --git a/go/ql/lib/semmle/go/security/ExternalAPIs.qll b/go/ql/lib/semmle/go/security/ExternalAPIs.qll index 4a561c17136..f85f939258f 100644 --- a/go/ql/lib/semmle/go/security/ExternalAPIs.qll +++ b/go/ql/lib/semmle/go/security/ExternalAPIs.qll @@ -186,6 +186,8 @@ private module UntrustedDataConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource } predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode } + + predicate observeDiffInformedIncrementalMode() { any() } } /** diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll index 0be50fc2306..877a2b4570e 100644 --- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll +++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll @@ -30,6 +30,8 @@ module HardcodedCredentials { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } } /** Tracks taint flow for reasoning about hardcoded credentials. */ diff --git a/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll b/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll index 9125ab6e400..161916cd11e 100644 --- a/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll +++ b/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll @@ -290,13 +290,17 @@ private predicate integerTypeBound(IntegerType it, int bitSize, int architecture * the type assertion succeeded. If it is not checked then there will be a * run-time panic if the type assertion fails, so we can assume it succeeded. */ -class TypeAssertionCheck extends DataFlow::ExprNode, FlowStateTransformer { +class TypeAssertionCheck extends DataFlow::InstructionNode, FlowStateTransformer { IntegerType it; TypeAssertionCheck() { - exists(TypeAssertExpr tae | - this = DataFlow::exprNode(tae.getExpr()) and - it = tae.getTypeExpr().getType().getUnderlyingType() + exists(IR::Instruction evalAssert, TypeAssertExpr assert | + it = assert.getTypeExpr().getType().getUnderlyingType() and + evalAssert = IR::evalExprInstruction(assert) + | + if exists(IR::extractTupleElement(evalAssert, _)) + then this.asInstruction() = IR::extractTupleElement(evalAssert, 0) + else this.asInstruction() = evalAssert ) } @@ -440,6 +444,12 @@ private module ConversionWithoutBoundsCheckConfig implements DataFlow::StateConf state2 = node2.(FlowStateTransformer).transform(state1) and DataFlow::simpleLocalFlowStep(node1, node2, _) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getASuccessor().getLocation() + } } /** diff --git a/go/ql/lib/semmle/go/security/InsecureRandomness.qll b/go/ql/lib/semmle/go/security/InsecureRandomness.qll index 83746f7b96e..4dac659eabf 100644 --- a/go/ql/lib/semmle/go/security/InsecureRandomness.qll +++ b/go/ql/lib/semmle/go/security/InsecureRandomness.qll @@ -39,6 +39,10 @@ module InsecureRandomness { n2.getType() instanceof IntegerType ) } + + predicate observeDiffInformedIncrementalMode() { + none() // Can't have accurate sink location override because of secondary use of `flowPath` in select. + } } /** diff --git a/go/ql/lib/semmle/go/security/LogInjectionCustomizations.qll b/go/ql/lib/semmle/go/security/LogInjectionCustomizations.qll index 565cf29a450..9160c204df1 100644 --- a/go/ql/lib/semmle/go/security/LogInjectionCustomizations.qll +++ b/go/ql/lib/semmle/go/security/LogInjectionCustomizations.qll @@ -35,7 +35,15 @@ module LogInjection { /** An argument to a logging mechanism. */ class LoggerSink extends Sink { - LoggerSink() { this = any(LoggerCall log).getAValueFormattedMessageComponent() } + LoggerSink() { + exists(LoggerCall call | + this = call.getAValueFormattedMessageComponent() and + // exclude arguments to `call` which have a safe format argument, which + // aren't caught by SafeFormatArgumentSanitizer as that sanitizes the + // result of the call. + not safeFormatArgument(this, call) + ) + } } /** @@ -47,6 +55,22 @@ module LogInjection { ReplaceSanitizer() { this.getReplacedString() = ["\r", "\n"] } } + /** + * Holds if `arg` is an argument to `call` that is formatted using the `%q` + * directive. This formatting directive replaces newline characters with + * escape sequences, so `arg` would not be a sink for log injection. + */ + private predicate safeFormatArgument( + DataFlow::Node arg, StringOps::Formatting::StringFormatCall call + ) { + exists(string safeDirective | + // Mark "%q" formats as safe, but not "%#q", which would preserve newline characters. + safeDirective.regexpMatch("%[^%#]*q") + | + arg = call.getOperand(_, safeDirective) + ) + } + /** * An argument that is formatted using the `%q` directive, considered as a sanitizer * for log injection. @@ -55,10 +79,8 @@ module LogInjection { */ private class SafeFormatArgumentSanitizer extends Sanitizer { SafeFormatArgumentSanitizer() { - exists(StringOps::Formatting::StringFormatCall call, string safeDirective | - this = call.getOperand(_, safeDirective) and - // Mark "%q" formats as safe, but not "%#q", which would preserve newline characters. - safeDirective.regexpMatch("%[^%#]*q") + exists(StringOps::Formatting::StringFormatCall call | safeFormatArgument(_, call) | + this = call.getAResult() ) } } diff --git a/go/ql/lib/semmle/go/security/OpenUrlRedirect.qll b/go/ql/lib/semmle/go/security/OpenUrlRedirect.qll index 1d2d7a1c60b..eb651c3b69f 100644 --- a/go/ql/lib/semmle/go/security/OpenUrlRedirect.qll +++ b/go/ql/lib/semmle/go/security/OpenUrlRedirect.qll @@ -33,8 +33,8 @@ module OpenUrlRedirect { any(AdditionalStep s).hasTaintStep(pred, succ) or // propagate to a URL when its host is assigned to - exists(Write w, Field f, SsaWithFields v | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(v.getAUse(), f, pred) and succ = v.getAUse() + exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | + w.writesField(succ, f, pred) ) or // propagate out of most URL fields, but not `ForceQuery` and `Scheme` @@ -48,8 +48,10 @@ module OpenUrlRedirect { predicate isBarrierOut(DataFlow::Node node) { // block propagation of this unsafe value when its host is overwritten - exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(node.getASuccessor(), f, _) + exists(Write w, Field f, DataFlow::Node base | + f.hasQualifiedName("net/url", "URL", "Host") and + w.writesField(base, f, _) and + base.(DataFlow::PostUpdateNode).getPreUpdateNode() = node ) or hostnameSanitizingPrefixEdge(node, _) diff --git a/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll b/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll index 870edeee962..248276ba396 100644 --- a/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll +++ b/go/ql/lib/semmle/go/security/OpenUrlRedirectCustomizations.qll @@ -6,7 +6,7 @@ import go import UrlConcatenation -import SafeUrlFlowCustomizations +private import SafeUrlFlowCustomizations import semmle.go.dataflow.barrierguardutil.RedirectCheckBarrierGuard import semmle.go.dataflow.barrierguardutil.RegexpCheck import semmle.go.dataflow.barrierguardutil.UrlCheck @@ -75,25 +75,18 @@ module OpenUrlRedirect { } } - bindingset[var, w] - pragma[inline_late] - private predicate useIsDominated(SsaWithFields var, Write w, DataFlow::ReadNode sanitizedRead) { - w.dominatesNode(sanitizedRead.asInstruction()) and - sanitizedRead = var.getAUse() - } - /** - * An access to a variable that is preceded by an assignment to its `Path` field. + * An assignment of a safe value to the field `Path`, considered as a barrier for sanitizing + * untrusted URLs. * * This is overapproximate; this will currently remove flow through all `Url.Path` assignments * which contain a substring that could sanitize data. */ - class PathAssignmentBarrier extends Barrier, Read { + class PathAssignmentBarrier extends Barrier { PathAssignmentBarrier() { - exists(Write w, SsaWithFields var | - hasHostnameSanitizingSubstring(w.getRhs()) and - w.writesField(var.getAUse(), any(Field f | f.getName() = "Path"), _) and - useIsDominated(var, w, this) + exists(Write w, DataFlow::Node rhs | + hasHostnameSanitizingSubstring(rhs) and + w.writesFieldPreUpdate(this, any(Field f | f.getName() = "Path"), rhs) ) } } @@ -121,21 +114,6 @@ module OpenUrlRedirect { /** A sink for an open redirect, considered as a sink for safe URL flow. */ private class SafeUrlSink extends SafeUrlFlow::Sink instanceof OpenUrlRedirect::Sink { } -/** - * A read of a field considered unsafe to redirect to, considered as a sanitizer for a safe - * URL. - */ -private class UnsafeFieldReadSanitizer extends SafeUrlFlow::SanitizerEdge { - UnsafeFieldReadSanitizer() { - exists(DataFlow::FieldReadNode frn, string name | - name = ["User", "RawQuery", "Fragment"] and - frn.getField().hasQualifiedName("net/url", "URL") - | - this = frn.getBase() - ) - } -} - /** * Reinstate the usual field propagation rules for fields, which the OpenURLRedirect * query usually excludes, for fields of `Params` other than `Params.Fixed`. diff --git a/go/ql/lib/semmle/go/security/ReflectedXss.qll b/go/ql/lib/semmle/go/security/ReflectedXss.qll index 1068c6fae3d..35501269cc1 100644 --- a/go/ql/lib/semmle/go/security/ReflectedXss.qll +++ b/go/ql/lib/semmle/go/security/ReflectedXss.qll @@ -22,6 +22,14 @@ module ReflectedXss { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = sink.(SharedXss::Sink).getAssociatedLoc().getLocation() + } } /** Tracks taint flow from untrusted data to XSS attack vectors. */ diff --git a/go/ql/lib/semmle/go/security/RequestForgery.qll b/go/ql/lib/semmle/go/security/RequestForgery.qll index bdf26a1f18f..03b6f9ac0b0 100644 --- a/go/ql/lib/semmle/go/security/RequestForgery.qll +++ b/go/ql/lib/semmle/go/security/RequestForgery.qll @@ -27,10 +27,18 @@ module RequestForgery { predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { // propagate to a URL when its host is assigned to - exists(Write w, Field f, SsaWithFields v | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(v.getAUse(), f, pred) and succ = v.getAUse() + exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | + w.writesField(succ, f, pred) ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.getLocation() + or + result = sink.(Sink).getARequest().getLocation() + } } /** Tracks taint flow from untrusted data to request forgery attack vectors. */ diff --git a/go/ql/lib/semmle/go/security/RequestForgeryCustomizations.qll b/go/ql/lib/semmle/go/security/RequestForgeryCustomizations.qll index 2449ffe488c..82f9df4b506 100644 --- a/go/ql/lib/semmle/go/security/RequestForgeryCustomizations.qll +++ b/go/ql/lib/semmle/go/security/RequestForgeryCustomizations.qll @@ -4,11 +4,12 @@ import go import UrlConcatenation -import SafeUrlFlowCustomizations +private import SafeUrlFlowCustomizations import semmle.go.dataflow.barrierguardutil.RedirectCheckBarrierGuard import semmle.go.dataflow.barrierguardutil.RegexpCheck import semmle.go.dataflow.barrierguardutil.UrlCheck import semmle.go.dataflow.ExternalFlow +private import semmle.go.security.Sanitizers /** Provides classes and predicates for the request forgery query. */ module RequestForgery { @@ -114,22 +115,12 @@ module RequestForgery { * considered a barrier guard for `url`. */ class UrlCheckAsBarrierGuard extends UrlCheckBarrier, Sanitizer { } + + /** + * A simple-typed node, considered a sanitizer for request forgery. + */ + private class DefaultSanitizer extends Sanitizer instanceof SimpleTypeSanitizer { } } /** A sink for request forgery, considered as a sink for safe URL flow. */ private class SafeUrlSink extends SafeUrlFlow::Sink instanceof RequestForgery::Sink { } - -/** - * A read of a field considered unsafe for request forgery, considered as a sanitizer for a safe - * URL. - */ -private class UnsafeFieldReadSanitizer extends SafeUrlFlow::SanitizerEdge { - UnsafeFieldReadSanitizer() { - exists(DataFlow::FieldReadNode frn, string name | - (name = "RawQuery" or name = "Fragment" or name = "User") and - frn.getField().hasQualifiedName("net/url", "URL") - | - this = frn.getBase() - ) - } -} diff --git a/go/ql/lib/semmle/go/security/SafeUrlFlow.qll b/go/ql/lib/semmle/go/security/SafeUrlFlow.qll index d74e2156a60..7144614c305 100644 --- a/go/ql/lib/semmle/go/security/SafeUrlFlow.qll +++ b/go/ql/lib/semmle/go/security/SafeUrlFlow.qll @@ -22,20 +22,29 @@ module SafeUrlFlow { predicate isSink(DataFlow::Node sink) { sink instanceof Sink } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - // propagate to a URL when its host is assigned to - exists(Write w, Field f, SsaWithFields v | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(v.getAUse(), f, node1) and node2 = v.getAUse() + // propagate taint to the post-update node of a URL when its host is + // assigned to + exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | + w.writesField(node2, f, node1) ) } predicate isBarrierOut(DataFlow::Node node) { // block propagation of this safe value when its host is overwritten exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(node.getASuccessor(), f, _) + // We sanitize the pre-update node to block flow from previous value. + // This fits in with the additional flow step above propagating taint + // from the value written to the Host field to the post-update node of + // the URL. + w.writesFieldPreUpdate(node, f, _) ) or node instanceof SanitizerEdge } + + predicate observeDiffInformedIncrementalMode() { + none() // only used as secondary configuration + } } /** Tracks taint flow for reasoning about safe URLs. */ diff --git a/go/ql/lib/semmle/go/security/SafeUrlFlowCustomizations.qll b/go/ql/lib/semmle/go/security/SafeUrlFlowCustomizations.qll index 5f0572db11e..8acd88fb26d 100644 --- a/go/ql/lib/semmle/go/security/SafeUrlFlowCustomizations.qll +++ b/go/ql/lib/semmle/go/security/SafeUrlFlowCustomizations.qll @@ -40,4 +40,19 @@ module SafeUrlFlow { private class StringSlicingEdge extends SanitizerEdge { StringSlicingEdge() { this = any(DataFlow::SliceNode sn) } } + + /** + * A read of a field considered unsafe to redirect to, considered as a sanitizer for a safe + * URL. + */ + private class UnsafeFieldReadSanitizer extends SanitizerEdge { + UnsafeFieldReadSanitizer() { + exists(DataFlow::FieldReadNode frn, string name | + name = ["Fragment", "RawQuery", "User"] and + frn.getField().hasQualifiedName("net/url", "URL", name) + | + this = frn.getBase() + ) + } + } } diff --git a/go/ql/lib/semmle/go/security/Sanitizers.qll b/go/ql/lib/semmle/go/security/Sanitizers.qll new file mode 100644 index 00000000000..4391e12c25a --- /dev/null +++ b/go/ql/lib/semmle/go/security/Sanitizers.qll @@ -0,0 +1,16 @@ +/** + * Classes to represent sanitizers commonly used in dataflow and taint tracking + * configurations. + */ + +import go + +/** + * A node whose type is a simple type unlikely to carry taint, such as a + * numeric or boolean type. + */ +class SimpleTypeSanitizer extends DataFlow::Node { + SimpleTypeSanitizer() { + this.getType() instanceof NumericType or this.getType() instanceof BoolType + } +} diff --git a/go/ql/lib/semmle/go/security/SqlInjectionCustomizations.qll b/go/ql/lib/semmle/go/security/SqlInjectionCustomizations.qll index 0b2f96a9283..f26168ad1d7 100644 --- a/go/ql/lib/semmle/go/security/SqlInjectionCustomizations.qll +++ b/go/ql/lib/semmle/go/security/SqlInjectionCustomizations.qll @@ -4,6 +4,7 @@ */ import go +private import semmle.go.security.Sanitizers /** * Provides extension points for customizing the taint tracking configuration for reasoning about @@ -39,12 +40,11 @@ module SqlInjection { /** A NoSql query, considered as a taint sink for SQL injection. */ class NoSqlQueryAsSink extends Sink instanceof NoSql::Query { } + /** DEPRECATED: Use `SimpleTypeSanitizer` from semmle.go.security.Sanitizers instead. */ + deprecated class NumericOrBooleanSanitizer = SimpleTypeSanitizer; + /** * A numeric- or boolean-typed node, considered a sanitizer for sql injection. */ - class NumericOrBooleanSanitizer extends Sanitizer { - NumericOrBooleanSanitizer() { - this.getType() instanceof NumericType or this.getType() instanceof BoolType - } - } + private class DefaultSanitizer extends Sanitizer instanceof SimpleTypeSanitizer { } } diff --git a/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll b/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll index 39db60de483..747f2ab0d08 100644 --- a/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll +++ b/go/ql/lib/semmle/go/security/TaintedPathCustomizations.qll @@ -87,7 +87,7 @@ module TaintedPath { exists(DataFlow::CallNode cleanCall, StringOps::Concatenation concatNode | cleanCall = any(Function f | f.hasQualifiedName("path/filepath", "Clean")).getACall() and concatNode = cleanCall.getArgument(0) and - concatNode.getOperand(0).asExpr().(StringLit).getValue() = "/" and + concatNode.getOperand(0).getStringValue().prefix(1) = ["/", "\\"] and this = cleanCall.getResult() ) } diff --git a/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/go.dbscheme b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/go.dbscheme new file mode 100644 index 00000000000..b1341734d68 --- /dev/null +++ b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/go.dbscheme @@ -0,0 +1,563 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + +/** Overlay support **/ + +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); + + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref, + int endLine: int ref, int endColumn: int ref); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @definedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int defined: @definedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @definedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @definedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/old.dbscheme b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/old.dbscheme new file mode 100644 index 00000000000..b3da71c3ac2 --- /dev/null +++ b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/old.dbscheme @@ -0,0 +1,552 @@ +/** Auto-generated dbscheme; do not edit. Run `make gen` in directory `go/` to regenerate. */ + + +/** Duplicate code **/ + +duplicateCode( + unique int id : @duplication, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +similarCode( + unique int id : @similarity, + varchar(900) relativePath : string ref, + int equivClass : int ref); + +@duplication_or_similarity = @duplication | @similarity; + +tokens( + int id : @duplication_or_similarity ref, + int offset : int ref, + int beginLine : int ref, + int beginColumn : int ref, + int endLine : int ref, + int endColumn : int ref); + +/** External data **/ + +externalData( + int id : @externalDataElement, + varchar(900) path : string ref, + int column: int ref, + varchar(900) value : string ref +); + +snapshotDate(unique date snapshotDate : date ref); + +sourceLocationPrefix(varchar(900) prefix : string ref); + + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +compilations(unique int id: @compilation, string cwd: string ref); + +#keyset[id, num] +compilation_args(int id: @compilation ref, int num: int ref, string arg: string ref); + +#keyset[id, num, kind] +compilation_time(int id: @compilation ref, int num: int ref, int kind: int ref, float secs: float ref); + +diagnostic_for(unique int diagnostic: @diagnostic ref, int compilation: @compilation ref, int file_number: int ref, int file_number_diagnostic_number: int ref); + +compilation_finished(unique int id: @compilation ref, float cpu_seconds: float ref, float elapsed_seconds: float ref); + +#keyset[id, num] +compilation_compiling_files(int id: @compilation ref, int num: int ref, int file: @file ref); + +diagnostics(unique int id: @diagnostic, int severity: int ref, string error_tag: string ref, string error_message: string ref, + string full_error_message: string ref, int location: @location ref); + +locations_default(unique int id: @location_default, int file: @file ref, int beginLine: int ref, int beginColumn: int ref, + int endLine: int ref, int endColumn: int ref); + +numlines(int element_id: @sourceline ref, int num_lines: int ref, int num_code: int ref, int num_comment: int ref); + +files(unique int id: @file, string name: string ref); + +folders(unique int id: @folder, string name: string ref); + +containerparent(int parent: @container ref, unique int child: @container ref); + +has_location(unique int locatable: @locatable ref, int location: @location ref); + +#keyset[parent, idx] +comment_groups(unique int id: @comment_group, int parent: @file ref, int idx: int ref); + +comments(unique int id: @comment, int kind: int ref, int parent: @comment_group ref, int idx: int ref, string text: string ref); + +doc_comments(unique int node: @documentable ref, int comment: @comment_group ref); + +#keyset[parent, idx] +exprs(unique int id: @expr, int kind: int ref, int parent: @exprparent ref, int idx: int ref); + +literals(unique int expr: @expr ref, string value: string ref, string raw: string ref); + +constvalues(unique int expr: @expr ref, string value: string ref, string exact: string ref); + +fields(unique int id: @field, int parent: @fieldparent ref, int idx: int ref); + +typeparamdecls(unique int id: @typeparamdecl, int parent: @typeparamdeclparent ref, int idx: int ref); + +#keyset[parent, idx] +stmts(unique int id: @stmt, int kind: int ref, int parent: @stmtparent ref, int idx: int ref); + +#keyset[parent, idx] +decls(unique int id: @decl, int kind: int ref, int parent: @declparent ref, int idx: int ref); + +#keyset[parent, idx] +specs(unique int id: @spec, int kind: int ref, int parent: @gendecl ref, int idx: int ref); + +scopes(unique int id: @scope, int kind: int ref); + +scopenesting(unique int inner: @scope ref, int outer: @scope ref); + +scopenodes(unique int node: @scopenode ref, int scope: @localscope ref); + +objects(unique int id: @object, int kind: int ref, string name: string ref); + +objectscopes(unique int object: @object ref, int scope: @scope ref); + +objecttypes(unique int object: @object ref, int tp: @type ref); + +methodreceivers(unique int method: @object ref, int receiver: @object ref); + +fieldstructs(unique int field: @object ref, int struct: @structtype ref); + +methodhosts(int method: @object ref, int host: @definedtype ref); + +defs(int ident: @ident ref, int object: @object ref); + +uses(int ident: @ident ref, int object: @object ref); + +types(unique int id: @type, int kind: int ref); + +type_of(unique int expr: @expr ref, int tp: @type ref); + +typename(unique int tp: @type ref, string name: string ref); + +key_type(unique int map: @maptype ref, int tp: @type ref); + +element_type(unique int container: @containertype ref, int tp: @type ref); + +base_type(unique int ptr: @pointertype ref, int tp: @type ref); + +underlying_type(unique int defined: @definedtype ref, int tp: @type ref); + +#keyset[parent, index] +component_types(int parent: @compositetype ref, int index: int ref, string name: string ref, int tp: @type ref); + +#keyset[parent, index] +struct_tags(int parent: @structtype ref, int index: int ref, string tag: string ref); + +#keyset[interface, index] +interface_private_method_ids(int interface: @interfacetype ref, int index: int ref, string id: string ref); + +array_length(unique int tp: @arraytype ref, string len: string ref); + +type_objects(unique int tp: @type ref, int object: @object ref); + +packages(unique int id: @package, string name: string ref, string path: string ref, int scope: @packagescope ref); + +#keyset[parent, idx] +modexprs(unique int id: @modexpr, int kind: int ref, int parent: @modexprparent ref, int idx: int ref); + +#keyset[parent, idx] +modtokens(string token: string ref, int parent: @modexpr ref, int idx: int ref); + +#keyset[package, idx] +errors(unique int id: @error, int kind: int ref, string msg: string ref, string rawpos: string ref, + string file: string ref, int line: int ref, int col: int ref, int package: @package ref, int idx: int ref); + +has_ellipsis(int id: @callorconversionexpr ref); + +variadic(int id: @signaturetype ref); + +#keyset[parent, idx] +typeparam(unique int tp: @typeparamtype ref, string name: string ref, int bound: @compositetype ref, + int parent: @typeparamparentobject ref, int idx: int ref); + +@container = @file | @folder; + +@locatable = @xmllocatable | @node | @localscope; + +@node = @documentable | @exprparent | @modexprparent | @fieldparent | @stmtparent | @declparent | @typeparamdeclparent + | @scopenode | @comment_group | @comment; + +@documentable = @file | @field | @typeparamdecl | @spec | @gendecl | @funcdecl | @modexpr; + +@exprparent = @funcdef | @file | @expr | @field | @stmt | @decl | @typeparamdecl | @spec; + +@modexprparent = @file | @modexpr; + +@fieldparent = @decl | @structtypeexpr | @functypeexpr | @interfacetypeexpr; + +@stmtparent = @funcdef | @stmt | @decl; + +@declparent = @file | @declstmt; + +@typeparamdeclparent = @funcdecl | @typespec; + +@funcdef = @funclit | @funcdecl; + +@scopenode = @file | @functypeexpr | @blockstmt | @ifstmt | @caseclause | @switchstmt | @commclause | @loopstmt; + +@location = @location_default; + +@sourceline = @locatable; + +case @comment.kind of + 0 = @slashslashcomment +| 1 = @slashstarcomment; + +case @expr.kind of + 0 = @badexpr +| 1 = @ident +| 2 = @ellipsis +| 3 = @intlit +| 4 = @floatlit +| 5 = @imaglit +| 6 = @charlit +| 7 = @stringlit +| 8 = @funclit +| 9 = @compositelit +| 10 = @parenexpr +| 11 = @selectorexpr +| 12 = @indexexpr +| 13 = @genericfunctioninstantiationexpr +| 14 = @generictypeinstantiationexpr +| 15 = @sliceexpr +| 16 = @typeassertexpr +| 17 = @callorconversionexpr +| 18 = @starexpr +| 19 = @keyvalueexpr +| 20 = @arraytypeexpr +| 21 = @structtypeexpr +| 22 = @functypeexpr +| 23 = @interfacetypeexpr +| 24 = @maptypeexpr +| 25 = @typesetliteralexpr +| 26 = @plusexpr +| 27 = @minusexpr +| 28 = @notexpr +| 29 = @complementexpr +| 30 = @derefexpr +| 31 = @addressexpr +| 32 = @arrowexpr +| 33 = @lorexpr +| 34 = @landexpr +| 35 = @eqlexpr +| 36 = @neqexpr +| 37 = @lssexpr +| 38 = @leqexpr +| 39 = @gtrexpr +| 40 = @geqexpr +| 41 = @addexpr +| 42 = @subexpr +| 43 = @orexpr +| 44 = @xorexpr +| 45 = @mulexpr +| 46 = @quoexpr +| 47 = @remexpr +| 48 = @shlexpr +| 49 = @shrexpr +| 50 = @andexpr +| 51 = @andnotexpr +| 52 = @sendchantypeexpr +| 53 = @recvchantypeexpr +| 54 = @sendrcvchantypeexpr; + +@basiclit = @intlit | @floatlit | @imaglit | @charlit | @stringlit; + +@operatorexpr = @logicalexpr | @arithmeticexpr | @bitwiseexpr | @unaryexpr | @binaryexpr; + +@logicalexpr = @logicalunaryexpr | @logicalbinaryexpr; + +@arithmeticexpr = @arithmeticunaryexpr | @arithmeticbinaryexpr; + +@bitwiseexpr = @bitwiseunaryexpr | @bitwisebinaryexpr; + +@unaryexpr = @logicalunaryexpr | @bitwiseunaryexpr | @arithmeticunaryexpr | @derefexpr | @addressexpr | @arrowexpr; + +@logicalunaryexpr = @notexpr; + +@bitwiseunaryexpr = @complementexpr; + +@arithmeticunaryexpr = @plusexpr | @minusexpr; + +@binaryexpr = @logicalbinaryexpr | @bitwisebinaryexpr | @arithmeticbinaryexpr | @comparison; + +@logicalbinaryexpr = @lorexpr | @landexpr; + +@bitwisebinaryexpr = @shiftexpr | @orexpr | @xorexpr | @andexpr | @andnotexpr; + +@arithmeticbinaryexpr = @addexpr | @subexpr | @mulexpr | @quoexpr | @remexpr; + +@shiftexpr = @shlexpr | @shrexpr; + +@comparison = @equalitytest | @relationalcomparison; + +@equalitytest = @eqlexpr | @neqexpr; + +@relationalcomparison = @lssexpr | @leqexpr | @gtrexpr | @geqexpr; + +@chantypeexpr = @sendchantypeexpr | @recvchantypeexpr | @sendrcvchantypeexpr; + +case @stmt.kind of + 0 = @badstmt +| 1 = @declstmt +| 2 = @emptystmt +| 3 = @labeledstmt +| 4 = @exprstmt +| 5 = @sendstmt +| 6 = @incstmt +| 7 = @decstmt +| 8 = @gostmt +| 9 = @deferstmt +| 10 = @returnstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @gotostmt +| 14 = @fallthroughstmt +| 15 = @blockstmt +| 16 = @ifstmt +| 17 = @caseclause +| 18 = @exprswitchstmt +| 19 = @typeswitchstmt +| 20 = @commclause +| 21 = @selectstmt +| 22 = @forstmt +| 23 = @rangestmt +| 24 = @assignstmt +| 25 = @definestmt +| 26 = @addassignstmt +| 27 = @subassignstmt +| 28 = @mulassignstmt +| 29 = @quoassignstmt +| 30 = @remassignstmt +| 31 = @andassignstmt +| 32 = @orassignstmt +| 33 = @xorassignstmt +| 34 = @shlassignstmt +| 35 = @shrassignstmt +| 36 = @andnotassignstmt; + +@incdecstmt = @incstmt | @decstmt; + +@assignment = @simpleassignstmt | @compoundassignstmt; + +@simpleassignstmt = @assignstmt | @definestmt; + +@compoundassignstmt = @addassignstmt | @subassignstmt | @mulassignstmt | @quoassignstmt | @remassignstmt + | @andassignstmt | @orassignstmt | @xorassignstmt | @shlassignstmt | @shrassignstmt | @andnotassignstmt; + +@branchstmt = @breakstmt | @continuestmt | @gotostmt | @fallthroughstmt; + +@switchstmt = @exprswitchstmt | @typeswitchstmt; + +@loopstmt = @forstmt | @rangestmt; + +case @decl.kind of + 0 = @baddecl +| 1 = @importdecl +| 2 = @constdecl +| 3 = @typedecl +| 4 = @vardecl +| 5 = @funcdecl; + +@gendecl = @importdecl | @constdecl | @typedecl | @vardecl; + +case @spec.kind of + 0 = @importspec +| 1 = @valuespec +| 2 = @typedefspec +| 3 = @aliasspec; + +@typespec = @typedefspec | @aliasspec; + +case @object.kind of + 0 = @pkgobject +| 1 = @decltypeobject +| 2 = @builtintypeobject +| 3 = @declconstobject +| 4 = @builtinconstobject +| 5 = @declvarobject +| 6 = @declfunctionobject +| 7 = @builtinfunctionobject +| 8 = @labelobject; + +@typeparamparentobject = @decltypeobject | @declfunctionobject; + +@declobject = @decltypeobject | @declconstobject | @declvarobject | @declfunctionobject; + +@builtinobject = @builtintypeobject | @builtinconstobject | @builtinfunctionobject; + +@typeobject = @decltypeobject | @builtintypeobject; + +@valueobject = @constobject | @varobject | @functionobject; + +@constobject = @declconstobject | @builtinconstobject; + +@varobject = @declvarobject; + +@functionobject = @declfunctionobject | @builtinfunctionobject; + +case @scope.kind of + 0 = @universescope +| 1 = @packagescope +| 2 = @localscope; + +case @type.kind of + 0 = @invalidtype +| 1 = @boolexprtype +| 2 = @inttype +| 3 = @int8type +| 4 = @int16type +| 5 = @int32type +| 6 = @int64type +| 7 = @uinttype +| 8 = @uint8type +| 9 = @uint16type +| 10 = @uint32type +| 11 = @uint64type +| 12 = @uintptrtype +| 13 = @float32type +| 14 = @float64type +| 15 = @complex64type +| 16 = @complex128type +| 17 = @stringexprtype +| 18 = @unsafepointertype +| 19 = @boolliteraltype +| 20 = @intliteraltype +| 21 = @runeliteraltype +| 22 = @floatliteraltype +| 23 = @complexliteraltype +| 24 = @stringliteraltype +| 25 = @nilliteraltype +| 26 = @typeparamtype +| 27 = @arraytype +| 28 = @slicetype +| 29 = @structtype +| 30 = @pointertype +| 31 = @interfacetype +| 32 = @tupletype +| 33 = @signaturetype +| 34 = @maptype +| 35 = @sendchantype +| 36 = @recvchantype +| 37 = @sendrcvchantype +| 38 = @definedtype +| 39 = @typesetliteraltype; + +@basictype = @booltype | @numerictype | @stringtype | @literaltype | @invalidtype | @unsafepointertype; + +@booltype = @boolexprtype | @boolliteraltype; + +@numerictype = @integertype | @floattype | @complextype; + +@integertype = @signedintegertype | @unsignedintegertype; + +@signedintegertype = @inttype | @int8type | @int16type | @int32type | @int64type | @intliteraltype | @runeliteraltype; + +@unsignedintegertype = @uinttype | @uint8type | @uint16type | @uint32type | @uint64type | @uintptrtype; + +@floattype = @float32type | @float64type | @floatliteraltype; + +@complextype = @complex64type | @complex128type | @complexliteraltype; + +@stringtype = @stringexprtype | @stringliteraltype; + +@literaltype = @boolliteraltype | @intliteraltype | @runeliteraltype | @floatliteraltype | @complexliteraltype + | @stringliteraltype | @nilliteraltype; + +@compositetype = @typeparamtype | @containertype | @structtype | @pointertype | @interfacetype | @tupletype + | @signaturetype | @definedtype | @typesetliteraltype; + +@containertype = @arraytype | @slicetype | @maptype | @chantype; + +@chantype = @sendchantype | @recvchantype | @sendrcvchantype; + +case @modexpr.kind of + 0 = @modcommentblock +| 1 = @modline +| 2 = @modlineblock +| 3 = @modlparen +| 4 = @modrparen; + +case @error.kind of + 0 = @unknownerror +| 1 = @listerror +| 2 = @parseerror +| 3 = @typeerror; + diff --git a/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/upgrade.properties b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/upgrade.properties new file mode 100644 index 00000000000..52b67d65af7 --- /dev/null +++ b/go/ql/lib/upgrades/b3da71c3ac204b557c86e9d9c26012360bdbdccb/upgrade.properties @@ -0,0 +1,2 @@ +description: Add databaseMetadata and overlayChangedFiles relations +compatibility: full diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index eb21b53b4f7..786164b5fe4 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,27 @@ +## 1.4.8 + +No user-facing changes. + +## 1.4.7 + +No user-facing changes. + +## 1.4.6 + +No user-facing changes. + +## 1.4.5 + +No user-facing changes. + +## 1.4.4 + +No user-facing changes. + +## 1.4.3 + +No user-facing changes. + ## 1.4.2 No user-facing changes. diff --git a/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp b/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp index d542a728cfe..0d5610e1391 100644 --- a/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp +++ b/go/ql/src/InconsistentCode/MissingErrorCheck.qhelp @@ -22,7 +22,7 @@ the returned pointer.

    -

    The corrected version of user checks err before using ptr.

    +

    The corrected version of user checks err before using ptr.

    diff --git a/go/ql/src/InconsistentCode/MissingErrorCheck.ql b/go/ql/src/InconsistentCode/MissingErrorCheck.ql index 8e277c6ae74..e16b8641a97 100644 --- a/go/ql/src/InconsistentCode/MissingErrorCheck.ql +++ b/go/ql/src/InconsistentCode/MissingErrorCheck.ql @@ -22,7 +22,7 @@ predicate isNil(DataFlow::Node node) { node = Builtin::nil().getARead() } /** * Matches if `call` may return a nil pointer alongside an error value. * - * This is both an over- and under-estimate: over in that we assume opaque functions may use this + * This is both an over- and under-estimate: over in that we assume opaque functions may use this * convention, and under in that functions with bodies are only recognized if they use a literal * `nil` for the pointer return value at some return site. */ @@ -73,6 +73,16 @@ predicate checksValue(IR::Instruction instruction, DataFlow::SsaNode value) { ) } +// Now that we have use-use flow, phi nodes aren't directly involved in the flow graph. TODO: change this? +DataFlow::SsaNode phiDefinedFrom(DataFlow::SsaNode node) { + result.getDefinition().(SsaPseudoDefinition).getAnInput() = node.getDefinition().getVariable() +} + +DataFlow::SsaNode definedFrom(DataFlow::SsaNode node) { + DataFlow::localFlow(node, result) or + result = phiDefinedFrom*(node) +} + /** * Matches if `call` is a function returning (`ptr`, `err`) where `ptr` may be nil, and neither * `ptr` not `err` has been checked for validity as of `node`. @@ -99,7 +109,7 @@ predicate returnUncheckedAtNode( // localFlow is used to permit checks via either an SSA phi node or ordinary assignment. returnUncheckedAtNode(call, node.getAPredecessor(), ptr, err) and not exists(DataFlow::SsaNode checked | - DataFlow::localFlow(ptr, checked) or DataFlow::localFlow(err, checked) + checked = definedFrom(ptr) or checked = definedFrom(err) | checksValue(node, checked) ) diff --git a/go/ql/src/InconsistentCode/MistypedExponentiation.ql b/go/ql/src/InconsistentCode/MistypedExponentiation.ql index b445a713ce6..91fb63d319c 100644 --- a/go/ql/src/InconsistentCode/MistypedExponentiation.ql +++ b/go/ql/src/InconsistentCode/MistypedExponentiation.ql @@ -13,12 +13,16 @@ import go +private Expr getConstantInitialiser(Expr e) { + exists(DeclaredConstant c | e = c.getAReference() | result = c.getInit()) +} + /** Holds if `e` is not 0 and is either an octal or hexadecimal literal, or the number one. */ predicate maybeXorBitPattern(Expr e) { // 0 makes no sense as an xor bit pattern not e.getNumericValue() = 0 and // include octal and hex literals - e.(IntLit).getText().matches("0%") + [e, getConstantInitialiser(e)].(IntLit).getText().matches("0%") or e.getNumericValue() = 1 } diff --git a/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql b/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql index d3210c48011..25b1c8ae8fc 100644 --- a/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql +++ b/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql @@ -70,8 +70,8 @@ predicate unhandledCall(DataFlow::CallNode call) { */ predicate isWritableFileHandle(DataFlow::Node source, DataFlow::CallNode call) { exists(OpenFileFun f, DataFlow::Node flags, QualifiedName flag | - // check that the source is a result of the call - source = call.getAResult() and + // check that the source is the first result of the call + source = call.getResult(0) and // find a call to the os.OpenFile function f.getACall() = call and // get the flags expression used for opening the file @@ -128,6 +128,14 @@ module UnhandledFileCloseConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { isWritableFileHandle(source, _) } predicate isSink(DataFlow::Node sink) { isCloseSink(sink, _) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { + exists(DataFlow::CallNode openCall | result = [openCall.getLocation(), source.getLocation()] | + isWritableFileHandle(source, openCall) + ) + } } /** diff --git a/go/ql/src/RedundantCode/DeadStoreOfField.ql b/go/ql/src/RedundantCode/DeadStoreOfField.ql index be3a77d3ac7..4a971343823 100644 --- a/go/ql/src/RedundantCode/DeadStoreOfField.ql +++ b/go/ql/src/RedundantCode/DeadStoreOfField.ql @@ -89,7 +89,7 @@ Type getTypeEmbeddedViaPointer(Type t) { from Write w, LocalVariable v, Field f where // `w` writes `f` on `v` - w.writesField(v.getARead(), f, _) and + w.writesFieldPreUpdate(v.getARead(), f, _) and // but `f` is never read on `v` not exists(Read r | r.readsField(v.getARead(), f)) and // exclude pointer-typed `v`; there may be reads through an alias diff --git a/go/ql/src/RedundantCode/ImpossibleInterfaceNilCheck.ql b/go/ql/src/RedundantCode/ImpossibleInterfaceNilCheck.ql index c5aeb287358..c8ff9c345f6 100644 --- a/go/ql/src/RedundantCode/ImpossibleInterfaceNilCheck.ql +++ b/go/ql/src/RedundantCode/ImpossibleInterfaceNilCheck.ql @@ -35,7 +35,9 @@ predicate flowsToInterfaceNilCheck(DataFlow::Node nd) { */ predicate nonNilWrapper(DataFlow::Node nd) { flowsToInterfaceNilCheck(nd) and - forex(DataFlow::Node pred | pred = nd.getAPredecessor() | + forex(DataFlow::Node pred | + pred = nd.getAPredecessor() and not pred instanceof DataFlow::PostUpdateNode + | exists(Type predtp | predtp = pred.getType().getUnderlyingType() | not predtp instanceof InterfaceType and not predtp instanceof NilLiteralType and diff --git a/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql b/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql index ae83fbce8bc..bc05c8cf4aa 100644 --- a/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql +++ b/go/ql/src/Security/CWE-295/DisabledCertificateCheck.ql @@ -34,7 +34,7 @@ predicate becomesPartOf(DataFlow::Node part, DataFlow::Node whole) { or whole.(DataFlow::AddressOperationNode).getOperand() = part or - exists(Write w | w.writesField(whole.(DataFlow::PostUpdateNode).getPreUpdateNode(), _, part)) + exists(Write w | w.writesField(whole, _, part)) } /** diff --git a/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql b/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql index c0b5898601c..87c5a2184b0 100644 --- a/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql +++ b/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql @@ -68,6 +68,8 @@ module Config implements DataFlow::ConfigSig { } predicate isSink(DataFlow::Node sink) { writeIsSink(sink, _) } + + predicate observeDiffInformedIncrementalMode() { any() } } /** @@ -96,8 +98,8 @@ predicate hostCheckReachesSink(Flow::PathNode sink) { Flow::flowPath(source, otherSink) and Config::writeIsSink(sink.getNode(), sinkWrite) and Config::writeIsSink(otherSink.getNode(), otherSinkWrite) and - sinkWrite.writesField(sinkAccessPath.getAUse(), _, sink.getNode()) and - otherSinkWrite.writesField(otherSinkAccessPath.getAUse(), _, otherSink.getNode()) and + sinkWrite.writesFieldPreUpdate(sinkAccessPath.getAUse(), _, sink.getNode()) and + otherSinkWrite.writesFieldPreUpdate(otherSinkAccessPath.getAUse(), _, otherSink.getNode()) and otherSinkAccessPath = sinkAccessPath.similar() ) ) diff --git a/go/ql/src/Security/CWE-326/InsufficientKeySize.ql b/go/ql/src/Security/CWE-326/InsufficientKeySize.ql index 5d0ee7ac6ab..6fa421baaeb 100644 --- a/go/ql/src/Security/CWE-326/InsufficientKeySize.ql +++ b/go/ql/src/Security/CWE-326/InsufficientKeySize.ql @@ -27,8 +27,6 @@ module Config implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } /** diff --git a/go/ql/src/Security/CWE-327/InsecureTLS.ql b/go/ql/src/Security/CWE-327/InsecureTLS.ql index a4a9ab1f549..b5d8a81f3d8 100644 --- a/go/ql/src/Security/CWE-327/InsecureTLS.ql +++ b/go/ql/src/Security/CWE-327/InsecureTLS.ql @@ -65,7 +65,7 @@ module TlsVersionFlowConfig implements DataFlow::ConfigSig { */ additional predicate isSink(DataFlow::Node sink, Field fld, DataFlow::Node base, Write fieldWrite) { fld.hasQualifiedName("crypto/tls", "Config", ["MinVersion", "MaxVersion"]) and - fieldWrite.writesField(base, fld, sink) + fieldWrite.writesFieldPreUpdate(base, fld, sink) } predicate isSource(DataFlow::Node source) { intIsSource(source, _) } @@ -190,7 +190,7 @@ module TlsInsecureCipherSuitesFlowConfig implements DataFlow::ConfigSig { */ additional predicate isSink(DataFlow::Node sink, Field fld, DataFlow::Node base, Write fieldWrite) { fld.hasQualifiedName("crypto/tls", "Config", "CipherSuites") and - fieldWrite.writesField(base, fld, sink) + fieldWrite.writesFieldPreUpdate(base, fld, sink) } predicate isSink(DataFlow::Node sink) { isSink(sink, _, _, _) } @@ -211,7 +211,7 @@ module TlsInsecureCipherSuitesFlow = TaintTracking::Global; diff --git a/go/ql/src/Security/CWE-681/IncorrectIntegerConversionQuery.ql b/go/ql/src/Security/CWE-681/IncorrectIntegerConversionQuery.ql index a310f024a2d..ce5081a92e9 100644 --- a/go/ql/src/Security/CWE-681/IncorrectIntegerConversionQuery.ql +++ b/go/ql/src/Security/CWE-681/IncorrectIntegerConversionQuery.ql @@ -18,7 +18,8 @@ import semmle.go.security.IncorrectIntegerConversionLib import Flow::PathGraph from - Flow::PathNode source, Flow::PathNode sink, DataFlow::CallNode call, DataFlow::Node sinkConverted + Flow::PathNode source, Flow::PathNode sink, DataFlow::CallNode call, + DataFlow::TypeCastNode sinkConverted where Flow::flowPath(source, sink) and call.getResult(0) = source.getNode() and diff --git a/go/ql/src/change-notes/released/1.4.3.md b/go/ql/src/change-notes/released/1.4.3.md new file mode 100644 index 00000000000..abf2a0d4dcc --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.3.md @@ -0,0 +1,3 @@ +## 1.4.3 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.4.md b/go/ql/src/change-notes/released/1.4.4.md new file mode 100644 index 00000000000..cb7dd204b9c --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.4.md @@ -0,0 +1,3 @@ +## 1.4.4 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.5.md b/go/ql/src/change-notes/released/1.4.5.md new file mode 100644 index 00000000000..930163bb5ae --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.5.md @@ -0,0 +1,3 @@ +## 1.4.5 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.6.md b/go/ql/src/change-notes/released/1.4.6.md new file mode 100644 index 00000000000..5146f9e1cbf --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.6.md @@ -0,0 +1,3 @@ +## 1.4.6 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.7.md b/go/ql/src/change-notes/released/1.4.7.md new file mode 100644 index 00000000000..4f064ad746f --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.7.md @@ -0,0 +1,3 @@ +## 1.4.7 + +No user-facing changes. diff --git a/go/ql/src/change-notes/released/1.4.8.md b/go/ql/src/change-notes/released/1.4.8.md new file mode 100644 index 00000000000..06976d05e75 --- /dev/null +++ b/go/ql/src/change-notes/released/1.4.8.md @@ -0,0 +1,3 @@ +## 1.4.8 + +No user-facing changes. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index a76cacdf799..16e6425ae7e 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.2 +lastReleaseVersion: 1.4.8 diff --git a/go/ql/src/experimental/CWE-1004/AuthCookie.qll b/go/ql/src/experimental/CWE-1004/AuthCookie.qll index 411da5a79fa..58c9f8642b3 100644 --- a/go/ql/src/experimental/CWE-1004/AuthCookie.qll +++ b/go/ql/src/experimental/CWE-1004/AuthCookie.qll @@ -28,7 +28,7 @@ private class GorillaSessionOptionsField extends Field { private DataFlow::Node getValueForFieldWrite(StructLit sl, string field) { exists(Write w, DataFlow::Node base, Field f | f.getName() = field and - w.writesField(base, f, result) and + w.writesFieldPreUpdate(base, f, result) and ( sl = base.asExpr() or @@ -116,6 +116,12 @@ private module BoolToGinSetCookieTrackingConfig implements DataFlow::ConfigSig { ) ) } + + predicate observeDiffInformedIncrementalMode() { + any() // Merged with other flows in CookieWithoutHttpOnly.ql + } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } } /** @@ -203,10 +209,7 @@ private module GorillaSessionOptionsTrackingConfig implements DataFlow::ConfigSi predicate isSink(DataFlow::Node sink) { sink instanceof GorillaSessionSaveSink } predicate isAdditionalFlowStep(DataFlow::Node pred, DataFlow::Node succ) { - exists(GorillaSessionOptionsField f, DataFlow::Write w, DataFlow::Node base | - w.writesField(base, f, pred) and - succ = base - ) + exists(GorillaSessionOptionsField f, DataFlow::Write w | w.writesField(succ, f, pred)) } } @@ -230,10 +233,7 @@ private module BoolToGorillaSessionOptionsTrackingConfig implements DataFlow::Co sl = succ.asExpr() ) or - exists(GorillaSessionOptionsField f, DataFlow::Write w, DataFlow::Node base | - w.writesField(base, f, pred) and - succ = base - ) + exists(GorillaSessionOptionsField f, DataFlow::Write w | w.writesField(succ, f, pred)) } } diff --git a/go/ql/src/experimental/CWE-369/DivideByZero.ql b/go/ql/src/experimental/CWE-369/DivideByZero.ql index 8afd165832b..99cd120dbf8 100644 --- a/go/ql/src/experimental/CWE-369/DivideByZero.ql +++ b/go/ql/src/experimental/CWE-369/DivideByZero.ql @@ -47,8 +47,6 @@ module Config implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } /** diff --git a/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll b/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll index 2f2ca94fa87..33e6c6c0144 100644 --- a/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll +++ b/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll @@ -59,6 +59,14 @@ private module Config implements DataFlow::ConfigSig { not c.isPotentialFalsePositive() ) } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSourceLocation(DataFlow::Node source) { none() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(ComparisonExpr comp | result = comp.getLocation() | sink.asExpr() = comp.getAnOperand()) + } } /** diff --git a/go/ql/src/experimental/CWE-840/ConditionalBypass.ql b/go/ql/src/experimental/CWE-840/ConditionalBypass.ql index b70be1ff42d..64f7c3c9ac2 100644 --- a/go/ql/src/experimental/CWE-840/ConditionalBypass.ql +++ b/go/ql/src/experimental/CWE-840/ConditionalBypass.ql @@ -22,6 +22,10 @@ module Config implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { exists(ComparisonExpr c | c.getAnOperand() = sink.asExpr()) } + + predicate observeDiffInformedIncrementalMode() { + none() // can't override the locations accurately because of secondary use of config. + } } /** Tracks taint flow for reasoning about conditional bypass. */ diff --git a/go/ql/src/experimental/CWE-918/SSRF.qll b/go/ql/src/experimental/CWE-918/SSRF.qll index b1374da8a5f..998ce83ba74 100644 --- a/go/ql/src/experimental/CWE-918/SSRF.qll +++ b/go/ql/src/experimental/CWE-918/SSRF.qll @@ -22,14 +22,22 @@ module ServerSideRequestForgery { predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { // propagate to a URL when its host is assigned to - exists(Write w, Field f, SsaWithFields v | f.hasQualifiedName("net/url", "URL", "Host") | - w.writesField(v.getAUse(), f, node1) and node2 = v.getAUse() + exists(Write w, Field f | f.hasQualifiedName("net/url", "URL", "Host") | + w.writesField(node2, f, node1) ) } predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } predicate isBarrierOut(DataFlow::Node node) { node instanceof SanitizerEdge } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.(Sink).getLocation() + or + result = sink.(Sink).getARequest().getLocation() + } } /** Tracks taint flow for reasoning about request forgery vulnerabilities. */ diff --git a/go/ql/src/experimental/IntegerOverflow/RangeAnalysis.qll b/go/ql/src/experimental/IntegerOverflow/RangeAnalysis.qll index eccb0b73589..f3f4c15f008 100644 --- a/go/ql/src/experimental/IntegerOverflow/RangeAnalysis.qll +++ b/go/ql/src/experimental/IntegerOverflow/RangeAnalysis.qll @@ -74,7 +74,7 @@ float getAnUpperBound(Expr expr) { result = getAnUpperBound(greater.asExpr()) + bias ) else - //If not, find the coresponding `SsaDefinition`, then call `getAnSsaUpperBound` on it. + //If not, find the corresponding `SsaDefinition`, then call `getAnSsaUpperBound` on it. result = getAnSsaUpperBound(v.getDefinition()) ) ) @@ -231,7 +231,7 @@ float getALowerBound(Expr expr) { result = lbs - bias ) else - //find coresponding SSA definition and calls `getAnSsaLowerBound` on it. + //find corresponding SSA definition and calls `getAnSsaLowerBound` on it. result = getAnSsaLowerBound(v.getDefinition()) ) ) @@ -347,91 +347,85 @@ float getALowerBound(Expr expr) { * Gets a possible upper bound of SSA definition `def`. */ float getAnSsaUpperBound(SsaDefinition def) { - if recursiveSelfDef(def) - then none() - else ( - if def instanceof SsaExplicitDefinition - then - exists(SsaExplicitDefinition explicitDef | explicitDef = def | - //SSA definition coresponding to a `SimpleAssignStmt` - if explicitDef.getInstruction() instanceof IR::AssignInstruction + not recursiveSelfDef(def) and + ( + def instanceof SsaExplicitDefinition and + exists(SsaExplicitDefinition explicitDef | explicitDef = def | + //SSA definition corresponding to a `SimpleAssignStmt` + if explicitDef.getInstruction() instanceof IR::AssignInstruction + then + exists(IR::AssignInstruction assignInstr, SimpleAssignStmt simpleAssign | + assignInstr = explicitDef.getInstruction() and + assignInstr.getRhs().(IR::EvalInstruction).getExpr() = simpleAssign.getRhs() and + result = getAnUpperBound(simpleAssign.getRhs()) + ) + or + //SSA definition corresponding to a ValueSpec(used in a variable declaration) + exists(IR::AssignInstruction declInstr, ValueSpec vs, int i, Expr init | + declInstr = explicitDef.getInstruction() and + declInstr = IR::initInstruction(vs, i) and + init = vs.getInit(i) and + result = getAnUpperBound(init) + ) + or + //SSA definition corresponding to an `AddAssignStmt` (x += y) or `SubAssignStmt` (x -= y) + exists( + IR::AssignInstruction assignInstr, SsaExplicitDefinition prevDef, + CompoundAssignStmt compoundAssign, float prevBound, float delta + | + assignInstr = explicitDef.getInstruction() and + getAUse(prevDef) = compoundAssign.getLhs() and + assignInstr = IR::assignInstruction(compoundAssign, 0) and + prevBound = getAnSsaUpperBound(prevDef) and + ( + compoundAssign instanceof AddAssignStmt and + delta = getAnUpperBound(compoundAssign.getRhs()) and + result = addRoundingUp(prevBound, delta) + or + compoundAssign instanceof SubAssignStmt and + delta = getALowerBound(compoundAssign.getRhs()) and + result = addRoundingUp(prevBound, -delta) + ) + ) + else + //SSA definition corresponding to an `IncDecStmt` + if explicitDef.getInstruction() instanceof IR::IncDecInstruction then - exists(IR::AssignInstruction assignInstr, SimpleAssignStmt simpleAssign | - assignInstr = explicitDef.getInstruction() and - assignInstr.getRhs().(IR::EvalInstruction).getExpr() = simpleAssign.getRhs() and - result = getAnUpperBound(simpleAssign.getRhs()) - ) - or - //SSA definition coresponding to a ValueSpec(used in a variable declaration) - exists(IR::AssignInstruction declInstr, ValueSpec vs, int i, Expr init | - declInstr = explicitDef.getInstruction() and - declInstr = IR::initInstruction(vs, i) and - init = vs.getInit(i) and - result = getAnUpperBound(init) - ) - or - //SSA definition coresponding to an `AddAssignStmt` (x += y) or `SubAssignStmt` (x -= y) - exists( - IR::AssignInstruction assignInstr, SsaExplicitDefinition prevDef, - CompoundAssignStmt compoundAssign, float prevBound, float delta - | - assignInstr = explicitDef.getInstruction() and - getAUse(prevDef) = compoundAssign.getLhs() and - assignInstr = IR::assignInstruction(compoundAssign, 0) and - prevBound = getAnSsaUpperBound(prevDef) and - if compoundAssign instanceof AddAssignStmt - then - delta = getAnUpperBound(compoundAssign.getRhs()) and - result = addRoundingUp(prevBound, delta) - else - if compoundAssign instanceof SubAssignStmt - then - delta = getALowerBound(compoundAssign.getRhs()) and - result = addRoundingUp(prevBound, -delta) - else none() - ) - else - //SSA definition coresponding to an `IncDecStmt` - if explicitDef.getInstruction() instanceof IR::IncDecInstruction - then - exists(IncDecStmt incOrDec, IR::IncDecInstruction instr, float exprLB | - instr = explicitDef.getInstruction() and - exprLB = getAnUpperBound(incOrDec.getOperand()) and - instr.getRhs().(IR::EvalIncDecRhsInstruction).getStmt() = incOrDec and - ( - //IncStmt(x++) - exists(IncStmt inc | - inc = incOrDec and - result = addRoundingUp(exprLB, 1) - ) - or - //DecStmt(x--) - exists(DecStmt dec | - dec = incOrDec and - result = addRoundingUp(exprLB, -1) - ) + exists(IncDecStmt incOrDec, IR::IncDecInstruction instr, float exprLB | + instr = explicitDef.getInstruction() and + exprLB = getAnUpperBound(incOrDec.getOperand()) and + instr.getRhs().(IR::EvalIncDecRhsInstruction).getStmt() = incOrDec and + ( + //IncStmt(x++) + exists(IncStmt inc | + inc = incOrDec and + result = addRoundingUp(exprLB, 1) + ) + or + //DecStmt(x--) + exists(DecStmt dec | + dec = incOrDec and + result = addRoundingUp(exprLB, -1) ) ) - else - //SSA definition coreponding to the init of the parameter - if explicitDef.getInstruction() instanceof IR::InitParameterInstruction - then - exists(IR::InitParameterInstruction instr, Parameter p | - instr = explicitDef.getInstruction() and - IR::initParamInstruction(p) = instr and - result = typeMaxValue(p.getType()) - ) - else none() - ) - else - //this SSA definition is a phi node. - if def instanceof SsaPhiNode - then - exists(SsaPhiNode phi | - phi = def and - result = getAnSsaUpperBound(phi.getAnInput().getDefinition()) + ) + else ( + //SSA definition coreponding to the init of the parameter + explicitDef.getInstruction() instanceof IR::InitParameterInstruction and + exists(IR::InitParameterInstruction instr, Parameter p | + instr = explicitDef.getInstruction() and + IR::initParamInstruction(p) = instr and + result = typeMaxValue(p.getType()) + ) ) - else none() + ) + or + //this SSA definition is a phi node. + def instanceof SsaPhiNode and + exists(SsaPhiNode phi | + phi = def and + result = getAnSsaUpperBound(phi.getAnInput().getDefinition()) + ) ) } @@ -439,91 +433,85 @@ float getAnSsaUpperBound(SsaDefinition def) { * Gets a possible lower bound of SSA definition `def`. */ float getAnSsaLowerBound(SsaDefinition def) { - if recursiveSelfDef(def) - then none() - else ( - if def instanceof SsaExplicitDefinition - then - exists(SsaExplicitDefinition explicitDef | explicitDef = def | - if explicitDef.getInstruction() instanceof IR::AssignInstruction + not recursiveSelfDef(def) and + ( + def instanceof SsaExplicitDefinition and + exists(SsaExplicitDefinition explicitDef | explicitDef = def | + if explicitDef.getInstruction() instanceof IR::AssignInstruction + then + //SimpleAssignStmt + exists(IR::AssignInstruction assignInstr, SimpleAssignStmt simpleAssign | + assignInstr = explicitDef.getInstruction() and + assignInstr.getRhs().(IR::EvalInstruction).getExpr() = simpleAssign.getRhs() and + result = getALowerBound(simpleAssign.getRhs()) + ) + or + //ValueSpec + exists(IR::AssignInstruction declInstr, ValueSpec vs, int i, Expr init | + declInstr = explicitDef.getInstruction() and + declInstr = IR::initInstruction(vs, i) and + init = vs.getInit(i) and + result = getALowerBound(init) + ) + or + //AddAssignStmt(x += y) + exists( + IR::AssignInstruction assignInstr, SsaExplicitDefinition prevDef, + CompoundAssignStmt compoundAssign, float prevBound, float delta + | + assignInstr = explicitDef.getInstruction() and + getAUse(prevDef) = compoundAssign.getLhs() and + assignInstr = IR::assignInstruction(compoundAssign, 0) and + prevBound = getAnSsaLowerBound(prevDef) and + ( + compoundAssign instanceof AddAssignStmt and + delta = getALowerBound(compoundAssign.getRhs()) and + result = addRoundingDown(prevBound, delta) + or + compoundAssign instanceof SubAssignStmt and + delta = getAnUpperBound(compoundAssign.getRhs()) and + result = addRoundingDown(prevBound, -delta) + ) + ) + else + //IncDecStmt + if explicitDef.getInstruction() instanceof IR::IncDecInstruction then - //SimpleAssignStmt - exists(IR::AssignInstruction assignInstr, SimpleAssignStmt simpleAssign | - assignInstr = explicitDef.getInstruction() and - assignInstr.getRhs().(IR::EvalInstruction).getExpr() = simpleAssign.getRhs() and - result = getALowerBound(simpleAssign.getRhs()) - ) - or - //ValueSpec - exists(IR::AssignInstruction declInstr, ValueSpec vs, int i, Expr init | - declInstr = explicitDef.getInstruction() and - declInstr = IR::initInstruction(vs, i) and - init = vs.getInit(i) and - result = getALowerBound(init) - ) - or - //AddAssignStmt(x += y) - exists( - IR::AssignInstruction assignInstr, SsaExplicitDefinition prevDef, - CompoundAssignStmt compoundAssign, float prevBound, float delta - | - assignInstr = explicitDef.getInstruction() and - getAUse(prevDef) = compoundAssign.getLhs() and - assignInstr = IR::assignInstruction(compoundAssign, 0) and - prevBound = getAnSsaLowerBound(prevDef) and - if compoundAssign instanceof AddAssignStmt - then - delta = getALowerBound(compoundAssign.getRhs()) and - result = addRoundingDown(prevBound, delta) - else - if compoundAssign instanceof SubAssignStmt - then - delta = getAnUpperBound(compoundAssign.getRhs()) and - result = addRoundingDown(prevBound, -delta) - else none() - ) - else - //IncDecStmt - if explicitDef.getInstruction() instanceof IR::IncDecInstruction - then - exists(IncDecStmt incOrDec, IR::IncDecInstruction instr, float exprLB | - instr = explicitDef.getInstruction() and - exprLB = getALowerBound(incOrDec.getOperand()) and - instr.getRhs().(IR::EvalIncDecRhsInstruction).getStmt() = incOrDec and - ( - //IncStmt(x++) - exists(IncStmt inc | - inc = incOrDec and - result = addRoundingDown(exprLB, 1) - ) - or - //DecStmt(x--) - exists(DecStmt dec | - dec = incOrDec and - result = addRoundingDown(exprLB, -1) - ) + exists(IncDecStmt incOrDec, IR::IncDecInstruction instr, float exprLB | + instr = explicitDef.getInstruction() and + exprLB = getALowerBound(incOrDec.getOperand()) and + instr.getRhs().(IR::EvalIncDecRhsInstruction).getStmt() = incOrDec and + ( + //IncStmt(x++) + exists(IncStmt inc | + inc = incOrDec and + result = addRoundingDown(exprLB, 1) + ) + or + //DecStmt(x--) + exists(DecStmt dec | + dec = incOrDec and + result = addRoundingDown(exprLB, -1) ) ) - else - //init of the function parameter - if explicitDef.getInstruction() instanceof IR::InitParameterInstruction - then - exists(IR::InitParameterInstruction instr, Parameter p | - instr = explicitDef.getInstruction() and - IR::initParamInstruction(p) = instr and - result = typeMinValue(p.getType()) - ) - else none() - ) - else - //phi node - if def instanceof SsaPhiNode - then - exists(SsaPhiNode phi | - phi = def and - result = getAnSsaLowerBound(phi.getAnInput().getDefinition()) + ) + else ( + //init of the function parameter + explicitDef.getInstruction() instanceof IR::InitParameterInstruction and + exists(IR::InitParameterInstruction instr, Parameter p | + instr = explicitDef.getInstruction() and + IR::initParamInstruction(p) = instr and + result = typeMinValue(p.getType()) + ) ) - else none() + ) + or + //phi node + def instanceof SsaPhiNode and + exists(SsaPhiNode phi | + phi = def and + result = getAnSsaLowerBound(phi.getAnInput().getDefinition()) + ) ) } @@ -533,13 +521,13 @@ float getAnSsaLowerBound(SsaDefinition def) { * The structure of this function needs to be same as `getAnSsaLowerBound` */ predicate ssaDependsOnSsa(SsaDefinition nextDef, SsaDefinition prevDef) { - //SSA definition coresponding to a `SimpleAssignStmt` + //SSA definition corresponding to a `SimpleAssignStmt` exists(SimpleAssignStmt simpleAssign | nextDef.(SsaExplicitDefinition).getInstruction() = IR::assignInstruction(simpleAssign, _) and ssaDependsOnExpr(prevDef, simpleAssign.getRhs()) ) or - //SSA definition coresponding to a `ValueSpec`(used in variable declaration) + //SSA definition corresponding to a `ValueSpec`(used in variable declaration) exists(IR::AssignInstruction declInstr, ValueSpec vs, int i, Expr init | declInstr = nextDef.(SsaExplicitDefinition).getInstruction() and declInstr = IR::initInstruction(vs, i) and @@ -547,7 +535,7 @@ predicate ssaDependsOnSsa(SsaDefinition nextDef, SsaDefinition prevDef) { ssaDependsOnExpr(prevDef, init) ) or - //SSA definition coresponding to a `AddAssignStmt` or `SubAssignStmt` + //SSA definition corresponding to a `AddAssignStmt` or `SubAssignStmt` exists(CompoundAssignStmt compoundAssign | (compoundAssign instanceof AddAssignStmt or compoundAssign instanceof SubAssignStmt) and nextDef.(SsaExplicitDefinition).getInstruction() = IR::assignInstruction(compoundAssign, 0) and @@ -557,7 +545,7 @@ predicate ssaDependsOnSsa(SsaDefinition nextDef, SsaDefinition prevDef) { ) ) or - //SSA definition coresponding to a `IncDecStmt` + //SSA definition corresponding to a `IncDecStmt` exists(IncDecStmt incDec | nextDef .(SsaExplicitDefinition) @@ -569,7 +557,7 @@ predicate ssaDependsOnSsa(SsaDefinition nextDef, SsaDefinition prevDef) { ssaDependsOnExpr(prevDef, incDec.getOperand()) ) or - //if `nextDef` coresponding to the init of a parameter, there is no coresponding `prevDef` + //if `nextDef` corresponding to the init of a parameter, there is no corresponding `prevDef` //if `nextDef` is a phi node and `prevDef` is one of the input of the phi node, then `nextDef` depends on `prevDef` directly. exists(SsaPhiNode phi | nextDef = phi and phi.getAnInput().getDefinition() = prevDef) } diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index d3c411a74f7..4a0baaa7836 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.3-dev +version: 1.4.9-dev groups: - go - queries diff --git a/go/ql/test/example-tests/snippets/typeinfo.expected b/go/ql/test/example-tests/snippets/typeinfo.expected index 728a1dfc6f7..91ea716693f 100644 --- a/go/ql/test/example-tests/snippets/typeinfo.expected +++ b/go/ql/test/example-tests/snippets/typeinfo.expected @@ -5,3 +5,4 @@ | main.go:18:12:18:14 | argument corresponding to req | | main.go:18:12:18:14 | definition of req | | main.go:20:5:20:7 | req | +| main.go:20:5:20:7 | req [postupdate] | diff --git a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected index 5c7bef1155e..355c0a62b1b 100644 --- a/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected +++ b/go/ql/test/experimental/CWE-1004/CookieWithoutHttpOnly.expected @@ -1,90 +1,54 @@ edges | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | | CookieWithoutHttpOnly.go:12:10:12:18 | "session" | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | CookieWithoutHttpOnly.go:15:21:15:21 | c | provenance | | | CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... | provenance | | | CookieWithoutHttpOnly.go:15:21:15:21 | c | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:20:13:20:21 | "session" | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:22:13:22:17 | false | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | CookieWithoutHttpOnly.go:24:21:24:21 | c | provenance | | | CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... | provenance | | | CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:24:21:24:21 | c | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:29:13:29:21 | "session" | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:31:13:31:16 | true | CookieWithoutHttpOnly.go:28:7:32:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | CookieWithoutHttpOnly.go:33:21:33:21 | c | provenance | | | CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... | provenance | | | CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:33:21:33:21 | c | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:38:10:38:18 | "session" | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:41:15:41:18 | true | CookieWithoutHttpOnly.go:37:7:40:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | CookieWithoutHttpOnly.go:42:21:42:21 | c | provenance | | | CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... | provenance | | | CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:42:21:42:21 | c | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:47:10:47:18 | "session" | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:50:15:50:19 | false | CookieWithoutHttpOnly.go:46:7:49:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | CookieWithoutHttpOnly.go:51:21:51:21 | c | provenance | | | CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... | provenance | | | CookieWithoutHttpOnly.go:51:21:51:21 | c | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | provenance | | @@ -93,20 +57,12 @@ edges | CookieWithoutHttpOnly.go:55:9:55:13 | false | CookieWithoutHttpOnly.go:59:13:59:15 | val | provenance | | | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:57:13:57:21 | "session" | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:59:13:59:15 | val | CookieWithoutHttpOnly.go:56:7:60:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | CookieWithoutHttpOnly.go:61:21:61:21 | c | provenance | | | CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... | provenance | | | CookieWithoutHttpOnly.go:61:21:61:21 | c | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | provenance | | @@ -115,20 +71,12 @@ edges | CookieWithoutHttpOnly.go:65:9:65:12 | true | CookieWithoutHttpOnly.go:69:13:69:15 | val | provenance | | | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:67:13:67:21 | "session" | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:69:13:69:15 | val | CookieWithoutHttpOnly.go:66:7:70:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | CookieWithoutHttpOnly.go:71:21:71:21 | c | provenance | | | CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... | provenance | | | CookieWithoutHttpOnly.go:71:21:71:21 | c | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | provenance | | @@ -137,20 +85,12 @@ edges | CookieWithoutHttpOnly.go:75:9:75:12 | true | CookieWithoutHttpOnly.go:80:15:80:17 | val | provenance | | | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:77:10:77:18 | "session" | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:80:15:80:17 | val | CookieWithoutHttpOnly.go:76:7:79:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | CookieWithoutHttpOnly.go:81:21:81:21 | c | provenance | | | CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... | provenance | | | CookieWithoutHttpOnly.go:81:21:81:21 | c | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | provenance | | @@ -159,51 +99,31 @@ edges | CookieWithoutHttpOnly.go:85:9:85:13 | false | CookieWithoutHttpOnly.go:90:15:90:17 | val | provenance | | | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:87:10:87:18 | "session" | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:90:15:90:17 | val | CookieWithoutHttpOnly.go:86:7:89:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | CookieWithoutHttpOnly.go:91:21:91:21 | c | provenance | | | CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... | provenance | | | CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:91:21:91:21 | c | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | | CookieWithoutHttpOnly.go:99:15:99:19 | false | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | CookieWithoutHttpOnly.go:100:21:100:21 | c | provenance | | | CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... | provenance | | | CookieWithoutHttpOnly.go:100:21:100:21 | c | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | provenance | | | CookieWithoutHttpOnly.go:104:10:104:18 | "session" | CookieWithoutHttpOnly.go:106:10:106:13 | name | provenance | | | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:106:10:106:13 | name | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:109:15:109:19 | false | CookieWithoutHttpOnly.go:105:7:108:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | CookieWithoutHttpOnly.go:110:21:110:21 | c | provenance | | | CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... | provenance | | | CookieWithoutHttpOnly.go:110:21:110:21 | c | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | provenance | | @@ -211,20 +131,12 @@ edges | CookieWithoutHttpOnly.go:114:13:114:24 | "login_name" | CookieWithoutHttpOnly.go:116:10:116:16 | session | provenance | | | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:116:10:116:16 | session | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:119:15:119:19 | false | CookieWithoutHttpOnly.go:115:7:118:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | CookieWithoutHttpOnly.go:120:21:120:21 | c | provenance | | | CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... | provenance | | | CookieWithoutHttpOnly.go:120:21:120:21 | c | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | provenance | | @@ -235,233 +147,83 @@ edges | CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | | CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | | CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | | CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:123:13:123:49 | call to NewCookieStore | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | CookieWithoutHttpOnly.go:129:2:129:8 | session | provenance | | | CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:2:126:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:126:16:126:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | | CookieWithoutHttpOnly.go:133:14:133:18 | false | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | | CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:134:16:134:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:142:2:142:8 | session | provenance | | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:137:20:140:2 | &... | CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | provenance | Config | | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | CookieWithoutHttpOnly.go:137:20:140:2 | &... | provenance | | | CookieWithoutHttpOnly.go:139:13:139:20 | httpOnly | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | provenance | Config | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | | CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:146:16:146:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | -| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | session | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session | provenance | Config | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:153:2:153:8 | session | provenance | | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:149:20:151:2 | &... | CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] | provenance | Config | | CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | CookieWithoutHttpOnly.go:149:20:151:2 | &... | provenance | | | CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | | CookieWithoutHttpOnly.go:157:14:157:17 | true | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | | CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:158:16:158:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:166:2:166:8 | session | provenance | | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:161:20:164:2 | &... | CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | provenance | Config | | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | CookieWithoutHttpOnly.go:161:20:164:2 | &... | provenance | | | CookieWithoutHttpOnly.go:163:13:163:20 | httpOnly | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | | CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | | CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:170:16:170:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | provenance | Config | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session | provenance | Config | -| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | CookieWithoutHttpOnly.go:178:2:178:8 | session | provenance | | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | provenance | Config | +| CookieWithoutHttpOnly.go:173:20:176:2 | &... | CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | provenance | Config | | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | CookieWithoutHttpOnly.go:173:20:176:2 | &... | provenance | | | CookieWithoutHttpOnly.go:175:13:175:20 | httpOnly | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | provenance | Config | | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | CookieWithoutHttpOnly.go:191:19:191:25 | session | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | | CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:183:16:183:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | CookieWithoutHttpOnly.go:202:19:202:25 | session | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | | CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | provenance | Config | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:195:16:195:20 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:126:16:126:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:134:16:134:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:146:16:146:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:158:16:158:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:170:16:170:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:183:16:183:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:191:2:191:6 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:195:16:195:20 | store | provenance | | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | CookieWithoutHttpOnly.go:202:2:202:6 | store | provenance | | nodes | CookieWithoutHttpOnly.go:11:7:14:2 | struct literal | semmle.label | struct literal | | CookieWithoutHttpOnly.go:12:10:12:18 | "session" | semmle.label | "session" | | CookieWithoutHttpOnly.go:15:20:15:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:15:20:15:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:15:20:15:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:15:21:15:21 | c | semmle.label | c | | CookieWithoutHttpOnly.go:19:7:23:2 | struct literal | semmle.label | struct literal | @@ -470,8 +232,6 @@ nodes | CookieWithoutHttpOnly.go:22:13:22:17 | false | semmle.label | false | | CookieWithoutHttpOnly.go:24:20:24:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:24:20:24:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:24:20:24:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:24:20:24:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:24:21:24:21 | c | semmle.label | c | @@ -482,8 +242,6 @@ nodes | CookieWithoutHttpOnly.go:31:13:31:16 | true | semmle.label | true | | CookieWithoutHttpOnly.go:33:20:33:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:33:20:33:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:33:20:33:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:33:20:33:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:33:21:33:21 | c | semmle.label | c | @@ -494,8 +252,6 @@ nodes | CookieWithoutHttpOnly.go:41:15:41:18 | true | semmle.label | true | | CookieWithoutHttpOnly.go:42:20:42:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:42:20:42:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:42:20:42:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:42:20:42:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:42:21:42:21 | c | semmle.label | c | @@ -506,8 +262,6 @@ nodes | CookieWithoutHttpOnly.go:50:15:50:19 | false | semmle.label | false | | CookieWithoutHttpOnly.go:51:20:51:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:51:20:51:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:51:20:51:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:51:20:51:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:51:21:51:21 | c | semmle.label | c | @@ -520,8 +274,6 @@ nodes | CookieWithoutHttpOnly.go:59:13:59:15 | val | semmle.label | val | | CookieWithoutHttpOnly.go:61:20:61:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:61:20:61:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:61:20:61:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:61:20:61:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:61:21:61:21 | c | semmle.label | c | @@ -534,8 +286,6 @@ nodes | CookieWithoutHttpOnly.go:69:13:69:15 | val | semmle.label | val | | CookieWithoutHttpOnly.go:71:20:71:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:71:20:71:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:71:20:71:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:71:20:71:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:71:21:71:21 | c | semmle.label | c | @@ -548,8 +298,6 @@ nodes | CookieWithoutHttpOnly.go:80:15:80:17 | val | semmle.label | val | | CookieWithoutHttpOnly.go:81:20:81:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:81:20:81:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:81:20:81:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:81:20:81:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:81:21:81:21 | c | semmle.label | c | @@ -562,8 +310,6 @@ nodes | CookieWithoutHttpOnly.go:90:15:90:17 | val | semmle.label | val | | CookieWithoutHttpOnly.go:91:20:91:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:91:20:91:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:91:20:91:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:91:20:91:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:91:21:91:21 | c | semmle.label | c | @@ -571,7 +317,6 @@ nodes | CookieWithoutHttpOnly.go:95:7:98:2 | struct literal | semmle.label | struct literal | | CookieWithoutHttpOnly.go:99:15:99:19 | false | semmle.label | false | | CookieWithoutHttpOnly.go:100:20:100:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:100:20:100:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:100:20:100:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:100:21:100:21 | c | semmle.label | c | | CookieWithoutHttpOnly.go:104:10:104:18 | "session" | semmle.label | "session" | @@ -581,8 +326,6 @@ nodes | CookieWithoutHttpOnly.go:109:15:109:19 | false | semmle.label | false | | CookieWithoutHttpOnly.go:110:20:110:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:110:20:110:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:110:20:110:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:110:20:110:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:110:21:110:21 | c | semmle.label | c | @@ -594,8 +337,6 @@ nodes | CookieWithoutHttpOnly.go:119:15:119:19 | false | semmle.label | false | | CookieWithoutHttpOnly.go:120:20:120:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:120:20:120:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | semmle.label | &... | -| CookieWithoutHttpOnly.go:120:20:120:21 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:120:20:120:21 | &... [pointer] | semmle.label | &... [pointer] | | CookieWithoutHttpOnly.go:120:21:120:21 | c | semmle.label | c | @@ -606,20 +347,14 @@ nodes | CookieWithoutHttpOnly.go:129:2:129:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:133:2:133:9 | definition of httpOnly | semmle.label | definition of httpOnly | | CookieWithoutHttpOnly.go:133:14:133:18 | false | semmle.label | false | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | -| CookieWithoutHttpOnly.go:134:2:134:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | | CookieWithoutHttpOnly.go:134:2:134:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:134:16:134:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:135:2:135:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:137:2:137:8 | session [pointer] | semmle.label | session [pointer] | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:137:2:137:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | +| CookieWithoutHttpOnly.go:137:2:137:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | | CookieWithoutHttpOnly.go:137:20:140:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:137:20:140:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:137:21:140:2 | struct literal | semmle.label | struct literal | @@ -628,34 +363,25 @@ nodes | CookieWithoutHttpOnly.go:142:2:142:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:142:2:142:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:142:2:142:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:146:2:146:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | | CookieWithoutHttpOnly.go:146:2:146:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:146:16:146:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:147:2:147:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:147:2:147:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:149:2:149:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:149:2:149:8 | session [pointer] | semmle.label | session [pointer] | +| CookieWithoutHttpOnly.go:149:2:149:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:149:2:149:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | | CookieWithoutHttpOnly.go:149:20:151:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:149:21:151:2 | struct literal | semmle.label | struct literal | | CookieWithoutHttpOnly.go:153:2:153:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:153:2:153:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:157:2:157:9 | definition of httpOnly | semmle.label | definition of httpOnly | | CookieWithoutHttpOnly.go:157:14:157:17 | true | semmle.label | true | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | -| CookieWithoutHttpOnly.go:158:2:158:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | | CookieWithoutHttpOnly.go:158:2:158:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:158:16:158:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:159:2:159:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:161:2:161:8 | session [pointer] | semmle.label | session [pointer] | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:161:2:161:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | +| CookieWithoutHttpOnly.go:161:2:161:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | | CookieWithoutHttpOnly.go:161:20:164:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:161:20:164:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:161:21:164:2 | struct literal | semmle.label | struct literal | @@ -666,20 +392,14 @@ nodes | CookieWithoutHttpOnly.go:166:2:166:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:169:56:169:63 | argument corresponding to httpOnly | semmle.label | argument corresponding to httpOnly | | CookieWithoutHttpOnly.go:169:56:169:63 | definition of httpOnly | semmle.label | definition of httpOnly | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | -| CookieWithoutHttpOnly.go:170:2:170:8 | definition of session [pointer] | semmle.label | definition of session [pointer] | | CookieWithoutHttpOnly.go:170:2:170:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:170:16:170:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:171:2:171:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference | semmle.label | implicit dereference | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | session | semmle.label | session | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | semmle.label | session [pointer] | -| CookieWithoutHttpOnly.go:173:2:173:8 | session [pointer] | semmle.label | session [pointer] | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:173:2:173:8 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] | semmle.label | session [postupdate] | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | +| CookieWithoutHttpOnly.go:173:2:173:8 | session [postupdate] [pointer] | semmle.label | session [postupdate] [pointer] | | CookieWithoutHttpOnly.go:173:20:176:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:173:20:176:2 | &... | semmle.label | &... | | CookieWithoutHttpOnly.go:173:21:176:2 | struct literal | semmle.label | struct literal | @@ -690,11 +410,9 @@ nodes | CookieWithoutHttpOnly.go:178:2:178:8 | session | semmle.label | session | | CookieWithoutHttpOnly.go:183:2:183:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:183:16:183:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:191:2:191:6 | store | semmle.label | store | | CookieWithoutHttpOnly.go:191:19:191:25 | session | semmle.label | session | | CookieWithoutHttpOnly.go:195:2:195:43 | ... := ...[0] | semmle.label | ... := ...[0] | | CookieWithoutHttpOnly.go:195:16:195:20 | store | semmle.label | store | -| CookieWithoutHttpOnly.go:202:2:202:6 | store | semmle.label | store | | CookieWithoutHttpOnly.go:202:19:202:25 | session | semmle.label | session | | CookieWithoutHttpOnly.go:214:66:214:70 | false | semmle.label | false | subpaths diff --git a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected index fa926d9be30..5b26a2a9b36 100644 --- a/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected +++ b/go/ql/test/experimental/CWE-321-V2/HardCodedKeys.expected @@ -1,16 +1,12 @@ edges | go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | -| go-jose.v3.go:13:14:13:34 | type conversion | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | | go-jose.v3.go:13:21:13:33 | "AllYourBase" | go-jose.v3.go:13:14:13:34 | type conversion | provenance | | -| go-jose.v3.go:24:32:24:37 | JwtKey | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | -| go-jose.v3.go:24:32:24:37 | JwtKey | go-jose.v3.go:24:32:24:37 | JwtKey | provenance | | | golang-jwt-v5.go:19:15:19:35 | type conversion | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | provenance | | | golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | golang-jwt-v5.go:19:15:19:35 | type conversion | provenance | | nodes | go-jose.v3.go:13:14:13:34 | type conversion | semmle.label | type conversion | | go-jose.v3.go:13:21:13:33 | "AllYourBase" | semmle.label | "AllYourBase" | | go-jose.v3.go:24:32:24:37 | JwtKey | semmle.label | JwtKey | -| go-jose.v3.go:24:32:24:37 | JwtKey | semmle.label | JwtKey | | golang-jwt-v5.go:19:15:19:35 | type conversion | semmle.label | type conversion | | golang-jwt-v5.go:19:22:19:34 | "AllYourBase" | semmle.label | "AllYourBase" | | golang-jwt-v5.go:27:9:27:15 | JwtKey1 | semmle.label | JwtKey1 | diff --git a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected index 34703cdeef4..46bccc77a97 100644 --- a/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected +++ b/go/ql/test/experimental/CWE-522-DecompressionBombs/DecompressionBombs.expected @@ -68,9 +68,9 @@ edges | test.go:91:15:91:26 | selection of Body | test.go:555:19:555:22 | definition of file | provenance | Src:MaD:1 | | test.go:93:5:93:16 | selection of Body | test.go:580:9:580:12 | definition of file | provenance | Src:MaD:1 | | test.go:128:20:128:27 | definition of filename | test.go:130:33:130:40 | filename | provenance | | -| test.go:128:20:128:27 | definition of filename | test.go:143:51:143:58 | filename | provenance | | | test.go:130:2:130:41 | ... := ...[0] | test.go:132:12:132:12 | f | provenance | | | test.go:130:33:130:40 | filename | test.go:130:2:130:41 | ... := ...[0] | provenance | Config | +| test.go:130:33:130:40 | filename | test.go:143:51:143:58 | filename | provenance | | | test.go:132:3:132:19 | ... := ...[0] | test.go:134:37:134:38 | rc | provenance | | | test.go:132:12:132:12 | f | test.go:132:3:132:19 | ... := ...[0] | provenance | MaD:4 | | test.go:143:2:143:59 | ... := ...[0] | test.go:145:12:145:12 | f | provenance | | diff --git a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected index 634d637c588..4b26395c8e7 100644 --- a/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected +++ b/go/ql/test/experimental/CWE-74/DsnInjectionLocal.expected @@ -7,17 +7,14 @@ edges | Dsn.go:28:11:28:110 | call to Sprintf | Dsn.go:29:29:29:33 | dbDSN | provenance | | | Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | []type{args} [array] | provenance | | | Dsn.go:28:102:28:109 | index expression | Dsn.go:28:11:28:110 | call to Sprintf | provenance | FunctionModel | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:63:9:63:11 | cfg [pointer] | provenance | | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | -| Dsn.go:63:9:63:11 | cfg [pointer] | Dsn.go:63:9:63:11 | implicit dereference | provenance | | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:62:2:62:4 | definition of cfg [pointer] | provenance | | -| Dsn.go:63:9:63:11 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | +| Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | Dsn.go:67:102:67:104 | cfg [pointer] | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | provenance | | +| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | Dsn.go:67:102:67:108 | selection of dsn | provenance | | | Dsn.go:63:19:63:25 | selection of Args | Dsn.go:63:19:63:29 | slice expression | provenance | Src:MaD:1 | -| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference | provenance | FunctionModel | +| Dsn.go:63:19:63:29 | slice expression | Dsn.go:63:9:63:11 | implicit dereference [postupdate] | provenance | FunctionModel | | Dsn.go:67:11:67:109 | []type{args} [array] | Dsn.go:67:11:67:109 | call to Sprintf | provenance | MaD:2 | | Dsn.go:67:11:67:109 | call to Sprintf | Dsn.go:68:29:68:33 | dbDSN | provenance | | | Dsn.go:67:102:67:104 | cfg [pointer] | Dsn.go:67:102:67:104 | implicit dereference | provenance | | -| Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:63:9:63:11 | implicit dereference | provenance | | | Dsn.go:67:102:67:104 | implicit dereference | Dsn.go:67:102:67:108 | selection of dsn | provenance | | | Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | []type{args} [array] | provenance | | | Dsn.go:67:102:67:108 | selection of dsn | Dsn.go:67:11:67:109 | call to Sprintf | provenance | FunctionModel | @@ -30,9 +27,8 @@ nodes | Dsn.go:28:11:28:110 | call to Sprintf | semmle.label | call to Sprintf | | Dsn.go:28:102:28:109 | index expression | semmle.label | index expression | | Dsn.go:29:29:29:33 | dbDSN | semmle.label | dbDSN | -| Dsn.go:62:2:62:4 | definition of cfg [pointer] | semmle.label | definition of cfg [pointer] | -| Dsn.go:63:9:63:11 | cfg [pointer] | semmle.label | cfg [pointer] | -| Dsn.go:63:9:63:11 | implicit dereference | semmle.label | implicit dereference | +| Dsn.go:63:9:63:11 | cfg [postupdate] [pointer] | semmle.label | cfg [postupdate] [pointer] | +| Dsn.go:63:9:63:11 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | | Dsn.go:63:19:63:25 | selection of Args | semmle.label | selection of Args | | Dsn.go:63:19:63:29 | slice expression | semmle.label | slice expression | | Dsn.go:67:11:67:109 | []type{args} [array] | semmle.label | []type{args} [array] | diff --git a/go/ql/test/experimental/CWE-918/SSRF.expected b/go/ql/test/experimental/CWE-918/SSRF.expected index 87780085a54..5c8d1832ac1 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.expected +++ b/go/ql/test/experimental/CWE-918/SSRF.expected @@ -1,12 +1,13 @@ #select -| builtin.go:22:12:22:63 | call to Get | builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | The URL of this request depends on a user-provided value. | -| builtin.go:88:12:88:53 | call to Dial | builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | The URL of this request depends on a user-provided value. | -| builtin.go:102:13:102:40 | call to DialConfig | builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | The URL of this request depends on a user-provided value. | -| builtin.go:114:3:114:39 | call to Dial | builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | The URL of this request depends on a user-provided value. | -| builtin.go:132:3:132:62 | call to DialContext | builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | The URL of this request depends on a user-provided value. | -| new-tests.go:31:2:31:58 | call to Get | new-tests.go:26:26:26:30 | &... | new-tests.go:31:11:31:57 | call to Sprintf | The URL of this request depends on a user-provided value. | -| new-tests.go:32:2:32:58 | call to Get | new-tests.go:26:26:26:30 | &... | new-tests.go:32:11:32:57 | call to Sprintf | The URL of this request depends on a user-provided value. | -| new-tests.go:35:3:35:59 | call to Get | new-tests.go:26:26:26:30 | &... | new-tests.go:35:12:35:58 | call to Sprintf | The URL of this request depends on a user-provided value. | +| builtin.go:23:12:23:63 | call to Get | builtin.go:20:12:20:34 | call to FormValue | builtin.go:23:21:23:62 | ...+... | The URL of this request depends on a user-provided value. | +| builtin.go:89:12:89:53 | call to Dial | builtin.go:84:21:84:31 | call to Referer | builtin.go:89:27:89:40 | untrustedInput | The URL of this request depends on a user-provided value. | +| builtin.go:103:13:103:40 | call to DialConfig | builtin.go:98:21:98:31 | call to Referer | builtin.go:102:36:102:49 | untrustedInput | The URL of this request depends on a user-provided value. | +| builtin.go:115:3:115:39 | call to Dial | builtin.go:112:21:112:31 | call to Referer | builtin.go:115:15:115:28 | untrustedInput | The URL of this request depends on a user-provided value. | +| builtin.go:133:3:133:62 | call to DialContext | builtin.go:130:21:130:31 | call to Referer | builtin.go:133:38:133:51 | untrustedInput | The URL of this request depends on a user-provided value. | +| builtin.go:156:12:156:33 | call to Get | builtin.go:151:16:151:36 | call to FormValue | builtin.go:156:21:156:32 | call to String | The URL of this request depends on a user-provided value. | +| new-tests.go:31:2:31:58 | call to Get | new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:31:11:31:57 | call to Sprintf | The URL of this request depends on a user-provided value. | +| new-tests.go:32:2:32:58 | call to Get | new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:32:11:32:57 | call to Sprintf | The URL of this request depends on a user-provided value. | +| new-tests.go:35:3:35:59 | call to Get | new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:35:12:35:58 | call to Sprintf | The URL of this request depends on a user-provided value. | | new-tests.go:47:2:47:47 | call to Get | new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | The URL of this request depends on a user-provided value. | | new-tests.go:50:2:50:47 | call to Get | new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | The URL of this request depends on a user-provided value. | | new-tests.go:68:2:68:58 | call to Get | new-tests.go:62:31:62:38 | selection of Body | new-tests.go:68:11:68:57 | call to Sprintf | The URL of this request depends on a user-provided value. | @@ -17,14 +18,20 @@ | new-tests.go:88:2:88:47 | call to Get | new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | The URL of this request depends on a user-provided value. | | new-tests.go:96:2:96:47 | call to Get | new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | The URL of this request depends on a user-provided value. | edges -| builtin.go:19:12:19:34 | call to FormValue | builtin.go:22:21:22:62 | ...+... | provenance | Src:MaD:7 | -| builtin.go:83:21:83:31 | call to Referer | builtin.go:88:27:88:40 | untrustedInput | provenance | Src:MaD:8 | -| builtin.go:97:21:97:31 | call to Referer | builtin.go:101:36:101:49 | untrustedInput | provenance | Src:MaD:8 | -| builtin.go:111:21:111:31 | call to Referer | builtin.go:114:15:114:28 | untrustedInput | provenance | Src:MaD:8 | -| builtin.go:129:21:129:31 | call to Referer | builtin.go:132:38:132:51 | untrustedInput | provenance | Src:MaD:8 | -| new-tests.go:26:26:26:30 | &... | new-tests.go:31:48:31:56 | selection of word | provenance | Src:MaD:3 | -| new-tests.go:26:26:26:30 | &... | new-tests.go:32:48:32:56 | selection of safe | provenance | Src:MaD:3 | -| new-tests.go:26:26:26:30 | &... | new-tests.go:35:49:35:57 | selection of word | provenance | Src:MaD:3 | +| builtin.go:20:12:20:34 | call to FormValue | builtin.go:23:21:23:62 | ...+... | provenance | Src:MaD:7 | +| builtin.go:84:21:84:31 | call to Referer | builtin.go:89:27:89:40 | untrustedInput | provenance | Src:MaD:8 | +| builtin.go:98:21:98:31 | call to Referer | builtin.go:102:36:102:49 | untrustedInput | provenance | Src:MaD:8 | +| builtin.go:112:21:112:31 | call to Referer | builtin.go:115:15:115:28 | untrustedInput | provenance | Src:MaD:8 | +| builtin.go:130:21:130:31 | call to Referer | builtin.go:133:38:133:51 | untrustedInput | provenance | Src:MaD:8 | +| builtin.go:151:16:151:36 | call to FormValue | builtin.go:154:13:154:22 | unsafehost | provenance | Src:MaD:7 | +| builtin.go:154:2:154:4 | implicit dereference [postupdate] | builtin.go:154:2:154:4 | url [postupdate] | provenance | | +| builtin.go:154:2:154:4 | url [postupdate] | builtin.go:156:21:156:23 | url | provenance | | +| builtin.go:154:13:154:22 | unsafehost | builtin.go:154:2:154:4 | implicit dereference [postupdate] | provenance | Config | +| builtin.go:154:13:154:22 | unsafehost | builtin.go:154:2:154:4 | url [postupdate] | provenance | Config | +| builtin.go:156:21:156:23 | url | builtin.go:156:21:156:32 | call to String | provenance | MaD:12 | +| new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:31:48:31:56 | selection of word | provenance | Src:MaD:3 | +| new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:32:48:32:56 | selection of safe | provenance | Src:MaD:3 | +| new-tests.go:26:26:26:30 | &... [postupdate] | new-tests.go:35:49:35:57 | selection of word | provenance | Src:MaD:3 | | new-tests.go:31:11:31:57 | []type{args} [array] | new-tests.go:31:11:31:57 | call to Sprintf | provenance | MaD:11 | | new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | []type{args} [array] | provenance | | | new-tests.go:31:48:31:56 | selection of word | new-tests.go:31:11:31:57 | call to Sprintf | provenance | FunctionModel | @@ -37,11 +44,11 @@ edges | new-tests.go:39:18:39:30 | call to Param | new-tests.go:47:11:47:46 | ...+... | provenance | Src:MaD:1 | | new-tests.go:49:18:49:30 | call to Query | new-tests.go:50:11:50:46 | ...+... | provenance | Src:MaD:2 | | new-tests.go:62:2:62:39 | ... := ...[0] | new-tests.go:63:17:63:23 | reqBody | provenance | | -| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | Src:MaD:6 MaD:12 | -| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... | provenance | MaD:10 | -| new-tests.go:63:26:63:30 | &... | new-tests.go:68:48:68:56 | selection of word | provenance | | -| new-tests.go:63:26:63:30 | &... | new-tests.go:69:48:69:56 | selection of safe | provenance | | -| new-tests.go:63:26:63:30 | &... | new-tests.go:74:49:74:57 | selection of word | provenance | | +| new-tests.go:62:31:62:38 | selection of Body | new-tests.go:62:2:62:39 | ... := ...[0] | provenance | Src:MaD:6 MaD:13 | +| new-tests.go:63:17:63:23 | reqBody | new-tests.go:63:26:63:30 | &... [postupdate] | provenance | MaD:10 | +| new-tests.go:63:26:63:30 | &... [postupdate] | new-tests.go:68:48:68:56 | selection of word | provenance | | +| new-tests.go:63:26:63:30 | &... [postupdate] | new-tests.go:69:48:69:56 | selection of safe | provenance | | +| new-tests.go:63:26:63:30 | &... [postupdate] | new-tests.go:74:49:74:57 | selection of word | provenance | | | new-tests.go:68:11:68:57 | []type{args} [array] | new-tests.go:68:11:68:57 | call to Sprintf | provenance | MaD:11 | | new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | []type{args} [array] | provenance | | | new-tests.go:68:48:68:56 | selection of word | new-tests.go:68:11:68:57 | call to Sprintf | provenance | FunctionModel | @@ -51,12 +58,12 @@ edges | new-tests.go:74:12:74:58 | []type{args} [array] | new-tests.go:74:12:74:58 | call to Sprintf | provenance | MaD:11 | | new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | []type{args} [array] | provenance | | | new-tests.go:74:49:74:57 | selection of word | new-tests.go:74:12:74:58 | call to Sprintf | provenance | FunctionModel | -| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | Src:MaD:9 MaD:13 | -| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | MaD:14 | +| new-tests.go:78:18:78:24 | selection of URL | new-tests.go:78:18:78:32 | call to Query | provenance | Src:MaD:9 MaD:14 | +| new-tests.go:78:18:78:32 | call to Query | new-tests.go:78:18:78:46 | call to Get | provenance | MaD:15 | | new-tests.go:78:18:78:46 | call to Get | new-tests.go:79:11:79:46 | ...+... | provenance | | | new-tests.go:81:18:81:67 | call to TrimPrefix | new-tests.go:82:11:82:46 | ...+... | provenance | | | new-tests.go:81:37:81:43 | selection of URL | new-tests.go:81:37:81:48 | selection of Path | provenance | Src:MaD:9 | -| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | MaD:15 | +| new-tests.go:81:37:81:48 | selection of Path | new-tests.go:81:18:81:67 | call to TrimPrefix | provenance | MaD:16 | | new-tests.go:86:10:86:20 | call to Vars | new-tests.go:88:11:88:46 | ...+... | provenance | Src:MaD:5 | | new-tests.go:95:18:95:45 | call to URLParam | new-tests.go:96:11:96:46 | ...+... | provenance | Src:MaD:4 | models @@ -71,22 +78,29 @@ models | 9 | Source: net/http; Request; true; URL; ; ; ; remote; manual | | 10 | Summary: encoding/json; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | | 11 | Summary: fmt; ; false; Sprintf; ; ; Argument[1].ArrayElement; ReturnValue; taint; manual | -| 12 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | -| 13 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | -| 14 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | -| 15 | Summary: strings; ; false; TrimPrefix; ; ; Argument[0]; ReturnValue; taint; manual | +| 12 | Summary: fmt; Stringer; true; String; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 13 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | +| 14 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 15 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 16 | Summary: strings; ; false; TrimPrefix; ; ; Argument[0]; ReturnValue; taint; manual | nodes -| builtin.go:19:12:19:34 | call to FormValue | semmle.label | call to FormValue | -| builtin.go:22:21:22:62 | ...+... | semmle.label | ...+... | -| builtin.go:83:21:83:31 | call to Referer | semmle.label | call to Referer | -| builtin.go:88:27:88:40 | untrustedInput | semmle.label | untrustedInput | -| builtin.go:97:21:97:31 | call to Referer | semmle.label | call to Referer | -| builtin.go:101:36:101:49 | untrustedInput | semmle.label | untrustedInput | -| builtin.go:111:21:111:31 | call to Referer | semmle.label | call to Referer | -| builtin.go:114:15:114:28 | untrustedInput | semmle.label | untrustedInput | -| builtin.go:129:21:129:31 | call to Referer | semmle.label | call to Referer | -| builtin.go:132:38:132:51 | untrustedInput | semmle.label | untrustedInput | -| new-tests.go:26:26:26:30 | &... | semmle.label | &... | +| builtin.go:20:12:20:34 | call to FormValue | semmle.label | call to FormValue | +| builtin.go:23:21:23:62 | ...+... | semmle.label | ...+... | +| builtin.go:84:21:84:31 | call to Referer | semmle.label | call to Referer | +| builtin.go:89:27:89:40 | untrustedInput | semmle.label | untrustedInput | +| builtin.go:98:21:98:31 | call to Referer | semmle.label | call to Referer | +| builtin.go:102:36:102:49 | untrustedInput | semmle.label | untrustedInput | +| builtin.go:112:21:112:31 | call to Referer | semmle.label | call to Referer | +| builtin.go:115:15:115:28 | untrustedInput | semmle.label | untrustedInput | +| builtin.go:130:21:130:31 | call to Referer | semmle.label | call to Referer | +| builtin.go:133:38:133:51 | untrustedInput | semmle.label | untrustedInput | +| builtin.go:151:16:151:36 | call to FormValue | semmle.label | call to FormValue | +| builtin.go:154:2:154:4 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| builtin.go:154:2:154:4 | url [postupdate] | semmle.label | url [postupdate] | +| builtin.go:154:13:154:22 | unsafehost | semmle.label | unsafehost | +| builtin.go:156:21:156:23 | url | semmle.label | url | +| builtin.go:156:21:156:32 | call to String | semmle.label | call to String | +| new-tests.go:26:26:26:30 | &... [postupdate] | semmle.label | &... [postupdate] | | new-tests.go:31:11:31:57 | []type{args} [array] | semmle.label | []type{args} [array] | | new-tests.go:31:11:31:57 | call to Sprintf | semmle.label | call to Sprintf | | new-tests.go:31:48:31:56 | selection of word | semmle.label | selection of word | @@ -103,7 +117,7 @@ nodes | new-tests.go:62:2:62:39 | ... := ...[0] | semmle.label | ... := ...[0] | | new-tests.go:62:31:62:38 | selection of Body | semmle.label | selection of Body | | new-tests.go:63:17:63:23 | reqBody | semmle.label | reqBody | -| new-tests.go:63:26:63:30 | &... | semmle.label | &... | +| new-tests.go:63:26:63:30 | &... [postupdate] | semmle.label | &... [postupdate] | | new-tests.go:68:11:68:57 | []type{args} [array] | semmle.label | []type{args} [array] | | new-tests.go:68:11:68:57 | call to Sprintf | semmle.label | call to Sprintf | | new-tests.go:68:48:68:56 | selection of word | semmle.label | selection of word | diff --git a/go/ql/test/experimental/CWE-918/SSRF.qlref b/go/ql/test/experimental/CWE-918/SSRF.qlref index 7cba541836f..d68094fa2a0 100644 --- a/go/ql/test/experimental/CWE-918/SSRF.qlref +++ b/go/ql/test/experimental/CWE-918/SSRF.qlref @@ -1,2 +1,4 @@ query: experimental/CWE-918/SSRF.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/experimental/CWE-918/builtin.go b/go/ql/test/experimental/CWE-918/builtin.go index 5c65bc9d3de..6c39f24dc47 100644 --- a/go/ql/test/experimental/CWE-918/builtin.go +++ b/go/ql/test/experimental/CWE-918/builtin.go @@ -8,6 +8,7 @@ import ( "fmt" "log" "net/http" + "net/url" "regexp" "strings" @@ -16,10 +17,10 @@ import ( ) func handler(w http.ResponseWriter, req *http.Request) { - target := req.FormValue("target") + target := req.FormValue("target") // $ Source // BAD: `target` is controlled by the attacker - _, err := http.Get("https://" + target + ".example.com/data/") + _, err := http.Get("https://" + target + ".example.com/data/") // $ Alert if err != nil { // error handling } @@ -80,12 +81,12 @@ func test() { // x net websocket dial bad http.HandleFunc("/ex2", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source origin := "http://localhost/" // bad as input is directly passed to dial function - ws, _ := websocket.Dial(untrustedInput, "", origin) // SSRF + ws, _ := websocket.Dial(untrustedInput, "", origin) // $ Alert var msg = make([]byte, 512) var n int n, _ = ws.Read(msg) @@ -94,12 +95,12 @@ func test() { // x net websocket dialConfig bad http.HandleFunc("/ex3", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source origin := "http://localhost/" // bad as input is directly used - config, _ := websocket.NewConfig(untrustedInput, origin) // SSRF - ws2, _ := websocket.DialConfig(config) + config, _ := websocket.NewConfig(untrustedInput, origin) // $ Sink + ws2, _ := websocket.DialConfig(config) // $ Alert var msg = make([]byte, 512) var n int n, _ = ws2.Read(msg) @@ -108,10 +109,10 @@ func test() { // gorilla websocket Dialer.Dial bad http.HandleFunc("/ex6", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source dialer := gorilla.Dialer{} - dialer.Dial(untrustedInput, r.Header) //SSRF + dialer.Dial(untrustedInput, r.Header) // $ Alert }) // gorilla websocket Dialer.Dial good @@ -126,10 +127,10 @@ func test() { // gorilla websocket Dialer.DialContext bad http.HandleFunc("/ex8", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source dialer := gorilla.Dialer{} - dialer.DialContext(context.TODO(), untrustedInput, r.Header) //SSRF + dialer.DialContext(context.TODO(), untrustedInput, r.Header) // $ Alert }) // gorilla websocket Dialer.DialContext good @@ -145,3 +146,16 @@ func test() { log.Println(http.ListenAndServe(":80", nil)) } + +func handler2(w http.ResponseWriter, req *http.Request) { + unsafehost := req.FormValue("host") // $ Source + + url, _ := url.Parse("http://example.com/data") + url.Host = unsafehost + // BAD: `target` is controlled by the attacker + _, err := http.Get(url.String()) // $ Alert + if err != nil { + // error handling + } + // process request response +} diff --git a/go/ql/test/experimental/CWE-918/new-tests.go b/go/ql/test/experimental/CWE-918/new-tests.go index 040bad48596..ddf94daa09e 100644 --- a/go/ql/test/experimental/CWE-918/new-tests.go +++ b/go/ql/test/experimental/CWE-918/new-tests.go @@ -23,20 +23,20 @@ func HandlerGin(c *gin.Context) { safe string `binding:"alphanum"` } - err := c.ShouldBindJSON(&body) + err := c.ShouldBindJSON(&body) // $ Source http.Get(fmt.Sprintf("http://example.com/%d", body.integer)) // OK http.Get(fmt.Sprintf("http://example.com/%v", body.float)) // OK http.Get(fmt.Sprintf("http://example.com/%v", body.boolean)) // OK - http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // SSRF - http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // SSRF + http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // $ Alert + http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // $ Alert if err == nil { - http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // SSRF + http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // $ Alert http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // OK } - taintedParam := c.Param("id") + taintedParam := c.Param("id") // $ Source validate := validator.New() err = validate.Var(taintedParam, "alpha") @@ -44,10 +44,10 @@ func HandlerGin(c *gin.Context) { http.Get("http://example.com/" + taintedParam) // OK } - http.Get("http://example.com/" + taintedParam) //SSRF + http.Get("http://example.com/" + taintedParam) // $ Alert - taintedQuery := c.Query("id") - http.Get("http://example.com/" + taintedQuery) //SSRF + taintedQuery := c.Query("id") // $ Source + http.Get("http://example.com/" + taintedQuery) // $ Alert } func HandlerHttp(req *http.Request) { @@ -59,41 +59,41 @@ func HandlerHttp(req *http.Request) { word string safe string `validate:"alphanum"` } - reqBody, _ := ioutil.ReadAll(req.Body) + reqBody, _ := ioutil.ReadAll(req.Body) // $ Source json.Unmarshal(reqBody, &body) http.Get(fmt.Sprintf("http://example.com/%d", body.integer)) // OK http.Get(fmt.Sprintf("http://example.com/%v", body.float)) // OK http.Get(fmt.Sprintf("http://example.com/%v", body.boolean)) // OK - http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // SSRF - http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // SSRF + http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // $ Alert + http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // $ Alert validate := validator.New() err := validate.Struct(body) if err == nil { - http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // SSRF + http.Get(fmt.Sprintf("http://example.com/%s", body.word)) // $ Alert http.Get(fmt.Sprintf("http://example.com/%s", body.safe)) // OK } - taintedQuery := req.URL.Query().Get("param1") - http.Get("http://example.com/" + taintedQuery) // SSRF + taintedQuery := req.URL.Query().Get("param1") // $ Source + http.Get("http://example.com/" + taintedQuery) // $ Alert - taintedParam := strings.TrimPrefix(req.URL.Path, "/example-path/") - http.Get("http://example.com/" + taintedParam) // SSRF + taintedParam := strings.TrimPrefix(req.URL.Path, "/example-path/") // $ Source + http.Get("http://example.com/" + taintedParam) // $ Alert } func HandlerMux(r *http.Request) { - vars := mux.Vars(r) + vars := mux.Vars(r) // $ Source taintedParam := vars["id"] - http.Get("http://example.com/" + taintedParam) // SSRF + http.Get("http://example.com/" + taintedParam) // $ Alert numericID, _ := strconv.Atoi(taintedParam) http.Get(fmt.Sprintf("http://example.com/%d", numericID)) // OK } func HandlerChi(r *http.Request) { - taintedParam := chi.URLParam(r, "articleID") - http.Get("http://example.com/" + taintedParam) // SSRF + taintedParam := chi.URLParam(r, "articleID") // $ Source + http.Get("http://example.com/" + taintedParam) // $ Alert b, _ := strconv.ParseBool(taintedParam) http.Get(fmt.Sprintf("http://example.com/%t", b)) // OK diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected index 547c7b25da1..6936b333cf1 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ChannelField/test.expected @@ -1,22 +1,14 @@ invalidModelRow edges | test.go:9:9:9:11 | selection of c [collection] | test.go:9:7:9:11 | <-... | provenance | | -| test.go:13:16:13:16 | definition of s [pointer, c, collection] | test.go:16:2:16:2 | s [pointer, c, collection] | provenance | | | test.go:15:10:15:17 | call to source | test.go:16:9:16:12 | data | provenance | | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:13:16:13:16 | definition of s [pointer, c, collection] | provenance | | -| test.go:16:2:16:2 | implicit dereference [c, collection] | test.go:16:2:16:4 | selection of c [collection] | provenance | | -| test.go:16:2:16:2 | s [pointer, c, collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | -| test.go:16:2:16:4 | selection of c [collection] | test.go:9:9:9:11 | selection of c [collection] | provenance | | -| test.go:16:2:16:4 | selection of c [collection] | test.go:16:2:16:2 | implicit dereference [c, collection] | provenance | | -| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [collection] | provenance | | +| test.go:16:2:16:4 | selection of c [postupdate] [collection] | test.go:9:9:9:11 | selection of c [collection] | provenance | | +| test.go:16:9:16:12 | data | test.go:16:2:16:4 | selection of c [postupdate] [collection] | provenance | | nodes | test.go:9:7:9:11 | <-... | semmle.label | <-... | | test.go:9:9:9:11 | selection of c [collection] | semmle.label | selection of c [collection] | -| test.go:13:16:13:16 | definition of s [pointer, c, collection] | semmle.label | definition of s [pointer, c, collection] | | test.go:15:10:15:17 | call to source | semmle.label | call to source | -| test.go:16:2:16:2 | implicit dereference [c, collection] | semmle.label | implicit dereference [c, collection] | -| test.go:16:2:16:2 | s [pointer, c, collection] | semmle.label | s [pointer, c, collection] | -| test.go:16:2:16:4 | selection of c [collection] | semmle.label | selection of c [collection] | +| test.go:16:2:16:4 | selection of c [postupdate] [collection] | semmle.label | selection of c [postupdate] [collection] | | test.go:16:9:16:12 | data | semmle.label | data | subpaths #select diff --git a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected index b198361df04..72124e7dae0 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/DefaultTaintSanitizer/DefaultSanitizer.expected @@ -4,27 +4,27 @@ models | 3 | Summary: io; Reader; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | | 4 | Summary: os; File; true; Read; ; ; Argument[receiver]; Argument[0]; taint; manual | edges -| Builtin.go:6:2:6:2 | definition of b | Builtin.go:8:9:8:17 | type conversion | provenance | | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:1 MaD:2 | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:1 MaD:3 | -| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:6:2:6:2 | definition of b | provenance | Src:MaD:1 MaD:4 | -| Builtin.go:12:2:12:2 | definition of b | Builtin.go:17:9:17:17 | type conversion | provenance | | -| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:1 MaD:2 | -| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:1 MaD:3 | -| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:12:2:12:2 | definition of b | provenance | Src:MaD:1 MaD:4 | -| Builtin.go:21:2:21:2 | definition of b | Builtin.go:24:10:24:18 | type conversion | provenance | | -| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:1 MaD:2 | -| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:1 MaD:3 | -| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:21:2:21:2 | definition of b | provenance | Src:MaD:1 MaD:4 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:7:22:7:22 | b [postupdate] | provenance | Src:MaD:1 MaD:2 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:7:22:7:22 | b [postupdate] | provenance | Src:MaD:1 MaD:3 | +| Builtin.go:7:2:7:15 | selection of Body | Builtin.go:7:22:7:22 | b [postupdate] | provenance | Src:MaD:1 MaD:4 | +| Builtin.go:7:22:7:22 | b [postupdate] | Builtin.go:8:9:8:17 | type conversion | provenance | | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:13:22:13:22 | b [postupdate] | provenance | Src:MaD:1 MaD:2 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:13:22:13:22 | b [postupdate] | provenance | Src:MaD:1 MaD:3 | +| Builtin.go:13:2:13:15 | selection of Body | Builtin.go:13:22:13:22 | b [postupdate] | provenance | Src:MaD:1 MaD:4 | +| Builtin.go:13:22:13:22 | b [postupdate] | Builtin.go:17:9:17:17 | type conversion | provenance | | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:22:22:22:22 | b [postupdate] | provenance | Src:MaD:1 MaD:2 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:22:22:22:22 | b [postupdate] | provenance | Src:MaD:1 MaD:3 | +| Builtin.go:22:2:22:15 | selection of Body | Builtin.go:22:22:22:22 | b [postupdate] | provenance | Src:MaD:1 MaD:4 | +| Builtin.go:22:22:22:22 | b [postupdate] | Builtin.go:24:10:24:18 | type conversion | provenance | | nodes -| Builtin.go:6:2:6:2 | definition of b | semmle.label | definition of b | | Builtin.go:7:2:7:15 | selection of Body | semmle.label | selection of Body | +| Builtin.go:7:22:7:22 | b [postupdate] | semmle.label | b [postupdate] | | Builtin.go:8:9:8:17 | type conversion | semmle.label | type conversion | -| Builtin.go:12:2:12:2 | definition of b | semmle.label | definition of b | | Builtin.go:13:2:13:15 | selection of Body | semmle.label | selection of Body | +| Builtin.go:13:22:13:22 | b [postupdate] | semmle.label | b [postupdate] | | Builtin.go:17:9:17:17 | type conversion | semmle.label | type conversion | -| Builtin.go:21:2:21:2 | definition of b | semmle.label | definition of b | | Builtin.go:22:2:22:15 | selection of Body | semmle.label | selection of Body | +| Builtin.go:22:22:22:22 | b [postupdate] | semmle.label | b [postupdate] | | Builtin.go:24:10:24:18 | type conversion | semmle.label | type conversion | subpaths #select diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/srcs.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/srcs.expected index a6f313198d1..f99ee92a492 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/srcs.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/srcs.expected @@ -1,6 +1,5 @@ invalidModelRow #select -| test.go:10:6:10:8 | definition of arg | qltest-arg | | test.go:39:8:39:15 | call to Src1 | qltest | | test.go:40:8:40:15 | call to Src2 | qltest | | test.go:40:8:40:15 | call to Src2 | qltest-w-subtypes | @@ -8,6 +7,7 @@ invalidModelRow | test.go:42:2:42:21 | ... = ...[0] | qltest | | test.go:42:2:42:21 | ... = ...[1] | qltest-w-subtypes | | test.go:43:2:43:22 | ... = ...[1] | qltest-w-subtypes | +| test.go:44:11:44:13 | arg [postupdate] | qltest-arg | | test.go:59:9:59:16 | call to Src1 | qltest | | test.go:102:46:102:53 | call to Src1 | qltest | | test.go:112:35:112:42 | call to Src1 | qltest | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/steps.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/steps.expected index eaf00bde26f..97a1cc49261 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/steps.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/steps.expected @@ -2,18 +2,18 @@ invalidModelRow #select | test.go:17:23:17:25 | arg | test.go:17:10:17:26 | call to StepArgRes | | test.go:18:27:18:29 | arg | test.go:18:2:18:30 | ... = ...[1] | -| test.go:19:15:19:17 | arg | test.go:11:6:11:9 | definition of arg1 | -| test.go:21:16:21:18 | arg | test.go:13:6:13:6 | definition of t | +| test.go:19:15:19:17 | arg | test.go:19:20:19:23 | arg1 [postupdate] | +| test.go:21:16:21:18 | arg | test.go:21:2:21:2 | t [postupdate] | | test.go:22:10:22:10 | t | test.go:22:10:22:24 | call to StepQualRes | -| test.go:23:2:23:2 | t | test.go:10:6:10:8 | definition of arg | +| test.go:23:2:23:2 | t | test.go:23:16:23:18 | arg [postupdate] | | test.go:24:32:24:34 | arg | test.go:24:10:24:35 | call to StepArgResNoQual | | test.go:61:25:61:27 | src | test.go:61:12:61:28 | call to StepArgRes | | test.go:64:29:64:31 | src | test.go:64:2:64:32 | ... := ...[1] | -| test.go:68:15:68:17 | src | test.go:67:6:67:11 | definition of taint3 | -| test.go:76:21:76:23 | src | test.go:75:6:75:11 | definition of taint4 | +| test.go:68:15:68:17 | src | test.go:68:20:68:25 | taint3 [postupdate] | +| test.go:76:21:76:23 | src | test.go:76:2:76:7 | taint4 [postupdate] | | test.go:79:13:79:25 | type assertion | test.go:79:12:79:40 | call to StepQualRes | -| test.go:83:3:83:15 | type assertion | test.go:82:6:82:11 | definition of taint6 | +| test.go:83:3:83:15 | type assertion | test.go:83:30:83:35 | taint6 [postupdate] | | test.go:86:34:86:36 | src | test.go:86:12:86:37 | call to StepArgResNoQual | | test.go:149:10:149:27 | []type{args} | test.go:149:10:149:27 | call to append | | test.go:149:17:149:21 | slice | test.go:149:10:149:27 | call to append | -| test.go:155:15:155:20 | slice1 | test.go:154:2:154:7 | definition of slice2 | +| test.go:155:15:155:20 | slice1 | test.go:155:7:155:12 | slice2 [postupdate] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/test.go b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/test.go index 14b9a43b599..c9d732e7400 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalTaintFlow/test.go @@ -158,7 +158,7 @@ func simpleflow() { ch := make(chan string) ch <- a.Src1().(string) taint16 := test.StepArgCollectionContentRes(ch) - b.Sink1(taint16) // $ MISSING: hasTaintFlow="taint16" // currently fails due to lack of post-update nodes after send statements + b.Sink1(taint16) // $ hasTaintFlow="taint16" c1 := test.C{""} c1.Set(a.Src1().(string)) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected index a85e8689960..009238baa4d 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/srcs.expected @@ -1,6 +1,5 @@ invalidModelRow #select -| test.go:10:6:10:8 | definition of arg | qltest-arg | | test.go:39:8:39:15 | call to Src1 | qltest | | test.go:40:8:40:15 | call to Src2 | qltest | | test.go:40:8:40:15 | call to Src2 | qltest-w-subtypes | @@ -8,6 +7,7 @@ invalidModelRow | test.go:42:2:42:21 | ... = ...[0] | qltest | | test.go:42:2:42:21 | ... = ...[1] | qltest-w-subtypes | | test.go:43:2:43:22 | ... = ...[1] | qltest-w-subtypes | +| test.go:44:11:44:13 | arg [postupdate] | qltest-arg | | test.go:59:9:59:16 | call to Src1 | qltest | | test.go:102:46:102:53 | call to Src1 | qltest | | test.go:112:35:112:42 | call to Src1 | qltest | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected index e53ed76ad00..eb52daa4253 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/steps.expected @@ -2,17 +2,17 @@ invalidModelRow #select | test.go:17:23:17:25 | arg | test.go:17:10:17:26 | call to StepArgRes | | test.go:18:27:18:29 | arg | test.go:18:2:18:30 | ... = ...[1] | -| test.go:19:15:19:17 | arg | test.go:11:6:11:9 | definition of arg1 | -| test.go:21:16:21:18 | arg | test.go:13:6:13:6 | definition of t | +| test.go:19:15:19:17 | arg | test.go:19:20:19:23 | arg1 [postupdate] | +| test.go:21:16:21:18 | arg | test.go:21:2:21:2 | t [postupdate] | | test.go:22:10:22:10 | t | test.go:22:10:22:24 | call to StepQualRes | -| test.go:23:2:23:2 | t | test.go:10:6:10:8 | definition of arg | +| test.go:23:2:23:2 | t | test.go:23:16:23:18 | arg [postupdate] | | test.go:24:32:24:34 | arg | test.go:24:10:24:35 | call to StepArgResNoQual | | test.go:61:25:61:27 | src | test.go:61:12:61:28 | call to StepArgRes | | test.go:64:29:64:31 | src | test.go:64:2:64:32 | ... := ...[1] | -| test.go:68:15:68:17 | src | test.go:67:6:67:11 | definition of taint3 | -| test.go:76:21:76:23 | src | test.go:75:6:75:11 | definition of taint4 | +| test.go:68:15:68:17 | src | test.go:68:20:68:25 | taint3 [postupdate] | +| test.go:76:21:76:23 | src | test.go:76:2:76:7 | taint4 [postupdate] | | test.go:79:13:79:25 | type assertion | test.go:79:12:79:40 | call to StepQualRes | -| test.go:83:3:83:15 | type assertion | test.go:82:6:82:11 | definition of taint6 | +| test.go:83:3:83:15 | type assertion | test.go:83:30:83:35 | taint6 [postupdate] | | test.go:86:34:86:36 | src | test.go:86:12:86:37 | call to StepArgResNoQual | | test.go:202:14:202:19 | srcInt | test.go:202:10:202:26 | call to max | | test.go:202:22:202:22 | 0 | test.go:202:10:202:26 | call to max | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/test.go b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/test.go index f118880d497..3c172e6082d 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/ExternalValueFlow/test.go @@ -158,7 +158,7 @@ func simpleflow() { ch := make(chan string) ch <- a.Src1().(string) taint16 := test.StepArgCollectionContentRes(ch) - b.Sink1(taint16) // $ MISSING: hasValueFlow="taint16" // currently fails due to lack of post-update nodes after send statements + b.Sink1(taint16) // $ hasValueFlow="taint16" c1 := test.C{""} c1.Set(a.Src1().(string)) diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected index c6bfdfdc1d5..fcbb78716a4 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalFlowStep.expected @@ -49,21 +49,21 @@ | main.go:3:6:3:10 | function test1 | main.go:34:2:34:6 | test1 | | main.go:3:12:3:12 | argument corresponding to x | main.go:3:12:3:12 | definition of x | | main.go:3:12:3:12 | definition of x | main.go:5:5:5:5 | x | -| main.go:3:12:3:12 | definition of x | main.go:6:7:6:7 | x | -| main.go:3:12:3:12 | definition of x | main.go:8:8:8:8 | x | -| main.go:3:12:3:12 | definition of x | main.go:10:7:10:7 | x | -| main.go:3:12:3:12 | definition of x | main.go:10:22:10:22 | x | | main.go:3:19:3:20 | argument corresponding to fn | main.go:3:19:3:20 | definition of fn | | main.go:3:19:3:20 | definition of fn | main.go:10:24:10:25 | fn | -| main.go:6:3:6:3 | definition of y | main.go:10:2:10:2 | y = phi(def@6:3, def@8:3) | +| main.go:5:5:5:5 | x | main.go:6:7:6:7 | x | +| main.go:5:5:5:5 | x | main.go:8:8:8:8 | x | +| main.go:6:3:6:3 | definition of y | main.go:10:12:10:12 | y | | main.go:6:7:6:7 | x | main.go:6:3:6:3 | definition of y | -| main.go:8:3:8:3 | definition of y | main.go:10:2:10:2 | y = phi(def@6:3, def@8:3) | +| main.go:6:7:6:7 | x | main.go:10:7:10:7 | x | +| main.go:8:3:8:3 | definition of y | main.go:10:12:10:12 | y | | main.go:8:7:8:8 | -... | main.go:8:3:8:3 | definition of y | +| main.go:8:8:8:8 | x | main.go:10:7:10:7 | x | | main.go:10:2:10:2 | definition of z | main.go:11:14:11:14 | z | -| main.go:10:2:10:2 | y = phi(def@6:3, def@8:3) | main.go:10:12:10:12 | y | -| main.go:10:2:10:2 | y = phi(def@6:3, def@8:3) | main.go:10:17:10:17 | y | +| main.go:10:7:10:7 | x | main.go:10:22:10:22 | x | | main.go:10:7:10:12 | ...<=... | main.go:10:7:10:27 | ...&&... | | main.go:10:7:10:27 | ...&&... | main.go:10:2:10:2 | definition of z | +| main.go:10:12:10:12 | y | main.go:10:17:10:17 | y | | main.go:10:17:10:27 | ...>=... | main.go:10:7:10:27 | ...&&... | | main.go:11:14:11:14 | z | main.go:11:9:11:15 | type conversion | | main.go:14:6:14:10 | function test2 | main.go:34:8:34:12 | test2 | @@ -84,50 +84,54 @@ | main.go:26:5:26:6 | definition of ok | main.go:27:5:27:6 | ok | | main.go:26:11:26:11 | x | main.go:26:2:26:17 | ... := ...[0] | | main.go:38:2:38:2 | definition of s | main.go:39:15:39:15 | s | -| main.go:38:2:38:2 | definition of s | main.go:40:15:40:15 | s | -| main.go:38:2:38:2 | definition of s | main.go:42:7:42:7 | s | | main.go:38:7:38:20 | slice literal | main.go:38:2:38:2 | definition of s | +| main.go:38:7:38:20 | slice literal [postupdate] | main.go:38:2:38:2 | definition of s | | main.go:39:2:39:3 | definition of s1 | main.go:40:18:40:19 | s1 | | main.go:39:8:39:25 | call to append | main.go:39:2:39:3 | definition of s1 | +| main.go:39:15:39:15 | s | main.go:40:15:40:15 | s | +| main.go:39:15:39:15 | s [postupdate] | main.go:40:15:40:15 | s | | main.go:40:2:40:3 | definition of s2 | main.go:43:9:43:10 | s2 | | main.go:40:8:40:23 | call to append | main.go:40:2:40:3 | definition of s2 | +| main.go:40:15:40:15 | s | main.go:42:7:42:7 | s | +| main.go:40:15:40:15 | s [postupdate] | main.go:42:7:42:7 | s | | main.go:41:2:41:3 | definition of s4 | main.go:42:10:42:11 | s4 | | main.go:41:8:41:21 | call to make | main.go:41:2:41:3 | definition of s4 | | main.go:46:13:46:14 | argument corresponding to xs | main.go:46:13:46:14 | definition of xs | | main.go:46:13:46:14 | definition of xs | main.go:47:20:47:21 | xs | -| main.go:46:24:46:27 | definition of keys | main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | +| main.go:46:24:46:27 | definition of keys | main.go:46:24:46:27 | implicit read of keys | +| main.go:46:24:46:27 | definition of keys | main.go:49:3:49:6 | keys | | main.go:46:24:46:27 | zero value for keys | main.go:46:24:46:27 | definition of keys | -| main.go:46:34:46:37 | definition of vals | main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | +| main.go:46:34:46:37 | definition of vals | main.go:46:34:46:37 | implicit read of vals | +| main.go:46:34:46:37 | definition of vals | main.go:48:3:48:6 | vals | | main.go:46:34:46:37 | zero value for vals | main.go:46:34:46:37 | definition of vals | | main.go:47:2:50:2 | range statement[0] | main.go:47:6:47:6 | definition of k | | main.go:47:2:50:2 | range statement[1] | main.go:47:9:47:9 | definition of v | | main.go:47:6:47:6 | definition of k | main.go:49:11:49:11 | k | | main.go:47:9:47:9 | definition of v | main.go:48:11:48:11 | v | -| main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | main.go:46:24:46:27 | implicit read of keys | -| main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | main.go:49:3:49:6 | keys | -| main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | main.go:46:34:46:37 | implicit read of vals | -| main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | main.go:48:3:48:6 | vals | -| main.go:48:3:48:6 | definition of vals | main.go:47:20:47:21 | vals = phi(def@46:34, def@48:3) | +| main.go:48:3:48:6 | definition of vals | main.go:46:34:46:37 | implicit read of vals | +| main.go:48:3:48:6 | definition of vals | main.go:48:3:48:6 | vals | | main.go:48:3:48:11 | ... += ... | main.go:48:3:48:6 | definition of vals | -| main.go:49:3:49:6 | definition of keys | main.go:47:20:47:21 | keys = phi(def@46:24, def@49:3) | +| main.go:49:3:49:6 | definition of keys | main.go:46:24:46:27 | implicit read of keys | +| main.go:49:3:49:6 | definition of keys | main.go:49:3:49:6 | keys | | main.go:49:3:49:11 | ... += ... | main.go:49:3:49:6 | definition of keys | | main.go:55:6:55:7 | definition of ch | main.go:56:2:56:3 | ch | -| main.go:55:6:55:7 | definition of ch | main.go:57:4:57:5 | ch | | main.go:55:6:55:7 | zero value for ch | main.go:55:6:55:7 | definition of ch | +| main.go:56:2:56:3 | ch | main.go:57:4:57:5 | ch | +| main.go:56:2:56:3 | ch [postupdate] | main.go:57:4:57:5 | ch | | main.go:61:2:61:2 | definition of x | main.go:64:11:64:11 | x | -| main.go:61:2:61:2 | definition of x | main.go:65:11:65:11 | x | | main.go:61:7:61:7 | 1 | main.go:61:2:61:2 | definition of x | | main.go:62:2:62:2 | definition of y | main.go:64:14:64:14 | y | -| main.go:62:2:62:2 | definition of y | main.go:65:14:65:14 | y | | main.go:62:7:62:7 | 2 | main.go:62:2:62:2 | definition of y | | main.go:63:2:63:2 | definition of z | main.go:64:17:64:17 | z | -| main.go:63:2:63:2 | definition of z | main.go:65:17:65:17 | z | | main.go:63:7:63:7 | 3 | main.go:63:2:63:2 | definition of z | | main.go:64:2:64:2 | definition of a | main.go:66:9:66:9 | a | | main.go:64:7:64:18 | call to min | main.go:64:2:64:2 | definition of a | | main.go:64:11:64:11 | x | main.go:64:7:64:18 | call to min | +| main.go:64:11:64:11 | x | main.go:65:11:65:11 | x | | main.go:64:14:64:14 | y | main.go:64:7:64:18 | call to min | +| main.go:64:14:64:14 | y | main.go:65:14:65:14 | y | | main.go:64:17:64:17 | z | main.go:64:7:64:18 | call to min | +| main.go:64:17:64:17 | z | main.go:65:17:65:17 | z | | main.go:65:2:65:2 | definition of b | main.go:66:12:66:12 | b | | main.go:65:7:65:18 | call to max | main.go:65:2:65:2 | definition of b | | main.go:65:11:65:11 | x | main.go:65:7:65:18 | call to max | @@ -135,62 +139,71 @@ | main.go:65:17:65:17 | z | main.go:65:7:65:18 | call to max | | strings.go:8:12:8:12 | argument corresponding to s | strings.go:8:12:8:12 | definition of s | | strings.go:8:12:8:12 | definition of s | strings.go:9:24:9:24 | s | -| strings.go:8:12:8:12 | definition of s | strings.go:10:27:10:27 | s | | strings.go:9:2:9:3 | definition of s2 | strings.go:11:20:11:21 | s2 | -| strings.go:9:2:9:3 | definition of s2 | strings.go:11:48:11:49 | s2 | | strings.go:9:8:9:38 | call to Replace | strings.go:9:2:9:3 | definition of s2 | +| strings.go:9:24:9:24 | s | strings.go:10:27:10:27 | s | | strings.go:10:2:10:3 | definition of s3 | strings.go:11:24:11:25 | s3 | -| strings.go:10:2:10:3 | definition of s3 | strings.go:11:67:11:68 | s3 | | strings.go:10:8:10:42 | call to ReplaceAll | strings.go:10:2:10:3 | definition of s3 | +| strings.go:11:20:11:21 | s2 | strings.go:11:48:11:49 | s2 | +| strings.go:11:24:11:25 | s3 | strings.go:11:67:11:68 | s3 | | url.go:8:12:8:12 | argument corresponding to b | url.go:8:12:8:12 | definition of b | | url.go:8:12:8:12 | definition of b | url.go:11:5:11:5 | b | | url.go:8:20:8:20 | argument corresponding to s | url.go:8:20:8:20 | definition of s | | url.go:8:20:8:20 | definition of s | url.go:12:46:12:46 | s | | url.go:8:20:8:20 | definition of s | url.go:14:48:14:48 | s | -| url.go:12:3:12:5 | definition of res | url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | +| url.go:12:3:12:5 | definition of res | url.go:19:9:19:11 | res | | url.go:12:3:12:48 | ... = ...[0] | url.go:12:3:12:5 | definition of res | | url.go:12:3:12:48 | ... = ...[1] | url.go:12:8:12:10 | definition of err | -| url.go:12:8:12:10 | definition of err | url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | -| url.go:14:3:14:5 | definition of res | url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | +| url.go:12:8:12:10 | definition of err | url.go:16:5:16:7 | err | +| url.go:14:3:14:5 | definition of res | url.go:19:9:19:11 | res | | url.go:14:3:14:50 | ... = ...[0] | url.go:14:3:14:5 | definition of res | | url.go:14:3:14:50 | ... = ...[1] | url.go:14:8:14:10 | definition of err | -| url.go:14:8:14:10 | definition of err | url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | -| url.go:16:5:16:7 | err = phi(def@12:8, def@14:8) | url.go:16:5:16:7 | err | -| url.go:16:5:16:7 | res = phi(def@12:3, def@14:3) | url.go:19:9:19:11 | res | +| url.go:14:8:14:10 | definition of err | url.go:16:5:16:7 | err | | url.go:22:12:22:12 | argument corresponding to i | url.go:22:12:22:12 | definition of i | | url.go:22:12:22:12 | definition of i | url.go:24:5:24:5 | i | | url.go:22:19:22:19 | argument corresponding to s | url.go:22:19:22:19 | definition of s | | url.go:22:19:22:19 | definition of s | url.go:23:20:23:20 | s | -| url.go:22:19:22:19 | definition of s | url.go:27:29:27:29 | s | | url.go:23:2:23:2 | definition of u | url.go:25:10:25:10 | u | | url.go:23:2:23:21 | ... := ...[0] | url.go:23:2:23:2 | definition of u | +| url.go:23:20:23:20 | s | url.go:27:29:27:29 | s | | url.go:27:2:27:2 | definition of u | url.go:28:14:28:14 | u | -| url.go:27:2:27:2 | definition of u | url.go:29:14:29:14 | u | -| url.go:27:2:27:2 | definition of u | url.go:30:11:30:11 | u | -| url.go:27:2:27:2 | definition of u | url.go:32:9:32:9 | u | | url.go:27:2:27:30 | ... = ...[0] | url.go:27:2:27:2 | definition of u | +| url.go:28:14:28:14 | u | url.go:29:14:29:14 | u | +| url.go:28:14:28:14 | u [postupdate] | url.go:29:14:29:14 | u | +| url.go:29:14:29:14 | u | url.go:30:11:30:11 | u | +| url.go:29:14:29:14 | u [postupdate] | url.go:30:11:30:11 | u | | url.go:30:2:30:3 | definition of bs | url.go:31:14:31:15 | bs | | url.go:30:2:30:27 | ... := ...[0] | url.go:30:2:30:3 | definition of bs | +| url.go:30:11:30:11 | u | url.go:32:9:32:9 | u | +| url.go:30:11:30:11 | u [postupdate] | url.go:32:9:32:9 | u | | url.go:32:2:32:2 | definition of u | url.go:33:14:33:14 | u | -| url.go:32:2:32:2 | definition of u | url.go:34:14:34:14 | u | -| url.go:32:2:32:2 | definition of u | url.go:35:14:35:14 | u | -| url.go:32:2:32:2 | definition of u | url.go:36:6:36:6 | u | -| url.go:32:2:32:2 | definition of u | url.go:36:25:36:25 | u | | url.go:32:2:32:23 | ... = ...[0] | url.go:32:2:32:2 | definition of u | +| url.go:33:14:33:14 | u | url.go:34:14:34:14 | u | +| url.go:33:14:33:14 | u [postupdate] | url.go:34:14:34:14 | u | +| url.go:34:14:34:14 | u | url.go:35:14:35:14 | u | +| url.go:34:14:34:14 | u [postupdate] | url.go:35:14:35:14 | u | +| url.go:35:14:35:14 | u | url.go:36:6:36:6 | u | +| url.go:35:14:35:14 | u [postupdate] | url.go:36:6:36:6 | u | | url.go:36:2:36:2 | definition of u | url.go:37:9:37:9 | u | +| url.go:36:6:36:6 | u | url.go:36:25:36:25 | u | +| url.go:36:6:36:6 | u [postupdate] | url.go:36:25:36:25 | u | | url.go:36:6:36:26 | call to ResolveReference | url.go:36:2:36:2 | definition of u | | url.go:42:2:42:3 | definition of ui | url.go:43:11:43:12 | ui | -| url.go:42:2:42:3 | definition of ui | url.go:45:14:45:15 | ui | -| url.go:42:2:42:3 | definition of ui | url.go:46:9:46:10 | ui | | url.go:42:7:42:38 | call to UserPassword | url.go:42:2:42:3 | definition of ui | | url.go:43:2:43:3 | definition of pw | url.go:44:14:44:15 | pw | | url.go:43:2:43:23 | ... := ...[0] | url.go:43:2:43:3 | definition of pw | +| url.go:43:11:43:12 | ui | url.go:45:14:45:15 | ui | +| url.go:43:11:43:12 | ui [postupdate] | url.go:45:14:45:15 | ui | +| url.go:45:14:45:15 | ui | url.go:46:9:46:10 | ui | +| url.go:45:14:45:15 | ui [postupdate] | url.go:46:9:46:10 | ui | | url.go:49:12:49:12 | argument corresponding to q | url.go:49:12:49:12 | definition of q | | url.go:49:12:49:12 | definition of q | url.go:50:25:50:25 | q | | url.go:50:2:50:2 | definition of v | url.go:51:14:51:14 | v | -| url.go:50:2:50:2 | definition of v | url.go:52:14:52:14 | v | -| url.go:50:2:50:2 | definition of v | url.go:53:9:53:9 | v | | url.go:50:2:50:26 | ... := ...[0] | url.go:50:2:50:2 | definition of v | +| url.go:51:14:51:14 | v | url.go:52:14:52:14 | v | +| url.go:51:14:51:14 | v [postupdate] | url.go:52:14:52:14 | v | +| url.go:52:14:52:14 | v | url.go:53:9:53:9 | v | +| url.go:52:14:52:14 | v [postupdate] | url.go:53:9:53:9 | v | | url.go:56:12:56:12 | argument corresponding to q | url.go:56:12:56:12 | definition of q | | url.go:56:12:56:12 | definition of q | url.go:57:29:57:29 | q | | url.go:57:2:57:8 | definition of joined1 | url.go:58:38:58:44 | joined1 | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected index 6fadcdaabe6..66784562496 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FlowSteps/LocalTaintStep.expected @@ -7,7 +7,7 @@ | main.go:39:15:39:15 | s | main.go:39:8:39:25 | call to append | | main.go:40:15:40:15 | s | main.go:40:8:40:23 | call to append | | main.go:40:18:40:19 | s1 | main.go:40:8:40:23 | call to append | -| main.go:42:10:42:11 | s4 | main.go:38:2:38:2 | definition of s | +| main.go:42:10:42:11 | s4 | main.go:42:7:42:7 | s [postupdate] | | main.go:47:20:47:21 | next key-value pair in range | main.go:47:2:50:2 | range statement[0] | | main.go:47:20:47:21 | next key-value pair in range | main.go:47:2:50:2 | range statement[1] | | main.go:47:20:47:21 | xs | main.go:47:2:50:2 | range statement[1] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionModelStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionModelStep.expected index f9b4b8106f1..b0c0a58b339 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionModelStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionModelStep.expected @@ -1,3 +1,3 @@ -| file://:0:0:0:0 | NewEncoder | tst2.go:10:9:10:26 | call to NewEncoder | tst2.go:9:6:9:6 | definition of w | -| file://:0:0:0:0 | ReadFrom | tst.go:10:23:10:28 | reader | tst.go:9:2:9:12 | definition of bytesBuffer | -| file://:0:0:0:0 | Reset | reset.go:12:15:12:20 | source | reset.go:11:6:11:11 | definition of reader | +| file://:0:0:0:0 | NewEncoder | tst2.go:10:9:10:26 | call to NewEncoder | tst2.go:10:25:10:25 | w [postupdate] | +| file://:0:0:0:0 | ReadFrom | tst.go:10:23:10:28 | reader | tst.go:10:2:10:12 | bytesBuffer [postupdate] | +| file://:0:0:0:0 | Reset | reset.go:12:15:12:20 | source | reset.go:12:2:12:7 | reader [postupdate] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionOutput_getExitNode.expected b/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionOutput_getExitNode.expected index e8addfb217e..eebf68d92d4 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionOutput_getExitNode.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/FunctionInputsAndOutputs/FunctionOutput_getExitNode.expected @@ -1,13 +1,13 @@ -| parameter 0 | reset.go:12:2:12:21 | call to Reset | reset.go:9:2:9:7 | definition of source | -| parameter 0 | tst2.go:10:9:10:26 | call to NewEncoder | tst2.go:9:6:9:6 | definition of w | -| parameter 0 | tst2.go:10:9:10:39 | call to Encode | tst2.go:8:12:8:15 | definition of data | -| parameter 0 | tst.go:10:2:10:29 | call to ReadFrom | tst.go:8:12:8:17 | definition of reader | -| parameter 0 | tst.go:16:2:16:12 | call to test5 | tst.go:15:12:15:12 | definition of x | -| parameter 1 | tst.go:16:2:16:12 | call to test5 | tst.go:15:15:15:15 | definition of y | -| receiver | main.go:53:14:53:21 | call to bump | main.go:52:2:52:2 | definition of c | -| receiver | reset.go:12:2:12:21 | call to Reset | reset.go:11:6:11:11 | definition of reader | -| receiver | tst2.go:10:9:10:39 | call to Encode | tst2.go:10:9:10:26 | call to NewEncoder | -| receiver | tst.go:10:2:10:29 | call to ReadFrom | tst.go:9:2:9:12 | definition of bytesBuffer | +| parameter 0 | reset.go:12:2:12:21 | call to Reset | reset.go:12:15:12:20 | source [postupdate] | +| parameter 0 | tst2.go:10:9:10:26 | call to NewEncoder | tst2.go:10:25:10:25 | w [postupdate] | +| parameter 0 | tst2.go:10:9:10:39 | call to Encode | tst2.go:10:35:10:38 | data [postupdate] | +| parameter 0 | tst.go:10:2:10:29 | call to ReadFrom | tst.go:10:23:10:28 | reader [postupdate] | +| parameter 0 | tst.go:16:2:16:12 | call to test5 | tst.go:16:8:16:8 | x [postupdate] | +| parameter 1 | tst.go:16:2:16:12 | call to test5 | tst.go:16:11:16:11 | y [postupdate] | +| receiver | main.go:53:14:53:21 | call to bump | main.go:53:14:53:14 | c [postupdate] | +| receiver | reset.go:12:2:12:21 | call to Reset | reset.go:12:2:12:7 | reader [postupdate] | +| receiver | tst2.go:10:9:10:39 | call to Encode | tst2.go:10:9:10:26 | call to NewEncoder [postupdate] | +| receiver | tst.go:10:2:10:29 | call to ReadFrom | tst.go:10:2:10:12 | bytesBuffer [postupdate] | | result | main.go:51:2:51:14 | call to op | main.go:51:2:51:14 | call to op | | result | main.go:53:2:53:22 | call to op2 | main.go:53:2:53:22 | call to op2 | | result | main.go:53:14:53:21 | call to bump | main.go:53:14:53:21 | call to bump | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.expected b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.expected index 5ee74a7cde4..d29d11627b0 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.expected @@ -1,15 +1,26 @@ -| test.go:19:2:19:2 | definition of a | -| test.go:20:11:20:14 | &... | -| test.go:20:12:20:14 | selection of b | -| test.go:21:2:21:5 | selection of bs | -| test.go:21:2:21:8 | index expression | -| test.go:21:17:21:20 | &... | -| test.go:21:18:21:20 | struct literal | -| test.go:22:2:22:5 | selection of bs | -| test.go:22:2:22:8 | index expression | -| test.go:22:2:22:13 | implicit dereference | -| test.go:22:2:22:13 | selection of cptr | -| test.go:23:2:23:7 | implicit dereference | -| test.go:23:2:23:7 | selection of bptr | -| test.go:23:2:23:12 | implicit dereference | -| test.go:23:2:23:12 | selection of cptr | +| file://:0:0:0:0 | [summary param] 0 in copy | file://:0:0:0:0 | [summary] to write: Argument[0] in copy | +| test.go:23:2:23:2 | a | test.go:23:2:23:2 | a [postupdate] | +| test.go:23:11:23:14 | &... | test.go:23:11:23:14 | &... [postupdate] | +| test.go:23:12:23:14 | selection of b | test.go:23:12:23:14 | selection of b [postupdate] | +| test.go:24:2:24:2 | a | test.go:24:2:24:2 | a [postupdate] | +| test.go:24:2:24:5 | selection of bs | test.go:24:2:24:5 | selection of bs [postupdate] | +| test.go:24:2:24:8 | index expression | test.go:24:2:24:8 | index expression [postupdate] | +| test.go:24:17:24:20 | &... | test.go:24:17:24:20 | &... [postupdate] | +| test.go:24:18:24:20 | struct literal | test.go:24:18:24:20 | struct literal [postupdate] | +| test.go:25:2:25:2 | a | test.go:25:2:25:2 | a [postupdate] | +| test.go:25:2:25:5 | selection of bs | test.go:25:2:25:5 | selection of bs [postupdate] | +| test.go:25:2:25:8 | index expression | test.go:25:2:25:8 | index expression [postupdate] | +| test.go:25:2:25:13 | implicit dereference | test.go:25:2:25:13 | implicit dereference [postupdate] | +| test.go:25:2:25:13 | selection of cptr | test.go:25:2:25:13 | selection of cptr [postupdate] | +| test.go:26:2:26:2 | a | test.go:26:2:26:2 | a [postupdate] | +| test.go:26:2:26:7 | implicit dereference | test.go:26:2:26:7 | implicit dereference [postupdate] | +| test.go:26:2:26:7 | selection of bptr | test.go:26:2:26:7 | selection of bptr [postupdate] | +| test.go:26:2:26:12 | implicit dereference | test.go:26:2:26:12 | implicit dereference [postupdate] | +| test.go:26:2:26:12 | selection of cptr | test.go:26:2:26:12 | selection of cptr [postupdate] | +| test.go:28:7:28:10 | struct literal | test.go:28:7:28:10 | struct literal [postupdate] | +| test.go:29:2:29:2 | c | test.go:29:2:29:2 | c [postupdate] | +| test.go:29:6:29:6 | a | test.go:29:6:29:6 | a [postupdate] | +| test.go:30:2:30:2 | c | test.go:30:2:30:2 | c [postupdate] | +| test.go:30:7:30:7 | a | test.go:30:7:30:7 | a [postupdate] | +| test.go:35:4:35:4 | a | test.go:35:4:35:4 | a [postupdate] | +| test.go:36:5:36:5 | a | test.go:36:5:36:5 | a [postupdate] | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.go b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.go index f9d4b3d8e65..3cb8656b96d 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.go @@ -4,6 +4,9 @@ type C struct { field int } +func (c C) m(a A) {} +func (c *C) mp(a A) {} + type B struct { cptr *C } @@ -22,4 +25,13 @@ func f() { a.bs[3].cptr.field = 100 a.bptr.cptr.field = 101 + c := C{0} + c.m(a) + c.mp(a) + + // Indirect method calls - missing post-update nodes for the receivers + f := c.m + fp := c.mp + f(a) + fp(a) } diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.ql b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.ql index 384b3346431..b200ed4b8a7 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.ql +++ b/go/ql/test/library-tests/semmle/go/dataflow/PostUpdateNodes/test.ql @@ -1,4 +1,4 @@ import go from DataFlow::PostUpdateNode pun -select pun +select pun.getPreUpdateNode(), pun diff --git a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/LocalFlowStep.expected b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/LocalFlowStep.expected index d61d6be9c5f..5908aa8d113 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/LocalFlowStep.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/PromotedFields/LocalFlowStep.expected @@ -79,106 +79,136 @@ | main.go:7:6:7:9 | function sink | main.go:149:2:149:5 | sink | | main.go:7:6:7:9 | function sink | main.go:150:2:150:5 | sink | | main.go:22:2:22:6 | definition of outer | main.go:25:7:25:11 | outer | -| main.go:22:2:22:6 | definition of outer | main.go:26:7:26:11 | outer | -| main.go:22:2:22:6 | definition of outer | main.go:27:7:27:11 | outer | -| main.go:22:2:22:6 | definition of outer | main.go:28:7:28:11 | outer | | main.go:22:11:24:2 | struct literal | main.go:22:2:22:6 | definition of outer | +| main.go:22:11:24:2 | struct literal [postupdate] | main.go:22:2:22:6 | definition of outer | +| main.go:25:7:25:11 | outer | main.go:26:7:26:11 | outer | +| main.go:26:7:26:11 | outer | main.go:27:7:27:11 | outer | +| main.go:27:7:27:11 | outer | main.go:28:7:28:11 | outer | | main.go:30:2:30:7 | definition of outerp | main.go:33:7:33:12 | outerp | -| main.go:30:2:30:7 | definition of outerp | main.go:34:7:34:12 | outerp | -| main.go:30:2:30:7 | definition of outerp | main.go:35:7:35:12 | outerp | -| main.go:30:2:30:7 | definition of outerp | main.go:36:7:36:12 | outerp | | main.go:30:12:32:2 | &... | main.go:30:2:30:7 | definition of outerp | +| main.go:30:12:32:2 | &... [postupdate] | main.go:30:2:30:7 | definition of outerp | +| main.go:33:7:33:12 | outerp | main.go:34:7:34:12 | outerp | +| main.go:33:7:33:12 | outerp [postupdate] | main.go:34:7:34:12 | outerp | +| main.go:34:7:34:12 | outerp | main.go:35:7:35:12 | outerp | +| main.go:34:7:34:12 | outerp [postupdate] | main.go:35:7:35:12 | outerp | +| main.go:35:7:35:12 | outerp | main.go:36:7:36:12 | outerp | +| main.go:35:7:35:12 | outerp [postupdate] | main.go:36:7:36:12 | outerp | | main.go:40:2:40:6 | definition of outer | main.go:41:7:41:11 | outer | -| main.go:40:2:40:6 | definition of outer | main.go:42:7:42:11 | outer | -| main.go:40:2:40:6 | definition of outer | main.go:43:7:43:11 | outer | -| main.go:40:2:40:6 | definition of outer | main.go:44:7:44:11 | outer | | main.go:40:11:40:40 | struct literal | main.go:40:2:40:6 | definition of outer | +| main.go:40:11:40:40 | struct literal [postupdate] | main.go:40:2:40:6 | definition of outer | +| main.go:41:7:41:11 | outer | main.go:42:7:42:11 | outer | +| main.go:42:7:42:11 | outer | main.go:43:7:43:11 | outer | +| main.go:43:7:43:11 | outer | main.go:44:7:44:11 | outer | | main.go:46:2:46:7 | definition of outerp | main.go:47:7:47:12 | outerp | -| main.go:46:2:46:7 | definition of outerp | main.go:48:7:48:12 | outerp | -| main.go:46:2:46:7 | definition of outerp | main.go:49:7:49:12 | outerp | -| main.go:46:2:46:7 | definition of outerp | main.go:50:7:50:12 | outerp | | main.go:46:12:46:42 | &... | main.go:46:2:46:7 | definition of outerp | +| main.go:46:12:46:42 | &... [postupdate] | main.go:46:2:46:7 | definition of outerp | +| main.go:47:7:47:12 | outerp | main.go:48:7:48:12 | outerp | +| main.go:47:7:47:12 | outerp [postupdate] | main.go:48:7:48:12 | outerp | +| main.go:48:7:48:12 | outerp | main.go:49:7:49:12 | outerp | +| main.go:48:7:48:12 | outerp [postupdate] | main.go:49:7:49:12 | outerp | +| main.go:49:7:49:12 | outerp | main.go:50:7:50:12 | outerp | +| main.go:49:7:49:12 | outerp [postupdate] | main.go:50:7:50:12 | outerp | | main.go:54:2:54:6 | definition of inner | main.go:55:19:55:23 | inner | | main.go:54:11:54:25 | struct literal | main.go:54:2:54:6 | definition of inner | +| main.go:54:11:54:25 | struct literal [postupdate] | main.go:54:2:54:6 | definition of inner | | main.go:55:2:55:7 | definition of middle | main.go:56:17:56:22 | middle | | main.go:55:12:55:24 | struct literal | main.go:55:2:55:7 | definition of middle | +| main.go:55:12:55:24 | struct literal [postupdate] | main.go:55:2:55:7 | definition of middle | | main.go:56:2:56:6 | definition of outer | main.go:57:7:57:11 | outer | -| main.go:56:2:56:6 | definition of outer | main.go:58:7:58:11 | outer | -| main.go:56:2:56:6 | definition of outer | main.go:59:7:59:11 | outer | -| main.go:56:2:56:6 | definition of outer | main.go:60:7:60:11 | outer | | main.go:56:11:56:23 | struct literal | main.go:56:2:56:6 | definition of outer | +| main.go:56:11:56:23 | struct literal [postupdate] | main.go:56:2:56:6 | definition of outer | +| main.go:57:7:57:11 | outer | main.go:58:7:58:11 | outer | +| main.go:58:7:58:11 | outer | main.go:59:7:59:11 | outer | +| main.go:59:7:59:11 | outer | main.go:60:7:60:11 | outer | | main.go:62:2:62:7 | definition of innerp | main.go:63:20:63:25 | innerp | | main.go:62:12:62:26 | struct literal | main.go:62:2:62:7 | definition of innerp | +| main.go:62:12:62:26 | struct literal [postupdate] | main.go:62:2:62:7 | definition of innerp | | main.go:63:2:63:8 | definition of middlep | main.go:64:18:64:24 | middlep | | main.go:63:13:63:26 | struct literal | main.go:63:2:63:8 | definition of middlep | +| main.go:63:13:63:26 | struct literal [postupdate] | main.go:63:2:63:8 | definition of middlep | | main.go:64:2:64:7 | definition of outerp | main.go:65:7:65:12 | outerp | -| main.go:64:2:64:7 | definition of outerp | main.go:66:7:66:12 | outerp | -| main.go:64:2:64:7 | definition of outerp | main.go:67:7:67:12 | outerp | -| main.go:64:2:64:7 | definition of outerp | main.go:68:7:68:12 | outerp | | main.go:64:12:64:25 | struct literal | main.go:64:2:64:7 | definition of outerp | +| main.go:64:12:64:25 | struct literal [postupdate] | main.go:64:2:64:7 | definition of outerp | +| main.go:65:7:65:12 | outerp | main.go:66:7:66:12 | outerp | +| main.go:66:7:66:12 | outerp | main.go:67:7:67:12 | outerp | +| main.go:67:7:67:12 | outerp | main.go:68:7:68:12 | outerp | | main.go:72:2:72:6 | definition of inner | main.go:73:26:73:30 | inner | | main.go:72:11:72:25 | struct literal | main.go:72:2:72:6 | definition of inner | +| main.go:72:11:72:25 | struct literal [postupdate] | main.go:72:2:72:6 | definition of inner | | main.go:73:2:73:7 | definition of middle | main.go:74:25:74:30 | middle | | main.go:73:12:73:31 | struct literal | main.go:73:2:73:7 | definition of middle | +| main.go:73:12:73:31 | struct literal [postupdate] | main.go:73:2:73:7 | definition of middle | | main.go:74:2:74:6 | definition of outer | main.go:75:7:75:11 | outer | -| main.go:74:2:74:6 | definition of outer | main.go:76:7:76:11 | outer | -| main.go:74:2:74:6 | definition of outer | main.go:77:7:77:11 | outer | -| main.go:74:2:74:6 | definition of outer | main.go:78:7:78:11 | outer | | main.go:74:11:74:31 | struct literal | main.go:74:2:74:6 | definition of outer | +| main.go:74:11:74:31 | struct literal [postupdate] | main.go:74:2:74:6 | definition of outer | +| main.go:75:7:75:11 | outer | main.go:76:7:76:11 | outer | +| main.go:76:7:76:11 | outer | main.go:77:7:77:11 | outer | +| main.go:77:7:77:11 | outer | main.go:78:7:78:11 | outer | | main.go:80:2:80:7 | definition of innerp | main.go:81:27:81:32 | innerp | | main.go:80:12:80:26 | struct literal | main.go:80:2:80:7 | definition of innerp | +| main.go:80:12:80:26 | struct literal [postupdate] | main.go:80:2:80:7 | definition of innerp | | main.go:81:2:81:8 | definition of middlep | main.go:82:26:82:32 | middlep | | main.go:81:13:81:33 | struct literal | main.go:81:2:81:8 | definition of middlep | +| main.go:81:13:81:33 | struct literal [postupdate] | main.go:81:2:81:8 | definition of middlep | | main.go:82:2:82:7 | definition of outerp | main.go:83:7:83:12 | outerp | -| main.go:82:2:82:7 | definition of outerp | main.go:84:7:84:12 | outerp | -| main.go:82:2:82:7 | definition of outerp | main.go:85:7:85:12 | outerp | -| main.go:82:2:82:7 | definition of outerp | main.go:86:7:86:12 | outerp | | main.go:82:12:82:33 | struct literal | main.go:82:2:82:7 | definition of outerp | +| main.go:82:12:82:33 | struct literal [postupdate] | main.go:82:2:82:7 | definition of outerp | +| main.go:83:7:83:12 | outerp | main.go:84:7:84:12 | outerp | +| main.go:84:7:84:12 | outerp | main.go:85:7:85:12 | outerp | +| main.go:85:7:85:12 | outerp | main.go:86:7:86:12 | outerp | | main.go:90:6:90:10 | definition of outer | main.go:91:2:91:6 | outer | -| main.go:90:6:90:10 | definition of outer | main.go:92:7:92:11 | outer | -| main.go:90:6:90:10 | definition of outer | main.go:93:7:93:11 | outer | -| main.go:90:6:90:10 | definition of outer | main.go:94:7:94:11 | outer | -| main.go:90:6:90:10 | definition of outer | main.go:95:7:95:11 | outer | | main.go:90:6:90:10 | zero value for outer | main.go:90:6:90:10 | definition of outer | +| main.go:91:2:91:6 | outer | main.go:92:7:92:11 | outer | +| main.go:91:2:91:6 | outer [postupdate] | main.go:92:7:92:11 | outer | +| main.go:92:7:92:11 | outer | main.go:93:7:93:11 | outer | +| main.go:93:7:93:11 | outer | main.go:94:7:94:11 | outer | +| main.go:94:7:94:11 | outer | main.go:95:7:95:11 | outer | | main.go:97:6:97:11 | definition of outerp | main.go:98:2:98:7 | outerp | -| main.go:97:6:97:11 | definition of outerp | main.go:99:7:99:12 | outerp | -| main.go:97:6:97:11 | definition of outerp | main.go:100:7:100:12 | outerp | -| main.go:97:6:97:11 | definition of outerp | main.go:101:7:101:12 | outerp | -| main.go:97:6:97:11 | definition of outerp | main.go:102:7:102:12 | outerp | | main.go:97:6:97:11 | zero value for outerp | main.go:97:6:97:11 | definition of outerp | +| main.go:98:2:98:7 | outerp | main.go:99:7:99:12 | outerp | +| main.go:98:2:98:7 | outerp [postupdate] | main.go:99:7:99:12 | outerp | +| main.go:99:7:99:12 | outerp | main.go:100:7:100:12 | outerp | +| main.go:100:7:100:12 | outerp | main.go:101:7:101:12 | outerp | +| main.go:101:7:101:12 | outerp | main.go:102:7:102:12 | outerp | | main.go:106:6:106:10 | definition of outer | main.go:107:2:107:6 | outer | -| main.go:106:6:106:10 | definition of outer | main.go:108:7:108:11 | outer | -| main.go:106:6:106:10 | definition of outer | main.go:109:7:109:11 | outer | -| main.go:106:6:106:10 | definition of outer | main.go:110:7:110:11 | outer | -| main.go:106:6:106:10 | definition of outer | main.go:111:7:111:11 | outer | | main.go:106:6:106:10 | zero value for outer | main.go:106:6:106:10 | definition of outer | +| main.go:107:2:107:6 | outer | main.go:108:7:108:11 | outer | +| main.go:107:2:107:6 | outer [postupdate] | main.go:108:7:108:11 | outer | +| main.go:108:7:108:11 | outer | main.go:109:7:109:11 | outer | +| main.go:109:7:109:11 | outer | main.go:110:7:110:11 | outer | +| main.go:110:7:110:11 | outer | main.go:111:7:111:11 | outer | | main.go:113:6:113:11 | definition of outerp | main.go:114:2:114:7 | outerp | -| main.go:113:6:113:11 | definition of outerp | main.go:115:7:115:12 | outerp | -| main.go:113:6:113:11 | definition of outerp | main.go:116:7:116:12 | outerp | -| main.go:113:6:113:11 | definition of outerp | main.go:117:7:117:12 | outerp | -| main.go:113:6:113:11 | definition of outerp | main.go:118:7:118:12 | outerp | | main.go:113:6:113:11 | zero value for outerp | main.go:113:6:113:11 | definition of outerp | +| main.go:114:2:114:7 | outerp | main.go:115:7:115:12 | outerp | +| main.go:114:2:114:7 | outerp [postupdate] | main.go:115:7:115:12 | outerp | +| main.go:115:7:115:12 | outerp | main.go:116:7:116:12 | outerp | +| main.go:116:7:116:12 | outerp | main.go:117:7:117:12 | outerp | +| main.go:117:7:117:12 | outerp | main.go:118:7:118:12 | outerp | | main.go:122:6:122:10 | definition of outer | main.go:123:2:123:6 | outer | -| main.go:122:6:122:10 | definition of outer | main.go:124:7:124:11 | outer | -| main.go:122:6:122:10 | definition of outer | main.go:125:7:125:11 | outer | -| main.go:122:6:122:10 | definition of outer | main.go:126:7:126:11 | outer | -| main.go:122:6:122:10 | definition of outer | main.go:127:7:127:11 | outer | | main.go:122:6:122:10 | zero value for outer | main.go:122:6:122:10 | definition of outer | +| main.go:123:2:123:6 | outer | main.go:124:7:124:11 | outer | +| main.go:123:2:123:6 | outer [postupdate] | main.go:124:7:124:11 | outer | +| main.go:124:7:124:11 | outer | main.go:125:7:125:11 | outer | +| main.go:125:7:125:11 | outer | main.go:126:7:126:11 | outer | +| main.go:126:7:126:11 | outer | main.go:127:7:127:11 | outer | | main.go:129:6:129:11 | definition of outerp | main.go:130:2:130:7 | outerp | -| main.go:129:6:129:11 | definition of outerp | main.go:131:7:131:12 | outerp | -| main.go:129:6:129:11 | definition of outerp | main.go:132:7:132:12 | outerp | -| main.go:129:6:129:11 | definition of outerp | main.go:133:7:133:12 | outerp | -| main.go:129:6:129:11 | definition of outerp | main.go:134:7:134:12 | outerp | | main.go:129:6:129:11 | zero value for outerp | main.go:129:6:129:11 | definition of outerp | +| main.go:130:2:130:7 | outerp | main.go:131:7:131:12 | outerp | +| main.go:130:2:130:7 | outerp [postupdate] | main.go:131:7:131:12 | outerp | +| main.go:131:7:131:12 | outerp | main.go:132:7:132:12 | outerp | +| main.go:132:7:132:12 | outerp | main.go:133:7:133:12 | outerp | +| main.go:133:7:133:12 | outerp | main.go:134:7:134:12 | outerp | | main.go:138:6:138:10 | definition of outer | main.go:139:2:139:6 | outer | -| main.go:138:6:138:10 | definition of outer | main.go:140:7:140:11 | outer | -| main.go:138:6:138:10 | definition of outer | main.go:141:7:141:11 | outer | -| main.go:138:6:138:10 | definition of outer | main.go:142:7:142:11 | outer | -| main.go:138:6:138:10 | definition of outer | main.go:143:7:143:11 | outer | | main.go:138:6:138:10 | zero value for outer | main.go:138:6:138:10 | definition of outer | +| main.go:139:2:139:6 | outer | main.go:140:7:140:11 | outer | +| main.go:139:2:139:6 | outer [postupdate] | main.go:140:7:140:11 | outer | +| main.go:140:7:140:11 | outer | main.go:141:7:141:11 | outer | +| main.go:141:7:141:11 | outer | main.go:142:7:142:11 | outer | +| main.go:142:7:142:11 | outer | main.go:143:7:143:11 | outer | | main.go:145:6:145:11 | definition of outerp | main.go:146:2:146:7 | outerp | -| main.go:145:6:145:11 | definition of outerp | main.go:147:7:147:12 | outerp | -| main.go:145:6:145:11 | definition of outerp | main.go:148:7:148:12 | outerp | -| main.go:145:6:145:11 | definition of outerp | main.go:149:7:149:12 | outerp | -| main.go:145:6:145:11 | definition of outerp | main.go:150:7:150:12 | outerp | | main.go:145:6:145:11 | zero value for outerp | main.go:145:6:145:11 | definition of outerp | +| main.go:146:2:146:7 | outerp | main.go:147:7:147:12 | outerp | +| main.go:146:2:146:7 | outerp [postupdate] | main.go:147:7:147:12 | outerp | +| main.go:147:7:147:12 | outerp | main.go:148:7:148:12 | outerp | +| main.go:148:7:148:12 | outerp | main.go:149:7:149:12 | outerp | +| main.go:149:7:149:12 | outerp | main.go:150:7:150:12 | outerp | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesElement.expected b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesElement.expected index 77bb562d3f5..44792aa3d29 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesElement.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesElement.expected @@ -1,3 +1,3 @@ -| tst.go:19:2:19:6 | assignment to element | tst.go:19:2:19:3 | xs | tst.go:19:5:19:5 | 0 | tst.go:19:10:19:14 | index expression | -| tst.go:20:2:20:6 | assignment to element | tst.go:20:2:20:3 | implicit dereference | tst.go:20:5:20:5 | 0 | tst.go:20:10:20:14 | index expression | -| tst.go:20:2:20:6 | assignment to element | tst.go:20:2:20:3 | ps | tst.go:20:5:20:5 | 0 | tst.go:20:10:20:14 | index expression | +| tst.go:19:2:19:6 | assignment to element | tst.go:19:2:19:3 | xs [postupdate] | tst.go:19:5:19:5 | 0 | tst.go:19:10:19:14 | index expression | +| tst.go:20:2:20:6 | assignment to element | tst.go:20:2:20:3 | implicit dereference [postupdate] | tst.go:20:5:20:5 | 0 | tst.go:20:10:20:14 | index expression | +| tst.go:20:2:20:6 | assignment to element | tst.go:20:2:20:3 | ps [postupdate] | tst.go:20:5:20:5 | 0 | tst.go:20:10:20:14 | index expression | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesField.expected b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesField.expected index 8e71670f8c1..7862b2d61b3 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesField.expected +++ b/go/ql/test/library-tests/semmle/go/dataflow/ReadsAndWrites/writesField.expected @@ -1,3 +1,3 @@ -| tst.go:8:2:8:4 | assignment to field f | tst.go:8:2:8:2 | implicit dereference | tst.go:4:2:4:2 | f | tst.go:8:8:8:14 | ...+... | -| tst.go:8:2:8:4 | assignment to field f | tst.go:8:2:8:2 | t | tst.go:4:2:4:2 | f | tst.go:8:8:8:14 | ...+... | -| tst.go:17:2:17:4 | assignment to field f | tst.go:17:2:17:2 | x | tst.go:4:2:4:2 | f | tst.go:17:8:17:14 | ...+... | +| tst.go:8:2:8:4 | assignment to field f | tst.go:8:2:8:2 | implicit dereference [postupdate] | tst.go:4:2:4:2 | f | tst.go:8:8:8:14 | ...+... | +| tst.go:8:2:8:4 | assignment to field f | tst.go:8:2:8:2 | t [postupdate] | tst.go:4:2:4:2 | f | tst.go:8:8:8:14 | ...+... | +| tst.go:17:2:17:4 | assignment to field f | tst.go:17:2:17:2 | x [postupdate] | tst.go:4:2:4:2 | f | tst.go:17:8:17:14 | ...+... | diff --git a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/database/test_gogf_gf_database_gdb.go b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/database/test_gogf_gf_database_gdb.go index 436c9dab677..45e6a3aefa1 100644 --- a/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/database/test_gogf_gf_database_gdb.go +++ b/go/ql/test/library-tests/semmle/go/dataflow/flowsources/local/database/test_gogf_gf_database_gdb.go @@ -30,9 +30,9 @@ func gogf_Core(g gdb.Core) { g.GetStruct(&v7, "SELECT user from users") // $ source sink(v7) // $ hasTaintFlow="v7" - var v8 []User // $ source - g.GetStructs(v8, "SELECT user from users") - sink(v8) // $ hasTaintFlow="v8" + var v8 []User + g.GetStructs(v8, "SELECT user from users") // $ source + sink(v8) // $ hasTaintFlow="v8" v9, _ := g.GetValue("SELECT user from users") // $ source sink(v9) // $ hasTaintFlow="v9" @@ -132,9 +132,9 @@ func gogf_TX(g gdb.TX) { g.GetStruct(&v4, "SELECT user from users") // $ source sink(v4) // $ hasTaintFlow="v4" - var v5 []User // $ source - g.GetStructs(v5, "SELECT user from users") - sink(v5) // $ hasTaintFlow="v5" + var v5 []User + g.GetStructs(v5, "SELECT user from users") // $ source + sink(v5) // $ hasTaintFlow="v5" v6, _ := g.GetValue("SELECT user from users") // $ source sink(v6) // $ hasTaintFlow="v6" diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/CleartextLogging.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/CleartextLogging.expected index 6fd71942356..591d990be47 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/CleartextLogging.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/CleartextLogging.expected @@ -1,5 +1,40 @@ edges +| test.go:153:17:153:24 | definition of password | test.go:154:14:154:21 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:155:17:155:24 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:156:14:156:21 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:157:18:157:25 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:158:14:158:21 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:159:13:159:20 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:160:22:160:29 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:161:15:161:22 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:162:14:162:21 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:163:13:163:20 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:164:16:164:23 | password | provenance | | +| test.go:153:17:153:24 | definition of password | test.go:165:13:165:20 | password | provenance | Sink:MaD:380 | +| test.go:153:17:153:24 | definition of password | test.go:166:16:166:23 | password | provenance | Sink:MaD:381 | +| test.go:153:17:153:24 | definition of password | test.go:167:13:167:20 | password | provenance | Sink:MaD:382 | +| test.go:153:17:153:24 | definition of password | test.go:168:17:168:24 | password | provenance | Sink:MaD:383 | +| test.go:153:17:153:24 | definition of password | test.go:169:13:169:20 | password | provenance | Sink:MaD:384 | +| test.go:153:17:153:24 | definition of password | test.go:170:12:170:19 | password | provenance | Sink:MaD:385 | +| test.go:153:17:153:24 | definition of password | test.go:171:21:171:28 | password | provenance | Sink:MaD:386 | +| test.go:153:17:153:24 | definition of password | test.go:172:14:172:21 | password | provenance | Sink:MaD:387 | +| test.go:153:17:153:24 | definition of password | test.go:173:13:173:20 | password | provenance | Sink:MaD:388 | +| test.go:153:17:153:24 | definition of password | test.go:174:12:174:19 | password | provenance | Sink:MaD:389 | +| test.go:153:17:153:24 | definition of password | test.go:175:15:175:22 | password | provenance | Sink:MaD:390 | +| test.go:153:17:153:24 | definition of password | test.go:176:15:176:22 | password | provenance | Sink:MaD:391 | +| test.go:153:17:153:24 | definition of password | test.go:177:18:177:25 | password | provenance | Sink:MaD:392 | +| test.go:153:17:153:24 | definition of password | test.go:178:15:178:22 | password | provenance | Sink:MaD:393 | +| test.go:153:17:153:24 | definition of password | test.go:179:19:179:26 | password | provenance | Sink:MaD:394 | +| test.go:153:17:153:24 | definition of password | test.go:180:15:180:22 | password | provenance | Sink:MaD:395 | +| test.go:153:17:153:24 | definition of password | test.go:181:14:181:21 | password | provenance | Sink:MaD:396 | +| test.go:153:17:153:24 | definition of password | test.go:182:23:182:30 | password | provenance | Sink:MaD:397 | +| test.go:153:17:153:24 | definition of password | test.go:183:16:183:23 | password | provenance | Sink:MaD:398 | +| test.go:153:17:153:24 | definition of password | test.go:184:15:184:22 | password | provenance | Sink:MaD:399 | +| test.go:153:17:153:24 | definition of password | test.go:185:14:185:21 | password | provenance | Sink:MaD:400 | +| test.go:153:17:153:24 | definition of password | test.go:186:17:186:24 | password | provenance | Sink:MaD:401 | +| test.go:153:17:153:24 | definition of password | test.go:187:16:187:23 | password | provenance | | nodes +| test.go:153:17:153:24 | definition of password | semmle.label | definition of password | | test.go:154:14:154:21 | password | semmle.label | password | | test.go:155:17:155:24 | password | semmle.label | password | | test.go:156:14:156:21 | password | semmle.label | password | @@ -36,37 +71,37 @@ nodes | test.go:187:16:187:23 | password | semmle.label | password | subpaths #select -| test.go:154:14:154:21 | password | test.go:154:14:154:21 | password | test.go:154:14:154:21 | password | $@ flows to a logging call. | test.go:154:14:154:21 | password | Sensitive data returned by an access to password | -| test.go:155:17:155:24 | password | test.go:155:17:155:24 | password | test.go:155:17:155:24 | password | $@ flows to a logging call. | test.go:155:17:155:24 | password | Sensitive data returned by an access to password | -| test.go:156:14:156:21 | password | test.go:156:14:156:21 | password | test.go:156:14:156:21 | password | $@ flows to a logging call. | test.go:156:14:156:21 | password | Sensitive data returned by an access to password | -| test.go:157:18:157:25 | password | test.go:157:18:157:25 | password | test.go:157:18:157:25 | password | $@ flows to a logging call. | test.go:157:18:157:25 | password | Sensitive data returned by an access to password | -| test.go:158:14:158:21 | password | test.go:158:14:158:21 | password | test.go:158:14:158:21 | password | $@ flows to a logging call. | test.go:158:14:158:21 | password | Sensitive data returned by an access to password | -| test.go:159:13:159:20 | password | test.go:159:13:159:20 | password | test.go:159:13:159:20 | password | $@ flows to a logging call. | test.go:159:13:159:20 | password | Sensitive data returned by an access to password | -| test.go:160:22:160:29 | password | test.go:160:22:160:29 | password | test.go:160:22:160:29 | password | $@ flows to a logging call. | test.go:160:22:160:29 | password | Sensitive data returned by an access to password | -| test.go:161:15:161:22 | password | test.go:161:15:161:22 | password | test.go:161:15:161:22 | password | $@ flows to a logging call. | test.go:161:15:161:22 | password | Sensitive data returned by an access to password | -| test.go:162:14:162:21 | password | test.go:162:14:162:21 | password | test.go:162:14:162:21 | password | $@ flows to a logging call. | test.go:162:14:162:21 | password | Sensitive data returned by an access to password | -| test.go:163:13:163:20 | password | test.go:163:13:163:20 | password | test.go:163:13:163:20 | password | $@ flows to a logging call. | test.go:163:13:163:20 | password | Sensitive data returned by an access to password | -| test.go:164:16:164:23 | password | test.go:164:16:164:23 | password | test.go:164:16:164:23 | password | $@ flows to a logging call. | test.go:164:16:164:23 | password | Sensitive data returned by an access to password | -| test.go:165:13:165:20 | password | test.go:165:13:165:20 | password | test.go:165:13:165:20 | password | $@ flows to a logging call. | test.go:165:13:165:20 | password | Sensitive data returned by an access to password | -| test.go:166:16:166:23 | password | test.go:166:16:166:23 | password | test.go:166:16:166:23 | password | $@ flows to a logging call. | test.go:166:16:166:23 | password | Sensitive data returned by an access to password | -| test.go:167:13:167:20 | password | test.go:167:13:167:20 | password | test.go:167:13:167:20 | password | $@ flows to a logging call. | test.go:167:13:167:20 | password | Sensitive data returned by an access to password | -| test.go:168:17:168:24 | password | test.go:168:17:168:24 | password | test.go:168:17:168:24 | password | $@ flows to a logging call. | test.go:168:17:168:24 | password | Sensitive data returned by an access to password | -| test.go:169:13:169:20 | password | test.go:169:13:169:20 | password | test.go:169:13:169:20 | password | $@ flows to a logging call. | test.go:169:13:169:20 | password | Sensitive data returned by an access to password | -| test.go:170:12:170:19 | password | test.go:170:12:170:19 | password | test.go:170:12:170:19 | password | $@ flows to a logging call. | test.go:170:12:170:19 | password | Sensitive data returned by an access to password | -| test.go:171:21:171:28 | password | test.go:171:21:171:28 | password | test.go:171:21:171:28 | password | $@ flows to a logging call. | test.go:171:21:171:28 | password | Sensitive data returned by an access to password | -| test.go:172:14:172:21 | password | test.go:172:14:172:21 | password | test.go:172:14:172:21 | password | $@ flows to a logging call. | test.go:172:14:172:21 | password | Sensitive data returned by an access to password | -| test.go:173:13:173:20 | password | test.go:173:13:173:20 | password | test.go:173:13:173:20 | password | $@ flows to a logging call. | test.go:173:13:173:20 | password | Sensitive data returned by an access to password | -| test.go:174:12:174:19 | password | test.go:174:12:174:19 | password | test.go:174:12:174:19 | password | $@ flows to a logging call. | test.go:174:12:174:19 | password | Sensitive data returned by an access to password | -| test.go:175:15:175:22 | password | test.go:175:15:175:22 | password | test.go:175:15:175:22 | password | $@ flows to a logging call. | test.go:175:15:175:22 | password | Sensitive data returned by an access to password | -| test.go:176:15:176:22 | password | test.go:176:15:176:22 | password | test.go:176:15:176:22 | password | $@ flows to a logging call. | test.go:176:15:176:22 | password | Sensitive data returned by an access to password | -| test.go:177:18:177:25 | password | test.go:177:18:177:25 | password | test.go:177:18:177:25 | password | $@ flows to a logging call. | test.go:177:18:177:25 | password | Sensitive data returned by an access to password | -| test.go:178:15:178:22 | password | test.go:178:15:178:22 | password | test.go:178:15:178:22 | password | $@ flows to a logging call. | test.go:178:15:178:22 | password | Sensitive data returned by an access to password | -| test.go:179:19:179:26 | password | test.go:179:19:179:26 | password | test.go:179:19:179:26 | password | $@ flows to a logging call. | test.go:179:19:179:26 | password | Sensitive data returned by an access to password | -| test.go:180:15:180:22 | password | test.go:180:15:180:22 | password | test.go:180:15:180:22 | password | $@ flows to a logging call. | test.go:180:15:180:22 | password | Sensitive data returned by an access to password | -| test.go:181:14:181:21 | password | test.go:181:14:181:21 | password | test.go:181:14:181:21 | password | $@ flows to a logging call. | test.go:181:14:181:21 | password | Sensitive data returned by an access to password | -| test.go:182:23:182:30 | password | test.go:182:23:182:30 | password | test.go:182:23:182:30 | password | $@ flows to a logging call. | test.go:182:23:182:30 | password | Sensitive data returned by an access to password | -| test.go:183:16:183:23 | password | test.go:183:16:183:23 | password | test.go:183:16:183:23 | password | $@ flows to a logging call. | test.go:183:16:183:23 | password | Sensitive data returned by an access to password | -| test.go:184:15:184:22 | password | test.go:184:15:184:22 | password | test.go:184:15:184:22 | password | $@ flows to a logging call. | test.go:184:15:184:22 | password | Sensitive data returned by an access to password | -| test.go:185:14:185:21 | password | test.go:185:14:185:21 | password | test.go:185:14:185:21 | password | $@ flows to a logging call. | test.go:185:14:185:21 | password | Sensitive data returned by an access to password | -| test.go:186:17:186:24 | password | test.go:186:17:186:24 | password | test.go:186:17:186:24 | password | $@ flows to a logging call. | test.go:186:17:186:24 | password | Sensitive data returned by an access to password | -| test.go:187:16:187:23 | password | test.go:187:16:187:23 | password | test.go:187:16:187:23 | password | $@ flows to a logging call. | test.go:187:16:187:23 | password | Sensitive data returned by an access to password | +| test.go:154:14:154:21 | password | test.go:153:17:153:24 | definition of password | test.go:154:14:154:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:155:17:155:24 | password | test.go:153:17:153:24 | definition of password | test.go:155:17:155:24 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:156:14:156:21 | password | test.go:153:17:153:24 | definition of password | test.go:156:14:156:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:157:18:157:25 | password | test.go:153:17:153:24 | definition of password | test.go:157:18:157:25 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:158:14:158:21 | password | test.go:153:17:153:24 | definition of password | test.go:158:14:158:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:159:13:159:20 | password | test.go:153:17:153:24 | definition of password | test.go:159:13:159:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:160:22:160:29 | password | test.go:153:17:153:24 | definition of password | test.go:160:22:160:29 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:161:15:161:22 | password | test.go:153:17:153:24 | definition of password | test.go:161:15:161:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:162:14:162:21 | password | test.go:153:17:153:24 | definition of password | test.go:162:14:162:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:163:13:163:20 | password | test.go:153:17:153:24 | definition of password | test.go:163:13:163:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:164:16:164:23 | password | test.go:153:17:153:24 | definition of password | test.go:164:16:164:23 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:165:13:165:20 | password | test.go:153:17:153:24 | definition of password | test.go:165:13:165:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:166:16:166:23 | password | test.go:153:17:153:24 | definition of password | test.go:166:16:166:23 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:167:13:167:20 | password | test.go:153:17:153:24 | definition of password | test.go:167:13:167:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:168:17:168:24 | password | test.go:153:17:153:24 | definition of password | test.go:168:17:168:24 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:169:13:169:20 | password | test.go:153:17:153:24 | definition of password | test.go:169:13:169:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:170:12:170:19 | password | test.go:153:17:153:24 | definition of password | test.go:170:12:170:19 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:171:21:171:28 | password | test.go:153:17:153:24 | definition of password | test.go:171:21:171:28 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:172:14:172:21 | password | test.go:153:17:153:24 | definition of password | test.go:172:14:172:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:173:13:173:20 | password | test.go:153:17:153:24 | definition of password | test.go:173:13:173:20 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:174:12:174:19 | password | test.go:153:17:153:24 | definition of password | test.go:174:12:174:19 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:175:15:175:22 | password | test.go:153:17:153:24 | definition of password | test.go:175:15:175:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:176:15:176:22 | password | test.go:153:17:153:24 | definition of password | test.go:176:15:176:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:177:18:177:25 | password | test.go:153:17:153:24 | definition of password | test.go:177:18:177:25 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:178:15:178:22 | password | test.go:153:17:153:24 | definition of password | test.go:178:15:178:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:179:19:179:26 | password | test.go:153:17:153:24 | definition of password | test.go:179:19:179:26 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:180:15:180:22 | password | test.go:153:17:153:24 | definition of password | test.go:180:15:180:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:181:14:181:21 | password | test.go:153:17:153:24 | definition of password | test.go:181:14:181:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:182:23:182:30 | password | test.go:153:17:153:24 | definition of password | test.go:182:23:182:30 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:183:16:183:23 | password | test.go:153:17:153:24 | definition of password | test.go:183:16:183:23 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:184:15:184:22 | password | test.go:153:17:153:24 | definition of password | test.go:184:15:184:22 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:185:14:185:21 | password | test.go:153:17:153:24 | definition of password | test.go:185:14:185:21 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:186:17:186:24 | password | test.go:153:17:153:24 | definition of password | test.go:186:17:186:24 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | +| test.go:187:16:187:23 | password | test.go:153:17:153:24 | definition of password | test.go:187:16:187:23 | password | $@ flows to a logging call. | test.go:153:17:153:24 | definition of password | Sensitive data returned by an access to password | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected index aa0345f221e..be8ae2ec2fa 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/ReflectedXss.expected @@ -1,7 +1,7 @@ #select -| test.go:35:13:35:30 | type conversion | test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:33:6:33:10 | definition of bound | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:36:13:36:27 | type conversion | test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:33:6:33:10 | definition of bound | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:37:13:37:29 | type conversion | test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:33:6:33:10 | definition of bound | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:35:13:35:30 | type conversion | test.go:34:13:34:17 | bound [postupdate] | test.go:35:13:35:30 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:34:13:34:17 | bound [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:36:13:36:27 | type conversion | test.go:34:13:34:17 | bound [postupdate] | test.go:36:13:36:27 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:34:13:34:17 | bound [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:37:13:37:29 | type conversion | test.go:34:13:34:17 | bound [postupdate] | test.go:37:13:37:29 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:34:13:34:17 | bound [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:42:13:42:43 | type conversion | test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:42:20:42:42 | call to Cookie | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:47:13:47:52 | type conversion | test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:47:20:47:31 | call to Data | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:52:13:52:53 | type conversion | test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:52:20:52:43 | call to GetData | user-provided value | test.go:0:0:0:0 | test.go | | @@ -30,7 +30,7 @@ | test.go:232:14:232:22 | type conversion | test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:231:7:231:28 | call to GetString | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:235:14:235:26 | type conversion | test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:234:8:234:35 | call to GetStrings | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:238:14:238:27 | type conversion | test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:237:9:237:17 | call to Input | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:242:14:242:30 | type conversion | test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:240:6:240:8 | definition of str | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:242:14:242:30 | type conversion | test.go:241:14:241:16 | str [postupdate] | test.go:242:14:242:30 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:241:14:241:16 | str [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:249:21:249:29 | untrusted | test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | Cross-site scripting vulnerability due to $@. | test.go:246:15:246:36 | call to GetString | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:259:16:259:45 | type conversion | test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:259:23:259:44 | call to GetCookie | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:264:16:264:37 | call to GetCookie | test.go:264:16:264:37 | call to GetCookie | test.go:264:16:264:37 | call to GetCookie | Cross-site scripting vulnerability due to $@. | test.go:264:16:264:37 | call to GetCookie | user-provided value | test.go:0:0:0:0 | test.go | | @@ -53,9 +53,9 @@ | test.go:311:21:311:48 | type assertion | test.go:309:15:309:36 | call to GetString | test.go:311:21:311:48 | type assertion | Cross-site scripting vulnerability due to $@. | test.go:309:15:309:36 | call to GetString | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:312:21:312:52 | type assertion | test.go:309:15:309:36 | call to GetString | test.go:312:21:312:52 | type assertion | Cross-site scripting vulnerability due to $@. | test.go:309:15:309:36 | call to GetString | user-provided value | test.go:0:0:0:0 | test.go | | edges -| test.go:33:6:33:10 | definition of bound | test.go:35:13:35:30 | type conversion | provenance | Src:MaD:1 | -| test.go:33:6:33:10 | definition of bound | test.go:36:13:36:27 | type conversion | provenance | Src:MaD:1 | -| test.go:33:6:33:10 | definition of bound | test.go:37:13:37:29 | type conversion | provenance | Src:MaD:1 | +| test.go:34:13:34:17 | bound [postupdate] | test.go:35:13:35:30 | type conversion | provenance | Src:MaD:1 | +| test.go:34:13:34:17 | bound [postupdate] | test.go:36:13:36:27 | type conversion | provenance | Src:MaD:1 | +| test.go:34:13:34:17 | bound [postupdate] | test.go:37:13:37:29 | type conversion | provenance | Src:MaD:1 | | test.go:42:20:42:42 | call to Cookie | test.go:42:13:42:43 | type conversion | provenance | Src:MaD:2 | | test.go:47:20:47:31 | call to Data | test.go:47:13:47:52 | type conversion | provenance | Src:MaD:3 | | test.go:52:20:52:43 | call to GetData | test.go:52:13:52:53 | type conversion | provenance | Src:MaD:4 | @@ -87,8 +87,8 @@ edges | test.go:204:36:204:53 | type assertion | test.go:204:21:204:54 | call to Str2html | provenance | MaD:39 | | test.go:205:21:205:58 | call to Substr | test.go:205:14:205:59 | type conversion | provenance | | | test.go:205:34:205:51 | type assertion | test.go:205:21:205:58 | call to Substr | provenance | MaD:40 | -| test.go:207:6:207:6 | definition of s | test.go:209:14:209:28 | type conversion | provenance | | -| test.go:208:18:208:33 | selection of Form | test.go:207:6:207:6 | definition of s | provenance | Src:MaD:21 MaD:38 | +| test.go:208:18:208:33 | selection of Form | test.go:208:36:208:36 | s [postupdate] | provenance | Src:MaD:21 MaD:38 | +| test.go:208:36:208:36 | s [postupdate] | test.go:209:14:209:28 | type conversion | provenance | | | test.go:223:2:223:34 | ... := ...[0] | test.go:225:31:225:31 | f | provenance | Src:MaD:15 | | test.go:223:2:223:34 | ... := ...[1] | test.go:224:14:224:32 | type conversion | provenance | Src:MaD:15 | | test.go:225:2:225:32 | ... := ...[0] | test.go:226:14:226:20 | content | provenance | | @@ -97,7 +97,7 @@ edges | test.go:231:7:231:28 | call to GetString | test.go:232:14:232:22 | type conversion | provenance | Src:MaD:17 | | test.go:234:8:234:35 | call to GetStrings | test.go:235:14:235:26 | type conversion | provenance | Src:MaD:18 | | test.go:237:9:237:17 | call to Input | test.go:238:14:238:27 | type conversion | provenance | Src:MaD:19 | -| test.go:240:6:240:8 | definition of str | test.go:242:14:242:30 | type conversion | provenance | Src:MaD:20 | +| test.go:241:14:241:16 | str [postupdate] | test.go:242:14:242:30 | type conversion | provenance | Src:MaD:20 | | test.go:246:15:246:36 | call to GetString | test.go:249:21:249:29 | untrusted | provenance | Src:MaD:17 | | test.go:259:23:259:44 | call to GetCookie | test.go:259:16:259:45 | type conversion | provenance | Src:MaD:14 | | test.go:270:62:270:83 | call to GetCookie | test.go:270:55:270:84 | type conversion | provenance | Src:MaD:14 | @@ -116,8 +116,8 @@ edges | test.go:275:2:275:40 | ... := ...[0] | test.go:301:39:301:50 | genericFiles | provenance | Src:MaD:16 | | test.go:275:2:275:40 | ... := ...[0] | test.go:302:40:302:51 | genericFiles | provenance | Src:MaD:16 | | test.go:275:2:275:40 | ... := ...[0] | test.go:303:39:303:50 | genericFiles | provenance | Src:MaD:16 | -| test.go:276:2:276:13 | definition of genericFiles [array] | test.go:297:51:297:62 | genericFiles [array] | provenance | | -| test.go:278:21:278:28 | index expression | test.go:276:2:276:13 | definition of genericFiles [array] | provenance | | +| test.go:278:3:278:14 | genericFiles [postupdate] [array] | test.go:297:51:297:62 | genericFiles [array] | provenance | | +| test.go:278:21:278:28 | index expression | test.go:278:3:278:14 | genericFiles [postupdate] [array] | provenance | | | test.go:283:44:283:60 | selection of Filename | test.go:283:21:283:61 | call to GetDisplayString | provenance | FunctionModel | | test.go:284:21:284:53 | call to SliceChunk | test.go:284:21:284:92 | selection of Filename | provenance | | | test.go:284:38:284:49 | genericFiles | test.go:284:21:284:53 | call to SliceChunk | provenance | MaD:22 | @@ -146,10 +146,10 @@ edges | test.go:302:40:302:51 | genericFiles | test.go:302:21:302:52 | call to SliceShuffle | provenance | MaD:30 | | test.go:303:21:303:51 | call to SliceUnique | test.go:303:21:303:87 | selection of Filename | provenance | | | test.go:303:39:303:50 | genericFiles | test.go:303:21:303:51 | call to SliceUnique | provenance | MaD:31 | -| test.go:308:2:308:5 | definition of bMap | test.go:311:21:311:24 | bMap | provenance | | -| test.go:308:2:308:5 | definition of bMap | test.go:312:21:312:24 | bMap | provenance | | | test.go:309:15:309:36 | call to GetString | test.go:310:22:310:30 | untrusted | provenance | Src:MaD:17 | -| test.go:310:22:310:30 | untrusted | test.go:308:2:308:5 | definition of bMap | provenance | MaD:34 | +| test.go:310:2:310:5 | bMap [postupdate] | test.go:311:21:311:24 | bMap | provenance | | +| test.go:310:2:310:5 | bMap [postupdate] | test.go:312:21:312:24 | bMap | provenance | | +| test.go:310:22:310:30 | untrusted | test.go:310:2:310:5 | bMap [postupdate] | provenance | MaD:34 | | test.go:311:21:311:24 | bMap | test.go:311:21:311:39 | call to Get | provenance | MaD:32 | | test.go:311:21:311:39 | call to Get | test.go:311:21:311:48 | type assertion | provenance | | | test.go:312:21:312:24 | bMap | test.go:312:21:312:32 | call to Items | provenance | MaD:33 | @@ -197,7 +197,7 @@ models | 40 | Summary: group:beego; ; false; Substr; ; ; Argument[0]; ReturnValue; taint; manual | | 41 | Summary: io/ioutil; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | nodes -| test.go:33:6:33:10 | definition of bound | semmle.label | definition of bound | +| test.go:34:13:34:17 | bound [postupdate] | semmle.label | bound [postupdate] | | test.go:35:13:35:30 | type conversion | semmle.label | type conversion | | test.go:36:13:36:27 | type conversion | semmle.label | type conversion | | test.go:37:13:37:29 | type conversion | semmle.label | type conversion | @@ -249,8 +249,8 @@ nodes | test.go:205:14:205:59 | type conversion | semmle.label | type conversion | | test.go:205:21:205:58 | call to Substr | semmle.label | call to Substr | | test.go:205:34:205:51 | type assertion | semmle.label | type assertion | -| test.go:207:6:207:6 | definition of s | semmle.label | definition of s | | test.go:208:18:208:33 | selection of Form | semmle.label | selection of Form | +| test.go:208:36:208:36 | s [postupdate] | semmle.label | s [postupdate] | | test.go:209:14:209:28 | type conversion | semmle.label | type conversion | | test.go:223:2:223:34 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:223:2:223:34 | ... := ...[1] | semmle.label | ... := ...[1] | @@ -266,7 +266,7 @@ nodes | test.go:235:14:235:26 | type conversion | semmle.label | type conversion | | test.go:237:9:237:17 | call to Input | semmle.label | call to Input | | test.go:238:14:238:27 | type conversion | semmle.label | type conversion | -| test.go:240:6:240:8 | definition of str | semmle.label | definition of str | +| test.go:241:14:241:16 | str [postupdate] | semmle.label | str [postupdate] | | test.go:242:14:242:30 | type conversion | semmle.label | type conversion | | test.go:246:15:246:36 | call to GetString | semmle.label | call to GetString | | test.go:249:21:249:29 | untrusted | semmle.label | untrusted | @@ -277,7 +277,7 @@ nodes | test.go:270:55:270:84 | type conversion | semmle.label | type conversion | | test.go:270:62:270:83 | call to GetCookie | semmle.label | call to GetCookie | | test.go:275:2:275:40 | ... := ...[0] | semmle.label | ... := ...[0] | -| test.go:276:2:276:13 | definition of genericFiles [array] | semmle.label | definition of genericFiles [array] | +| test.go:278:3:278:14 | genericFiles [postupdate] [array] | semmle.label | genericFiles [postupdate] [array] | | test.go:278:21:278:28 | index expression | semmle.label | index expression | | test.go:283:21:283:61 | call to GetDisplayString | semmle.label | call to GetDisplayString | | test.go:283:44:283:60 | selection of Filename | semmle.label | selection of Filename | @@ -321,8 +321,8 @@ nodes | test.go:303:21:303:51 | call to SliceUnique | semmle.label | call to SliceUnique | | test.go:303:21:303:87 | selection of Filename | semmle.label | selection of Filename | | test.go:303:39:303:50 | genericFiles | semmle.label | genericFiles | -| test.go:308:2:308:5 | definition of bMap | semmle.label | definition of bMap | | test.go:309:15:309:36 | call to GetString | semmle.label | call to GetString | +| test.go:310:2:310:5 | bMap [postupdate] | semmle.label | bMap [postupdate] | | test.go:310:22:310:30 | untrusted | semmle.label | untrusted | | test.go:311:21:311:24 | bMap | semmle.label | bMap | | test.go:311:21:311:39 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected index 98b536aac65..2324a9679ad 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/TaintedPath.expected @@ -10,8 +10,8 @@ edges | test.go:215:15:215:26 | call to Data | test.go:216:18:216:26 | untrusted | provenance | Src:MaD:6 Sink:MaD:2 | | test.go:215:15:215:26 | call to Data | test.go:217:10:217:18 | untrusted | provenance | Src:MaD:6 Sink:MaD:5 | | test.go:215:15:215:26 | call to Data | test.go:218:35:218:43 | untrusted | provenance | Src:MaD:6 Sink:MaD:3 | -| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... | provenance | Src:MaD:7 MaD:8 | -| test.go:324:40:324:43 | &... | test.go:326:35:326:43 | untrusted | provenance | Sink:MaD:3 | +| test.go:324:17:324:37 | selection of RequestBody | test.go:324:40:324:43 | &... [postupdate] | provenance | Src:MaD:7 MaD:8 | +| test.go:324:40:324:43 | &... [postupdate] | test.go:326:35:326:43 | untrusted | provenance | Sink:MaD:3 | | test.go:332:15:332:26 | call to Data | test.go:334:23:334:31 | untrusted | provenance | Src:MaD:6 Sink:MaD:1 | | test.go:340:15:340:26 | call to Data | test.go:342:53:342:61 | untrusted | provenance | Src:MaD:6 Sink:MaD:4 | | test.go:340:15:340:26 | call to Data | test.go:344:23:344:31 | untrusted | provenance | Src:MaD:6 Sink:MaD:1 | @@ -30,7 +30,7 @@ nodes | test.go:217:10:217:18 | untrusted | semmle.label | untrusted | | test.go:218:35:218:43 | untrusted | semmle.label | untrusted | | test.go:324:17:324:37 | selection of RequestBody | semmle.label | selection of RequestBody | -| test.go:324:40:324:43 | &... | semmle.label | &... | +| test.go:324:40:324:43 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:326:35:326:43 | untrusted | semmle.label | untrusted | | test.go:332:15:332:26 | call to Data | semmle.label | call to Data | | test.go:334:23:334:31 | untrusted | semmle.label | untrusted | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Beego/test.go b/go/ql/test/library-tests/semmle/go/frameworks/Beego/test.go index 2d2af8092de..d702f4a5445 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Beego/test.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Beego/test.go @@ -297,7 +297,7 @@ func testUtilsPropagators(c *beego.Controller) { c.CustomAbort(500, utils.SlicePad(untainted, 10, genericFiles[0])[0].(*multipart.FileHeader).Filename) c.CustomAbort(500, utils.SlicePad(genericFiles, 10, untainted[0])[0].(*multipart.FileHeader).Filename) c.CustomAbort(500, utils.SliceRand(genericFiles).(*multipart.FileHeader).Filename) - // Note this is misnamed -- it's a map operation, not a reduce + // Note this is misnamed -- it's a map operation, not a reduce c.CustomAbort(500, utils.SliceReduce(genericFiles, func(x interface{}) interface{} { return x })[0].(*multipart.FileHeader).Filename) c.CustomAbort(500, utils.SliceShuffle(genericFiles)[0].(*multipart.FileHeader).Filename) c.CustomAbort(500, utils.SliceUnique(genericFiles)[0].(*multipart.FileHeader).Filename) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected index f766a1a2db6..87c68cdc50b 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/BeegoOrm/StoredXss.expected @@ -1,8 +1,8 @@ #select -| test.go:81:13:81:29 | type conversion | test.go:80:13:80:16 | &... | test.go:81:13:81:29 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:80:13:80:16 | &... | stored value | -| test.go:82:13:82:43 | type conversion | test.go:80:13:80:16 | &... | test.go:82:13:82:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:80:13:80:16 | &... | stored value | -| test.go:86:13:86:30 | type conversion | test.go:85:22:85:26 | &... | test.go:86:13:86:30 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:85:22:85:26 | &... | stored value | -| test.go:90:13:90:30 | type conversion | test.go:89:21:89:25 | &... | test.go:90:13:90:30 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:89:21:89:25 | &... | stored value | +| test.go:81:13:81:29 | type conversion | test.go:80:13:80:16 | &... [postupdate] | test.go:81:13:81:29 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:80:13:80:16 | &... [postupdate] | stored value | +| test.go:82:13:82:43 | type conversion | test.go:80:13:80:16 | &... [postupdate] | test.go:82:13:82:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:80:13:80:16 | &... [postupdate] | stored value | +| test.go:86:13:86:30 | type conversion | test.go:85:22:85:26 | &... [postupdate] | test.go:86:13:86:30 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:85:22:85:26 | &... [postupdate] | stored value | +| test.go:90:13:90:30 | type conversion | test.go:89:21:89:25 | &... [postupdate] | test.go:90:13:90:30 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:89:21:89:25 | &... [postupdate] | stored value | | test.go:95:13:95:37 | type conversion | test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:95:20:95:36 | call to Value | stored value | | test.go:96:13:96:49 | type conversion | test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:96:20:96:39 | call to RawValue | stored value | | test.go:97:13:97:38 | type conversion | test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:97:20:97:37 | call to String | stored value | @@ -12,25 +12,25 @@ | test.go:101:13:101:38 | type conversion | test.go:101:20:101:37 | call to Value | test.go:101:13:101:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:101:20:101:37 | call to Value | stored value | | test.go:102:13:102:50 | type conversion | test.go:102:20:102:40 | call to RawValue | test.go:102:13:102:50 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:102:20:102:40 | call to RawValue | stored value | | test.go:103:13:103:39 | type conversion | test.go:103:20:103:38 | call to String | test.go:103:13:103:39 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:103:20:103:38 | call to String | stored value | -| test.go:110:13:110:33 | type conversion | test.go:109:9:109:13 | &... | test.go:110:13:110:33 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:109:9:109:13 | &... | stored value | -| test.go:114:13:114:29 | type conversion | test.go:113:9:113:12 | &... | test.go:114:13:114:29 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:113:9:113:12 | &... | stored value | -| test.go:118:13:118:48 | type conversion | test.go:117:12:117:19 | &... | test.go:118:13:118:48 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:117:12:117:19 | &... | stored value | -| test.go:122:13:122:43 | type conversion | test.go:121:16:121:24 | &... | test.go:122:13:122:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:121:16:121:24 | &... | stored value | -| test.go:126:13:126:39 | type conversion | test.go:125:16:125:23 | &... | test.go:126:13:126:39 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:125:16:125:23 | &... | stored value | -| test.go:130:13:130:47 | type conversion | test.go:129:15:129:24 | &... | test.go:130:13:130:47 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:129:15:129:24 | &... | stored value | -| test.go:134:13:134:38 | type conversion | test.go:133:18:133:30 | &... | test.go:134:13:134:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:133:18:133:30 | &... | stored value | -| test.go:141:13:141:48 | type conversion | test.go:140:12:140:19 | &... | test.go:141:13:141:48 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:140:12:140:19 | &... | stored value | -| test.go:145:13:145:43 | type conversion | test.go:144:16:144:24 | &... | test.go:145:13:145:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:144:16:144:24 | &... | stored value | -| test.go:149:13:149:39 | type conversion | test.go:148:16:148:23 | &... | test.go:149:13:149:39 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:148:16:148:23 | &... | stored value | -| test.go:153:13:153:47 | type conversion | test.go:152:15:152:24 | &... | test.go:153:13:153:47 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:152:15:152:24 | &... | stored value | -| test.go:157:13:157:38 | type conversion | test.go:156:18:156:30 | &... | test.go:157:13:157:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:156:18:156:30 | &... | stored value | -| test.go:161:13:161:28 | type conversion | test.go:160:14:160:22 | &... | test.go:161:13:161:28 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:160:14:160:22 | &... | stored value | -| test.go:165:13:165:32 | type conversion | test.go:164:15:164:24 | &... | test.go:165:13:165:32 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:164:15:164:24 | &... | stored value | +| test.go:110:13:110:33 | type conversion | test.go:109:9:109:13 | &... [postupdate] | test.go:110:13:110:33 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:109:9:109:13 | &... [postupdate] | stored value | +| test.go:114:13:114:29 | type conversion | test.go:113:9:113:12 | &... [postupdate] | test.go:114:13:114:29 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:113:9:113:12 | &... [postupdate] | stored value | +| test.go:118:13:118:48 | type conversion | test.go:117:12:117:19 | &... [postupdate] | test.go:118:13:118:48 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:117:12:117:19 | &... [postupdate] | stored value | +| test.go:122:13:122:43 | type conversion | test.go:121:16:121:24 | &... [postupdate] | test.go:122:13:122:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:121:16:121:24 | &... [postupdate] | stored value | +| test.go:126:13:126:39 | type conversion | test.go:125:16:125:23 | &... [postupdate] | test.go:126:13:126:39 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:125:16:125:23 | &... [postupdate] | stored value | +| test.go:130:13:130:47 | type conversion | test.go:129:15:129:24 | &... [postupdate] | test.go:130:13:130:47 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:129:15:129:24 | &... [postupdate] | stored value | +| test.go:134:13:134:38 | type conversion | test.go:133:18:133:30 | &... [postupdate] | test.go:134:13:134:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:133:18:133:30 | &... [postupdate] | stored value | +| test.go:141:13:141:48 | type conversion | test.go:140:12:140:19 | &... [postupdate] | test.go:141:13:141:48 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:140:12:140:19 | &... [postupdate] | stored value | +| test.go:145:13:145:43 | type conversion | test.go:144:16:144:24 | &... [postupdate] | test.go:145:13:145:43 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:144:16:144:24 | &... [postupdate] | stored value | +| test.go:149:13:149:39 | type conversion | test.go:148:16:148:23 | &... [postupdate] | test.go:149:13:149:39 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:148:16:148:23 | &... [postupdate] | stored value | +| test.go:153:13:153:47 | type conversion | test.go:152:15:152:24 | &... [postupdate] | test.go:153:13:153:47 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:152:15:152:24 | &... [postupdate] | stored value | +| test.go:157:13:157:38 | type conversion | test.go:156:18:156:30 | &... [postupdate] | test.go:157:13:157:38 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:156:18:156:30 | &... [postupdate] | stored value | +| test.go:161:13:161:28 | type conversion | test.go:160:14:160:22 | &... [postupdate] | test.go:161:13:161:28 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:160:14:160:22 | &... [postupdate] | stored value | +| test.go:165:13:165:32 | type conversion | test.go:164:15:164:24 | &... [postupdate] | test.go:165:13:165:32 | type conversion | Stored cross-site scripting vulnerability due to $@. | test.go:164:15:164:24 | &... [postupdate] | stored value | edges -| test.go:80:13:80:16 | &... | test.go:81:13:81:29 | type conversion | provenance | Src:MaD:1 | -| test.go:80:13:80:16 | &... | test.go:82:13:82:43 | type conversion | provenance | Src:MaD:1 | -| test.go:85:22:85:26 | &... | test.go:86:13:86:30 | type conversion | provenance | Src:MaD:2 | -| test.go:89:21:89:25 | &... | test.go:90:13:90:30 | type conversion | provenance | Src:MaD:3 | +| test.go:80:13:80:16 | &... [postupdate] | test.go:81:13:81:29 | type conversion | provenance | Src:MaD:1 | +| test.go:80:13:80:16 | &... [postupdate] | test.go:82:13:82:43 | type conversion | provenance | Src:MaD:1 | +| test.go:85:22:85:26 | &... [postupdate] | test.go:86:13:86:30 | type conversion | provenance | Src:MaD:2 | +| test.go:89:21:89:25 | &... [postupdate] | test.go:90:13:90:30 | type conversion | provenance | Src:MaD:3 | | test.go:95:20:95:36 | call to Value | test.go:95:13:95:37 | type conversion | provenance | | | test.go:96:20:96:39 | call to RawValue | test.go:96:13:96:49 | type conversion | provenance | | | test.go:97:20:97:37 | call to String | test.go:97:13:97:38 | type conversion | provenance | | @@ -40,31 +40,31 @@ edges | test.go:101:20:101:37 | call to Value | test.go:101:13:101:38 | type conversion | provenance | | | test.go:102:20:102:40 | call to RawValue | test.go:102:13:102:50 | type conversion | provenance | | | test.go:103:20:103:38 | call to String | test.go:103:13:103:39 | type conversion | provenance | | -| test.go:109:9:109:13 | &... | test.go:110:13:110:33 | type conversion | provenance | | -| test.go:113:9:113:12 | &... | test.go:114:13:114:29 | type conversion | provenance | | -| test.go:117:12:117:19 | &... | test.go:118:13:118:48 | type conversion | provenance | | -| test.go:121:16:121:24 | &... | test.go:122:13:122:43 | type conversion | provenance | | -| test.go:125:16:125:23 | &... | test.go:126:13:126:39 | type conversion | provenance | | -| test.go:129:15:129:24 | &... | test.go:130:13:130:47 | type conversion | provenance | | -| test.go:133:18:133:30 | &... | test.go:134:13:134:38 | type conversion | provenance | | -| test.go:140:12:140:19 | &... | test.go:141:13:141:48 | type conversion | provenance | | -| test.go:144:16:144:24 | &... | test.go:145:13:145:43 | type conversion | provenance | | -| test.go:148:16:148:23 | &... | test.go:149:13:149:39 | type conversion | provenance | | -| test.go:152:15:152:24 | &... | test.go:153:13:153:47 | type conversion | provenance | | -| test.go:156:18:156:30 | &... | test.go:157:13:157:38 | type conversion | provenance | | -| test.go:160:14:160:22 | &... | test.go:161:13:161:28 | type conversion | provenance | | -| test.go:164:15:164:24 | &... | test.go:165:13:165:32 | type conversion | provenance | | +| test.go:109:9:109:13 | &... [postupdate] | test.go:110:13:110:33 | type conversion | provenance | | +| test.go:113:9:113:12 | &... [postupdate] | test.go:114:13:114:29 | type conversion | provenance | | +| test.go:117:12:117:19 | &... [postupdate] | test.go:118:13:118:48 | type conversion | provenance | | +| test.go:121:16:121:24 | &... [postupdate] | test.go:122:13:122:43 | type conversion | provenance | | +| test.go:125:16:125:23 | &... [postupdate] | test.go:126:13:126:39 | type conversion | provenance | | +| test.go:129:15:129:24 | &... [postupdate] | test.go:130:13:130:47 | type conversion | provenance | | +| test.go:133:18:133:30 | &... [postupdate] | test.go:134:13:134:38 | type conversion | provenance | | +| test.go:140:12:140:19 | &... [postupdate] | test.go:141:13:141:48 | type conversion | provenance | | +| test.go:144:16:144:24 | &... [postupdate] | test.go:145:13:145:43 | type conversion | provenance | | +| test.go:148:16:148:23 | &... [postupdate] | test.go:149:13:149:39 | type conversion | provenance | | +| test.go:152:15:152:24 | &... [postupdate] | test.go:153:13:153:47 | type conversion | provenance | | +| test.go:156:18:156:30 | &... [postupdate] | test.go:157:13:157:38 | type conversion | provenance | | +| test.go:160:14:160:22 | &... [postupdate] | test.go:161:13:161:28 | type conversion | provenance | | +| test.go:164:15:164:24 | &... [postupdate] | test.go:165:13:165:32 | type conversion | provenance | | models | 1 | Source: group:beego-orm; Ormer; true; Read; ; ; Argument[0]; database; manual | | 2 | Source: group:beego-orm; Ormer; true; ReadForUpdate; ; ; Argument[0]; database; manual | | 3 | Source: group:beego-orm; Ormer; true; ReadOrCreate; ; ; Argument[0]; database; manual | nodes -| test.go:80:13:80:16 | &... | semmle.label | &... | +| test.go:80:13:80:16 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:81:13:81:29 | type conversion | semmle.label | type conversion | | test.go:82:13:82:43 | type conversion | semmle.label | type conversion | -| test.go:85:22:85:26 | &... | semmle.label | &... | +| test.go:85:22:85:26 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:86:13:86:30 | type conversion | semmle.label | type conversion | -| test.go:89:21:89:25 | &... | semmle.label | &... | +| test.go:89:21:89:25 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:90:13:90:30 | type conversion | semmle.label | type conversion | | test.go:95:13:95:37 | type conversion | semmle.label | type conversion | | test.go:95:20:95:36 | call to Value | semmle.label | call to Value | @@ -84,32 +84,32 @@ nodes | test.go:102:20:102:40 | call to RawValue | semmle.label | call to RawValue | | test.go:103:13:103:39 | type conversion | semmle.label | type conversion | | test.go:103:20:103:38 | call to String | semmle.label | call to String | -| test.go:109:9:109:13 | &... | semmle.label | &... | +| test.go:109:9:109:13 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:110:13:110:33 | type conversion | semmle.label | type conversion | -| test.go:113:9:113:12 | &... | semmle.label | &... | +| test.go:113:9:113:12 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:114:13:114:29 | type conversion | semmle.label | type conversion | -| test.go:117:12:117:19 | &... | semmle.label | &... | +| test.go:117:12:117:19 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:118:13:118:48 | type conversion | semmle.label | type conversion | -| test.go:121:16:121:24 | &... | semmle.label | &... | +| test.go:121:16:121:24 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:122:13:122:43 | type conversion | semmle.label | type conversion | -| test.go:125:16:125:23 | &... | semmle.label | &... | +| test.go:125:16:125:23 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:126:13:126:39 | type conversion | semmle.label | type conversion | -| test.go:129:15:129:24 | &... | semmle.label | &... | +| test.go:129:15:129:24 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:130:13:130:47 | type conversion | semmle.label | type conversion | -| test.go:133:18:133:30 | &... | semmle.label | &... | +| test.go:133:18:133:30 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:134:13:134:38 | type conversion | semmle.label | type conversion | -| test.go:140:12:140:19 | &... | semmle.label | &... | +| test.go:140:12:140:19 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:141:13:141:48 | type conversion | semmle.label | type conversion | -| test.go:144:16:144:24 | &... | semmle.label | &... | +| test.go:144:16:144:24 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:145:13:145:43 | type conversion | semmle.label | type conversion | -| test.go:148:16:148:23 | &... | semmle.label | &... | +| test.go:148:16:148:23 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:149:13:149:39 | type conversion | semmle.label | type conversion | -| test.go:152:15:152:24 | &... | semmle.label | &... | +| test.go:152:15:152:24 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:153:13:153:47 | type conversion | semmle.label | type conversion | -| test.go:156:18:156:30 | &... | semmle.label | &... | +| test.go:156:18:156:30 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:157:13:157:38 | type conversion | semmle.label | type conversion | -| test.go:160:14:160:22 | &... | semmle.label | &... | +| test.go:160:14:160:22 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:161:13:161:28 | type conversion | semmle.label | type conversion | -| test.go:164:15:164:24 | &... | semmle.label | &... | +| test.go:164:15:164:24 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:165:13:165:32 | type conversion | semmle.label | type conversion | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected index 4b38e6e8c47..0fa6b12603a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/OpenRedirect.expected @@ -1,14 +1,15 @@ #select | test.go:173:20:173:24 | param | test.go:172:11:172:32 | call to Param | test.go:173:20:173:24 | param | This path to an untrusted URL redirection depends on a $@. | test.go:172:11:172:32 | call to Param | user-provided value | -| test.go:182:20:182:28 | ...+... | test.go:178:11:178:32 | call to Param | test.go:182:20:182:28 | ...+... | This path to an untrusted URL redirection depends on a $@. | test.go:178:11:178:32 | call to Param | user-provided value | +| test.go:185:20:185:29 | ...+... | test.go:178:11:178:32 | call to Param | test.go:185:20:185:29 | ...+... | This path to an untrusted URL redirection depends on a $@. | test.go:178:11:178:32 | call to Param | user-provided value | edges | test.go:172:11:172:32 | call to Param | test.go:173:20:173:24 | param | provenance | Src:MaD:2 Sink:MaD:1 | -| test.go:178:11:178:32 | call to Param | test.go:182:24:182:28 | param | provenance | Src:MaD:2 | -| test.go:182:24:182:28 | param | test.go:182:20:182:28 | ...+... | provenance | Config Sink:MaD:1 | -| test.go:190:9:190:26 | star expression | test.go:190:10:190:26 | selection of URL | provenance | Config | -| test.go:190:9:190:26 | star expression | test.go:193:21:193:23 | url | provenance | | -| test.go:190:10:190:26 | selection of URL | test.go:190:9:190:26 | star expression | provenance | Src:MaD:3 Config | -| test.go:193:21:193:23 | url | test.go:193:21:193:32 | call to String | provenance | Config Sink:MaD:1 | +| test.go:178:11:178:32 | call to Param | test.go:185:24:185:29 | param2 | provenance | Src:MaD:2 | +| test.go:185:24:185:29 | param2 | test.go:185:20:185:29 | ...+... | provenance | Config Sink:MaD:1 | +| test.go:193:9:193:26 | star expression | test.go:193:10:193:26 | selection of URL [postupdate] | provenance | Config | +| test.go:193:9:193:26 | star expression | test.go:196:21:196:23 | url | provenance | | +| test.go:193:10:193:26 | selection of URL | test.go:193:9:193:26 | star expression | provenance | Src:MaD:3 Config | +| test.go:193:10:193:26 | selection of URL [postupdate] | test.go:193:9:193:26 | star expression | provenance | Config | +| test.go:196:21:196:23 | url | test.go:196:21:196:32 | call to String | provenance | Config Sink:MaD:1 | models | 1 | Sink: github.com/labstack/echo; Context; true; Redirect; ; ; Argument[1]; url-redirection; manual | | 2 | Source: github.com/labstack/echo; Context; true; Param; ; ; ReturnValue[0]; remote; manual | @@ -17,10 +18,11 @@ nodes | test.go:172:11:172:32 | call to Param | semmle.label | call to Param | | test.go:173:20:173:24 | param | semmle.label | param | | test.go:178:11:178:32 | call to Param | semmle.label | call to Param | -| test.go:182:20:182:28 | ...+... | semmle.label | ...+... | -| test.go:182:24:182:28 | param | semmle.label | param | -| test.go:190:9:190:26 | star expression | semmle.label | star expression | -| test.go:190:10:190:26 | selection of URL | semmle.label | selection of URL | -| test.go:193:21:193:23 | url | semmle.label | url | -| test.go:193:21:193:32 | call to String | semmle.label | call to String | +| test.go:185:20:185:29 | ...+... | semmle.label | ...+... | +| test.go:185:24:185:29 | param2 | semmle.label | param2 | +| test.go:193:9:193:26 | star expression | semmle.label | star expression | +| test.go:193:10:193:26 | selection of URL | semmle.label | selection of URL | +| test.go:193:10:193:26 | selection of URL [postupdate] | semmle.label | selection of URL [postupdate] | +| test.go:196:21:196:23 | url | semmle.label | url | +| test.go:196:21:196:32 | call to String | semmle.label | call to String | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected index 61b8706f4e0..4e885d284d4 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/ReflectedXss.expected @@ -11,7 +11,7 @@ | test.go:77:20:77:25 | buffer | test.go:72:2:72:31 | ... := ...[0] | test.go:77:20:77:25 | buffer | Cross-site scripting vulnerability due to $@. | test.go:72:2:72:31 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:83:16:83:24 | selection of Value | test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | Cross-site scripting vulnerability due to $@. | test.go:82:2:82:32 | ... := ...[0] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:89:16:89:31 | selection of Value | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | Cross-site scripting vulnerability due to $@. | test.go:88:13:88:25 | call to Cookies | user-provided value | test.go:0:0:0:0 | test.go | | -| test.go:100:16:100:21 | selection of s | test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | Cross-site scripting vulnerability due to $@. | test.go:99:11:99:15 | &... | user-provided value | test.go:0:0:0:0 | test.go | | +| test.go:100:16:100:21 | selection of s | test.go:99:11:99:15 | &... [postupdate] | test.go:100:16:100:21 | selection of s | Cross-site scripting vulnerability due to $@. | test.go:99:11:99:15 | &... [postupdate] | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:114:16:114:42 | type assertion | test.go:113:21:113:42 | call to Param | test.go:114:16:114:42 | type assertion | Cross-site scripting vulnerability due to $@. | test.go:113:21:113:42 | call to Param | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:125:16:125:20 | param | test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | Cross-site scripting vulnerability due to $@. | test.go:124:11:124:32 | call to Param | user-provided value | test.go:0:0:0:0 | test.go | | | test.go:131:20:131:32 | type conversion | test.go:130:11:130:32 | call to Param | test.go:131:20:131:32 | type conversion | Cross-site scripting vulnerability due to $@. | test.go:130:11:130:32 | call to Param | user-provided value | test.go:0:0:0:0 | test.go | | @@ -29,23 +29,23 @@ edges | test.go:57:2:57:46 | ... := ...[0] | test.go:58:13:58:22 | fileHeader | provenance | Src:MaD:4 | | test.go:58:2:58:29 | ... := ...[0] | test.go:60:2:60:5 | file | provenance | | | test.go:58:13:58:22 | fileHeader | test.go:58:2:58:29 | ... := ...[0] | provenance | MaD:17 | -| test.go:59:2:59:7 | definition of buffer | test.go:61:20:61:25 | buffer | provenance | | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:15 | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:16 | -| test.go:60:2:60:5 | file | test.go:59:2:59:7 | definition of buffer | provenance | MaD:18 | +| test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:15 | +| test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:16 | +| test.go:60:2:60:5 | file | test.go:60:12:60:17 | buffer [postupdate] | provenance | MaD:18 | +| test.go:60:12:60:17 | buffer [postupdate] | test.go:61:20:61:25 | buffer | provenance | | | test.go:66:2:66:31 | ... := ...[0] | test.go:67:16:67:41 | index expression | provenance | Src:MaD:7 | | test.go:72:2:72:31 | ... := ...[0] | test.go:74:13:74:22 | fileHeader | provenance | Src:MaD:7 | | test.go:74:2:74:29 | ... := ...[0] | test.go:76:2:76:5 | file | provenance | | | test.go:74:13:74:22 | fileHeader | test.go:74:2:74:29 | ... := ...[0] | provenance | MaD:17 | -| test.go:75:2:75:7 | definition of buffer | test.go:77:20:77:25 | buffer | provenance | | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:15 | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:16 | -| test.go:76:2:76:5 | file | test.go:75:2:75:7 | definition of buffer | provenance | MaD:18 | +| test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:15 | +| test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:16 | +| test.go:76:2:76:5 | file | test.go:76:12:76:17 | buffer [postupdate] | provenance | MaD:18 | +| test.go:76:12:76:17 | buffer [postupdate] | test.go:77:20:77:25 | buffer | provenance | | | test.go:82:2:82:32 | ... := ...[0] | test.go:83:16:83:24 | selection of Value | provenance | Src:MaD:2 | | test.go:88:13:88:25 | call to Cookies | test.go:89:16:89:31 | selection of Value | provenance | Src:MaD:3 | -| test.go:99:11:99:15 | &... | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:1 | -| test.go:112:17:112:19 | definition of ctx | test.go:114:16:114:18 | ctx | provenance | | -| test.go:113:21:113:42 | call to Param | test.go:112:17:112:19 | definition of ctx | provenance | Src:MaD:8 MaD:14 | +| test.go:99:11:99:15 | &... [postupdate] | test.go:100:16:100:21 | selection of s | provenance | Src:MaD:1 | +| test.go:113:2:113:4 | ctx [postupdate] | test.go:114:16:114:18 | ctx | provenance | | +| test.go:113:21:113:42 | call to Param | test.go:113:2:113:4 | ctx [postupdate] | provenance | Src:MaD:8 MaD:14 | | test.go:114:16:114:18 | ctx | test.go:114:16:114:33 | call to Get | provenance | MaD:13 | | test.go:114:16:114:33 | call to Get | test.go:114:16:114:42 | type assertion | provenance | | | test.go:124:11:124:32 | call to Param | test.go:125:16:125:20 | param | provenance | Src:MaD:8 | @@ -93,24 +93,24 @@ nodes | test.go:57:2:57:46 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:58:2:58:29 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:58:13:58:22 | fileHeader | semmle.label | fileHeader | -| test.go:59:2:59:7 | definition of buffer | semmle.label | definition of buffer | | test.go:60:2:60:5 | file | semmle.label | file | +| test.go:60:12:60:17 | buffer [postupdate] | semmle.label | buffer [postupdate] | | test.go:61:20:61:25 | buffer | semmle.label | buffer | | test.go:66:2:66:31 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:67:16:67:41 | index expression | semmle.label | index expression | | test.go:72:2:72:31 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:74:2:74:29 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:74:13:74:22 | fileHeader | semmle.label | fileHeader | -| test.go:75:2:75:7 | definition of buffer | semmle.label | definition of buffer | | test.go:76:2:76:5 | file | semmle.label | file | +| test.go:76:12:76:17 | buffer [postupdate] | semmle.label | buffer [postupdate] | | test.go:77:20:77:25 | buffer | semmle.label | buffer | | test.go:82:2:82:32 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:83:16:83:24 | selection of Value | semmle.label | selection of Value | | test.go:88:13:88:25 | call to Cookies | semmle.label | call to Cookies | | test.go:89:16:89:31 | selection of Value | semmle.label | selection of Value | -| test.go:99:11:99:15 | &... | semmle.label | &... | +| test.go:99:11:99:15 | &... [postupdate] | semmle.label | &... [postupdate] | | test.go:100:16:100:21 | selection of s | semmle.label | selection of s | -| test.go:112:17:112:19 | definition of ctx | semmle.label | definition of ctx | +| test.go:113:2:113:4 | ctx [postupdate] | semmle.label | ctx [postupdate] | | test.go:113:21:113:42 | call to Param | semmle.label | call to Param | | test.go:114:16:114:18 | ctx | semmle.label | ctx | | test.go:114:16:114:33 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected index c579c480fb3..6a26aba5d76 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/TaintedPath.expected @@ -1,16 +1,16 @@ #select -| test.go:222:17:222:24 | filepath | test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | This path depends on a $@. | test.go:221:15:221:38 | call to QueryParam | user-provided value | -| test.go:226:23:226:30 | filepath | test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | This path depends on a $@. | test.go:225:15:225:38 | call to QueryParam | user-provided value | +| test.go:225:17:225:24 | filepath | test.go:224:15:224:38 | call to QueryParam | test.go:225:17:225:24 | filepath | This path depends on a $@. | test.go:224:15:224:38 | call to QueryParam | user-provided value | +| test.go:229:23:229:30 | filepath | test.go:228:15:228:38 | call to QueryParam | test.go:229:23:229:30 | filepath | This path depends on a $@. | test.go:228:15:228:38 | call to QueryParam | user-provided value | edges -| test.go:221:15:221:38 | call to QueryParam | test.go:222:17:222:24 | filepath | provenance | Src:MaD:3 Sink:MaD:2 | -| test.go:225:15:225:38 | call to QueryParam | test.go:226:23:226:30 | filepath | provenance | Src:MaD:3 Sink:MaD:1 | +| test.go:224:15:224:38 | call to QueryParam | test.go:225:17:225:24 | filepath | provenance | Src:MaD:3 Sink:MaD:2 | +| test.go:228:15:228:38 | call to QueryParam | test.go:229:23:229:30 | filepath | provenance | Src:MaD:3 Sink:MaD:1 | models | 1 | Sink: github.com/labstack/echo; Context; true; Attachment; ; ; Argument[0]; path-injection; manual | | 2 | Sink: github.com/labstack/echo; Context; true; File; ; ; Argument[0]; path-injection; manual | | 3 | Source: github.com/labstack/echo; Context; true; QueryParam; ; ; ReturnValue[0]; remote; manual | nodes -| test.go:221:15:221:38 | call to QueryParam | semmle.label | call to QueryParam | -| test.go:222:17:222:24 | filepath | semmle.label | filepath | -| test.go:225:15:225:38 | call to QueryParam | semmle.label | call to QueryParam | -| test.go:226:23:226:30 | filepath | semmle.label | filepath | +| test.go:224:15:224:38 | call to QueryParam | semmle.label | call to QueryParam | +| test.go:225:17:225:24 | filepath | semmle.label | filepath | +| test.go:228:15:228:38 | call to QueryParam | semmle.label | call to QueryParam | +| test.go:229:23:229:30 | filepath | semmle.label | filepath | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Echo/test.go b/go/ql/test/library-tests/semmle/go/frameworks/Echo/test.go index 45f92cd19cb..4a9f4e161f6 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Echo/test.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Echo/test.go @@ -176,12 +176,15 @@ func testRedirect(ctx echo.Context) error { func testLocalRedirects(ctx echo.Context) error { param := ctx.Param("someParam") + param2 := param + param3 := param + // Gratuitous copy because sanitization of uses propagates to subsequent uses // GOOD: local redirects are unproblematic ctx.Redirect(301, "/local"+param) // BAD: this could be a non-local redirect - ctx.Redirect(301, "/"+param) + ctx.Redirect(301, "/"+param2) // GOOD: localhost redirects are unproblematic - ctx.Redirect(301, "//localhost/"+param) + ctx.Redirect(301, "//localhost/"+param3) return nil } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Email/EmailData.expected b/go/ql/test/library-tests/semmle/go/frameworks/Email/EmailData.expected index 99b33b4a780..3324ee56033 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Email/EmailData.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Email/EmailData.expected @@ -1,5 +1,5 @@ | mail.go:15:73:15:94 | type conversion | -| mail.go:18:19:18:23 | definition of write | +| mail.go:20:17:20:21 | write [postupdate] | | mail.go:26:49:26:52 | text | | mail.go:26:76:26:79 | text | | mail.go:27:20:27:23 | text | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected index 0e79c3135b0..5dfd597c10a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Encoding/jsoniter.expected @@ -9,28 +9,28 @@ edges | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | jsoniter.go:31:21:31:34 | untrustedInput | provenance | | | jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:35:27:35:41 | untrustedString | provenance | | | jsoniter.go:24:21:24:40 | call to getUntrustedString | jsoniter.go:39:31:39:45 | untrustedString | provenance | | -| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... | provenance | MaD:4 | -| jsoniter.go:27:33:27:37 | &... | jsoniter.go:28:15:28:24 | selection of field | provenance | Sink:MaD:1 | -| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... | provenance | MaD:2 | -| jsoniter.go:31:37:31:42 | &... | jsoniter.go:32:15:32:25 | selection of field | provenance | Sink:MaD:1 | -| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... | provenance | MaD:5 | -| jsoniter.go:35:44:35:49 | &... | jsoniter.go:36:15:36:25 | selection of field | provenance | Sink:MaD:1 | -| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... | provenance | MaD:3 | -| jsoniter.go:39:48:39:53 | &... | jsoniter.go:40:15:40:25 | selection of field | provenance | Sink:MaD:1 | +| jsoniter.go:27:17:27:30 | untrustedInput | jsoniter.go:27:33:27:37 | &... [postupdate] | provenance | MaD:4 | +| jsoniter.go:27:33:27:37 | &... [postupdate] | jsoniter.go:28:15:28:24 | selection of field | provenance | Sink:MaD:1 | +| jsoniter.go:31:21:31:34 | untrustedInput | jsoniter.go:31:37:31:42 | &... [postupdate] | provenance | MaD:2 | +| jsoniter.go:31:37:31:42 | &... [postupdate] | jsoniter.go:32:15:32:25 | selection of field | provenance | Sink:MaD:1 | +| jsoniter.go:35:27:35:41 | untrustedString | jsoniter.go:35:44:35:49 | &... [postupdate] | provenance | MaD:5 | +| jsoniter.go:35:44:35:49 | &... [postupdate] | jsoniter.go:36:15:36:25 | selection of field | provenance | Sink:MaD:1 | +| jsoniter.go:39:31:39:45 | untrustedString | jsoniter.go:39:48:39:53 | &... [postupdate] | provenance | MaD:3 | +| jsoniter.go:39:48:39:53 | &... [postupdate] | jsoniter.go:40:15:40:25 | selection of field | provenance | Sink:MaD:1 | nodes | jsoniter.go:23:20:23:38 | call to getUntrustedBytes | semmle.label | call to getUntrustedBytes | | jsoniter.go:24:21:24:40 | call to getUntrustedString | semmle.label | call to getUntrustedString | | jsoniter.go:27:17:27:30 | untrustedInput | semmle.label | untrustedInput | -| jsoniter.go:27:33:27:37 | &... | semmle.label | &... | +| jsoniter.go:27:33:27:37 | &... [postupdate] | semmle.label | &... [postupdate] | | jsoniter.go:28:15:28:24 | selection of field | semmle.label | selection of field | | jsoniter.go:31:21:31:34 | untrustedInput | semmle.label | untrustedInput | -| jsoniter.go:31:37:31:42 | &... | semmle.label | &... | +| jsoniter.go:31:37:31:42 | &... [postupdate] | semmle.label | &... [postupdate] | | jsoniter.go:32:15:32:25 | selection of field | semmle.label | selection of field | | jsoniter.go:35:27:35:41 | untrustedString | semmle.label | untrustedString | -| jsoniter.go:35:44:35:49 | &... | semmle.label | &... | +| jsoniter.go:35:44:35:49 | &... [postupdate] | semmle.label | &... [postupdate] | | jsoniter.go:36:15:36:25 | selection of field | semmle.label | selection of field | | jsoniter.go:39:31:39:45 | untrustedString | semmle.label | untrustedString | -| jsoniter.go:39:48:39:53 | &... | semmle.label | &... | +| jsoniter.go:39:48:39:53 | &... [postupdate] | semmle.label | &... [postupdate] | | jsoniter.go:40:15:40:25 | selection of field | semmle.label | selection of field | subpaths invalidModelRow diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go b/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go index c25c9d01058..061f50355d5 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Fasthttp/fasthttp.go @@ -169,10 +169,10 @@ func fasthttpServer() { fmt.Println(body1, body2, body3, body4) requestCtx.Request.BodyStream() // $ RemoteFlowSource="call to BodyStream" - requestCtx.Request.ReadBody(&bufio.Reader{}, 100, 1000) // $ RemoteFlowSource="&..." - requestCtx.Request.ReadLimitBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." - requestCtx.Request.ContinueReadBodyStream(&bufio.Reader{}, 100, true) // $ RemoteFlowSource="&..." - requestCtx.Request.ContinueReadBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." + requestCtx.Request.ReadBody(&bufio.Reader{}, 100, 1000) // $ RemoteFlowSource="&..." RemoteFlowSource="&... [postupdate]" + requestCtx.Request.ReadLimitBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." RemoteFlowSource="&... [postupdate]" + requestCtx.Request.ContinueReadBodyStream(&bufio.Reader{}, 100, true) // $ RemoteFlowSource="&..." RemoteFlowSource="&... [postupdate]" + requestCtx.Request.ContinueReadBody(&bufio.Reader{}, 100) // $ RemoteFlowSource="&..." RemoteFlowSource="&... [postupdate]" // Response methods // Xss Sinks Related method diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected index 719a6a26147..071bf34cd7e 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gin/Gin.expected @@ -31,39 +31,39 @@ | Gin.go:158:10:158:19 | selection of Params | | Gin.go:162:13:162:22 | selection of Params | | Gin.go:168:12:168:21 | selection of Params | -| Gin.go:178:16:178:22 | &... | -| Gin.go:182:7:182:19 | definition of personPointer | -| Gin.go:188:15:188:21 | &... | -| Gin.go:192:7:192:19 | definition of personPointer | -| Gin.go:198:16:198:22 | &... | -| Gin.go:202:7:202:19 | definition of personPointer | -| Gin.go:208:15:208:21 | &... | -| Gin.go:212:7:212:19 | definition of personPointer | -| Gin.go:218:17:218:23 | &... | -| Gin.go:222:7:222:19 | definition of personPointer | -| Gin.go:228:20:228:26 | &... | -| Gin.go:232:7:232:19 | definition of personPointer | -| Gin.go:238:16:238:22 | &... | -| Gin.go:242:7:242:19 | definition of personPointer | -| Gin.go:248:12:248:18 | &... | -| Gin.go:252:7:252:19 | definition of personPointer | -| Gin.go:258:18:258:24 | &... | -| Gin.go:262:7:262:19 | definition of personPointer | -| Gin.go:268:26:268:32 | &... | -| Gin.go:272:7:272:19 | definition of personPointer | -| Gin.go:278:22:278:28 | &... | -| Gin.go:282:7:282:19 | definition of personPointer | -| Gin.go:288:23:288:29 | &... | -| Gin.go:292:7:292:19 | definition of personPointer | -| Gin.go:298:21:298:27 | &... | -| Gin.go:302:7:302:19 | definition of personPointer | -| Gin.go:308:22:308:28 | &... | -| Gin.go:312:7:312:19 | definition of personPointer | -| Gin.go:318:21:318:27 | &... | -| Gin.go:322:7:322:19 | definition of personPointer | -| Gin.go:328:22:328:28 | &... | -| Gin.go:332:7:332:19 | definition of personPointer | -| Gin.go:338:18:338:24 | &... | -| Gin.go:342:7:342:19 | definition of personPointer | -| Gin.go:348:24:348:30 | &... | -| Gin.go:352:7:352:19 | definition of personPointer | +| Gin.go:178:16:178:22 | &... [postupdate] | +| Gin.go:183:16:183:28 | personPointer [postupdate] | +| Gin.go:188:15:188:21 | &... [postupdate] | +| Gin.go:193:15:193:27 | personPointer [postupdate] | +| Gin.go:198:16:198:22 | &... [postupdate] | +| Gin.go:203:16:203:28 | personPointer [postupdate] | +| Gin.go:208:15:208:21 | &... [postupdate] | +| Gin.go:213:15:213:27 | personPointer [postupdate] | +| Gin.go:218:17:218:23 | &... [postupdate] | +| Gin.go:223:17:223:29 | personPointer [postupdate] | +| Gin.go:228:20:228:26 | &... [postupdate] | +| Gin.go:233:20:233:32 | personPointer [postupdate] | +| Gin.go:238:16:238:22 | &... [postupdate] | +| Gin.go:243:16:243:28 | personPointer [postupdate] | +| Gin.go:248:12:248:18 | &... [postupdate] | +| Gin.go:253:12:253:24 | personPointer [postupdate] | +| Gin.go:258:18:258:24 | &... [postupdate] | +| Gin.go:263:18:263:30 | personPointer [postupdate] | +| Gin.go:268:26:268:32 | &... [postupdate] | +| Gin.go:273:26:273:38 | personPointer [postupdate] | +| Gin.go:278:22:278:28 | &... [postupdate] | +| Gin.go:283:22:283:34 | personPointer [postupdate] | +| Gin.go:288:23:288:29 | &... [postupdate] | +| Gin.go:293:23:293:35 | personPointer [postupdate] | +| Gin.go:298:21:298:27 | &... [postupdate] | +| Gin.go:303:21:303:33 | personPointer [postupdate] | +| Gin.go:308:22:308:28 | &... [postupdate] | +| Gin.go:313:22:313:34 | personPointer [postupdate] | +| Gin.go:318:21:318:27 | &... [postupdate] | +| Gin.go:323:21:323:33 | personPointer [postupdate] | +| Gin.go:328:22:328:28 | &... [postupdate] | +| Gin.go:333:22:333:34 | personPointer [postupdate] | +| Gin.go:338:18:338:24 | &... [postupdate] | +| Gin.go:343:18:343:30 | personPointer [postupdate] | +| Gin.go:348:24:348:30 | &... [postupdate] | +| Gin.go:353:24:353:36 | personPointer [postupdate] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected index 8e113c12ef7..703066d6449 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected @@ -1,26 +1,8 @@ edges -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | provenance | | | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | -| main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | -| main.go:18:46:18:48 | definition of req [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | -| proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | -| proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | nodes | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | -| main.go:18:46:18:48 | definition of req | semmle.label | definition of req | -| main.go:18:46:18:48 | definition of req [Return] | semmle.label | definition of req [Return] | | main.go:21:28:21:31 | name | semmle.label | name | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | semmle.label | definition of in [Return] | -| proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | -| proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | subpaths #select | main.go:21:28:21:31 | name | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | This log entry depends on a $@. | main.go:18:46:18:48 | definition of req | user-provided value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected index 4cdacabe873..0af67462f7c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Gorestful/gorestful.expected @@ -8,11 +8,11 @@ edges | gorestful.go:15:15:15:44 | call to QueryParameters | gorestful.go:15:15:15:47 | index expression | provenance | Src:MaD:4 Sink:MaD:1 | | gorestful.go:17:2:17:39 | ... := ...[0] | gorestful.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | | gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | provenance | Src:MaD:3 Sink:MaD:1 | -| gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | +| gorestful.go:23:21:23:24 | &... [postupdate] | gorestful.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | | gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | provenance | Src:MaD:4 Sink:MaD:1 | | gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | provenance | Src:MaD:2 Sink:MaD:1 | | gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | provenance | Src:MaD:3 Sink:MaD:1 | -| gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | +| gorestful_v2.go:23:21:23:24 | &... [postupdate] | gorestful_v2.go:24:15:24:21 | selection of cmd | provenance | Src:MaD:5 Sink:MaD:1 | nodes | gorestful.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful.go:15:15:15:47 | index expression | semmle.label | index expression | @@ -23,7 +23,7 @@ nodes | gorestful.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | | gorestful.go:21:15:21:38 | call to PathParameters | semmle.label | call to PathParameters | | gorestful.go:21:15:21:45 | index expression | semmle.label | index expression | -| gorestful.go:23:21:23:24 | &... | semmle.label | &... | +| gorestful.go:23:21:23:24 | &... [postupdate] | semmle.label | &... [postupdate] | | gorestful.go:24:15:24:21 | selection of cmd | semmle.label | selection of cmd | | gorestful_v2.go:15:15:15:44 | call to QueryParameters | semmle.label | call to QueryParameters | | gorestful_v2.go:15:15:15:47 | index expression | semmle.label | index expression | @@ -34,7 +34,7 @@ nodes | gorestful_v2.go:20:15:20:42 | call to PathParameter | semmle.label | call to PathParameter | | gorestful_v2.go:21:15:21:38 | call to PathParameters | semmle.label | call to PathParameters | | gorestful_v2.go:21:15:21:45 | index expression | semmle.label | index expression | -| gorestful_v2.go:23:21:23:24 | &... | semmle.label | &... | +| gorestful_v2.go:23:21:23:24 | &... [postupdate] | semmle.label | &... [postupdate] | | gorestful_v2.go:24:15:24:21 | selection of cmd | semmle.label | selection of cmd | subpaths invalidModelRow @@ -45,11 +45,11 @@ invalidModelRow | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | gorestful.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | gorestful.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful.go:21:15:21:45 | index expression | gorestful.go:21:15:21:38 | call to PathParameters | gorestful.go:21:15:21:45 | index expression | This command depends on $@. | gorestful.go:21:15:21:38 | call to PathParameters | a user-provided value | -| gorestful.go:24:15:24:21 | selection of cmd | gorestful.go:23:21:23:24 | &... | gorestful.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful.go:23:21:23:24 | &... | a user-provided value | +| gorestful.go:24:15:24:21 | selection of cmd | gorestful.go:23:21:23:24 | &... [postupdate] | gorestful.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful.go:23:21:23:24 | &... [postupdate] | a user-provided value | | gorestful_v2.go:15:15:15:47 | index expression | gorestful_v2.go:15:15:15:44 | call to QueryParameters | gorestful_v2.go:15:15:15:47 | index expression | This command depends on $@. | gorestful_v2.go:15:15:15:44 | call to QueryParameters | a user-provided value | | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | gorestful_v2.go:16:15:16:43 | call to QueryParameter | This command depends on $@. | gorestful_v2.go:16:15:16:43 | call to QueryParameter | a user-provided value | | gorestful_v2.go:18:15:18:17 | val | gorestful_v2.go:17:2:17:39 | ... := ...[0] | gorestful_v2.go:18:15:18:17 | val | This command depends on $@. | gorestful_v2.go:17:2:17:39 | ... := ...[0] | a user-provided value | | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | This command depends on $@. | gorestful_v2.go:19:15:19:44 | call to HeaderParameter | a user-provided value | | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | gorestful_v2.go:20:15:20:42 | call to PathParameter | This command depends on $@. | gorestful_v2.go:20:15:20:42 | call to PathParameter | a user-provided value | | gorestful_v2.go:21:15:21:45 | index expression | gorestful_v2.go:21:15:21:38 | call to PathParameters | gorestful_v2.go:21:15:21:45 | index expression | This command depends on $@. | gorestful_v2.go:21:15:21:38 | call to PathParameters | a user-provided value | -| gorestful_v2.go:24:15:24:21 | selection of cmd | gorestful_v2.go:23:21:23:24 | &... | gorestful_v2.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful_v2.go:23:21:23:24 | &... | a user-provided value | +| gorestful_v2.go:24:15:24:21 | selection of cmd | gorestful_v2.go:23:21:23:24 | &... [postupdate] | gorestful_v2.go:24:15:24:21 | selection of cmd | This command depends on $@. | gorestful_v2.go:23:21:23:24 | &... [postupdate] | a user-provided value | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/EndToEnd.go b/go/ql/test/library-tests/semmle/go/frameworks/Revel/EndToEnd.go index a21911f3beb..69fc2c52c4a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/EndToEnd.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/EndToEnd.go @@ -26,19 +26,19 @@ type MyRoute struct { // Implement some request handlers on that Controller exhibiting some common problems: func (c MyRoute) Handler1() revel.Result { - // GOOD: the Render function is likely to properly escape the user-controlled parameter. + // GOOD: the Render function is likely to properly escape the user-controlled parameter. return c.Render("someviewparam", c.Params.Form.Get("someField")) } func (c MyRoute) Handler2() revel.Result { - // BAD: the RenderBinary function copies an `io.Reader` to the user's browser. + // BAD: the RenderBinary function copies an `io.Reader` to the user's browser. buf := &bytes.Buffer{} buf.WriteString(c.Params.Form.Get("someField")) return c.RenderBinary(buf, "index.html", revel.Inline, time.Now()) // $ responsebody='buf' } func (c MyRoute) Handler3() revel.Result { - // GOOD: the RenderBinary function copies an `io.Reader` to the user's browser, but the filename + // GOOD: the RenderBinary function copies an `io.Reader` to the user's browser, but the filename // means it will be given a safe content-type. buf := &bytes.Buffer{} buf.WriteString(c.Params.Form.Get("someField")) diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected index 6e20fd5699c..d3f52f4f9c6 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/OpenRedirect.expected @@ -1,10 +1,11 @@ #select | EndToEnd.go:94:20:94:49 | call to Get | EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:49 | call to Get | This path to an untrusted URL redirection depends on a $@. | EndToEnd.go:94:20:94:27 | selection of Params | user-provided value | edges -| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params | provenance | Config | +| EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | provenance | Config | | EndToEnd.go:94:20:94:27 | implicit dereference | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Config | | EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Src:MaD:2 Config | | EndToEnd.go:94:20:94:27 | selection of Params | EndToEnd.go:94:20:94:32 | selection of Form | provenance | Src:MaD:2 Config | +| EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | EndToEnd.go:94:20:94:27 | implicit dereference | provenance | Config | | EndToEnd.go:94:20:94:32 | selection of Form | EndToEnd.go:94:20:94:49 | call to Get | provenance | Config Sink:MaD:1 | models | 1 | Sink: group:revel; Controller; true; Redirect; ; ; Argument[0]; url-redirection; manual | @@ -12,6 +13,7 @@ models nodes | EndToEnd.go:94:20:94:27 | implicit dereference | semmle.label | implicit dereference | | EndToEnd.go:94:20:94:27 | selection of Params | semmle.label | selection of Params | +| EndToEnd.go:94:20:94:27 | selection of Params [postupdate] | semmle.label | selection of Params [postupdate] | | EndToEnd.go:94:20:94:32 | selection of Form | semmle.label | selection of Form | | EndToEnd.go:94:20:94:49 | call to Get | semmle.label | call to Get | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected index 9d45f1e2996..9ea4016a7e4 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Revel/ReflectedXss.expected @@ -5,10 +5,10 @@ | examples/booking/app/init.go:36:44:36:53 | selection of Path | examples/booking/app/init.go:36:44:36:48 | selection of URL | examples/booking/app/init.go:36:44:36:53 | selection of Path | Cross-site scripting vulnerability due to $@. | examples/booking/app/init.go:36:44:36:48 | selection of URL | user-provided value | examples/booking/app/init.go:0:0:0:0 | examples/booking/app/init.go | | | examples/booking/app/init.go:40:49:40:58 | selection of Path | examples/booking/app/init.go:40:49:40:53 | selection of URL | examples/booking/app/init.go:40:49:40:58 | selection of Path | Cross-site scripting vulnerability due to $@. | examples/booking/app/init.go:40:49:40:53 | selection of URL | user-provided value | examples/booking/app/init.go:0:0:0:0 | examples/booking/app/init.go | | edges -| EndToEnd.go:35:2:35:4 | definition of buf | EndToEnd.go:37:24:37:26 | buf | provenance | | +| EndToEnd.go:36:2:36:4 | buf [postupdate] | EndToEnd.go:37:24:37:26 | buf | provenance | | | EndToEnd.go:36:18:36:25 | selection of Params | EndToEnd.go:36:18:36:30 | selection of Form | provenance | Src:MaD:1 | | EndToEnd.go:36:18:36:30 | selection of Form | EndToEnd.go:36:18:36:47 | call to Get | provenance | MaD:4 | -| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:35:2:35:4 | definition of buf | provenance | MaD:3 | +| EndToEnd.go:36:18:36:47 | call to Get | EndToEnd.go:36:2:36:4 | buf [postupdate] | provenance | MaD:3 | | EndToEnd.go:69:22:69:29 | selection of Params | EndToEnd.go:69:22:69:34 | selection of Form | provenance | Src:MaD:1 | | EndToEnd.go:69:22:69:34 | selection of Form | EndToEnd.go:69:22:69:51 | call to Get | provenance | MaD:4 | | Revel.go:70:22:70:29 | selection of Params | Revel.go:70:22:70:35 | selection of Query | provenance | Src:MaD:1 | @@ -20,7 +20,7 @@ models | 3 | Summary: io; StringWriter; true; WriteString; ; ; Argument[0]; Argument[receiver]; taint; manual | | 4 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | nodes -| EndToEnd.go:35:2:35:4 | definition of buf | semmle.label | definition of buf | +| EndToEnd.go:36:2:36:4 | buf [postupdate] | semmle.label | buf [postupdate] | | EndToEnd.go:36:18:36:25 | selection of Params | semmle.label | selection of Params | | EndToEnd.go:36:18:36:30 | selection of Form | semmle.label | selection of Form | | EndToEnd.go:36:18:36:47 | call to Get | semmle.label | call to Get | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Os.go b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Os.go index b27c5d1f47c..859a3bbd3bd 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Os.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/StdlibTaintFlow/Os.go @@ -178,6 +178,6 @@ func fsAccesses() { os.ReadDir(path) // $ fsaccess=path os.ReadFile(path) // $ fsaccess=path os.MkdirTemp(path, part) // $ fsaccess=path fsaccess=part - os.CreateTemp(path, part) // $ fsaccess=path fsaccess=part + os.CreateTemp(path, part) // $ fsaccess=path os.WriteFile(path, []byte{}, 0600) // $ fsaccess=path } diff --git a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected index b7c6f703cf5..cfbbc771f77 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/TaintSteps/TaintStep.expected @@ -8,64 +8,76 @@ invalidModelRow | crypto.go:11:18:11:57 | call to Open | crypto.go:11:2:11:57 | ... := ...[1] | | crypto.go:11:42:11:51 | ciphertext | crypto.go:11:2:11:57 | ... := ...[0] | | io.go:14:31:14:43 | "some string" | io.go:14:13:14:44 | call to NewReader | -| io.go:16:3:16:3 | definition of w | io.go:16:23:16:27 | &... | -| io.go:16:3:16:3 | definition of w | io.go:16:30:16:34 | &... | -| io.go:16:23:16:27 | &... | io.go:15:7:15:10 | definition of buf1 | +| io.go:16:23:16:27 | &... | io.go:16:24:16:27 | buf1 [postupdate] | +| io.go:16:23:16:27 | &... [postupdate] | io.go:16:24:16:27 | buf1 [postupdate] | | io.go:16:24:16:27 | buf1 | io.go:16:23:16:27 | &... | -| io.go:16:30:16:34 | &... | io.go:15:13:15:16 | definition of buf2 | +| io.go:16:24:16:27 | buf1 [postupdate] | io.go:16:23:16:27 | &... | +| io.go:16:30:16:34 | &... | io.go:16:31:16:34 | buf2 [postupdate] | +| io.go:16:30:16:34 | &... [postupdate] | io.go:16:31:16:34 | buf2 [postupdate] | | io.go:16:31:16:34 | buf2 | io.go:16:30:16:34 | &... | -| io.go:18:14:18:19 | reader | io.go:16:3:16:3 | definition of w | +| io.go:16:31:16:34 | buf2 [postupdate] | io.go:16:30:16:34 | &... | +| io.go:18:11:18:11 | w [postupdate] | io.go:16:23:16:27 | &... [postupdate] | +| io.go:18:11:18:11 | w [postupdate] | io.go:16:30:16:34 | &... [postupdate] | +| io.go:18:14:18:19 | reader | io.go:18:11:18:11 | w [postupdate] | | io.go:22:31:22:43 | "some string" | io.go:22:13:22:44 | call to NewReader | -| io.go:25:19:25:23 | &... | io.go:23:7:23:10 | definition of buf1 | +| io.go:25:19:25:23 | &... | io.go:25:20:25:23 | buf1 [postupdate] | +| io.go:25:19:25:23 | &... [postupdate] | io.go:25:20:25:23 | buf1 [postupdate] | | io.go:25:20:25:23 | buf1 | io.go:25:19:25:23 | &... | -| io.go:27:21:27:26 | reader | io.go:25:3:25:4 | definition of w2 | +| io.go:25:20:25:23 | buf1 [postupdate] | io.go:25:19:25:23 | &... | +| io.go:27:21:27:26 | reader | io.go:27:17:27:18 | w2 [postupdate] | | io.go:31:31:31:43 | "some string" | io.go:31:13:31:44 | call to NewReader | -| io.go:33:19:33:23 | &... | io.go:32:7:32:10 | definition of buf1 | +| io.go:33:19:33:23 | &... | io.go:33:20:33:23 | buf1 [postupdate] | +| io.go:33:19:33:23 | &... [postupdate] | io.go:33:20:33:23 | buf1 [postupdate] | | io.go:33:20:33:23 | buf1 | io.go:33:19:33:23 | &... | -| io.go:35:16:35:21 | reader | io.go:33:3:33:4 | definition of w2 | -| io.go:39:6:39:6 | definition of w | io.go:39:3:39:19 | ... := ...[0] | +| io.go:33:20:33:23 | buf1 [postupdate] | io.go:33:19:33:23 | &... | +| io.go:35:16:35:21 | reader | io.go:35:12:35:13 | w2 [postupdate] | | io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | ... := ...[0] | | io.go:39:11:39:19 | call to Pipe | io.go:39:3:39:19 | ... := ...[1] | -| io.go:40:17:40:31 | "some string\\n" | io.go:39:6:39:6 | definition of w | -| io.go:43:16:43:16 | r | io.go:42:3:42:5 | definition of buf | +| io.go:40:14:40:14 | w [postupdate] | io.go:39:3:39:19 | ... := ...[0] | +| io.go:40:17:40:31 | "some string\\n" | io.go:40:14:40:14 | w [postupdate] | +| io.go:43:16:43:16 | r | io.go:43:3:43:5 | buf [postupdate] | | io.go:44:13:44:15 | buf | io.go:44:13:44:24 | call to String | | io.go:48:31:48:43 | "some string" | io.go:48:13:48:44 | call to NewReader | -| io.go:50:18:50:23 | reader | io.go:49:3:49:5 | definition of buf | +| io.go:50:18:50:23 | reader | io.go:50:26:50:28 | buf [postupdate] | | io.go:54:31:54:43 | "some string" | io.go:54:13:54:44 | call to NewReader | -| io.go:56:15:56:20 | reader | io.go:55:3:55:5 | definition of buf | -| io.go:61:18:61:21 | &... | io.go:60:7:60:9 | definition of buf | +| io.go:56:15:56:20 | reader | io.go:56:23:56:25 | buf [postupdate] | +| io.go:61:18:61:21 | &... | io.go:61:19:61:21 | buf [postupdate] | +| io.go:61:18:61:21 | &... [postupdate] | io.go:61:19:61:21 | buf [postupdate] | | io.go:61:19:61:21 | buf | io.go:61:18:61:21 | &... | -| io.go:62:21:62:26 | "test" | io.go:61:3:61:3 | definition of w | +| io.go:61:19:61:21 | buf [postupdate] | io.go:61:18:61:21 | &... | +| io.go:62:21:62:26 | "test" | io.go:62:18:62:18 | w [postupdate] | | io.go:65:31:65:43 | "some string" | io.go:65:13:65:44 | call to NewReader | -| io.go:67:3:67:8 | reader | io.go:66:3:66:5 | definition of buf | +| io.go:67:3:67:8 | reader | io.go:67:15:67:17 | buf [postupdate] | | io.go:70:31:70:43 | "some string" | io.go:70:13:70:44 | call to NewReader | -| io.go:72:3:72:8 | reader | io.go:71:3:71:5 | definition of buf | +| io.go:72:3:72:8 | reader | io.go:72:17:72:19 | buf [postupdate] | | io.go:76:31:76:43 | "some string" | io.go:76:13:76:44 | call to NewReader | | io.go:77:24:77:29 | reader | io.go:77:9:77:33 | call to LimitReader | -| io.go:78:22:78:23 | lr | io.go:78:11:78:19 | selection of Stdout | +| io.go:78:22:78:23 | lr | io.go:78:11:78:19 | selection of Stdout [postupdate] | | io.go:82:27:82:36 | "reader1 " | io.go:82:9:82:37 | call to NewReader | | io.go:83:27:83:36 | "reader2 " | io.go:83:9:83:37 | call to NewReader | | io.go:84:27:84:35 | "reader3" | io.go:84:9:84:36 | call to NewReader | | io.go:85:23:85:24 | r1 | io.go:85:8:85:33 | call to MultiReader | | io.go:85:27:85:28 | r2 | io.go:85:8:85:33 | call to MultiReader | | io.go:85:31:85:32 | r3 | io.go:85:8:85:33 | call to MultiReader | -| io.go:86:22:86:22 | r | io.go:86:11:86:19 | selection of Stdout | +| io.go:86:22:86:22 | r | io.go:86:11:86:19 | selection of Stdout [postupdate] | | io.go:89:26:89:38 | "some string" | io.go:89:8:89:39 | call to NewReader | | io.go:91:23:91:23 | r | io.go:91:10:91:30 | call to TeeReader | -| io.go:91:23:91:23 | r | io.go:91:26:91:29 | &... | -| io.go:91:26:91:29 | &... | io.go:90:7:90:9 | definition of buf | +| io.go:91:23:91:23 | r | io.go:91:26:91:29 | &... [postupdate] | +| io.go:91:26:91:29 | &... | io.go:91:27:91:29 | buf [postupdate] | +| io.go:91:26:91:29 | &... [postupdate] | io.go:91:27:91:29 | buf [postupdate] | | io.go:91:27:91:29 | buf | io.go:91:26:91:29 | &... | -| io.go:93:22:93:24 | tee | io.go:93:11:93:19 | selection of Stdout | +| io.go:91:27:91:29 | buf [postupdate] | io.go:91:26:91:29 | &... | +| io.go:93:22:93:24 | tee | io.go:93:11:93:19 | selection of Stdout [postupdate] | | io.go:96:26:96:38 | "some string" | io.go:96:8:96:39 | call to NewReader | | io.go:97:28:97:28 | r | io.go:97:8:97:36 | call to NewSectionReader | -| io.go:98:22:98:22 | s | io.go:98:11:98:19 | selection of Stdout | +| io.go:98:22:98:22 | s | io.go:98:11:98:19 | selection of Stdout [postupdate] | | io.go:101:26:101:38 | "some string" | io.go:101:8:101:39 | call to NewReader | -| io.go:102:3:102:3 | r | io.go:102:13:102:21 | selection of Stdout | +| io.go:102:3:102:3 | r | io.go:102:13:102:21 | selection of Stdout [postupdate] | | io.go:108:30:108:42 | "some string" | io.go:108:12:108:43 | call to NewReader | | io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | ... := ...[0] | | io.go:109:12:109:33 | call to ReadAll | io.go:109:2:109:33 | ... := ...[1] | | io.go:109:27:109:32 | reader | io.go:109:2:109:33 | ... := ...[0] | -| io.go:110:18:110:20 | buf | io.go:110:2:110:10 | selection of Stdout | +| io.go:110:18:110:20 | buf | io.go:110:2:110:10 | selection of Stdout [postupdate] | | main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | ... := ...[0] | | main.go:11:12:11:26 | call to Marshal | main.go:11:2:11:26 | ... := ...[1] | | main.go:11:25:11:25 | v | main.go:11:2:11:26 | ... := ...[0] | @@ -84,11 +96,13 @@ invalidModelRow | main.go:23:25:23:31 | decoded | main.go:23:9:23:48 | slice literal | | main.go:23:34:23:36 | err | main.go:23:9:23:48 | slice literal | | main.go:23:39:23:47 | reEncoded | main.go:23:9:23:48 | slice literal | -| main.go:28:2:28:4 | implicit dereference | main.go:26:15:26:17 | definition of req | +| main.go:28:2:28:4 | implicit dereference | main.go:28:2:28:4 | req [postupdate] | | main.go:28:2:28:4 | implicit dereference | main.go:28:2:28:9 | selection of Body | | main.go:28:2:28:4 | req | main.go:28:2:28:4 | implicit dereference | -| main.go:28:2:28:9 | selection of Body | main.go:27:2:27:2 | definition of b | -| main.go:34:2:34:4 | implicit dereference | main.go:32:16:32:18 | definition of req | +| main.go:28:2:28:4 | req [postupdate] | main.go:28:2:28:4 | implicit dereference | +| main.go:28:2:28:9 | selection of Body | main.go:28:16:28:16 | b [postupdate] | +| main.go:34:2:34:4 | implicit dereference | main.go:34:2:34:4 | req [postupdate] | | main.go:34:2:34:4 | implicit dereference | main.go:34:2:34:9 | selection of Body | | main.go:34:2:34:4 | req | main.go:34:2:34:4 | implicit dereference | -| main.go:34:2:34:9 | selection of Body | main.go:33:2:33:2 | definition of b | +| main.go:34:2:34:4 | req [postupdate] | main.go:34:2:34:4 | implicit dereference | +| main.go:34:2:34:9 | selection of Body | main.go:34:16:34:16 | b [postupdate] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index 6bda68257ef..7b1fa1a3121 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -3,42 +3,28 @@ | server/main.go:30:38:30:48 | selection of Text | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | The $@ of this request depends on a $@. | server/main.go:30:38:30:48 | selection of Text | URL | server/main.go:19:56:19:61 | definition of params | user-provided value | edges | client/main.go:16:35:16:78 | &... | server/main.go:19:56:19:61 | definition of params | provenance | | -| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | rpc/notes/service.twirp.go:477:44:477:51 | typedReq | provenance | | -| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | -| rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | rpc/notes/service.twirp.go:495:35:495:44 | reqContent | provenance | | -| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | +| client/main.go:16:35:16:78 | &... [postupdate] | client/main.go:16:35:16:78 | &... | provenance | | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | rpc/notes/service.twirp.go:544:27:544:29 | buf | provenance | | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | provenance | Src:MaD:1 MaD:3 | -| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | provenance | | -| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | provenance | MaD:2 | -| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | provenance | | -| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | +| rpc/notes/service.twirp.go:544:27:544:29 | buf | rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | provenance | MaD:2 | +| rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | provenance | | | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | client/main.go:16:35:16:78 | &... | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params [Return] | client/main.go:16:35:16:78 | &... [postupdate] | provenance | | models | 1 | Source: net/http; Request; true; Body; ; ; ; remote; manual | | 2 | Summary: google.golang.org/protobuf/proto; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | | 3 | Summary: io; ; false; ReadAll; ; ; Argument[0]; ReturnValue[0]; taint; manual | nodes | client/main.go:16:35:16:78 | &... | semmle.label | &... | -| rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | semmle.label | definition of typedReq | -| rpc/notes/service.twirp.go:477:44:477:51 | typedReq | semmle.label | typedReq | -| rpc/notes/service.twirp.go:493:2:496:2 | capture variable reqContent | semmle.label | capture variable reqContent | -| rpc/notes/service.twirp.go:495:35:495:44 | reqContent | semmle.label | reqContent | +| client/main.go:16:35:16:78 | &... [postupdate] | semmle.label | &... [postupdate] | | rpc/notes/service.twirp.go:538:2:538:33 | ... := ...[0] | semmle.label | ... := ...[0] | | rpc/notes/service.twirp.go:538:25:538:32 | selection of Body | semmle.label | selection of Body | -| rpc/notes/service.twirp.go:543:2:543:11 | definition of reqContent | semmle.label | definition of reqContent | | rpc/notes/service.twirp.go:544:27:544:29 | buf | semmle.label | buf | -| rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | semmle.label | definition of typedReq | -| rpc/notes/service.twirp.go:558:44:558:51 | typedReq | semmle.label | typedReq | +| rpc/notes/service.twirp.go:544:32:544:41 | reqContent [postupdate] | semmle.label | reqContent [postupdate] | | rpc/notes/service.twirp.go:574:2:577:2 | capture variable reqContent | semmle.label | capture variable reqContent | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | semmle.label | reqContent | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/Read.expected b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/Read.expected index 4bfef26418a..4c4bd0743d2 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/Read.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/Read.expected @@ -1,8 +1,8 @@ -| WebSocketReadWrite.go:31:7:31:10 | definition of xnet | -| WebSocketReadWrite.go:35:3:35:7 | definition of xnet2 | +| WebSocketReadWrite.go:32:11:32:14 | xnet [postupdate] | +| WebSocketReadWrite.go:36:21:36:25 | xnet2 [postupdate] | | WebSocketReadWrite.go:41:3:41:40 | ... := ...[1] | | WebSocketReadWrite.go:44:3:44:48 | ... := ...[1] | -| WebSocketReadWrite.go:51:7:51:16 | definition of gorillaMsg | -| WebSocketReadWrite.go:55:3:55:10 | definition of gorilla2 | +| WebSocketReadWrite.go:52:26:52:35 | gorillaMsg [postupdate] | +| WebSocketReadWrite.go:56:17:56:24 | gorilla2 [postupdate] | | WebSocketReadWrite.go:61:3:61:38 | ... := ...[1] | | WebSocketReadWrite.go:67:3:67:36 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected index 0124cf73218..e0c1603ff2e 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/WebSocket/RemoteFlowSources.expected @@ -1,9 +1,9 @@ | WebSocketReadWrite.go:27:9:27:16 | selection of Header | -| WebSocketReadWrite.go:31:7:31:10 | definition of xnet | -| WebSocketReadWrite.go:35:3:35:7 | definition of xnet2 | +| WebSocketReadWrite.go:32:11:32:14 | xnet [postupdate] | +| WebSocketReadWrite.go:36:21:36:25 | xnet2 [postupdate] | | WebSocketReadWrite.go:41:3:41:40 | ... := ...[1] | | WebSocketReadWrite.go:44:3:44:48 | ... := ...[1] | -| WebSocketReadWrite.go:51:7:51:16 | definition of gorillaMsg | -| WebSocketReadWrite.go:55:3:55:10 | definition of gorilla2 | +| WebSocketReadWrite.go:52:26:52:35 | gorillaMsg [postupdate] | +| WebSocketReadWrite.go:56:17:56:24 | gorilla2 [postupdate] | | WebSocketReadWrite.go:61:3:61:38 | ... := ...[1] | | WebSocketReadWrite.go:67:3:67:36 | ... := ...[0] | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected index b94733d5054..17c74de5555 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/XNetHtml/ReflectedXss.expected @@ -44,28 +44,20 @@ edges | test.go:39:23:39:77 | call to NewTokenizerFragment | test.go:40:15:40:31 | tokenizerFragment | provenance | | | test.go:39:49:39:60 | selection of Body | test.go:39:23:39:77 | call to NewTokenizerFragment | provenance | Src:MaD:1 MaD:4 | | test.go:40:15:40:31 | tokenizerFragment | test.go:40:15:40:42 | call to Buffered | provenance | MaD:12 | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:22:45:31 | &... | provenance | | -| test.go:42:6:42:14 | definition of cleanNode | test.go:45:23:45:31 | cleanNode | provenance | | | test.go:43:2:43:43 | ... := ...[0] | test.go:44:24:44:34 | taintedNode | provenance | | | test.go:43:31:43:42 | selection of Body | test.go:43:2:43:43 | ... := ...[0] | provenance | Src:MaD:1 MaD:5 | -| test.go:44:24:44:34 | taintedNode | test.go:42:6:42:14 | definition of cleanNode | provenance | MaD:10 | -| test.go:45:22:45:31 | &... | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:44:2:44:10 | cleanNode [postupdate] | test.go:45:22:45:31 | &... | provenance | | +| test.go:44:2:44:10 | cleanNode [postupdate] | test.go:45:23:45:31 | cleanNode | provenance | | +| test.go:44:24:44:34 | taintedNode | test.go:44:2:44:10 | cleanNode [postupdate] | provenance | MaD:10 | | test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:22:45:31 | &... | provenance | | -| test.go:45:22:45:31 | &... [pointer] | test.go:45:23:45:31 | cleanNode | provenance | | | test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... | provenance | | | test.go:45:23:45:31 | cleanNode | test.go:45:22:45:31 | &... [pointer] | provenance | | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:22:50:32 | &... | provenance | | -| test.go:47:6:47:15 | definition of cleanNode2 | test.go:50:23:50:32 | cleanNode2 | provenance | | | test.go:48:2:48:44 | ... := ...[0] | test.go:49:26:49:37 | taintedNode2 | provenance | | | test.go:48:32:48:43 | selection of Body | test.go:48:2:48:44 | ... := ...[0] | provenance | Src:MaD:1 MaD:5 | -| test.go:49:26:49:37 | taintedNode2 | test.go:47:6:47:15 | definition of cleanNode2 | provenance | MaD:11 | -| test.go:50:22:50:32 | &... | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:49:2:49:11 | cleanNode2 [postupdate] | test.go:50:22:50:32 | &... | provenance | | +| test.go:49:2:49:11 | cleanNode2 [postupdate] | test.go:50:23:50:32 | cleanNode2 | provenance | | +| test.go:49:26:49:37 | taintedNode2 | test.go:49:2:49:11 | cleanNode2 [postupdate] | provenance | MaD:11 | | test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:22:50:32 | &... | provenance | | -| test.go:50:22:50:32 | &... [pointer] | test.go:50:23:50:32 | cleanNode2 | provenance | | | test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... | provenance | | | test.go:50:23:50:32 | cleanNode2 | test.go:50:22:50:32 | &... [pointer] | provenance | | models @@ -125,20 +117,18 @@ nodes | test.go:39:49:39:60 | selection of Body | semmle.label | selection of Body | | test.go:40:15:40:31 | tokenizerFragment | semmle.label | tokenizerFragment | | test.go:40:15:40:42 | call to Buffered | semmle.label | call to Buffered | -| test.go:42:6:42:14 | definition of cleanNode | semmle.label | definition of cleanNode | | test.go:43:2:43:43 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:43:31:43:42 | selection of Body | semmle.label | selection of Body | +| test.go:44:2:44:10 | cleanNode [postupdate] | semmle.label | cleanNode [postupdate] | | test.go:44:24:44:34 | taintedNode | semmle.label | taintedNode | | test.go:45:22:45:31 | &... | semmle.label | &... | -| test.go:45:22:45:31 | &... | semmle.label | &... | | test.go:45:22:45:31 | &... [pointer] | semmle.label | &... [pointer] | | test.go:45:23:45:31 | cleanNode | semmle.label | cleanNode | -| test.go:47:6:47:15 | definition of cleanNode2 | semmle.label | definition of cleanNode2 | | test.go:48:2:48:44 | ... := ...[0] | semmle.label | ... := ...[0] | | test.go:48:32:48:43 | selection of Body | semmle.label | selection of Body | +| test.go:49:2:49:11 | cleanNode2 [postupdate] | semmle.label | cleanNode2 [postupdate] | | test.go:49:26:49:37 | taintedNode2 | semmle.label | taintedNode2 | | test.go:50:22:50:32 | &... | semmle.label | &... | -| test.go:50:22:50:32 | &... | semmle.label | &... | | test.go:50:22:50:32 | &... [pointer] | semmle.label | &... [pointer] | | test.go:50:23:50:32 | cleanNode2 | semmle.label | cleanNode2 | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/yaml.go b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/yaml.go index 9861acf33e6..fb8f7ea4bfa 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Yaml/yaml.go +++ b/go/ql/test/library-tests/semmle/go/frameworks/Yaml/yaml.go @@ -13,30 +13,30 @@ func main() { var inb []byte out, _ = yaml1.Marshal(in) // $ marshaler="yaml: in -> ... = ...[0]" ttfnmodelstep="in -> ... = ...[0]" - yaml1.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> definition of out" ttfnmodelstep="inb -> definition of out" + yaml1.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> out [postupdate]" ttfnmodelstep="inb -> out [postupdate]" out, _ = yaml2.Marshal(in) // $ marshaler="yaml: in -> ... = ...[0]" ttfnmodelstep="in -> ... = ...[0]" - yaml2.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> definition of out" ttfnmodelstep="inb -> definition of out" - yaml2.UnmarshalStrict(inb, out) // $ unmarshaler="yaml: inb -> definition of out" ttfnmodelstep="inb -> definition of out" + yaml2.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> out [postupdate]" ttfnmodelstep="inb -> out [postupdate]" + yaml2.UnmarshalStrict(inb, out) // $ unmarshaler="yaml: inb -> out [postupdate]" ttfnmodelstep="inb -> out [postupdate]" var r io.Reader d := yaml2.NewDecoder(r) // $ ttfnmodelstep="r -> call to NewDecoder" - d.Decode(out) // $ ttfnmodelstep="d -> definition of out" + d.Decode(out) // $ ttfnmodelstep="d -> out [postupdate]" var w io.Writer - e := yaml2.NewEncoder(w) // $ ttfnmodelstep="definition of e -> definition of w" - e.Encode(in) // $ ttfnmodelstep="in -> definition of e" + e := yaml2.NewEncoder(w) // $ ttfnmodelstep="definition of e -> w [postupdate]" + e.Encode(in) // $ ttfnmodelstep="in -> e [postupdate]" out, _ = yaml3.Marshal(in) // $ marshaler="yaml: in -> ... = ...[0]" ttfnmodelstep="in -> ... = ...[0]" - yaml3.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> definition of out" ttfnmodelstep="inb -> definition of out" + yaml3.Unmarshal(inb, out) // $ unmarshaler="yaml: inb -> out [postupdate]" ttfnmodelstep="inb -> out [postupdate]" d1 := yaml3.NewDecoder(r) // $ ttfnmodelstep="r -> call to NewDecoder" - d1.Decode(out) // $ ttfnmodelstep="d1 -> definition of out" + d1.Decode(out) // $ ttfnmodelstep="d1 -> out [postupdate]" - e1 := yaml3.NewEncoder(w) // $ ttfnmodelstep="definition of e1 -> definition of w" - e1.Encode(in) // $ ttfnmodelstep="in -> definition of e1" + e1 := yaml3.NewEncoder(w) // $ ttfnmodelstep="definition of e1 -> w [postupdate]" + e1.Encode(in) // $ ttfnmodelstep="in -> e1 [postupdate]" var n1 yaml3.Node - n1.Decode(out) // $ ttfnmodelstep="n1 -> definition of out" - n1.Encode(in) // $ ttfnmodelstep="in -> definition of n1" + n1.Decode(out) // $ ttfnmodelstep="n1 -> out [postupdate]" + n1.Encode(in) // $ ttfnmodelstep="in -> n1 [postupdate]" } diff --git a/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.expected b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.expected new file mode 100644 index 00000000000..c2f82841d83 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.expected @@ -0,0 +1,122 @@ +#select +| SafeUrlFlow.go:11:24:11:50 | ...+... | SafeUrlFlow.go:10:14:10:21 | selection of Host | SafeUrlFlow.go:11:24:11:50 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:10:14:10:21 | selection of Host | here | +| SafeUrlFlow.go:14:29:14:44 | call to String | SafeUrlFlow.go:13:13:13:19 | selection of URL | SafeUrlFlow.go:14:29:14:44 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:13:13:13:19 | selection of URL | here | +| SafeUrlFlow.go:18:11:18:28 | call to String | SafeUrlFlow.go:10:14:10:21 | selection of Host | SafeUrlFlow.go:18:11:18:28 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:10:14:10:21 | selection of Host | here | +| SafeUrlFlow.go:45:24:45:61 | ...+... | SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:45:24:45:61 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:37:13:37:19 | selection of URL | here | +| SafeUrlFlow.go:46:29:46:55 | ...+... | SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:46:29:46:55 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:37:13:37:19 | selection of URL | here | +| SafeUrlFlow.go:47:11:47:42 | ...+... | SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:47:11:47:42 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:37:13:37:19 | selection of URL | here | +| SafeUrlFlow.go:57:11:57:26 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:57:11:57:26 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:58:12:58:27 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:58:12:58:27 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:59:16:59:31 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:59:16:59:31 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:60:12:60:27 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:60:12:60:27 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:64:13:64:28 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:64:13:64:28 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:65:14:65:29 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:65:14:65:29 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:66:18:66:33 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:66:18:66:33 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:67:14:67:29 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:67:14:67:29 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:70:39:70:54 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:70:39:70:54 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:74:70:74:85 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:74:70:74:85 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:78:40:78:55 | call to String | SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:78:40:78:55 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:54:13:54:19 | selection of URL | here | +| SafeUrlFlow.go:89:24:89:41 | call to String | SafeUrlFlow.go:84:14:84:21 | selection of Host | SafeUrlFlow.go:89:24:89:41 | call to String | A safe URL flows here from $@. | SafeUrlFlow.go:84:14:84:21 | selection of Host | here | +| SafeUrlFlow.go:105:11:105:23 | reconstructed | SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:105:11:105:23 | reconstructed | A safe URL flows here from $@. | SafeUrlFlow.go:96:13:96:19 | selection of URL | here | +| SafeUrlFlow.go:108:24:108:50 | ...+... | SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:108:24:108:50 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:96:13:96:19 | selection of URL | here | +| SafeUrlFlow.go:109:29:109:58 | ...+... | SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:109:29:109:58 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:96:13:96:19 | selection of URL | here | +| SafeUrlFlow.go:110:12:110:42 | ...+... | SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:110:12:110:42 | ...+... | A safe URL flows here from $@. | SafeUrlFlow.go:96:13:96:19 | selection of URL | here | +| SafeUrlFlow.go:111:12:111:25 | safeOpaquePart | SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:111:12:111:25 | safeOpaquePart | A safe URL flows here from $@. | SafeUrlFlow.go:96:13:96:19 | selection of URL | here | +edges +| SafeUrlFlow.go:10:14:10:21 | selection of Host | SafeUrlFlow.go:11:24:11:50 | ...+... | provenance | Sink:MaD:1 | +| SafeUrlFlow.go:10:14:10:21 | selection of Host | SafeUrlFlow.go:17:19:17:26 | safeHost | provenance | | +| SafeUrlFlow.go:13:13:13:19 | selection of URL | SafeUrlFlow.go:14:29:14:35 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:14:29:14:35 | safeURL | SafeUrlFlow.go:14:29:14:44 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:17:2:17:10 | targetURL [postupdate] | SafeUrlFlow.go:18:11:18:19 | targetURL | provenance | | +| SafeUrlFlow.go:17:19:17:26 | safeHost | SafeUrlFlow.go:17:2:17:10 | targetURL [postupdate] | provenance | Config | +| SafeUrlFlow.go:18:11:18:19 | targetURL | SafeUrlFlow.go:18:11:18:28 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:45:24:45:61 | ...+... | provenance | Src:MaD:2 Sink:MaD:1 | +| SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:46:29:46:55 | ...+... | provenance | Src:MaD:2 | +| SafeUrlFlow.go:37:13:37:19 | selection of URL | SafeUrlFlow.go:47:11:47:42 | ...+... | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:57:11:57:17 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:58:12:58:18 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:59:16:59:22 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:60:12:60:18 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:64:13:64:19 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:65:14:65:20 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:66:18:66:24 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:67:14:67:20 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:70:39:70:45 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:74:70:74:76 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | SafeUrlFlow.go:78:40:78:46 | safeURL | provenance | Src:MaD:2 | +| SafeUrlFlow.go:57:11:57:17 | safeURL | SafeUrlFlow.go:57:11:57:26 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:58:12:58:18 | safeURL | SafeUrlFlow.go:58:12:58:27 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:59:16:59:22 | safeURL | SafeUrlFlow.go:59:16:59:31 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:60:12:60:18 | safeURL | SafeUrlFlow.go:60:12:60:27 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:64:13:64:19 | safeURL | SafeUrlFlow.go:64:13:64:28 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:65:14:65:20 | safeURL | SafeUrlFlow.go:65:14:65:29 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:66:18:66:24 | safeURL | SafeUrlFlow.go:66:18:66:33 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:67:14:67:20 | safeURL | SafeUrlFlow.go:67:14:67:29 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:70:39:70:45 | safeURL | SafeUrlFlow.go:70:39:70:54 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:74:70:74:76 | safeURL | SafeUrlFlow.go:74:70:74:85 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:78:40:78:46 | safeURL | SafeUrlFlow.go:78:40:78:55 | call to String | provenance | MaD:3 | +| SafeUrlFlow.go:84:14:84:21 | selection of Host | SafeUrlFlow.go:87:19:87:26 | safeHost | provenance | | +| SafeUrlFlow.go:87:2:87:10 | implicit dereference [postupdate] | SafeUrlFlow.go:87:2:87:10 | targetURL [postupdate] | provenance | | +| SafeUrlFlow.go:87:2:87:10 | targetURL [postupdate] | SafeUrlFlow.go:89:24:89:32 | targetURL | provenance | | +| SafeUrlFlow.go:87:19:87:26 | safeHost | SafeUrlFlow.go:87:2:87:10 | implicit dereference [postupdate] | provenance | Config | +| SafeUrlFlow.go:87:19:87:26 | safeHost | SafeUrlFlow.go:87:2:87:10 | targetURL [postupdate] | provenance | Config | +| SafeUrlFlow.go:89:24:89:32 | targetURL | SafeUrlFlow.go:89:24:89:41 | call to String | provenance | MaD:3 Sink:MaD:1 | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:105:11:105:23 | reconstructed | provenance | Src:MaD:2 | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:108:24:108:50 | ...+... | provenance | Src:MaD:2 Sink:MaD:1 | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:109:29:109:58 | ...+... | provenance | Src:MaD:2 | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:110:12:110:42 | ...+... | provenance | Src:MaD:2 | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | SafeUrlFlow.go:111:12:111:25 | safeOpaquePart | provenance | Src:MaD:2 | +models +| 1 | Sink: net/http; ; false; Redirect; ; ; Argument[2]; url-redirection[0]; manual | +| 2 | Source: net/http; Request; true; URL; ; ; ; remote; manual | +| 3 | Summary: fmt; Stringer; true; String; ; ; Argument[receiver]; ReturnValue; taint; manual | +nodes +| SafeUrlFlow.go:10:14:10:21 | selection of Host | semmle.label | selection of Host | +| SafeUrlFlow.go:11:24:11:50 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:13:13:13:19 | selection of URL | semmle.label | selection of URL | +| SafeUrlFlow.go:14:29:14:35 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:14:29:14:44 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:17:2:17:10 | targetURL [postupdate] | semmle.label | targetURL [postupdate] | +| SafeUrlFlow.go:17:19:17:26 | safeHost | semmle.label | safeHost | +| SafeUrlFlow.go:18:11:18:19 | targetURL | semmle.label | targetURL | +| SafeUrlFlow.go:18:11:18:28 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:37:13:37:19 | selection of URL | semmle.label | selection of URL | +| SafeUrlFlow.go:45:24:45:61 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:46:29:46:55 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:47:11:47:42 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:54:13:54:19 | selection of URL | semmle.label | selection of URL | +| SafeUrlFlow.go:57:11:57:17 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:57:11:57:26 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:58:12:58:18 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:58:12:58:27 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:59:16:59:22 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:59:16:59:31 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:60:12:60:18 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:60:12:60:27 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:64:13:64:19 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:64:13:64:28 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:65:14:65:20 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:65:14:65:29 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:66:18:66:24 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:66:18:66:33 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:67:14:67:20 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:67:14:67:29 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:70:39:70:45 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:70:39:70:54 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:74:70:74:76 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:74:70:74:85 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:78:40:78:46 | safeURL | semmle.label | safeURL | +| SafeUrlFlow.go:78:40:78:55 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:84:14:84:21 | selection of Host | semmle.label | selection of Host | +| SafeUrlFlow.go:87:2:87:10 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| SafeUrlFlow.go:87:2:87:10 | targetURL [postupdate] | semmle.label | targetURL [postupdate] | +| SafeUrlFlow.go:87:19:87:26 | safeHost | semmle.label | safeHost | +| SafeUrlFlow.go:89:24:89:32 | targetURL | semmle.label | targetURL | +| SafeUrlFlow.go:89:24:89:41 | call to String | semmle.label | call to String | +| SafeUrlFlow.go:96:13:96:19 | selection of URL | semmle.label | selection of URL | +| SafeUrlFlow.go:105:11:105:23 | reconstructed | semmle.label | reconstructed | +| SafeUrlFlow.go:108:24:108:50 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:109:29:109:58 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:110:12:110:42 | ...+... | semmle.label | ...+... | +| SafeUrlFlow.go:111:12:111:25 | safeOpaquePart | semmle.label | safeOpaquePart | +subpaths diff --git a/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.go b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.go new file mode 100644 index 00000000000..4718b973844 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.go @@ -0,0 +1,122 @@ +package main + +import ( + "context" + "net/http" + "net/url" +) + +func testStdlibSources(w http.ResponseWriter, req *http.Request) { + safeHost := req.Host // $ Source + http.Redirect(w, req, "https://"+safeHost+"/path", http.StatusFound) // $ Alert + + safeURL := req.URL // $ Source + w.Header().Set("Location", safeURL.String()) // $ Alert + + targetURL := url.URL{} + targetURL.Host = safeHost // URL is safe if Host is safe + http.Get(targetURL.String()) // $ Alert +} + +func testBarrierEdge1(w http.ResponseWriter, req *http.Request) { + safeURL := req.URL + + query := safeURL.Query() // query is not guaranteed to be safe + http.Redirect(w, req, query.Get("redirect"), http.StatusFound) // not guaranteed to be safe +} + +func testBarrierEdge2(w http.ResponseWriter, req *http.Request) { + safeURL := req.URL + + urlString := safeURL.String() + sliced := urlString[0:10] // a substring of a safe URL is not guaranteed to be safe + w.Header().Set("Location", sliced) // not guaranteed to be safe +} + +func testFieldReads(w http.ResponseWriter, req *http.Request) { + safeURL := req.URL // $ Source + + safeScheme := safeURL.Scheme // the scheme of a safe URL is safe + safeHost := safeURL.Host // the host of a safe URL is safe + safePath := safeURL.Path // the path of a safe URL is safe + fragment := safeURL.Fragment // the fragment of a safe URL is not guaranteed to be safe + user := safeURL.User // the user of a safe URL is not guaranteed to be safe + + http.Redirect(w, req, "https://"+safeScheme+"://example.com", http.StatusFound) // $ Alert + w.Header().Set("Location", "https://"+safeHost+"/path") // $ Alert + http.Get("https://example.com" + safePath) // $ Alert + + http.Get(fragment) // not guaranteed to be safe + http.Get(user.String()) // not guaranteed to be safe +} + +func testRequestForgerySinks(req *http.Request) { + safeURL := req.URL // $ Source + + // Standard library HTTP functions (request-forgery sinks) + http.Get(safeURL.String()) // $ Alert + http.Post(safeURL.String(), "application/json", nil) // $ Alert + http.PostForm(safeURL.String(), nil) // $ Alert + http.Head(safeURL.String()) // $ Alert + + // HTTP Client methods (request-forgery sinks) + client := &http.Client{} + client.Get(safeURL.String()) // $ Alert + client.Post(safeURL.String(), "application/json", nil) // $ Alert + client.PostForm(safeURL.String(), nil) // $ Alert + client.Head(safeURL.String()) // $ Alert + + // NewRequest + Client.Do (request-forgery sinks) + request, _ := http.NewRequest("GET", safeURL.String(), nil) // $ Alert + client.Do(request) + + // NewRequestWithContext + Client.Do (request-forgery sinks) + reqWithCtx, _ := http.NewRequestWithContext(context.TODO(), "POST", safeURL.String(), nil) // $ Alert + client.Do(reqWithCtx) + + // RoundTrip method (request-forgery sink) + request2, _ := http.NewRequest("GET", safeURL.String(), nil) // $ Alert + transport := &http.Transport{} + transport.RoundTrip(request2) +} + +func testHostFieldAssignmentFlow(w http.ResponseWriter, req *http.Request) { + safeHost := req.Host // $ Source + + targetURL, _ := url.Parse("http://example.com/data") + targetURL.Host = safeHost // URL is safe if Host is safe + + http.Redirect(w, req, targetURL.String(), http.StatusFound) // $ Alert + + targetURL.Host = "something.else.com" // targetURL is not guaranteed to be safe now that Host is overwritten + http.Get(targetURL.String()) +} + +func testFieldAccess(w http.ResponseWriter, req *http.Request) { + safeURL := req.URL // $ Source + + safeHost := safeURL.Host // the host of a safe URL is safe + safePath := safeURL.Path // the path of a safe URL is safe + safeScheme := safeURL.Scheme // the scheme of a safe URL is safe + safeOpaquePart := safeURL.Opaque // the opaque part of a safe URL is safe + + // Reconstruct URL - still guaranteed to be safe + reconstructed := safeScheme + "://" + safeHost + safePath + http.Get(reconstructed) // $ Alert + + // Test individual fields + http.Redirect(w, req, "https://"+safeHost+"/path", http.StatusFound) // $ Alert + w.Header().Set("Location", "https://example.com"+safePath) // $ Alert + http.Post(safeScheme+"://example.com/api", "application/json", nil) // $ Alert + http.Post(safeOpaquePart, "application/json", nil) // $ Alert + + user := safeURL.User // the user of a safe URL is not guaranteed to be safe + query := safeURL.RawQuery // the query of a safe URL is not guaranteed to be safe + fragment := safeURL.Fragment // the fragment of a safe URL is not guaranteed to be safe + + if user != nil { + http.Redirect(w, req, user.String(), http.StatusFound) // not guaranteed to be safe + } + w.Header().Set("Location", "https://example.com/?"+query) // not guaranteed to be safe + http.Get("https://example.com/#" + fragment) // not guaranteed to be safe +} diff --git a/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.ql b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.ql new file mode 100644 index 00000000000..badc69f386c --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.ql @@ -0,0 +1,15 @@ +/** + * @id go/test-safe-url-flow + * @kind path-problem + * @problem.severity recommendation + */ + +import go +import semmle.go.security.RequestForgeryCustomizations +import semmle.go.security.OpenUrlRedirectCustomizations +import semmle.go.security.SafeUrlFlow +import SafeUrlFlow::Flow::PathGraph + +from SafeUrlFlow::Flow::PathNode source, SafeUrlFlow::Flow::PathNode sink +where SafeUrlFlow::Flow::flowPath(source, sink) +select sink.getNode(), source, sink, "A safe URL flows here from $@.", source.getNode(), "here" diff --git a/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.qlref b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.qlref new file mode 100644 index 00000000000..db1b80a6317 --- /dev/null +++ b/go/ql/test/library-tests/semmle/go/security/SafeUrlFlow/SafeUrlFlow.qlref @@ -0,0 +1,4 @@ +query: SafeUrlFlow.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go b/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go index 2449ccdac62..b8b4be44847 100644 --- a/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go +++ b/go/ql/test/query-tests/InconsistentCode/MistypedExponentiation/main.go @@ -22,6 +22,13 @@ func main() { mask := (((1 << 10) - 1) ^ 7) // OK + const ( + c1 = 0x1234 + c2 = 0x5678 + ) + + fmt.Println(c1 ^ c2) // OK + // This is not ok, but isn't detected because the multiplication binds tighter // than the xor operator and so the query doesn't see a constant on the left // hand side of ^. diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected index 839d35f663c..c95fa5e7af6 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.expected @@ -1,25 +1,25 @@ #select -| TaintedPath.go:17:29:17:40 | tainted_path | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:17:29:17:40 | tainted_path | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value | -| TaintedPath.go:21:28:21:69 | call to Join | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:21:28:21:69 | call to Join | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value | -| TaintedPath.go:68:28:68:57 | call to Clean | TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:68:28:68:57 | call to Clean | This path depends on a $@. | TaintedPath.go:14:18:14:22 | selection of URL | user-provided value | +| TaintedPath.go:18:29:18:40 | tainted_path | TaintedPath.go:15:18:15:22 | selection of URL | TaintedPath.go:18:29:18:40 | tainted_path | This path depends on a $@. | TaintedPath.go:15:18:15:22 | selection of URL | user-provided value | +| TaintedPath.go:22:28:22:69 | call to Join | TaintedPath.go:15:18:15:22 | selection of URL | TaintedPath.go:22:28:22:69 | call to Join | This path depends on a $@. | TaintedPath.go:15:18:15:22 | selection of URL | user-provided value | +| TaintedPath.go:74:28:74:57 | call to Clean | TaintedPath.go:15:18:15:22 | selection of URL | TaintedPath.go:74:28:74:57 | call to Clean | This path depends on a $@. | TaintedPath.go:15:18:15:22 | selection of URL | user-provided value | edges -| TaintedPath.go:14:18:14:22 | selection of URL | TaintedPath.go:14:18:14:30 | call to Query | provenance | Src:MaD:2 MaD:3 | -| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:17:29:17:40 | tainted_path | provenance | Sink:MaD:1 | -| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:21:57:21:68 | tainted_path | provenance | | -| TaintedPath.go:14:18:14:30 | call to Query | TaintedPath.go:68:39:68:56 | ...+... | provenance | | -| TaintedPath.go:21:57:21:68 | tainted_path | TaintedPath.go:21:28:21:69 | call to Join | provenance | FunctionModel Sink:MaD:1 | -| TaintedPath.go:68:39:68:56 | ...+... | TaintedPath.go:68:28:68:57 | call to Clean | provenance | MaD:4 Sink:MaD:1 | +| TaintedPath.go:15:18:15:22 | selection of URL | TaintedPath.go:15:18:15:30 | call to Query | provenance | Src:MaD:2 MaD:3 | +| TaintedPath.go:15:18:15:30 | call to Query | TaintedPath.go:18:29:18:40 | tainted_path | provenance | Sink:MaD:1 | +| TaintedPath.go:15:18:15:30 | call to Query | TaintedPath.go:22:57:22:68 | tainted_path | provenance | | +| TaintedPath.go:22:57:22:68 | tainted_path | TaintedPath.go:22:28:22:69 | call to Join | provenance | FunctionModel Sink:MaD:1 | +| TaintedPath.go:22:57:22:68 | tainted_path | TaintedPath.go:74:39:74:56 | ...+... | provenance | | +| TaintedPath.go:74:39:74:56 | ...+... | TaintedPath.go:74:28:74:57 | call to Clean | provenance | MaD:4 Sink:MaD:1 | models | 1 | Sink: io/ioutil; ; false; ReadFile; ; ; Argument[0]; path-injection; manual | | 2 | Source: net/http; Request; true; URL; ; ; ; remote; manual | | 3 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | | 4 | Summary: path; ; false; Clean; ; ; Argument[0]; ReturnValue; taint; manual | nodes -| TaintedPath.go:14:18:14:22 | selection of URL | semmle.label | selection of URL | -| TaintedPath.go:14:18:14:30 | call to Query | semmle.label | call to Query | -| TaintedPath.go:17:29:17:40 | tainted_path | semmle.label | tainted_path | -| TaintedPath.go:21:28:21:69 | call to Join | semmle.label | call to Join | -| TaintedPath.go:21:57:21:68 | tainted_path | semmle.label | tainted_path | -| TaintedPath.go:68:28:68:57 | call to Clean | semmle.label | call to Clean | -| TaintedPath.go:68:39:68:56 | ...+... | semmle.label | ...+... | +| TaintedPath.go:15:18:15:22 | selection of URL | semmle.label | selection of URL | +| TaintedPath.go:15:18:15:30 | call to Query | semmle.label | call to Query | +| TaintedPath.go:18:29:18:40 | tainted_path | semmle.label | tainted_path | +| TaintedPath.go:22:28:22:69 | call to Join | semmle.label | call to Join | +| TaintedPath.go:22:57:22:68 | tainted_path | semmle.label | tainted_path | +| TaintedPath.go:74:28:74:57 | call to Clean | semmle.label | call to Clean | +| TaintedPath.go:74:39:74:56 | ...+... | semmle.label | ...+... | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.go b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.go index 82c0592a516..65da5caecd2 100644 --- a/go/ql/test/query-tests/Security/CWE-022/TaintedPath.go +++ b/go/ql/test/query-tests/Security/CWE-022/TaintedPath.go @@ -4,6 +4,7 @@ import ( "io/ioutil" "mime/multipart" "net/http" + "os" "path" "path/filepath" "regexp" @@ -63,6 +64,11 @@ func handler(w http.ResponseWriter, r *http.Request) { data, _ = ioutil.ReadFile(filepath.Clean("/" + tainted_path)) w.Write(data) + // GOOD: Sanitized by filepath.Clean with a prepended os.PathSeparator forcing interpretation + // as an absolute path, so that Clean will throw away any leading `..` components. + data, _ = ioutil.ReadFile(filepath.Clean(string(os.PathSeparator) + "hardcoded" + tainted_path)) + w.Write(data) + // BAD: Sanitized by path.Clean with a prepended '/' forcing interpretation // as an absolute path, however is not sufficient for Windows paths. data, _ = ioutil.ReadFile(path.Clean("/" + tainted_path)) diff --git a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected index dff32df4e1f..78dde84a947 100644 --- a/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-078/CommandInjection.expected @@ -48,14 +48,14 @@ edges | GitSubcommands.go:11:13:11:27 | call to Query | GitSubcommands.go:17:36:17:42 | tainted | provenance | | | GitSubcommands.go:33:13:33:19 | selection of URL | GitSubcommands.go:33:13:33:27 | call to Query | provenance | Src:MaD:2 MaD:7 | | GitSubcommands.go:33:13:33:27 | call to Query | GitSubcommands.go:38:32:38:38 | tainted | provenance | | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:13:25:13:31 | tainted | provenance | | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:39:31:39:37 | tainted | provenance | Config | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:52:24:52:30 | tainted | provenance | Config | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:68:31:68:37 | tainted | provenance | Config | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | SanitizingDoubleDash.go:80:23:80:29 | tainted | provenance | Config | | SanitizingDoubleDash.go:9:13:9:19 | selection of URL | SanitizingDoubleDash.go:9:13:9:27 | call to Query | provenance | Src:MaD:2 MaD:7 | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:13:25:13:31 | tainted | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:14:23:14:33 | slice expression | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:39:31:39:37 | tainted | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:52:24:52:30 | tainted | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:68:31:68:37 | tainted | provenance | | -| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:80:23:80:29 | tainted | provenance | | +| SanitizingDoubleDash.go:9:13:9:27 | call to Query | SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | provenance | | | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | provenance | | | SanitizingDoubleDash.go:13:25:13:31 | tainted | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | provenance | | | SanitizingDoubleDash.go:14:23:14:30 | arrayLit [array] | SanitizingDoubleDash.go:14:23:14:33 | slice element node | provenance | | @@ -67,6 +67,7 @@ edges | SanitizingDoubleDash.go:39:31:39:37 | tainted | SanitizingDoubleDash.go:39:14:39:44 | []type{args} [array] | provenance | | | SanitizingDoubleDash.go:52:15:52:31 | slice literal [array] | SanitizingDoubleDash.go:53:21:53:28 | arrayLit [array] | provenance | | | SanitizingDoubleDash.go:52:24:52:30 | tainted | SanitizingDoubleDash.go:52:15:52:31 | slice literal [array] | provenance | | +| SanitizingDoubleDash.go:52:24:52:30 | tainted | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | provenance | | | SanitizingDoubleDash.go:53:14:53:35 | call to append | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | provenance | | | SanitizingDoubleDash.go:53:14:53:35 | call to append [array] | SanitizingDoubleDash.go:54:23:54:30 | arrayLit | provenance | | | SanitizingDoubleDash.go:53:21:53:28 | arrayLit | SanitizingDoubleDash.go:53:14:53:35 | call to append | provenance | MaD:4 | @@ -180,6 +181,7 @@ nodes | GitSubcommands.go:33:13:33:19 | selection of URL | semmle.label | selection of URL | | GitSubcommands.go:33:13:33:27 | call to Query | semmle.label | call to Query | | GitSubcommands.go:38:32:38:38 | tainted | semmle.label | tainted | +| SanitizingDoubleDash.go:9:2:9:8 | definition of tainted | semmle.label | definition of tainted | | SanitizingDoubleDash.go:9:13:9:19 | selection of URL | semmle.label | selection of URL | | SanitizingDoubleDash.go:9:13:9:27 | call to Query | semmle.label | call to Query | | SanitizingDoubleDash.go:13:15:13:32 | array literal [array] | semmle.label | array literal [array] | diff --git a/go/ql/test/query-tests/Security/CWE-078/SanitizingDoubleDash.go b/go/ql/test/query-tests/Security/CWE-078/SanitizingDoubleDash.go index d69a970f0d0..0428df55086 100644 --- a/go/ql/test/query-tests/Security/CWE-078/SanitizingDoubleDash.go +++ b/go/ql/test/query-tests/Security/CWE-078/SanitizingDoubleDash.go @@ -93,62 +93,62 @@ func testDoubleDashIrrelevant(req *http.Request) { { arrayLit := [1]string{tainted} - exec.Command("sudo", arrayLit[:]...) + exec.Command("sudo", arrayLit[:]...) // BAD } { arrayLit := [2]string{"--", tainted} - exec.Command("sudo", arrayLit[:]...) + exec.Command("sudo", arrayLit[:]...) // BAD } { arrayLit := []string{"--", tainted} - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{} arrayLit = append(arrayLit, "--", tainted) - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{} arrayLit = append(arrayLit, tainted, "--") - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{"--"} arrayLit = append(arrayLit, tainted) - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{tainted} arrayLit = append(arrayLit, "--") - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{"--"} arrayLit = append(arrayLit, "something else") arrayLit = append(arrayLit, tainted) - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { arrayLit := []string{"something else"} arrayLit = append(arrayLit, tainted) arrayLit = append(arrayLit, "--") - exec.Command("sudo", arrayLit...) + exec.Command("sudo", arrayLit...) // BAD } { - exec.Command("sudo", "--", tainted) + exec.Command("sudo", "--", tainted) // BAD } { - exec.Command("sudo", tainted, "--") + exec.Command("sudo", tainted, "--") // BAD } } diff --git a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected index c274067926a..809f5c20976 100644 --- a/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected +++ b/go/ql/test/query-tests/Security/CWE-078/StoredCommand.expected @@ -2,14 +2,14 @@ | StoredCommand.go:14:22:14:28 | cmdName | StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:14:22:14:28 | cmdName | This command depends on a $@. | StoredCommand.go:11:2:11:27 | ... := ...[0] | stored value | edges | StoredCommand.go:11:2:11:27 | ... := ...[0] | StoredCommand.go:13:2:13:5 | rows | provenance | Src:MaD:2 | -| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... | provenance | FunctionModel | -| StoredCommand.go:13:12:13:19 | &... | StoredCommand.go:14:22:14:28 | cmdName | provenance | Sink:MaD:1 | +| StoredCommand.go:13:2:13:5 | rows | StoredCommand.go:13:12:13:19 | &... [postupdate] | provenance | FunctionModel | +| StoredCommand.go:13:12:13:19 | &... [postupdate] | StoredCommand.go:14:22:14:28 | cmdName | provenance | Sink:MaD:1 | models | 1 | Sink: os/exec; ; false; Command; ; ; Argument[0]; command-injection; manual | | 2 | Source: database/sql; DB; true; Query; ; ; ReturnValue[0]; database; manual | nodes | StoredCommand.go:11:2:11:27 | ... := ...[0] | semmle.label | ... := ...[0] | | StoredCommand.go:13:2:13:5 | rows | semmle.label | rows | -| StoredCommand.go:13:12:13:19 | &... | semmle.label | &... | +| StoredCommand.go:13:12:13:19 | &... [postupdate] | semmle.label | &... [postupdate] | | StoredCommand.go:14:22:14:28 | cmdName | semmle.label | cmdName | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected index 91b39e0e2a0..0e1265b5c1e 100644 --- a/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/ReflectedXss.expected @@ -13,11 +13,11 @@ | reflectedxsstest.go:54:11:54:21 | type conversion | reflectedxsstest.go:51:14:51:18 | selection of URL | reflectedxsstest.go:54:11:54:21 | type conversion | Cross-site scripting vulnerability due to $@. | reflectedxsstest.go:51:14:51:18 | selection of URL | user-provided value | reflectedxsstest.go:0:0:0:0 | reflectedxsstest.go | | | tst.go:18:12:18:39 | type conversion | tst.go:14:15:14:20 | selection of Form | tst.go:18:12:18:39 | type conversion | Cross-site scripting vulnerability due to $@. | tst.go:14:15:14:20 | selection of Form | user-provided value | tst.go:0:0:0:0 | tst.go | | | tst.go:53:12:53:26 | type conversion | tst.go:48:14:48:19 | selection of Form | tst.go:53:12:53:26 | type conversion | Cross-site scripting vulnerability due to $@. | tst.go:48:14:48:19 | selection of Form | user-provided value | tst.go:0:0:0:0 | tst.go | | -| websocketXss.go:32:24:32:27 | xnet | websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | Cross-site scripting vulnerability due to $@. | websocketXss.go:30:7:30:10 | definition of xnet | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | -| websocketXss.go:36:24:36:28 | xnet2 | websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | Cross-site scripting vulnerability due to $@. | websocketXss.go:34:3:34:7 | definition of xnet2 | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | +| websocketXss.go:32:24:32:27 | xnet | websocketXss.go:31:11:31:14 | xnet [postupdate] | websocketXss.go:32:24:32:27 | xnet | Cross-site scripting vulnerability due to $@. | websocketXss.go:31:11:31:14 | xnet [postupdate] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | +| websocketXss.go:36:24:36:28 | xnet2 | websocketXss.go:35:21:35:25 | xnet2 [postupdate] | websocketXss.go:36:24:36:28 | xnet2 | Cross-site scripting vulnerability due to $@. | websocketXss.go:35:21:35:25 | xnet2 [postupdate] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | | websocketXss.go:41:24:41:29 | nhooyr | websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | Cross-site scripting vulnerability due to $@. | websocketXss.go:40:3:40:40 | ... := ...[1] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | -| websocketXss.go:48:24:48:33 | gorillaMsg | websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | Cross-site scripting vulnerability due to $@. | websocketXss.go:46:7:46:16 | definition of gorillaMsg | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | -| websocketXss.go:52:24:52:31 | gorilla2 | websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | Cross-site scripting vulnerability due to $@. | websocketXss.go:50:3:50:10 | definition of gorilla2 | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | +| websocketXss.go:48:24:48:33 | gorillaMsg | websocketXss.go:47:26:47:35 | gorillaMsg [postupdate] | websocketXss.go:48:24:48:33 | gorillaMsg | Cross-site scripting vulnerability due to $@. | websocketXss.go:47:26:47:35 | gorillaMsg [postupdate] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | +| websocketXss.go:52:24:52:31 | gorilla2 | websocketXss.go:51:17:51:24 | gorilla2 [postupdate] | websocketXss.go:52:24:52:31 | gorilla2 | Cross-site scripting vulnerability due to $@. | websocketXss.go:51:17:51:24 | gorilla2 [postupdate] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | | websocketXss.go:55:24:55:31 | gorilla3 | websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | Cross-site scripting vulnerability due to $@. | websocketXss.go:54:3:54:38 | ... := ...[1] | user-provided value | websocketXss.go:0:0:0:0 | websocketXss.go | | edges | ReflectedXss.go:11:15:11:20 | selection of Form | ReflectedXss.go:11:15:11:36 | call to Get | provenance | Src:MaD:6 MaD:18 | @@ -48,8 +48,8 @@ edges | reflectedxsstest.go:39:16:39:21 | reader | reflectedxsstest.go:39:2:39:32 | ... := ...[0] | provenance | MaD:16 | | reflectedxsstest.go:40:14:40:17 | part | reflectedxsstest.go:40:14:40:28 | call to FileName | provenance | MaD:15 | | reflectedxsstest.go:40:14:40:28 | call to FileName | reflectedxsstest.go:44:46:44:53 | partName | provenance | | -| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | reflectedxsstest.go:45:10:45:18 | byteSlice | provenance | | -| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:41:2:41:10 | definition of byteSlice | provenance | MaD:14 | +| reflectedxsstest.go:42:2:42:5 | part | reflectedxsstest.go:42:12:42:20 | byteSlice [postupdate] | provenance | MaD:14 | +| reflectedxsstest.go:42:12:42:20 | byteSlice [postupdate] | reflectedxsstest.go:45:10:45:18 | byteSlice | provenance | | | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | reflectedxsstest.go:44:17:44:54 | call to Sprintf | provenance | MaD:12 | | reflectedxsstest.go:44:17:44:54 | call to Sprintf | reflectedxsstest.go:44:10:44:55 | type conversion | provenance | | | reflectedxsstest.go:44:46:44:53 | partName | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | provenance | | @@ -62,11 +62,11 @@ edges | tst.go:18:32:18:32 | a | tst.go:18:19:18:38 | call to Join | provenance | MaD:19 | | tst.go:48:14:48:19 | selection of Form | tst.go:48:14:48:34 | call to Get | provenance | Src:MaD:6 MaD:18 | | tst.go:48:14:48:34 | call to Get | tst.go:53:12:53:26 | type conversion | provenance | | -| websocketXss.go:30:7:30:10 | definition of xnet | websocketXss.go:32:24:32:27 | xnet | provenance | Src:MaD:5 | -| websocketXss.go:34:3:34:7 | definition of xnet2 | websocketXss.go:36:24:36:28 | xnet2 | provenance | Src:MaD:4 | +| websocketXss.go:31:11:31:14 | xnet [postupdate] | websocketXss.go:32:24:32:27 | xnet | provenance | Src:MaD:5 | +| websocketXss.go:35:21:35:25 | xnet2 [postupdate] | websocketXss.go:36:24:36:28 | xnet2 | provenance | Src:MaD:4 | | websocketXss.go:40:3:40:40 | ... := ...[1] | websocketXss.go:41:24:41:29 | nhooyr | provenance | Src:MaD:11 | -| websocketXss.go:46:7:46:16 | definition of gorillaMsg | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | Src:MaD:1 | -| websocketXss.go:50:3:50:10 | definition of gorilla2 | websocketXss.go:52:24:52:31 | gorilla2 | provenance | Src:MaD:2 | +| websocketXss.go:47:26:47:35 | gorillaMsg [postupdate] | websocketXss.go:48:24:48:33 | gorillaMsg | provenance | Src:MaD:1 | +| websocketXss.go:51:17:51:24 | gorilla2 [postupdate] | websocketXss.go:52:24:52:31 | gorilla2 | provenance | Src:MaD:2 | | websocketXss.go:54:3:54:38 | ... := ...[1] | websocketXss.go:55:24:55:31 | gorilla3 | provenance | Src:MaD:3 | models | 1 | Source: github.com/gorilla/websocket; ; false; ReadJSON; ; ; Argument[1]; remote; manual | @@ -123,8 +123,8 @@ nodes | reflectedxsstest.go:39:16:39:21 | reader | semmle.label | reader | | reflectedxsstest.go:40:14:40:17 | part | semmle.label | part | | reflectedxsstest.go:40:14:40:28 | call to FileName | semmle.label | call to FileName | -| reflectedxsstest.go:41:2:41:10 | definition of byteSlice | semmle.label | definition of byteSlice | | reflectedxsstest.go:42:2:42:5 | part | semmle.label | part | +| reflectedxsstest.go:42:12:42:20 | byteSlice [postupdate] | semmle.label | byteSlice [postupdate] | | reflectedxsstest.go:44:10:44:55 | type conversion | semmle.label | type conversion | | reflectedxsstest.go:44:17:44:54 | []type{args} [array] | semmle.label | []type{args} [array] | | reflectedxsstest.go:44:17:44:54 | call to Sprintf | semmle.label | call to Sprintf | @@ -141,16 +141,25 @@ nodes | tst.go:48:14:48:19 | selection of Form | semmle.label | selection of Form | | tst.go:48:14:48:34 | call to Get | semmle.label | call to Get | | tst.go:53:12:53:26 | type conversion | semmle.label | type conversion | -| websocketXss.go:30:7:30:10 | definition of xnet | semmle.label | definition of xnet | +| websocketXss.go:31:11:31:14 | xnet [postupdate] | semmle.label | xnet [postupdate] | | websocketXss.go:32:24:32:27 | xnet | semmle.label | xnet | -| websocketXss.go:34:3:34:7 | definition of xnet2 | semmle.label | definition of xnet2 | +| websocketXss.go:35:21:35:25 | xnet2 [postupdate] | semmle.label | xnet2 [postupdate] | | websocketXss.go:36:24:36:28 | xnet2 | semmle.label | xnet2 | | websocketXss.go:40:3:40:40 | ... := ...[1] | semmle.label | ... := ...[1] | | websocketXss.go:41:24:41:29 | nhooyr | semmle.label | nhooyr | -| websocketXss.go:46:7:46:16 | definition of gorillaMsg | semmle.label | definition of gorillaMsg | +| websocketXss.go:47:26:47:35 | gorillaMsg [postupdate] | semmle.label | gorillaMsg [postupdate] | | websocketXss.go:48:24:48:33 | gorillaMsg | semmle.label | gorillaMsg | -| websocketXss.go:50:3:50:10 | definition of gorilla2 | semmle.label | definition of gorilla2 | +| websocketXss.go:51:17:51:24 | gorilla2 [postupdate] | semmle.label | gorilla2 [postupdate] | | websocketXss.go:52:24:52:31 | gorilla2 | semmle.label | gorilla2 | | websocketXss.go:54:3:54:38 | ... := ...[1] | semmle.label | ... := ...[1] | | websocketXss.go:55:24:55:31 | gorilla3 | semmle.label | gorilla3 | subpaths +testFailures +| websocketXss.go:30:32:30:60 | comment | Missing result: Source[go/reflected-xss] | +| websocketXss.go:31:11:31:14 | xnet [postupdate] | Unexpected result: Source | +| websocketXss.go:34:30:34:58 | comment | Missing result: Source[go/reflected-xss] | +| websocketXss.go:35:21:35:25 | xnet2 [postupdate] | Unexpected result: Source | +| websocketXss.go:46:38:46:66 | comment | Missing result: Source[go/reflected-xss] | +| websocketXss.go:47:26:47:35 | gorillaMsg [postupdate] | Unexpected result: Source | +| websocketXss.go:50:33:50:61 | comment | Missing result: Source[go/reflected-xss] | +| websocketXss.go:51:17:51:24 | gorilla2 [postupdate] | Unexpected result: Source | diff --git a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected index 4e2958c767e..41ec62706d0 100644 --- a/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected +++ b/go/ql/test/query-tests/Security/CWE-079/StoredXss.expected @@ -3,15 +3,15 @@ | stored.go:61:22:61:25 | path | stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | Stored cross-site scripting vulnerability due to $@. | stored.go:59:30:59:33 | definition of path | stored value | edges | stored.go:18:3:18:28 | ... := ...[0] | stored.go:25:14:25:17 | rows | provenance | Src:MaD:1 | -| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... | provenance | FunctionModel | -| stored.go:25:29:25:33 | &... | stored.go:30:22:30:25 | name | provenance | | +| stored.go:25:14:25:17 | rows | stored.go:25:29:25:33 | &... [postupdate] | provenance | FunctionModel | +| stored.go:25:29:25:33 | &... [postupdate] | stored.go:30:22:30:25 | name | provenance | | | stored.go:59:30:59:33 | definition of path | stored.go:61:22:61:25 | path | provenance | | models | 1 | Source: database/sql; DB; true; Query; ; ; ReturnValue[0]; database; manual | nodes | stored.go:18:3:18:28 | ... := ...[0] | semmle.label | ... := ...[0] | | stored.go:25:14:25:17 | rows | semmle.label | rows | -| stored.go:25:29:25:33 | &... | semmle.label | &... | +| stored.go:25:29:25:33 | &... [postupdate] | semmle.label | &... [postupdate] | | stored.go:30:22:30:25 | name | semmle.label | name | | stored.go:59:30:59:33 | definition of path | semmle.label | definition of path | | stored.go:61:22:61:25 | path | semmle.label | path | diff --git a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected index 1ce8c3d1dcf..e8c6848b569 100644 --- a/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-089/SqlInjection.expected @@ -33,24 +33,24 @@ edges | SqlInjection.go:11:3:11:29 | index expression | SqlInjection.go:10:7:11:30 | call to Sprintf | provenance | FunctionModel | | issue48.go:17:2:17:33 | ... := ...[0] | issue48.go:18:17:18:17 | b | provenance | | | issue48.go:17:25:17:32 | selection of Body | issue48.go:17:2:17:33 | ... := ...[0] | provenance | Src:MaD:17 MaD:24 | -| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... | provenance | MaD:22 | -| issue48.go:18:20:18:39 | &... | issue48.go:21:3:21:33 | index expression | provenance | | +| issue48.go:18:17:18:17 | b | issue48.go:18:20:18:39 | &... [postupdate] | provenance | MaD:22 | +| issue48.go:18:20:18:39 | &... [postupdate] | issue48.go:21:3:21:33 | index expression | provenance | | | issue48.go:20:8:21:34 | []type{args} [array] | issue48.go:20:8:21:34 | call to Sprintf | provenance | MaD:23 | | issue48.go:20:8:21:34 | call to Sprintf | issue48.go:22:11:22:12 | q3 | provenance | Sink:MaD:1 | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | []type{args} [array] | provenance | | | issue48.go:21:3:21:33 | index expression | issue48.go:20:8:21:34 | call to Sprintf | provenance | FunctionModel | | issue48.go:27:2:27:34 | ... := ...[0] | issue48.go:28:17:28:18 | b2 | provenance | | | issue48.go:27:26:27:33 | selection of Body | issue48.go:27:2:27:34 | ... := ...[0] | provenance | Src:MaD:17 MaD:24 | -| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... | provenance | MaD:22 | -| issue48.go:28:21:28:41 | &... | issue48.go:31:3:31:31 | selection of Category | provenance | | +| issue48.go:28:17:28:18 | b2 | issue48.go:28:21:28:41 | &... [postupdate] | provenance | MaD:22 | +| issue48.go:28:21:28:41 | &... [postupdate] | issue48.go:31:3:31:31 | selection of Category | provenance | | | issue48.go:30:8:31:32 | []type{args} [array] | issue48.go:30:8:31:32 | call to Sprintf | provenance | MaD:23 | | issue48.go:30:8:31:32 | call to Sprintf | issue48.go:32:11:32:12 | q4 | provenance | Sink:MaD:1 | | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | []type{args} [array] | provenance | | | issue48.go:31:3:31:31 | selection of Category | issue48.go:30:8:31:32 | call to Sprintf | provenance | FunctionModel | -| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... | provenance | MaD:22 | +| issue48.go:37:17:37:50 | type conversion | issue48.go:37:53:37:73 | &... [postupdate] | provenance | MaD:22 | | issue48.go:37:24:37:30 | selection of URL | issue48.go:37:24:37:38 | call to Query | provenance | Src:MaD:21 MaD:26 | | issue48.go:37:24:37:38 | call to Query | issue48.go:37:17:37:50 | type conversion | provenance | | -| issue48.go:37:53:37:73 | &... | issue48.go:40:3:40:31 | selection of Category | provenance | | +| issue48.go:37:53:37:73 | &... [postupdate] | issue48.go:40:3:40:31 | selection of Category | provenance | | | issue48.go:39:8:40:32 | []type{args} [array] | issue48.go:39:8:40:32 | call to Sprintf | provenance | MaD:23 | | issue48.go:39:8:40:32 | call to Sprintf | issue48.go:41:11:41:12 | q5 | provenance | Sink:MaD:1 | | issue48.go:40:3:40:31 | selection of Category | issue48.go:39:8:40:32 | []type{args} [array] | provenance | | @@ -76,39 +76,33 @@ edges | main.go:34:3:34:13 | implicit dereference [Category] | main.go:34:3:34:22 | selection of Category | provenance | | | main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | []type{args} [array] | provenance | | | main.go:34:3:34:22 | selection of Category | main.go:33:7:34:23 | call to Sprintf | provenance | FunctionModel | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:40:2:40:12 | RequestData [pointer, Category] | provenance | | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | -| main.go:40:2:40:12 | RequestData [pointer, Category] | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | -| main.go:40:2:40:12 | implicit dereference [Category] | main.go:39:2:39:12 | definition of RequestData [pointer, Category] | provenance | | +| main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | main.go:43:3:43:13 | RequestData [pointer, Category] | provenance | | +| main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | provenance | | | main.go:40:25:40:31 | selection of URL | main.go:40:25:40:39 | call to Query | provenance | Src:MaD:21 MaD:26 | | main.go:40:25:40:39 | call to Query | main.go:40:25:40:51 | index expression | provenance | | -| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [Category] | provenance | | +| main.go:40:25:40:51 | index expression | main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | provenance | | | main.go:42:7:43:23 | []type{args} [array] | main.go:42:7:43:23 | call to Sprintf | provenance | MaD:23 | | main.go:42:7:43:23 | call to Sprintf | main.go:44:11:44:11 | q | provenance | Sink:MaD:1 | | main.go:43:3:43:13 | RequestData [pointer, Category] | main.go:43:3:43:13 | implicit dereference [Category] | provenance | | | main.go:43:3:43:13 | implicit dereference [Category] | main.go:43:3:43:22 | selection of Category | provenance | | | main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | []type{args} [array] | provenance | | | main.go:43:3:43:22 | selection of Category | main.go:42:7:43:23 | call to Sprintf | provenance | FunctionModel | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:49:4:49:14 | RequestData [pointer, Category] | provenance | | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | -| main.go:49:3:49:14 | star expression [Category] | main.go:48:2:48:12 | definition of RequestData [pointer, Category] | provenance | | -| main.go:49:4:49:14 | RequestData [pointer, Category] | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:49:3:49:14 | star expression [postupdate] [Category] | main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | provenance | | +| main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | main.go:52:3:52:13 | RequestData [pointer, Category] | provenance | | | main.go:49:28:49:34 | selection of URL | main.go:49:28:49:42 | call to Query | provenance | Src:MaD:21 MaD:26 | | main.go:49:28:49:42 | call to Query | main.go:49:28:49:54 | index expression | provenance | | -| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [Category] | provenance | | +| main.go:49:28:49:54 | index expression | main.go:49:3:49:14 | star expression [postupdate] [Category] | provenance | | | main.go:51:7:52:23 | []type{args} [array] | main.go:51:7:52:23 | call to Sprintf | provenance | MaD:23 | | main.go:51:7:52:23 | call to Sprintf | main.go:53:11:53:11 | q | provenance | Sink:MaD:1 | | main.go:52:3:52:13 | RequestData [pointer, Category] | main.go:52:3:52:13 | implicit dereference [Category] | provenance | | | main.go:52:3:52:13 | implicit dereference [Category] | main.go:52:3:52:22 | selection of Category | provenance | | | main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | []type{args} [array] | provenance | | | main.go:52:3:52:22 | selection of Category | main.go:51:7:52:23 | call to Sprintf | provenance | FunctionModel | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:58:4:58:14 | RequestData [pointer, Category] | provenance | | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | -| main.go:58:3:58:14 | star expression [Category] | main.go:57:2:57:12 | definition of RequestData [pointer, Category] | provenance | | -| main.go:58:4:58:14 | RequestData [pointer, Category] | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:58:3:58:14 | star expression [postupdate] [Category] | main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | provenance | | +| main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | main.go:61:5:61:15 | RequestData [pointer, Category] | provenance | | | main.go:58:28:58:34 | selection of URL | main.go:58:28:58:42 | call to Query | provenance | Src:MaD:21 MaD:26 | | main.go:58:28:58:42 | call to Query | main.go:58:28:58:54 | index expression | provenance | | -| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [Category] | provenance | | +| main.go:58:28:58:54 | index expression | main.go:58:3:58:14 | star expression [postupdate] [Category] | provenance | | | main.go:60:7:61:26 | []type{args} [array] | main.go:60:7:61:26 | call to Sprintf | provenance | MaD:23 | | main.go:60:7:61:26 | call to Sprintf | main.go:62:11:62:11 | q | provenance | Sink:MaD:1 | | main.go:61:3:61:25 | selection of Category | main.go:60:7:61:26 | []type{args} [array] | provenance | | @@ -117,22 +111,22 @@ edges | main.go:61:5:61:15 | RequestData [pointer, Category] | main.go:61:4:61:15 | star expression [Category] | provenance | | | mongoDB.go:40:20:40:30 | call to Referer | mongoDB.go:42:28:42:41 | untrustedInput | provenance | Src:MaD:20 | | mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:50:34:50:39 | filter | provenance | | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:61:27:61:32 | filter | provenance | Sink:MaD:4 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:63:23:63:28 | filter | provenance | Sink:MaD:5 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:64:22:64:27 | filter | provenance | Sink:MaD:6 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:66:32:66:37 | filter | provenance | Sink:MaD:7 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:69:17:69:22 | filter | provenance | Sink:MaD:8 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:70:20:70:25 | filter | provenance | Sink:MaD:9 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:71:29:71:34 | filter | provenance | Sink:MaD:10 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:72:30:72:35 | filter | provenance | Sink:MaD:11 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:73:29:73:34 | filter | provenance | Sink:MaD:12 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:78:23:78:28 | filter | provenance | Sink:MaD:13 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:79:23:79:28 | filter | provenance | Sink:MaD:14 | -| mongoDB.go:42:19:42:42 | struct literal | mongoDB.go:80:22:80:27 | filter | provenance | Sink:MaD:15 | | mongoDB.go:42:28:42:41 | untrustedInput | mongoDB.go:42:19:42:42 | struct literal | provenance | Config | | mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:57:22:57:29 | pipeline | provenance | Sink:MaD:3 | | mongoDB.go:50:23:50:40 | struct literal | mongoDB.go:81:18:81:25 | pipeline | provenance | Sink:MaD:16 | | mongoDB.go:50:34:50:39 | filter | mongoDB.go:50:23:50:40 | struct literal | provenance | Config | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:61:27:61:32 | filter | provenance | Sink:MaD:4 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:63:23:63:28 | filter | provenance | Sink:MaD:5 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:64:22:64:27 | filter | provenance | Sink:MaD:6 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:66:32:66:37 | filter | provenance | Sink:MaD:7 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:69:17:69:22 | filter | provenance | Sink:MaD:8 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:70:20:70:25 | filter | provenance | Sink:MaD:9 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:71:29:71:34 | filter | provenance | Sink:MaD:10 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:72:30:72:35 | filter | provenance | Sink:MaD:11 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:73:29:73:34 | filter | provenance | Sink:MaD:12 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:78:23:78:28 | filter | provenance | Sink:MaD:13 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:79:23:79:28 | filter | provenance | Sink:MaD:14 | +| mongoDB.go:50:34:50:39 | filter | mongoDB.go:80:22:80:27 | filter | provenance | Sink:MaD:15 | models | 1 | Sink: database/sql; DB; true; Query; ; ; Argument[0]; sql-injection; manual | | 2 | Sink: database/sql; Tx; true; Query; ; ; Argument[0]; sql-injection; manual | @@ -170,7 +164,7 @@ nodes | issue48.go:17:2:17:33 | ... := ...[0] | semmle.label | ... := ...[0] | | issue48.go:17:25:17:32 | selection of Body | semmle.label | selection of Body | | issue48.go:18:17:18:17 | b | semmle.label | b | -| issue48.go:18:20:18:39 | &... | semmle.label | &... | +| issue48.go:18:20:18:39 | &... [postupdate] | semmle.label | &... [postupdate] | | issue48.go:20:8:21:34 | []type{args} [array] | semmle.label | []type{args} [array] | | issue48.go:20:8:21:34 | call to Sprintf | semmle.label | call to Sprintf | | issue48.go:21:3:21:33 | index expression | semmle.label | index expression | @@ -178,7 +172,7 @@ nodes | issue48.go:27:2:27:34 | ... := ...[0] | semmle.label | ... := ...[0] | | issue48.go:27:26:27:33 | selection of Body | semmle.label | selection of Body | | issue48.go:28:17:28:18 | b2 | semmle.label | b2 | -| issue48.go:28:21:28:41 | &... | semmle.label | &... | +| issue48.go:28:21:28:41 | &... [postupdate] | semmle.label | &... [postupdate] | | issue48.go:30:8:31:32 | []type{args} [array] | semmle.label | []type{args} [array] | | issue48.go:30:8:31:32 | call to Sprintf | semmle.label | call to Sprintf | | issue48.go:31:3:31:31 | selection of Category | semmle.label | selection of Category | @@ -186,7 +180,7 @@ nodes | issue48.go:37:17:37:50 | type conversion | semmle.label | type conversion | | issue48.go:37:24:37:30 | selection of URL | semmle.label | selection of URL | | issue48.go:37:24:37:38 | call to Query | semmle.label | call to Query | -| issue48.go:37:53:37:73 | &... | semmle.label | &... | +| issue48.go:37:53:37:73 | &... [postupdate] | semmle.label | &... [postupdate] | | issue48.go:39:8:40:32 | []type{args} [array] | semmle.label | []type{args} [array] | | issue48.go:39:8:40:32 | call to Sprintf | semmle.label | call to Sprintf | | issue48.go:40:3:40:31 | selection of Category | semmle.label | selection of Category | @@ -213,9 +207,8 @@ nodes | main.go:34:3:34:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:34:3:34:22 | selection of Category | semmle.label | selection of Category | | main.go:35:11:35:11 | q | semmle.label | q | -| main.go:39:2:39:12 | definition of RequestData [pointer, Category] | semmle.label | definition of RequestData [pointer, Category] | -| main.go:40:2:40:12 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | -| main.go:40:2:40:12 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | +| main.go:40:2:40:12 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | +| main.go:40:2:40:12 | implicit dereference [postupdate] [Category] | semmle.label | implicit dereference [postupdate] [Category] | | main.go:40:25:40:31 | selection of URL | semmle.label | selection of URL | | main.go:40:25:40:39 | call to Query | semmle.label | call to Query | | main.go:40:25:40:51 | index expression | semmle.label | index expression | @@ -225,9 +218,8 @@ nodes | main.go:43:3:43:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:43:3:43:22 | selection of Category | semmle.label | selection of Category | | main.go:44:11:44:11 | q | semmle.label | q | -| main.go:48:2:48:12 | definition of RequestData [pointer, Category] | semmle.label | definition of RequestData [pointer, Category] | -| main.go:49:3:49:14 | star expression [Category] | semmle.label | star expression [Category] | -| main.go:49:4:49:14 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | +| main.go:49:3:49:14 | star expression [postupdate] [Category] | semmle.label | star expression [postupdate] [Category] | +| main.go:49:4:49:14 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | | main.go:49:28:49:34 | selection of URL | semmle.label | selection of URL | | main.go:49:28:49:42 | call to Query | semmle.label | call to Query | | main.go:49:28:49:54 | index expression | semmle.label | index expression | @@ -237,9 +229,8 @@ nodes | main.go:52:3:52:13 | implicit dereference [Category] | semmle.label | implicit dereference [Category] | | main.go:52:3:52:22 | selection of Category | semmle.label | selection of Category | | main.go:53:11:53:11 | q | semmle.label | q | -| main.go:57:2:57:12 | definition of RequestData [pointer, Category] | semmle.label | definition of RequestData [pointer, Category] | -| main.go:58:3:58:14 | star expression [Category] | semmle.label | star expression [Category] | -| main.go:58:4:58:14 | RequestData [pointer, Category] | semmle.label | RequestData [pointer, Category] | +| main.go:58:3:58:14 | star expression [postupdate] [Category] | semmle.label | star expression [postupdate] [Category] | +| main.go:58:4:58:14 | RequestData [postupdate] [pointer, Category] | semmle.label | RequestData [postupdate] [pointer, Category] | | main.go:58:28:58:34 | selection of URL | semmle.label | selection of URL | | main.go:58:28:58:42 | call to Query | semmle.label | call to Query | | main.go:58:28:58:54 | index expression | semmle.label | index expression | diff --git a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected index 3a9de1ebe60..ec1835a6f8a 100644 --- a/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected +++ b/go/ql/test/query-tests/Security/CWE-190/AllocationSizeOverflow.expected @@ -17,10 +17,13 @@ edges | tst2.go:14:2:14:29 | ... := ...[0] | tst2.go:15:26:15:29 | data | provenance | | | tst2.go:15:26:15:29 | data | tst2.go:15:22:15:30 | call to len | provenance | Config | | tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:7:26:7:33 | jsonData | provenance | | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:24:20:24:27 | jsonData | provenance | | -| tst3.go:6:2:6:31 | ... := ...[0] | tst3.go:32:20:32:27 | jsonData | provenance | | | tst3.go:7:26:7:33 | jsonData | tst3.go:7:22:7:34 | call to len | provenance | Config | +| tst3.go:7:26:7:33 | jsonData | tst3.go:9:32:9:39 | jsonData | provenance | | +| tst3.go:9:32:9:39 | jsonData | tst3.go:11:9:11:16 | jsonData | provenance | | +| tst3.go:11:9:11:16 | jsonData | tst3.go:16:20:16:27 | jsonData | provenance | | +| tst3.go:16:20:16:27 | jsonData | tst3.go:24:20:24:27 | jsonData | provenance | | | tst3.go:24:20:24:27 | jsonData | tst3.go:24:16:24:28 | call to len | provenance | Config | +| tst3.go:24:20:24:27 | jsonData | tst3.go:32:20:32:27 | jsonData | provenance | | | tst3.go:32:20:32:27 | jsonData | tst3.go:32:16:32:28 | call to len | provenance | Config | | tst.go:14:2:14:30 | ... = ...[0] | tst.go:15:26:15:33 | jsonData | provenance | | | tst.go:15:26:15:33 | jsonData | tst.go:15:22:15:34 | call to len | provenance | Config | @@ -45,6 +48,9 @@ nodes | tst3.go:6:2:6:31 | ... := ...[0] | semmle.label | ... := ...[0] | | tst3.go:7:22:7:34 | call to len | semmle.label | call to len | | tst3.go:7:26:7:33 | jsonData | semmle.label | jsonData | +| tst3.go:9:32:9:39 | jsonData | semmle.label | jsonData | +| tst3.go:11:9:11:16 | jsonData | semmle.label | jsonData | +| tst3.go:16:20:16:27 | jsonData | semmle.label | jsonData | | tst3.go:24:16:24:28 | call to len | semmle.label | call to len | | tst3.go:24:20:24:27 | jsonData | semmle.label | jsonData | | tst3.go:32:16:32:28 | call to len | semmle.label | call to len | diff --git a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected index c62c6126648..732b9cd5cae 100644 --- a/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected +++ b/go/ql/test/query-tests/Security/CWE-209/StackTraceExposure.expected @@ -1,8 +1,8 @@ edges -| test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | provenance | | +| test.go:15:28:15:30 | buf [postupdate] | test.go:18:10:18:12 | buf | provenance | | nodes -| test.go:14:2:14:4 | definition of buf | semmle.label | definition of buf | -| test.go:17:10:17:12 | buf | semmle.label | buf | +| test.go:15:28:15:30 | buf [postupdate] | semmle.label | buf [postupdate] | +| test.go:18:10:18:12 | buf | semmle.label | buf | subpaths #select -| test.go:17:10:17:12 | buf | test.go:14:2:14:4 | definition of buf | test.go:17:10:17:12 | buf | HTTP response depends on $@ and may be exposed to an external user. | test.go:14:2:14:4 | definition of buf | stack trace information | +| test.go:18:10:18:12 | buf | test.go:15:28:15:30 | buf [postupdate] | test.go:18:10:18:12 | buf | HTTP response depends on $@ and may be exposed to an external user. | test.go:15:28:15:30 | buf [postupdate] | stack trace information | diff --git a/go/ql/test/query-tests/Security/CWE-209/test.go b/go/ql/test/query-tests/Security/CWE-209/test.go index 2ad35680048..77df73b8046 100644 --- a/go/ql/test/query-tests/Security/CWE-209/test.go +++ b/go/ql/test/query-tests/Security/CWE-209/test.go @@ -12,7 +12,8 @@ var logger log.Logger func handlePanic(w http.ResponseWriter, r *http.Request) { buf := make([]byte, 2<<16) - buf = buf[:runtime.Stack(buf, true)] + stackLen := runtime.Stack(buf, true) + buf = buf[:stackLen] // BAD: printing a stack trace back to the response w.Write(buf) // GOOD: logging the response to the server and sending diff --git a/go/ql/test/query-tests/Security/CWE-295/DisabledCertificateCheck/main.go b/go/ql/test/query-tests/Security/CWE-295/DisabledCertificateCheck/main.go index 027a88b9bb6..3cb5d107a70 100644 --- a/go/ql/test/query-tests/Security/CWE-295/DisabledCertificateCheck/main.go +++ b/go/ql/test/query-tests/Security/CWE-295/DisabledCertificateCheck/main.go @@ -64,9 +64,22 @@ func bad3() *http.Transport { return transport } -func good3() *http.Transport { - insecureTransport := &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // OK +func good3(i int) *http.Transport { + if i == 0 { + insecureTransport := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // OK + } + return insecureTransport + } else if i == 1 { + temp1 := tls.Config{InsecureSkipVerify: true} + temp2 := &temp1 + selfSignConfig := &http.Transport{TLSClientConfig: temp2} // OK + return selfSignConfig + } else if i == 2 { + temp1 := tls.Config{} + temp1.InsecureSkipVerify = true + untrustedTransport := &http.Transport{TLSClientConfig: &temp1} // OK + return untrustedTransport } - return insecureTransport + return nil } diff --git a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected index a7f7f83a9ff..f748c7a7773 100644 --- a/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected +++ b/go/ql/test/query-tests/Security/CWE-312/CleartextLogging.expected @@ -1,105 +1,248 @@ #select | klog.go:23:15:23:20 | header | klog.go:21:30:21:37 | selection of Header | klog.go:23:15:23:20 | header | $@ flows to a logging call. | klog.go:21:30:21:37 | selection of Header | Sensitive data returned by HTTP request headers | | klog.go:29:13:29:41 | call to Get | klog.go:29:13:29:20 | selection of Header | klog.go:29:13:29:41 | call to Get | $@ flows to a logging call. | klog.go:29:13:29:20 | selection of Header | Sensitive data returned by HTTP request headers | -| main.go:16:12:16:19 | password | main.go:16:12:16:19 | password | main.go:16:12:16:19 | password | $@ flows to a logging call. | main.go:16:12:16:19 | password | Sensitive data returned by an access to password | -| main.go:17:19:17:26 | password | main.go:17:19:17:26 | password | main.go:17:19:17:26 | password | $@ flows to a logging call. | main.go:17:19:17:26 | password | Sensitive data returned by an access to password | -| main.go:18:13:18:20 | password | main.go:18:13:18:20 | password | main.go:18:13:18:20 | password | $@ flows to a logging call. | main.go:18:13:18:20 | password | Sensitive data returned by an access to password | -| main.go:19:14:19:21 | password | main.go:19:14:19:21 | password | main.go:19:14:19:21 | password | $@ flows to a logging call. | main.go:19:14:19:21 | password | Sensitive data returned by an access to password | -| main.go:20:12:20:19 | password | main.go:20:12:20:19 | password | main.go:20:12:20:19 | password | $@ flows to a logging call. | main.go:20:12:20:19 | password | Sensitive data returned by an access to password | -| main.go:21:19:21:26 | password | main.go:21:19:21:26 | password | main.go:21:19:21:26 | password | $@ flows to a logging call. | main.go:21:19:21:26 | password | Sensitive data returned by an access to password | -| main.go:22:13:22:20 | password | main.go:22:13:22:20 | password | main.go:22:13:22:20 | password | $@ flows to a logging call. | main.go:22:13:22:20 | password | Sensitive data returned by an access to password | -| main.go:23:14:23:21 | password | main.go:23:14:23:21 | password | main.go:23:14:23:21 | password | $@ flows to a logging call. | main.go:23:14:23:21 | password | Sensitive data returned by an access to password | -| main.go:24:12:24:19 | password | main.go:24:12:24:19 | password | main.go:24:12:24:19 | password | $@ flows to a logging call. | main.go:24:12:24:19 | password | Sensitive data returned by an access to password | -| main.go:25:19:25:26 | password | main.go:25:19:25:26 | password | main.go:25:19:25:26 | password | $@ flows to a logging call. | main.go:25:19:25:26 | password | Sensitive data returned by an access to password | -| main.go:26:13:26:20 | password | main.go:26:13:26:20 | password | main.go:26:13:26:20 | password | $@ flows to a logging call. | main.go:26:13:26:20 | password | Sensitive data returned by an access to password | -| main.go:27:14:27:21 | password | main.go:27:14:27:21 | password | main.go:27:14:27:21 | password | $@ flows to a logging call. | main.go:27:14:27:21 | password | Sensitive data returned by an access to password | -| main.go:28:16:28:23 | password | main.go:28:16:28:23 | password | main.go:28:16:28:23 | password | $@ flows to a logging call. | main.go:28:16:28:23 | password | Sensitive data returned by an access to password | -| main.go:32:10:32:17 | password | main.go:32:10:32:17 | password | main.go:32:10:32:17 | password | $@ flows to a logging call. | main.go:32:10:32:17 | password | Sensitive data returned by an access to password | -| main.go:33:17:33:24 | password | main.go:33:17:33:24 | password | main.go:33:17:33:24 | password | $@ flows to a logging call. | main.go:33:17:33:24 | password | Sensitive data returned by an access to password | -| main.go:34:11:34:18 | password | main.go:34:11:34:18 | password | main.go:34:11:34:18 | password | $@ flows to a logging call. | main.go:34:11:34:18 | password | Sensitive data returned by an access to password | -| main.go:35:12:35:19 | password | main.go:35:12:35:19 | password | main.go:35:12:35:19 | password | $@ flows to a logging call. | main.go:35:12:35:19 | password | Sensitive data returned by an access to password | -| main.go:36:10:36:17 | password | main.go:36:10:36:17 | password | main.go:36:10:36:17 | password | $@ flows to a logging call. | main.go:36:10:36:17 | password | Sensitive data returned by an access to password | -| main.go:37:17:37:24 | password | main.go:37:17:37:24 | password | main.go:37:17:37:24 | password | $@ flows to a logging call. | main.go:37:17:37:24 | password | Sensitive data returned by an access to password | -| main.go:38:11:38:18 | password | main.go:38:11:38:18 | password | main.go:38:11:38:18 | password | $@ flows to a logging call. | main.go:38:11:38:18 | password | Sensitive data returned by an access to password | -| main.go:39:12:39:19 | password | main.go:39:12:39:19 | password | main.go:39:12:39:19 | password | $@ flows to a logging call. | main.go:39:12:39:19 | password | Sensitive data returned by an access to password | -| main.go:40:10:40:17 | password | main.go:40:10:40:17 | password | main.go:40:10:40:17 | password | $@ flows to a logging call. | main.go:40:10:40:17 | password | Sensitive data returned by an access to password | -| main.go:41:17:41:24 | password | main.go:41:17:41:24 | password | main.go:41:17:41:24 | password | $@ flows to a logging call. | main.go:41:17:41:24 | password | Sensitive data returned by an access to password | -| main.go:42:11:42:18 | password | main.go:42:11:42:18 | password | main.go:42:11:42:18 | password | $@ flows to a logging call. | main.go:42:11:42:18 | password | Sensitive data returned by an access to password | -| main.go:43:12:43:19 | password | main.go:43:12:43:19 | password | main.go:43:12:43:19 | password | $@ flows to a logging call. | main.go:43:12:43:19 | password | Sensitive data returned by an access to password | -| main.go:44:14:44:21 | password | main.go:44:14:44:21 | password | main.go:44:14:44:21 | password | $@ flows to a logging call. | main.go:44:14:44:21 | password | Sensitive data returned by an access to password | -| main.go:47:12:47:19 | password | main.go:47:12:47:19 | password | main.go:47:12:47:19 | password | $@ flows to a logging call. | main.go:47:12:47:19 | password | Sensitive data returned by an access to password | -| main.go:48:17:48:24 | password | main.go:48:17:48:24 | password | main.go:48:17:48:24 | password | $@ flows to a logging call. | main.go:48:17:48:24 | password | Sensitive data returned by an access to password | -| main.go:55:35:55:42 | password | main.go:55:35:55:42 | password | main.go:55:35:55:42 | password | $@ flows to a logging call. | main.go:55:35:55:42 | password | Sensitive data returned by an access to password | -| overrides.go:13:14:13:23 | call to String | overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | $@ flows to a logging call. | overrides.go:9:9:9:16 | password | Sensitive data returned by an access to password | -| passwords.go:9:14:9:14 | x | passwords.go:30:8:30:15 | password | passwords.go:9:14:9:14 | x | $@ flows to a logging call. | passwords.go:30:8:30:15 | password | Sensitive data returned by an access to password | -| passwords.go:25:14:25:21 | password | passwords.go:25:14:25:21 | password | passwords.go:25:14:25:21 | password | $@ flows to a logging call. | passwords.go:25:14:25:21 | password | Sensitive data returned by an access to password | +| main.go:19:12:19:19 | password | main.go:17:2:17:9 | definition of password | main.go:19:12:19:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:20:19:20:26 | password | main.go:17:2:17:9 | definition of password | main.go:20:19:20:26 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:21:13:21:20 | password | main.go:17:2:17:9 | definition of password | main.go:21:13:21:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:22:14:22:21 | password | main.go:17:2:17:9 | definition of password | main.go:22:14:22:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:24:13:24:20 | password | main.go:17:2:17:9 | definition of password | main.go:24:13:24:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:27:20:27:27 | password | main.go:17:2:17:9 | definition of password | main.go:27:20:27:27 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:30:14:30:21 | password | main.go:17:2:17:9 | definition of password | main.go:30:14:30:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:33:15:33:22 | password | main.go:17:2:17:9 | definition of password | main.go:33:15:33:22 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:36:13:36:20 | password | main.go:17:2:17:9 | definition of password | main.go:36:13:36:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:39:20:39:27 | password | main.go:17:2:17:9 | definition of password | main.go:39:20:39:27 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:42:14:42:21 | password | main.go:17:2:17:9 | definition of password | main.go:42:14:42:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:45:15:45:22 | password | main.go:17:2:17:9 | definition of password | main.go:45:15:45:22 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:47:16:47:23 | password | main.go:17:2:17:9 | definition of password | main.go:47:16:47:23 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:51:10:51:17 | password | main.go:17:2:17:9 | definition of password | main.go:51:10:51:17 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:52:17:52:24 | password | main.go:17:2:17:9 | definition of password | main.go:52:17:52:24 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:53:11:53:18 | password | main.go:17:2:17:9 | definition of password | main.go:53:11:53:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:54:12:54:19 | password | main.go:17:2:17:9 | definition of password | main.go:54:12:54:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:56:11:56:18 | password | main.go:17:2:17:9 | definition of password | main.go:56:11:56:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:59:18:59:25 | password | main.go:17:2:17:9 | definition of password | main.go:59:18:59:25 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:62:12:62:19 | password | main.go:17:2:17:9 | definition of password | main.go:62:12:62:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:65:13:65:20 | password | main.go:17:2:17:9 | definition of password | main.go:65:13:65:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:68:11:68:18 | password | main.go:17:2:17:9 | definition of password | main.go:68:11:68:18 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:71:18:71:25 | password | main.go:17:2:17:9 | definition of password | main.go:71:18:71:25 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:74:12:74:19 | password | main.go:17:2:17:9 | definition of password | main.go:74:12:74:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:77:13:77:20 | password | main.go:17:2:17:9 | definition of password | main.go:77:13:77:20 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:79:14:79:21 | password | main.go:17:2:17:9 | definition of password | main.go:79:14:79:21 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:82:12:82:19 | password | main.go:17:2:17:9 | definition of password | main.go:82:12:82:19 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:83:17:83:24 | password | main.go:17:2:17:9 | definition of password | main.go:83:17:83:24 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:87:29:87:34 | fields | main.go:17:2:17:9 | definition of password | main.go:87:29:87:34 | fields | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| main.go:90:35:90:42 | password | main.go:17:2:17:9 | definition of password | main.go:90:35:90:42 | password | $@ flows to a logging call. | main.go:17:2:17:9 | definition of password | Sensitive data returned by an access to password | +| overrides.go:13:14:13:23 | call to String | overrides.go:8:2:8:9 | definition of password | overrides.go:13:14:13:23 | call to String | $@ flows to a logging call. | overrides.go:8:2:8:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:9:14:9:14 | x | passwords.go:21:2:21:9 | definition of password | passwords.go:9:14:9:14 | x | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:25:14:25:21 | password | passwords.go:21:2:21:9 | definition of password | passwords.go:25:14:25:21 | password | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | | passwords.go:26:14:26:23 | selection of password | passwords.go:26:14:26:23 | selection of password | passwords.go:26:14:26:23 | selection of password | $@ flows to a logging call. | passwords.go:26:14:26:23 | selection of password | Sensitive data returned by an access to password | | passwords.go:27:14:27:26 | call to getPassword | passwords.go:27:14:27:26 | call to getPassword | passwords.go:27:14:27:26 | call to getPassword | $@ flows to a logging call. | passwords.go:27:14:27:26 | call to getPassword | Sensitive data returned by a call to getPassword | | passwords.go:28:14:28:28 | call to getPassword | passwords.go:28:14:28:28 | call to getPassword | passwords.go:28:14:28:28 | call to getPassword | $@ flows to a logging call. | passwords.go:28:14:28:28 | call to getPassword | Sensitive data returned by a call to getPassword | -| passwords.go:32:12:32:19 | password | passwords.go:32:12:32:19 | password | passwords.go:32:12:32:19 | password | $@ flows to a logging call. | passwords.go:32:12:32:19 | password | Sensitive data returned by an access to password | -| passwords.go:34:14:34:35 | ...+... | passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | $@ flows to a logging call. | passwords.go:34:28:34:35 | password | Sensitive data returned by an access to password | +| passwords.go:32:12:32:19 | password | passwords.go:21:2:21:9 | definition of password | passwords.go:32:12:32:19 | password | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:34:14:34:35 | ...+... | passwords.go:21:2:21:9 | definition of password | passwords.go:34:14:34:35 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | | passwords.go:39:14:39:17 | obj1 | passwords.go:37:13:37:13 | x | passwords.go:39:14:39:17 | obj1 | $@ flows to a logging call. | passwords.go:37:13:37:13 | x | Sensitive data returned by an access to password | -| passwords.go:44:14:44:17 | obj2 | passwords.go:42:6:42:13 | password | passwords.go:44:14:44:17 | obj2 | $@ flows to a logging call. | passwords.go:42:6:42:13 | password | Sensitive data returned by an access to password | -| passwords.go:47:14:47:17 | obj3 | passwords.go:48:11:48:18 | password | passwords.go:47:14:47:17 | obj3 | $@ flows to a logging call. | passwords.go:48:11:48:18 | password | Sensitive data returned by an access to password | -| passwords.go:51:14:51:27 | fixed_password | passwords.go:51:14:51:27 | fixed_password | passwords.go:51:14:51:27 | fixed_password | $@ flows to a logging call. | passwords.go:51:14:51:27 | fixed_password | Sensitive data returned by an access to fixed_password | -| passwords.go:88:14:88:26 | utilityObject | passwords.go:86:16:86:36 | call to make | passwords.go:88:14:88:26 | utilityObject | $@ flows to a logging call. | passwords.go:86:16:86:36 | call to make | Sensitive data returned by an access to passwordSet | -| passwords.go:91:23:91:28 | secret | passwords.go:90:12:90:19 | password | passwords.go:91:23:91:28 | secret | $@ flows to a logging call. | passwords.go:90:12:90:19 | password | Sensitive data returned by an access to password | -| passwords.go:101:15:101:40 | ...+... | passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | $@ flows to a logging call. | passwords.go:101:33:101:40 | password | Sensitive data returned by an access to password | -| passwords.go:107:16:107:41 | ...+... | passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | $@ flows to a logging call. | passwords.go:107:34:107:41 | password | Sensitive data returned by an access to password | -| passwords.go:112:15:112:40 | ...+... | passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | $@ flows to a logging call. | passwords.go:112:33:112:40 | password | Sensitive data returned by an access to password | -| passwords.go:116:14:116:45 | ...+... | passwords.go:116:28:116:36 | password1 | passwords.go:116:14:116:45 | ...+... | $@ flows to a logging call. | passwords.go:116:28:116:36 | password1 | Sensitive data returned by an access to password1 | -| passwords.go:125:14:125:19 | config | passwords.go:119:13:119:13 | x | passwords.go:125:14:125:19 | config | $@ flows to a logging call. | passwords.go:119:13:119:13 | x | Sensitive data returned by an access to password | -| passwords.go:125:14:125:19 | config | passwords.go:121:13:121:20 | password | passwords.go:125:14:125:19 | config | $@ flows to a logging call. | passwords.go:121:13:121:20 | password | Sensitive data returned by an access to password | -| passwords.go:125:14:125:19 | config | passwords.go:122:13:122:25 | call to getPassword | passwords.go:125:14:125:19 | config | $@ flows to a logging call. | passwords.go:122:13:122:25 | call to getPassword | Sensitive data returned by a call to getPassword | -| passwords.go:126:14:126:21 | selection of x | passwords.go:121:13:121:20 | password | passwords.go:126:14:126:21 | selection of x | $@ flows to a logging call. | passwords.go:121:13:121:20 | password | Sensitive data returned by an access to password | -| passwords.go:127:14:127:21 | selection of y | passwords.go:122:13:122:25 | call to getPassword | passwords.go:127:14:127:21 | selection of y | $@ flows to a logging call. | passwords.go:122:13:122:25 | call to getPassword | Sensitive data returned by a call to getPassword | -| protobuf.go:14:14:14:35 | call to GetDescription | protobuf.go:12:22:12:29 | password | protobuf.go:14:14:14:35 | call to GetDescription | $@ flows to a logging call. | protobuf.go:12:22:12:29 | password | Sensitive data returned by an access to password | +| passwords.go:44:14:44:17 | obj2 | passwords.go:21:2:21:9 | definition of password | passwords.go:44:14:44:17 | obj2 | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:51:14:51:27 | fixed_password | passwords.go:50:2:50:15 | definition of fixed_password | passwords.go:51:14:51:27 | fixed_password | $@ flows to a logging call. | passwords.go:50:2:50:15 | definition of fixed_password | Sensitive data returned by an access to fixed_password | +| passwords.go:89:14:89:26 | utilityObject | passwords.go:87:16:87:36 | call to make | passwords.go:89:14:89:26 | utilityObject | $@ flows to a logging call. | passwords.go:87:16:87:36 | call to make | Sensitive data returned by an access to passwordSet | +| passwords.go:92:23:92:28 | secret | passwords.go:21:2:21:9 | definition of password | passwords.go:92:23:92:28 | secret | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:102:15:102:40 | ...+... | passwords.go:21:2:21:9 | definition of password | passwords.go:102:15:102:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:108:16:108:41 | ...+... | passwords.go:21:2:21:9 | definition of password | passwords.go:108:16:108:41 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:113:15:113:40 | ...+... | passwords.go:21:2:21:9 | definition of password | passwords.go:113:15:113:40 | ...+... | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:117:14:117:45 | ...+... | passwords.go:116:6:116:14 | definition of password1 | passwords.go:117:14:117:45 | ...+... | $@ flows to a logging call. | passwords.go:116:6:116:14 | definition of password1 | Sensitive data returned by an access to password1 | +| passwords.go:127:14:127:19 | config | passwords.go:21:2:21:9 | definition of password | passwords.go:127:14:127:19 | config | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:127:14:127:19 | config | passwords.go:121:13:121:14 | x3 | passwords.go:127:14:127:19 | config | $@ flows to a logging call. | passwords.go:121:13:121:14 | x3 | Sensitive data returned by an access to password | +| passwords.go:127:14:127:19 | config | passwords.go:124:13:124:25 | call to getPassword | passwords.go:127:14:127:19 | config | $@ flows to a logging call. | passwords.go:124:13:124:25 | call to getPassword | Sensitive data returned by a call to getPassword | +| passwords.go:128:14:128:21 | selection of x | passwords.go:21:2:21:9 | definition of password | passwords.go:128:14:128:21 | selection of x | $@ flows to a logging call. | passwords.go:21:2:21:9 | definition of password | Sensitive data returned by an access to password | +| passwords.go:129:14:129:21 | selection of y | passwords.go:124:13:124:25 | call to getPassword | passwords.go:129:14:129:21 | selection of y | $@ flows to a logging call. | passwords.go:124:13:124:25 | call to getPassword | Sensitive data returned by a call to getPassword | +| protobuf.go:14:14:14:35 | call to GetDescription | protobuf.go:9:2:9:9 | definition of password | protobuf.go:14:14:14:35 | call to GetDescription | $@ flows to a logging call. | protobuf.go:9:2:9:9 | definition of password | Sensitive data returned by an access to password | edges | klog.go:21:3:26:3 | range statement[1] | klog.go:22:27:22:33 | headers | provenance | | -| klog.go:21:30:21:37 | selection of Header | klog.go:21:3:26:3 | range statement[1] | provenance | Src:MaD:1 Config | +| klog.go:21:30:21:37 | selection of Header | klog.go:21:3:26:3 | range statement[1] | provenance | Src:MaD:11 Config | | klog.go:22:4:25:4 | range statement[1] | klog.go:23:15:23:20 | header | provenance | | | klog.go:22:27:22:33 | headers | klog.go:22:4:25:4 | range statement[1] | provenance | Config | -| klog.go:29:13:29:20 | selection of Header | klog.go:29:13:29:41 | call to Get | provenance | Src:MaD:1 Config | +| klog.go:29:13:29:20 | selection of Header | klog.go:29:13:29:41 | call to Get | provenance | Src:MaD:11 Config | +| main.go:17:2:17:9 | definition of password | main.go:19:12:19:19 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:20:19:20:26 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:21:13:21:20 | password | provenance | Sink:MaD:6 | +| main.go:17:2:17:9 | definition of password | main.go:22:14:22:21 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:24:13:24:20 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:27:20:27:27 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:30:14:30:21 | password | provenance | Sink:MaD:3 | +| main.go:17:2:17:9 | definition of password | main.go:33:15:33:22 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:36:13:36:20 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:39:20:39:27 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:42:14:42:21 | password | provenance | Sink:MaD:5 | +| main.go:17:2:17:9 | definition of password | main.go:45:15:45:22 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:47:16:47:23 | password | provenance | Sink:MaD:4 | +| main.go:17:2:17:9 | definition of password | main.go:51:10:51:17 | password | provenance | | +| main.go:17:2:17:9 | definition of password | main.go:51:10:51:17 | password | provenance | | +| main.go:51:10:51:17 | password | main.go:52:17:52:24 | password | provenance | | +| main.go:51:10:51:17 | password | main.go:52:17:52:24 | password | provenance | | +| main.go:52:17:52:24 | password | main.go:53:11:53:18 | password | provenance | | +| main.go:52:17:52:24 | password | main.go:53:11:53:18 | password | provenance | Sink:MaD:10 | +| main.go:53:11:53:18 | password | main.go:54:12:54:19 | password | provenance | | +| main.go:53:11:53:18 | password | main.go:54:12:54:19 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:56:11:56:18 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:56:11:56:18 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:59:18:59:25 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:59:18:59:25 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:62:12:62:19 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:62:12:62:19 | password | provenance | Sink:MaD:7 | +| main.go:54:12:54:19 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:54:12:54:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:54:12:54:19 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:54:12:54:19 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:59:18:59:25 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:59:18:59:25 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:62:12:62:19 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:62:12:62:19 | password | provenance | Sink:MaD:7 | +| main.go:56:11:56:18 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:56:11:56:18 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:56:11:56:18 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:56:11:56:18 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:62:12:62:19 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:62:12:62:19 | password | provenance | Sink:MaD:7 | +| main.go:59:18:59:25 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:59:18:59:25 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:59:18:59:25 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:59:18:59:25 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:65:13:65:20 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:62:12:62:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:62:12:62:19 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:62:12:62:19 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:68:11:68:18 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:65:13:65:20 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:65:13:65:20 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:65:13:65:20 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:71:18:71:25 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:68:11:68:18 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:68:11:68:18 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:68:11:68:18 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:71:18:71:25 | password | main.go:74:12:74:19 | password | provenance | | +| main.go:71:18:71:25 | password | main.go:74:12:74:19 | password | provenance | Sink:MaD:9 | +| main.go:71:18:71:25 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:71:18:71:25 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:71:18:71:25 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:71:18:71:25 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:74:12:74:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:74:12:74:19 | password | main.go:77:13:77:20 | password | provenance | | +| main.go:74:12:74:19 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:74:12:74:19 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:77:13:77:20 | password | main.go:79:14:79:21 | password | provenance | Sink:MaD:8 | +| main.go:77:13:77:20 | password | main.go:80:17:80:24 | password | provenance | | +| main.go:80:17:80:24 | password | main.go:82:12:82:19 | password | provenance | | +| main.go:80:17:80:24 | password | main.go:83:17:83:24 | password | provenance | | +| main.go:80:17:80:24 | password | main.go:86:19:86:26 | password | provenance | | +| main.go:86:2:86:7 | fields [postupdate] | main.go:87:29:87:34 | fields | provenance | Sink:MaD:2 | +| main.go:86:19:86:26 | password | main.go:86:2:86:7 | fields [postupdate] | provenance | Config | +| main.go:86:19:86:26 | password | main.go:90:35:90:42 | password | provenance | Sink:MaD:1 | +| overrides.go:8:2:8:9 | definition of password | overrides.go:9:9:9:16 | password | provenance | | | overrides.go:9:9:9:16 | password | overrides.go:13:14:13:23 | call to String | provenance | | | passwords.go:8:12:8:12 | definition of x | passwords.go:9:14:9:14 | x | provenance | | +| passwords.go:21:2:21:9 | definition of password | passwords.go:25:14:25:21 | password | provenance | | +| passwords.go:21:2:21:9 | definition of password | passwords.go:30:8:30:15 | password | provenance | | +| passwords.go:21:2:21:9 | definition of password | passwords.go:32:12:32:19 | password | provenance | | +| passwords.go:21:2:21:9 | definition of password | passwords.go:34:28:34:35 | password | provenance | | | passwords.go:30:8:30:15 | password | passwords.go:8:12:8:12 | definition of x | provenance | | | passwords.go:34:28:34:35 | password | passwords.go:34:14:34:35 | ...+... | provenance | Config | +| passwords.go:34:28:34:35 | password | passwords.go:42:6:42:13 | password | provenance | | | passwords.go:36:10:38:2 | struct literal | passwords.go:39:14:39:17 | obj1 | provenance | | | passwords.go:37:13:37:13 | x | passwords.go:36:10:38:2 | struct literal | provenance | Config | | passwords.go:41:10:43:2 | struct literal | passwords.go:44:14:44:17 | obj2 | provenance | | | passwords.go:42:6:42:13 | password | passwords.go:41:10:43:2 | struct literal | provenance | Config | -| passwords.go:46:6:46:9 | definition of obj3 | passwords.go:47:14:47:17 | obj3 | provenance | | -| passwords.go:48:11:48:18 | password | passwords.go:46:6:46:9 | definition of obj3 | provenance | Config | -| passwords.go:85:19:87:2 | struct literal | passwords.go:88:14:88:26 | utilityObject | provenance | | -| passwords.go:86:16:86:36 | call to make | passwords.go:85:19:87:2 | struct literal | provenance | Config | -| passwords.go:90:12:90:19 | password | passwords.go:91:23:91:28 | secret | provenance | | -| passwords.go:101:33:101:40 | password | passwords.go:101:15:101:40 | ...+... | provenance | Config | -| passwords.go:107:34:107:41 | password | passwords.go:107:16:107:41 | ...+... | provenance | Config | -| passwords.go:112:33:112:40 | password | passwords.go:112:15:112:40 | ...+... | provenance | Config | -| passwords.go:116:28:116:36 | password1 | passwords.go:116:28:116:45 | call to String | provenance | Config | -| passwords.go:116:28:116:45 | call to String | passwords.go:116:14:116:45 | ...+... | provenance | Config | -| passwords.go:118:12:123:2 | struct literal | passwords.go:125:14:125:19 | config | provenance | | -| passwords.go:118:12:123:2 | struct literal [x] | passwords.go:126:14:126:19 | config [x] | provenance | | -| passwords.go:118:12:123:2 | struct literal [y] | passwords.go:127:14:127:19 | config [y] | provenance | | -| passwords.go:119:13:119:13 | x | passwords.go:118:12:123:2 | struct literal | provenance | Config | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal | provenance | Config | -| passwords.go:121:13:121:20 | password | passwords.go:118:12:123:2 | struct literal [x] | provenance | | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal | provenance | Config | -| passwords.go:122:13:122:25 | call to getPassword | passwords.go:118:12:123:2 | struct literal [y] | provenance | | -| passwords.go:126:14:126:19 | config [x] | passwords.go:126:14:126:21 | selection of x | provenance | | -| passwords.go:127:14:127:19 | config [y] | passwords.go:127:14:127:21 | selection of y | provenance | | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:12:2:12:6 | query [pointer, Description] | provenance | | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | -| protobuf.go:12:2:12:6 | implicit dereference [Description] | protobuf.go:11:2:11:6 | definition of query [pointer, Description] | provenance | | -| protobuf.go:12:2:12:6 | query [pointer, Description] | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | -| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [Description] | provenance | | +| passwords.go:42:6:42:13 | password | passwords.go:48:11:48:18 | password | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:92:23:92:28 | secret | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:102:33:102:40 | password | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:108:34:108:41 | password | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:113:33:113:40 | password | provenance | | +| passwords.go:48:11:48:18 | password | passwords.go:123:13:123:20 | password | provenance | | +| passwords.go:50:2:50:15 | definition of fixed_password | passwords.go:51:14:51:27 | fixed_password | provenance | | +| passwords.go:86:19:88:2 | struct literal | passwords.go:89:14:89:26 | utilityObject | provenance | | +| passwords.go:87:16:87:36 | call to make | passwords.go:86:19:88:2 | struct literal | provenance | Config | +| passwords.go:102:33:102:40 | password | passwords.go:102:15:102:40 | ...+... | provenance | Config | +| passwords.go:102:33:102:40 | password | passwords.go:108:34:108:41 | password | provenance | | +| passwords.go:102:33:102:40 | password | passwords.go:113:33:113:40 | password | provenance | | +| passwords.go:102:33:102:40 | password | passwords.go:123:13:123:20 | password | provenance | | +| passwords.go:108:34:108:41 | password | passwords.go:108:16:108:41 | ...+... | provenance | Config | +| passwords.go:108:34:108:41 | password | passwords.go:113:33:113:40 | password | provenance | | +| passwords.go:108:34:108:41 | password | passwords.go:123:13:123:20 | password | provenance | | +| passwords.go:113:33:113:40 | password | passwords.go:113:15:113:40 | ...+... | provenance | Config | +| passwords.go:113:33:113:40 | password | passwords.go:123:13:123:20 | password | provenance | | +| passwords.go:116:6:116:14 | definition of password1 | passwords.go:117:28:117:36 | password1 | provenance | | +| passwords.go:117:28:117:36 | password1 | passwords.go:117:28:117:45 | call to String | provenance | Config | +| passwords.go:117:28:117:45 | call to String | passwords.go:117:14:117:45 | ...+... | provenance | Config | +| passwords.go:120:12:125:2 | struct literal | passwords.go:127:14:127:19 | config | provenance | | +| passwords.go:120:12:125:2 | struct literal [x] | passwords.go:128:14:128:19 | config [x] | provenance | | +| passwords.go:120:12:125:2 | struct literal [y] | passwords.go:129:14:129:19 | config [y] | provenance | | +| passwords.go:121:13:121:14 | x3 | passwords.go:120:12:125:2 | struct literal | provenance | Config | +| passwords.go:123:13:123:20 | password | passwords.go:120:12:125:2 | struct literal | provenance | Config | +| passwords.go:123:13:123:20 | password | passwords.go:120:12:125:2 | struct literal [x] | provenance | | +| passwords.go:124:13:124:25 | call to getPassword | passwords.go:120:12:125:2 | struct literal | provenance | Config | +| passwords.go:124:13:124:25 | call to getPassword | passwords.go:120:12:125:2 | struct literal [y] | provenance | | +| passwords.go:128:14:128:19 | config [x] | passwords.go:128:14:128:21 | selection of x | provenance | | +| passwords.go:129:14:129:19 | config [y] | passwords.go:129:14:129:21 | selection of y | provenance | | +| protobuf.go:9:2:9:9 | definition of password | protobuf.go:12:22:12:29 | password | provenance | | +| protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | provenance | | +| protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | protobuf.go:14:14:14:18 | query [pointer, Description] | provenance | | +| protobuf.go:12:22:12:29 | password | protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | provenance | | | protobuf.go:14:14:14:18 | query [pointer, Description] | protobuf.go:14:14:14:35 | call to GetDescription | provenance | | | protobuf.go:14:14:14:18 | query [pointer, Description] | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | provenance | | | protos/query/query.pb.go:117:7:117:7 | definition of x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | provenance | | | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | protos/query/query.pb.go:119:10:119:22 | selection of Description | provenance | | | protos/query/query.pb.go:119:10:119:10 | x [pointer, Description] | protos/query/query.pb.go:119:10:119:10 | implicit dereference [Description] | provenance | | models -| 1 | Source: net/http; Request; true; Header; ; ; ; remote; manual | +| 1 | Sink: group:logrus; ; false; WithField; ; ; Argument[0..1]; log-injection; manual | +| 2 | Sink: group:logrus; ; false; WithFields; ; ; Argument[0]; log-injection; manual | +| 3 | Sink: log; ; false; Fatalf; ; ; Argument[0..1]; log-injection; manual | +| 4 | Sink: log; ; false; Output; ; ; Argument[1]; log-injection; manual | +| 5 | Sink: log; ; false; Panicf; ; ; Argument[0..1]; log-injection; manual | +| 6 | Sink: log; ; false; Printf; ; ; Argument[0..1]; log-injection; manual | +| 7 | Sink: log; Logger; true; Fatalf; ; ; Argument[0..1]; log-injection; manual | +| 8 | Sink: log; Logger; true; Output; ; ; Argument[1]; log-injection; manual | +| 9 | Sink: log; Logger; true; Panicf; ; ; Argument[0..1]; log-injection; manual | +| 10 | Sink: log; Logger; true; Printf; ; ; Argument[0..1]; log-injection; manual | +| 11 | Source: net/http; Request; true; Header; ; ; ; remote; manual | nodes | klog.go:21:3:26:3 | range statement[1] | semmle.label | range statement[1] | | klog.go:21:30:21:37 | selection of Header | semmle.label | selection of Header | @@ -108,39 +251,58 @@ nodes | klog.go:23:15:23:20 | header | semmle.label | header | | klog.go:29:13:29:20 | selection of Header | semmle.label | selection of Header | | klog.go:29:13:29:41 | call to Get | semmle.label | call to Get | -| main.go:16:12:16:19 | password | semmle.label | password | -| main.go:17:19:17:26 | password | semmle.label | password | -| main.go:18:13:18:20 | password | semmle.label | password | -| main.go:19:14:19:21 | password | semmle.label | password | -| main.go:20:12:20:19 | password | semmle.label | password | -| main.go:21:19:21:26 | password | semmle.label | password | -| main.go:22:13:22:20 | password | semmle.label | password | -| main.go:23:14:23:21 | password | semmle.label | password | -| main.go:24:12:24:19 | password | semmle.label | password | -| main.go:25:19:25:26 | password | semmle.label | password | -| main.go:26:13:26:20 | password | semmle.label | password | -| main.go:27:14:27:21 | password | semmle.label | password | -| main.go:28:16:28:23 | password | semmle.label | password | -| main.go:32:10:32:17 | password | semmle.label | password | -| main.go:33:17:33:24 | password | semmle.label | password | -| main.go:34:11:34:18 | password | semmle.label | password | -| main.go:35:12:35:19 | password | semmle.label | password | -| main.go:36:10:36:17 | password | semmle.label | password | -| main.go:37:17:37:24 | password | semmle.label | password | -| main.go:38:11:38:18 | password | semmle.label | password | -| main.go:39:12:39:19 | password | semmle.label | password | -| main.go:40:10:40:17 | password | semmle.label | password | -| main.go:41:17:41:24 | password | semmle.label | password | -| main.go:42:11:42:18 | password | semmle.label | password | -| main.go:43:12:43:19 | password | semmle.label | password | -| main.go:44:14:44:21 | password | semmle.label | password | -| main.go:47:12:47:19 | password | semmle.label | password | -| main.go:48:17:48:24 | password | semmle.label | password | -| main.go:55:35:55:42 | password | semmle.label | password | +| main.go:17:2:17:9 | definition of password | semmle.label | definition of password | +| main.go:19:12:19:19 | password | semmle.label | password | +| main.go:20:19:20:26 | password | semmle.label | password | +| main.go:21:13:21:20 | password | semmle.label | password | +| main.go:22:14:22:21 | password | semmle.label | password | +| main.go:24:13:24:20 | password | semmle.label | password | +| main.go:27:20:27:27 | password | semmle.label | password | +| main.go:30:14:30:21 | password | semmle.label | password | +| main.go:33:15:33:22 | password | semmle.label | password | +| main.go:36:13:36:20 | password | semmle.label | password | +| main.go:39:20:39:27 | password | semmle.label | password | +| main.go:42:14:42:21 | password | semmle.label | password | +| main.go:45:15:45:22 | password | semmle.label | password | +| main.go:47:16:47:23 | password | semmle.label | password | +| main.go:51:10:51:17 | password | semmle.label | password | +| main.go:51:10:51:17 | password | semmle.label | password | +| main.go:52:17:52:24 | password | semmle.label | password | +| main.go:52:17:52:24 | password | semmle.label | password | +| main.go:53:11:53:18 | password | semmle.label | password | +| main.go:53:11:53:18 | password | semmle.label | password | +| main.go:54:12:54:19 | password | semmle.label | password | +| main.go:54:12:54:19 | password | semmle.label | password | +| main.go:56:11:56:18 | password | semmle.label | password | +| main.go:56:11:56:18 | password | semmle.label | password | +| main.go:59:18:59:25 | password | semmle.label | password | +| main.go:59:18:59:25 | password | semmle.label | password | +| main.go:62:12:62:19 | password | semmle.label | password | +| main.go:62:12:62:19 | password | semmle.label | password | +| main.go:65:13:65:20 | password | semmle.label | password | +| main.go:65:13:65:20 | password | semmle.label | password | +| main.go:68:11:68:18 | password | semmle.label | password | +| main.go:68:11:68:18 | password | semmle.label | password | +| main.go:71:18:71:25 | password | semmle.label | password | +| main.go:71:18:71:25 | password | semmle.label | password | +| main.go:74:12:74:19 | password | semmle.label | password | +| main.go:74:12:74:19 | password | semmle.label | password | +| main.go:77:13:77:20 | password | semmle.label | password | +| main.go:77:13:77:20 | password | semmle.label | password | +| main.go:79:14:79:21 | password | semmle.label | password | +| main.go:80:17:80:24 | password | semmle.label | password | +| main.go:82:12:82:19 | password | semmle.label | password | +| main.go:83:17:83:24 | password | semmle.label | password | +| main.go:86:2:86:7 | fields [postupdate] | semmle.label | fields [postupdate] | +| main.go:86:19:86:26 | password | semmle.label | password | +| main.go:87:29:87:34 | fields | semmle.label | fields | +| main.go:90:35:90:42 | password | semmle.label | password | +| overrides.go:8:2:8:9 | definition of password | semmle.label | definition of password | | overrides.go:9:9:9:16 | password | semmle.label | password | | overrides.go:13:14:13:23 | call to String | semmle.label | call to String | | passwords.go:8:12:8:12 | definition of x | semmle.label | definition of x | | passwords.go:9:14:9:14 | x | semmle.label | x | +| passwords.go:21:2:21:9 | definition of password | semmle.label | definition of password | | passwords.go:25:14:25:21 | password | semmle.label | password | | passwords.go:26:14:26:23 | selection of password | semmle.label | selection of password | | passwords.go:27:14:27:26 | call to getPassword | semmle.label | call to getPassword | @@ -155,38 +317,37 @@ nodes | passwords.go:41:10:43:2 | struct literal | semmle.label | struct literal | | passwords.go:42:6:42:13 | password | semmle.label | password | | passwords.go:44:14:44:17 | obj2 | semmle.label | obj2 | -| passwords.go:46:6:46:9 | definition of obj3 | semmle.label | definition of obj3 | -| passwords.go:47:14:47:17 | obj3 | semmle.label | obj3 | | passwords.go:48:11:48:18 | password | semmle.label | password | +| passwords.go:50:2:50:15 | definition of fixed_password | semmle.label | definition of fixed_password | | passwords.go:51:14:51:27 | fixed_password | semmle.label | fixed_password | -| passwords.go:85:19:87:2 | struct literal | semmle.label | struct literal | -| passwords.go:86:16:86:36 | call to make | semmle.label | call to make | -| passwords.go:88:14:88:26 | utilityObject | semmle.label | utilityObject | -| passwords.go:90:12:90:19 | password | semmle.label | password | -| passwords.go:91:23:91:28 | secret | semmle.label | secret | -| passwords.go:101:15:101:40 | ...+... | semmle.label | ...+... | -| passwords.go:101:33:101:40 | password | semmle.label | password | -| passwords.go:107:16:107:41 | ...+... | semmle.label | ...+... | -| passwords.go:107:34:107:41 | password | semmle.label | password | -| passwords.go:112:15:112:40 | ...+... | semmle.label | ...+... | -| passwords.go:112:33:112:40 | password | semmle.label | password | -| passwords.go:116:14:116:45 | ...+... | semmle.label | ...+... | -| passwords.go:116:28:116:36 | password1 | semmle.label | password1 | -| passwords.go:116:28:116:45 | call to String | semmle.label | call to String | -| passwords.go:118:12:123:2 | struct literal | semmle.label | struct literal | -| passwords.go:118:12:123:2 | struct literal [x] | semmle.label | struct literal [x] | -| passwords.go:118:12:123:2 | struct literal [y] | semmle.label | struct literal [y] | -| passwords.go:119:13:119:13 | x | semmle.label | x | -| passwords.go:121:13:121:20 | password | semmle.label | password | -| passwords.go:122:13:122:25 | call to getPassword | semmle.label | call to getPassword | -| passwords.go:125:14:125:19 | config | semmle.label | config | -| passwords.go:126:14:126:19 | config [x] | semmle.label | config [x] | -| passwords.go:126:14:126:21 | selection of x | semmle.label | selection of x | -| passwords.go:127:14:127:19 | config [y] | semmle.label | config [y] | -| passwords.go:127:14:127:21 | selection of y | semmle.label | selection of y | -| protobuf.go:11:2:11:6 | definition of query [pointer, Description] | semmle.label | definition of query [pointer, Description] | -| protobuf.go:12:2:12:6 | implicit dereference [Description] | semmle.label | implicit dereference [Description] | -| protobuf.go:12:2:12:6 | query [pointer, Description] | semmle.label | query [pointer, Description] | +| passwords.go:86:19:88:2 | struct literal | semmle.label | struct literal | +| passwords.go:87:16:87:36 | call to make | semmle.label | call to make | +| passwords.go:89:14:89:26 | utilityObject | semmle.label | utilityObject | +| passwords.go:92:23:92:28 | secret | semmle.label | secret | +| passwords.go:102:15:102:40 | ...+... | semmle.label | ...+... | +| passwords.go:102:33:102:40 | password | semmle.label | password | +| passwords.go:108:16:108:41 | ...+... | semmle.label | ...+... | +| passwords.go:108:34:108:41 | password | semmle.label | password | +| passwords.go:113:15:113:40 | ...+... | semmle.label | ...+... | +| passwords.go:113:33:113:40 | password | semmle.label | password | +| passwords.go:116:6:116:14 | definition of password1 | semmle.label | definition of password1 | +| passwords.go:117:14:117:45 | ...+... | semmle.label | ...+... | +| passwords.go:117:28:117:36 | password1 | semmle.label | password1 | +| passwords.go:117:28:117:45 | call to String | semmle.label | call to String | +| passwords.go:120:12:125:2 | struct literal | semmle.label | struct literal | +| passwords.go:120:12:125:2 | struct literal [x] | semmle.label | struct literal [x] | +| passwords.go:120:12:125:2 | struct literal [y] | semmle.label | struct literal [y] | +| passwords.go:121:13:121:14 | x3 | semmle.label | x3 | +| passwords.go:123:13:123:20 | password | semmle.label | password | +| passwords.go:124:13:124:25 | call to getPassword | semmle.label | call to getPassword | +| passwords.go:127:14:127:19 | config | semmle.label | config | +| passwords.go:128:14:128:19 | config [x] | semmle.label | config [x] | +| passwords.go:128:14:128:21 | selection of x | semmle.label | selection of x | +| passwords.go:129:14:129:19 | config [y] | semmle.label | config [y] | +| passwords.go:129:14:129:21 | selection of y | semmle.label | selection of y | +| protobuf.go:9:2:9:9 | definition of password | semmle.label | definition of password | +| protobuf.go:12:2:12:6 | implicit dereference [postupdate] [Description] | semmle.label | implicit dereference [postupdate] [Description] | +| protobuf.go:12:2:12:6 | query [postupdate] [pointer, Description] | semmle.label | query [postupdate] [pointer, Description] | | protobuf.go:12:22:12:29 | password | semmle.label | password | | protobuf.go:14:14:14:18 | query [pointer, Description] | semmle.label | query [pointer, Description] | | protobuf.go:14:14:14:35 | call to GetDescription | semmle.label | call to GetDescription | diff --git a/go/ql/test/query-tests/Security/CWE-312/main.go b/go/ql/test/query-tests/Security/CWE-312/main.go index 17a183ff209..e30a8182265 100644 --- a/go/ql/test/query-tests/Security/CWE-312/main.go +++ b/go/ql/test/query-tests/Security/CWE-312/main.go @@ -5,27 +5,46 @@ package main import ( "log" + "math/rand" "github.com/golang/glog" "github.com/sirupsen/logrus" ) +var i int = rand.Int() + func main() { - password := "P4ssw0rd" + password := "P4ssw0rd" // $ Source log.Print(password) // $ Alert log.Printf("%s", password) // $ Alert log.Printf(password, "") // $ Alert log.Println(password) // $ Alert - log.Fatal(password) // $ Alert - log.Fatalf("%s", password) // $ Alert - log.Fatalf(password, "") // $ Alert - log.Fatalln(password) // $ Alert - log.Panic(password) // $ Alert - log.Panicf("%s", password) // $ Alert - log.Panicf(password, "") // $ Alert - log.Panicln(password) // $ Alert - log.Output(0, password) // $ Alert + if i == 0 { + log.Fatal(password) // $ Alert + } + if i == 1 { + log.Fatalf("%s", password) // $ Alert + } + if i == 2 { + log.Fatalf(password, "") // $ Alert + } + if i == 3 { + log.Fatalln(password) // $ Alert + } + if i == 4 { + log.Panic(password) // $ Alert + } + if i == 5 { + log.Panicf("%s", password) // $ Alert + } + if i == 6 { + log.Panicf(password, "") // $ Alert + } + if i == 7 { + log.Panicln(password) // $ Alert + } + log.Output(0, password) // $ Alert log.Printf("%T", password) l := log.Default() @@ -33,15 +52,31 @@ func main() { l.Printf("%s", password) // $ Alert l.Printf(password, "") // $ Alert l.Println(password) // $ Alert - l.Fatal(password) // $ Alert - l.Fatalf("%s", password) // $ Alert - l.Fatalf(password, "") // $ Alert - l.Fatalln(password) // $ Alert - l.Panic(password) // $ Alert - l.Panicf("%s", password) // $ Alert - l.Panicf(password, "") // $ Alert - l.Panicln(password) // $ Alert - l.Output(0, password) // $ Alert + if i == 100 { + l.Fatal(password) // $ Alert + } + if i == 101 { + l.Fatalf("%s", password) // $ Alert + } + if i == 102 { + l.Fatalf(password, "") // $ Alert + } + if i == 103 { + l.Fatalln(password) // $ Alert + } + if i == 104 { + l.Panic(password) // $ Alert + } + if i == 105 { + l.Panicf("%s", password) // $ Alert + } + if i == 106 { + l.Panicf(password, "") // $ Alert + } + if i == 107 { + l.Panicln(password) // $ Alert + } + l.Output(0, password) // $ Alert l.Printf("%T", password) glog.Info(password) // $ Alert @@ -49,7 +84,7 @@ func main() { fields := make(logrus.Fields) fields["pass"] = password - entry := logrus.WithFields(fields) + entry := logrus.WithFields(fields) // $ Alert entry.Errorf("") entry = logrus.WithField("pass", password) // $ Alert diff --git a/go/ql/test/query-tests/Security/CWE-312/overrides.go b/go/ql/test/query-tests/Security/CWE-312/overrides.go index 98fbdad9e77..4ac9401d2c0 100644 --- a/go/ql/test/query-tests/Security/CWE-312/overrides.go +++ b/go/ql/test/query-tests/Security/CWE-312/overrides.go @@ -5,8 +5,8 @@ import "fmt" type s struct{} func (_ s) String() string { - password := "horsebatterystaplecorrect" - return password // $ Source + password := "horsebatterystaplecorrect" // $ Source + return password } func overrideTest(x s, y fmt.Stringer) { diff --git a/go/ql/test/query-tests/Security/CWE-312/passwords.go b/go/ql/test/query-tests/Security/CWE-312/passwords.go index f99178f0fae..38c977e41b8 100644 --- a/go/ql/test/query-tests/Security/CWE-312/passwords.go +++ b/go/ql/test/query-tests/Security/CWE-312/passwords.go @@ -18,7 +18,7 @@ func redact(kind, value string) string { func test() { name := "user" - password := "P@ssw0rd" + password := "P@ssw0rd" // $ Source x := "horsebatterystapleincorrect" var o passStruct @@ -27,7 +27,7 @@ func test() { log.Println(getPassword()) // $ Alert log.Println(o.getPassword()) // $ Alert - myLog(password) // $ Source + myLog(password) log.Panic(password) // $ Alert @@ -39,16 +39,16 @@ func test() { log.Println(obj1) // $ Alert obj2 := xStruct{ - x: password, // $ Source + x: password, } log.Println(obj2) // $ Alert var obj3 xStruct - log.Println(obj3) // $ SPURIOUS: Alert // caught because of the below line and def-use flow - obj3.x = password // $ Source + log.Println(obj3) + obj3.x = password - fixed_password := "cowbatterystaplecorrect" - log.Println(fixed_password) // $ Alert // Probably OK + fixed_password := "cowbatterystaplecorrect" // $ Source + log.Println(fixed_password) // $ Alert // Probably OK log.Println(IncorrectPasswordError) // OK @@ -65,7 +65,8 @@ func test() { log.Println(actually_secure_password) // OK var user1 cryptedStruct - user1.cryptedPassword = x + x2 := "perhaps sensitive" + user1.cryptedPassword = x2 log.Println(user1) // OK var user2 passStruct @@ -87,7 +88,7 @@ func test() { } log.Println(utilityObject) // $ Alert - secret := password // $ Source + secret := password log.Printf("pw: %s", secret) // $ Alert log.Println("Password is: " + redact("password", password)) @@ -112,13 +113,14 @@ func test() { log.Println("Password is: " + password) // $ SPURIOUS: Alert } - var password1 stringable = stringable{"arstneio"} - log.Println(name + ", " + password1.String()) // $ Alert + var password1 stringable = stringable{"arstneio"} // $ Source + log.Println(name + ", " + password1.String()) // $ Alert + x3 := "sheepbatterystaplecorrect" config := Config{ - password: x, // $ Source + password: x3, // $ Source hostname: "tarski", - x: password, // $ Source + x: password, y: getPassword(), // $ Source } log.Println(config.hostname) // OK diff --git a/go/ql/test/query-tests/Security/CWE-312/protobuf.go b/go/ql/test/query-tests/Security/CWE-312/protobuf.go index a995f0d7cb8..3609410e2b0 100644 --- a/go/ql/test/query-tests/Security/CWE-312/protobuf.go +++ b/go/ql/test/query-tests/Security/CWE-312/protobuf.go @@ -6,10 +6,10 @@ import ( ) func testProtobuf() { - password := "P@ssw0rd" + password := "P@ssw0rd" // $ Source query := &query.Query{} - query.Description = password // $ Source + query.Description = password log.Println(query.GetDescription()) // $ Alert log.Println(query.GetId()) // OK diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected index b2659fffde7..ef5f3a1f7b9 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/InsecureRandomness.expected @@ -1,8 +1,7 @@ #select | InsecureRandomness.go:12:18:12:40 | call to Intn | InsecureRandomness.go:12:18:12:40 | call to Intn | InsecureRandomness.go:12:18:12:40 | call to Intn | A password-related function depends on a $@ generated with a cryptographically weak RNG. | InsecureRandomness.go:12:18:12:40 | call to Intn | random number | | sample.go:26:25:26:30 | call to Guid | sample.go:15:49:15:61 | call to Uint32 | sample.go:26:25:26:30 | call to Guid | This cryptographic algorithm depends on a $@ generated with a cryptographically weak RNG. | sample.go:15:49:15:61 | call to Uint32 | random number | -| sample.go:37:25:37:29 | nonce | sample.go:34:12:34:40 | call to New | sample.go:37:25:37:29 | nonce | This cryptographic algorithm depends on a $@ generated with a cryptographically weak RNG. | sample.go:34:12:34:40 | call to New | random number | -| sample.go:37:32:37:36 | nonce | sample.go:34:12:34:40 | call to New | sample.go:37:32:37:36 | nonce | This cryptographic algorithm depends on a $@ generated with a cryptographically weak RNG. | sample.go:34:12:34:40 | call to New | random number | +| sample.go:37:35:37:39 | nonce | sample.go:34:12:34:40 | call to New | sample.go:37:35:37:39 | nonce | This cryptographic algorithm depends on a $@ generated with a cryptographically weak RNG. | sample.go:34:12:34:40 | call to New | random number | | sample.go:43:17:43:39 | call to Intn | sample.go:43:17:43:39 | call to Intn | sample.go:43:17:43:39 | call to Intn | A password-related function depends on a $@ generated with a cryptographically weak RNG. | sample.go:43:17:43:39 | call to Intn | random number | | sample.go:58:32:58:43 | type conversion | sample.go:55:17:55:42 | call to Intn | sample.go:58:32:58:43 | type conversion | This cryptographic algorithm depends on a $@ generated with a cryptographically weak RNG. | sample.go:55:17:55:42 | call to Intn | random number | edges @@ -13,10 +12,9 @@ edges | sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | []type{args} [array] | provenance | | | sample.go:15:49:15:61 | call to Uint32 | sample.go:15:31:15:62 | call to Sprintf | provenance | FunctionModel | | sample.go:16:9:16:15 | slice expression | sample.go:26:25:26:30 | call to Guid | provenance | | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:25:37:29 | nonce | provenance | | -| sample.go:33:2:33:6 | definition of nonce | sample.go:37:32:37:36 | nonce | provenance | | | sample.go:34:12:34:40 | call to New | sample.go:35:14:35:19 | random | provenance | | -| sample.go:35:14:35:19 | random | sample.go:33:2:33:6 | definition of nonce | provenance | MaD:2 | +| sample.go:35:14:35:19 | random | sample.go:35:22:35:26 | nonce [postupdate] | provenance | MaD:2 | +| sample.go:35:22:35:26 | nonce [postupdate] | sample.go:37:35:37:39 | nonce | provenance | | | sample.go:55:17:55:42 | call to Intn | sample.go:56:29:56:38 | randNumber | provenance | | | sample.go:56:11:56:40 | type conversion | sample.go:58:32:58:43 | type conversion | provenance | | | sample.go:56:18:56:39 | index expression | sample.go:56:11:56:40 | type conversion | provenance | | @@ -33,11 +31,10 @@ nodes | sample.go:15:49:15:61 | call to Uint32 | semmle.label | call to Uint32 | | sample.go:16:9:16:15 | slice expression | semmle.label | slice expression | | sample.go:26:25:26:30 | call to Guid | semmle.label | call to Guid | -| sample.go:33:2:33:6 | definition of nonce | semmle.label | definition of nonce | | sample.go:34:12:34:40 | call to New | semmle.label | call to New | | sample.go:35:14:35:19 | random | semmle.label | random | -| sample.go:37:25:37:29 | nonce | semmle.label | nonce | -| sample.go:37:32:37:36 | nonce | semmle.label | nonce | +| sample.go:35:22:35:26 | nonce [postupdate] | semmle.label | nonce [postupdate] | +| sample.go:37:35:37:39 | nonce | semmle.label | nonce | | sample.go:43:17:43:39 | call to Intn | semmle.label | call to Intn | | sample.go:44:17:44:39 | call to Intn | semmle.label | call to Intn | | sample.go:45:17:45:39 | call to Intn | semmle.label | call to Intn | diff --git a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/sample.go b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/sample.go index df703ff0dfa..9eef81f63bb 100644 --- a/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/sample.go +++ b/go/ql/test/query-tests/Security/CWE-338/InsecureRandomness/sample.go @@ -34,7 +34,7 @@ func encrypt(data []byte, password string) []byte { random := rand.New(rand.NewSource(999)) io.ReadFull(random, nonce) - ciphertext := gcm.Seal(nonce, nonce, data, nil) // BAD: use of an insecure rng to generate a nonce + ciphertext := gcm.Seal(data[:0], nonce, data, nil) // BAD: use of an insecure rng to generate a nonce return ciphertext } diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected index f8d193348ba..d9f24369ca2 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.expected @@ -2,69 +2,93 @@ | OpenUrlRedirect.go:10:23:10:42 | call to Get | OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | This path to an untrusted URL redirection depends on a $@. | OpenUrlRedirect.go:10:23:10:28 | selection of Form | user-provided value | | stdlib.go:15:30:15:35 | target | stdlib.go:13:13:13:18 | selection of Form | stdlib.go:15:30:15:35 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:13:13:13:18 | selection of Form | user-provided value | | stdlib.go:24:30:24:35 | target | stdlib.go:22:13:22:18 | selection of Form | stdlib.go:24:30:24:35 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:22:13:22:18 | selection of Form | user-provided value | -| stdlib.go:35:30:35:39 | ...+... | stdlib.go:31:13:31:18 | selection of Form | stdlib.go:35:30:35:39 | ...+... | This path to an untrusted URL redirection depends on a $@. | stdlib.go:31:13:31:18 | selection of Form | user-provided value | -| stdlib.go:46:23:46:28 | target | stdlib.go:44:13:44:18 | selection of Form | stdlib.go:46:23:46:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:44:13:44:18 | selection of Form | user-provided value | -| stdlib.go:67:23:67:40 | ...+... | stdlib.go:64:13:64:18 | selection of Form | stdlib.go:67:23:67:40 | ...+... | This path to an untrusted URL redirection depends on a $@. | stdlib.go:64:13:64:18 | selection of Form | user-provided value | -| stdlib.go:92:23:92:28 | target | stdlib.go:89:13:89:18 | selection of Form | stdlib.go:92:23:92:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:89:13:89:18 | selection of Form | user-provided value | -| stdlib.go:152:23:152:28 | target | stdlib.go:146:13:146:18 | selection of Form | stdlib.go:152:23:152:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:146:13:146:18 | selection of Form | user-provided value | -| stdlib.go:184:23:184:28 | target | stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:184:23:184:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:182:13:182:33 | call to FormValue | user-provided value | -| stdlib.go:192:23:192:33 | selection of Path | stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:192:23:192:33 | selection of Path | This path to an untrusted URL redirection depends on a $@. | stdlib.go:190:36:190:56 | call to FormValue | user-provided value | -| stdlib.go:194:23:194:42 | call to EscapedPath | stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:194:23:194:42 | call to EscapedPath | This path to an untrusted URL redirection depends on a $@. | stdlib.go:190:36:190:56 | call to FormValue | user-provided value | +| stdlib.go:39:30:39:40 | ...+... | stdlib.go:33:13:33:18 | selection of Form | stdlib.go:39:30:39:40 | ...+... | This path to an untrusted URL redirection depends on a $@. | stdlib.go:33:13:33:18 | selection of Form | user-provided value | +| stdlib.go:50:23:50:28 | target | stdlib.go:48:13:48:18 | selection of Form | stdlib.go:50:23:50:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:48:13:48:18 | selection of Form | user-provided value | +| stdlib.go:71:23:71:40 | ...+... | stdlib.go:68:13:68:18 | selection of Form | stdlib.go:71:23:71:40 | ...+... | This path to an untrusted URL redirection depends on a $@. | stdlib.go:68:13:68:18 | selection of Form | user-provided value | +| stdlib.go:96:23:96:28 | target | stdlib.go:93:13:93:18 | selection of Form | stdlib.go:96:23:96:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:93:13:93:18 | selection of Form | user-provided value | +| stdlib.go:156:23:156:28 | target | stdlib.go:150:13:150:18 | selection of Form | stdlib.go:156:23:156:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:150:13:150:18 | selection of Form | user-provided value | +| stdlib.go:188:23:188:28 | target | stdlib.go:186:13:186:33 | call to FormValue | stdlib.go:188:23:188:28 | target | This path to an untrusted URL redirection depends on a $@. | stdlib.go:186:13:186:33 | call to FormValue | user-provided value | +| stdlib.go:196:23:196:33 | selection of Path | stdlib.go:194:36:194:56 | call to FormValue | stdlib.go:196:23:196:33 | selection of Path | This path to an untrusted URL redirection depends on a $@. | stdlib.go:194:36:194:56 | call to FormValue | user-provided value | +| stdlib.go:198:23:198:42 | call to EscapedPath | stdlib.go:194:36:194:56 | call to FormValue | stdlib.go:198:23:198:42 | call to EscapedPath | This path to an untrusted URL redirection depends on a $@. | stdlib.go:194:36:194:56 | call to FormValue | user-provided value | +| stdlib.go:212:23:212:28 | selection of Path | stdlib.go:210:12:210:30 | call to FormValue | stdlib.go:212:23:212:28 | selection of Path | This path to an untrusted URL redirection depends on a $@. | stdlib.go:210:12:210:30 | call to FormValue | user-provided value | +| stdlib.go:214:23:214:32 | call to String | stdlib.go:210:12:210:30 | call to FormValue | stdlib.go:214:23:214:32 | call to String | This path to an untrusted URL redirection depends on a $@. | stdlib.go:210:12:210:30 | call to FormValue | user-provided value | +| stdlib.go:261:23:261:32 | call to String | stdlib.go:257:12:257:30 | call to FormValue | stdlib.go:261:23:261:32 | call to String | This path to an untrusted URL redirection depends on a $@. | stdlib.go:257:12:257:30 | call to FormValue | user-provided value | edges | OpenUrlRedirect.go:10:23:10:28 | selection of Form | OpenUrlRedirect.go:10:23:10:42 | call to Get | provenance | Src:MaD:2 Config Sink:MaD:1 | | stdlib.go:13:13:13:18 | selection of Form | stdlib.go:13:13:13:32 | call to Get | provenance | Src:MaD:2 Config | | stdlib.go:13:13:13:32 | call to Get | stdlib.go:15:30:15:35 | target | provenance | | | stdlib.go:22:13:22:18 | selection of Form | stdlib.go:22:13:22:32 | call to Get | provenance | Src:MaD:2 Config | | stdlib.go:22:13:22:32 | call to Get | stdlib.go:24:30:24:35 | target | provenance | | -| stdlib.go:31:13:31:18 | selection of Form | stdlib.go:31:13:31:32 | call to Get | provenance | Src:MaD:2 Config | -| stdlib.go:31:13:31:32 | call to Get | stdlib.go:35:34:35:39 | target | provenance | | -| stdlib.go:35:34:35:39 | target | stdlib.go:35:30:35:39 | ...+... | provenance | Config | -| stdlib.go:44:13:44:18 | selection of Form | stdlib.go:44:13:44:32 | call to Get | provenance | Src:MaD:2 Config | -| stdlib.go:44:13:44:32 | call to Get | stdlib.go:46:23:46:28 | target | provenance | Sink:MaD:1 | -| stdlib.go:64:13:64:18 | selection of Form | stdlib.go:64:13:64:32 | call to Get | provenance | Src:MaD:2 Config | -| stdlib.go:64:13:64:32 | call to Get | stdlib.go:67:23:67:28 | target | provenance | | -| stdlib.go:67:23:67:28 | target | stdlib.go:67:23:67:37 | ...+... | provenance | Config | -| stdlib.go:67:23:67:37 | ...+... | stdlib.go:67:23:67:40 | ...+... | provenance | Config Sink:MaD:1 | -| stdlib.go:89:13:89:18 | selection of Form | stdlib.go:89:13:89:32 | call to Get | provenance | Src:MaD:2 Config | -| stdlib.go:89:13:89:32 | call to Get | stdlib.go:90:3:90:8 | target | provenance | | -| stdlib.go:90:3:90:8 | target | stdlib.go:90:3:90:25 | ... += ... | provenance | Config | -| stdlib.go:90:3:90:25 | ... += ... | stdlib.go:92:23:92:28 | target | provenance | Sink:MaD:1 | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | provenance | | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:112:4:112:4 | r [pointer, URL] | provenance | | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | stdlib.go:113:24:113:24 | r [pointer, URL] | provenance | | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | provenance | | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:107:54:107:54 | definition of r [pointer, URL] | provenance | | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | stdlib.go:112:4:112:8 | selection of URL | provenance | | -| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | -| stdlib.go:112:4:112:4 | r [pointer, URL] | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL | provenance | Config | -| stdlib.go:112:4:112:8 | implicit dereference | stdlib.go:112:4:112:8 | selection of URL [pointer] | provenance | | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:4 | implicit dereference [URL] | provenance | Src:MaD:4 | -| stdlib.go:112:4:112:8 | selection of URL | stdlib.go:112:4:112:8 | implicit dereference | provenance | Src:MaD:4 Config | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | provenance | | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | stdlib.go:112:4:112:8 | implicit dereference | provenance | | -| stdlib.go:113:24:113:24 | implicit dereference [URL] | stdlib.go:113:24:113:28 | selection of URL | provenance | | -| stdlib.go:113:24:113:24 | r [pointer, URL] | stdlib.go:113:24:113:24 | implicit dereference [URL] | provenance | | -| stdlib.go:113:24:113:28 | selection of URL | stdlib.go:113:24:113:37 | call to String | provenance | Src:MaD:4 Config Sink:MaD:1 | -| stdlib.go:146:13:146:18 | selection of Form | stdlib.go:146:13:146:32 | call to Get | provenance | Src:MaD:2 Config | -| stdlib.go:146:13:146:32 | call to Get | stdlib.go:152:23:152:28 | target | provenance | Sink:MaD:1 | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:159:11:159:15 | selection of URL | provenance | Config | -| stdlib.go:159:10:159:15 | star expression | stdlib.go:162:24:162:26 | url | provenance | | -| stdlib.go:159:11:159:15 | selection of URL | stdlib.go:159:10:159:15 | star expression | provenance | Src:MaD:4 Config | -| stdlib.go:162:24:162:26 | url | stdlib.go:162:24:162:35 | call to String | provenance | Config Sink:MaD:1 | -| stdlib.go:173:35:173:39 | selection of URL | stdlib.go:173:35:173:52 | call to RequestURI | provenance | Src:MaD:4 Config | -| stdlib.go:173:35:173:52 | call to RequestURI | stdlib.go:173:24:173:52 | ...+... | provenance | Config Sink:MaD:1 | -| stdlib.go:182:13:182:33 | call to FormValue | stdlib.go:184:23:184:28 | target | provenance | Src:MaD:3 Sink:MaD:1 | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:192:23:192:28 | target | provenance | | -| stdlib.go:190:3:190:8 | definition of target | stdlib.go:194:23:194:28 | target | provenance | | -| stdlib.go:190:3:190:57 | ... := ...[0] | stdlib.go:190:3:190:8 | definition of target | provenance | | -| stdlib.go:190:36:190:56 | call to FormValue | stdlib.go:190:3:190:57 | ... := ...[0] | provenance | Src:MaD:3 Config | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:190:3:190:8 | definition of target | provenance | Config | -| stdlib.go:192:23:192:28 | implicit dereference | stdlib.go:192:23:192:33 | selection of Path | provenance | Config Sink:MaD:1 | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:28 | implicit dereference | provenance | Config | -| stdlib.go:192:23:192:28 | target | stdlib.go:192:23:192:33 | selection of Path | provenance | Config Sink:MaD:1 | -| stdlib.go:194:23:194:28 | target | stdlib.go:194:23:194:42 | call to EscapedPath | provenance | Config Sink:MaD:1 | +| stdlib.go:33:13:33:18 | selection of Form | stdlib.go:33:13:33:32 | call to Get | provenance | Src:MaD:2 Config | +| stdlib.go:33:13:33:32 | call to Get | stdlib.go:39:34:39:40 | target2 | provenance | | +| stdlib.go:39:34:39:40 | target2 | stdlib.go:39:30:39:40 | ...+... | provenance | Config | +| stdlib.go:48:13:48:18 | selection of Form | stdlib.go:48:13:48:32 | call to Get | provenance | Src:MaD:2 Config | +| stdlib.go:48:13:48:32 | call to Get | stdlib.go:50:23:50:28 | target | provenance | Sink:MaD:1 | +| stdlib.go:68:13:68:18 | selection of Form | stdlib.go:68:13:68:32 | call to Get | provenance | Src:MaD:2 Config | +| stdlib.go:68:13:68:32 | call to Get | stdlib.go:71:23:71:28 | target | provenance | | +| stdlib.go:71:23:71:28 | target | stdlib.go:71:23:71:37 | ...+... | provenance | Config | +| stdlib.go:71:23:71:37 | ...+... | stdlib.go:71:23:71:40 | ...+... | provenance | Config Sink:MaD:1 | +| stdlib.go:93:13:93:18 | selection of Form | stdlib.go:93:13:93:32 | call to Get | provenance | Src:MaD:2 Config | +| stdlib.go:93:13:93:32 | call to Get | stdlib.go:94:3:94:8 | target | provenance | | +| stdlib.go:94:3:94:8 | target | stdlib.go:94:3:94:25 | ... += ... | provenance | Config | +| stdlib.go:94:3:94:25 | ... += ... | stdlib.go:96:23:96:28 | target | provenance | Sink:MaD:1 | +| stdlib.go:116:4:116:4 | implicit dereference [postupdate] [URL] | stdlib.go:116:4:116:4 | r [postupdate] [pointer, URL] | provenance | | +| stdlib.go:116:4:116:4 | r [postupdate] [pointer, URL] | stdlib.go:117:24:117:24 | r [pointer, URL] | provenance | | +| stdlib.go:116:4:116:8 | implicit dereference | stdlib.go:116:4:116:8 | selection of URL [postupdate] | provenance | Config | +| stdlib.go:116:4:116:8 | selection of URL | stdlib.go:116:4:116:8 | implicit dereference | provenance | Src:MaD:4 Config | +| stdlib.go:116:4:116:8 | selection of URL [postupdate] | stdlib.go:116:4:116:4 | implicit dereference [postupdate] [URL] | provenance | | +| stdlib.go:116:4:116:8 | selection of URL [postupdate] | stdlib.go:116:4:116:8 | implicit dereference | provenance | Config | +| stdlib.go:117:24:117:24 | implicit dereference [URL] | stdlib.go:117:24:117:28 | selection of URL | provenance | | +| stdlib.go:117:24:117:24 | r [pointer, URL] | stdlib.go:117:24:117:24 | implicit dereference [URL] | provenance | | +| stdlib.go:117:24:117:28 | selection of URL | stdlib.go:117:24:117:37 | call to String | provenance | Src:MaD:4 Config Sink:MaD:1 | +| stdlib.go:150:13:150:18 | selection of Form | stdlib.go:150:13:150:32 | call to Get | provenance | Src:MaD:2 Config | +| stdlib.go:150:13:150:32 | call to Get | stdlib.go:156:23:156:28 | target | provenance | Sink:MaD:1 | +| stdlib.go:163:10:163:15 | star expression | stdlib.go:163:11:163:15 | selection of URL [postupdate] | provenance | Config | +| stdlib.go:163:10:163:15 | star expression | stdlib.go:166:24:166:26 | url | provenance | | +| stdlib.go:163:11:163:15 | selection of URL | stdlib.go:163:10:163:15 | star expression | provenance | Src:MaD:4 Config | +| stdlib.go:163:11:163:15 | selection of URL [postupdate] | stdlib.go:163:10:163:15 | star expression | provenance | Config | +| stdlib.go:166:24:166:26 | url | stdlib.go:166:24:166:35 | call to String | provenance | Config Sink:MaD:1 | +| stdlib.go:177:35:177:39 | selection of URL | stdlib.go:177:35:177:52 | call to RequestURI | provenance | Src:MaD:4 Config | +| stdlib.go:177:35:177:52 | call to RequestURI | stdlib.go:177:24:177:52 | ...+... | provenance | Config Sink:MaD:1 | +| stdlib.go:186:13:186:33 | call to FormValue | stdlib.go:188:23:188:28 | target | provenance | Src:MaD:3 Sink:MaD:1 | +| stdlib.go:194:3:194:57 | ... := ...[0] | stdlib.go:196:23:196:28 | target | provenance | | +| stdlib.go:194:36:194:56 | call to FormValue | stdlib.go:194:3:194:57 | ... := ...[0] | provenance | Src:MaD:3 Config | +| stdlib.go:196:23:196:28 | implicit dereference | stdlib.go:196:23:196:28 | target [postupdate] | provenance | Config | +| stdlib.go:196:23:196:28 | implicit dereference | stdlib.go:196:23:196:33 | selection of Path | provenance | Config Sink:MaD:1 | +| stdlib.go:196:23:196:28 | target | stdlib.go:196:23:196:28 | implicit dereference | provenance | Config | +| stdlib.go:196:23:196:28 | target | stdlib.go:196:23:196:33 | selection of Path | provenance | Config Sink:MaD:1 | +| stdlib.go:196:23:196:28 | target | stdlib.go:198:23:198:28 | target | provenance | | +| stdlib.go:196:23:196:28 | target [postupdate] | stdlib.go:196:23:196:28 | implicit dereference | provenance | Config | +| stdlib.go:196:23:196:28 | target [postupdate] | stdlib.go:198:23:198:28 | target | provenance | | +| stdlib.go:198:23:198:28 | target | stdlib.go:198:23:198:42 | call to EscapedPath | provenance | Config Sink:MaD:1 | +| stdlib.go:210:3:210:3 | implicit dereference [postupdate] | stdlib.go:210:3:210:3 | u [postupdate] | provenance | Config | +| stdlib.go:210:3:210:3 | implicit dereference [postupdate] | stdlib.go:210:3:210:3 | u [postupdate] [pointer] | provenance | | +| stdlib.go:210:3:210:3 | u [postupdate] | stdlib.go:212:23:212:23 | u | provenance | | +| stdlib.go:210:3:210:3 | u [postupdate] [pointer] | stdlib.go:212:23:212:23 | u [pointer] | provenance | | +| stdlib.go:210:12:210:30 | call to FormValue | stdlib.go:210:3:210:3 | implicit dereference [postupdate] | provenance | Src:MaD:3 Config | +| stdlib.go:210:12:210:30 | call to FormValue | stdlib.go:210:3:210:3 | u [postupdate] | provenance | Src:MaD:3 Config | +| stdlib.go:212:23:212:23 | implicit dereference | stdlib.go:212:23:212:23 | u [postupdate] | provenance | Config | +| stdlib.go:212:23:212:23 | implicit dereference | stdlib.go:212:23:212:28 | selection of Path | provenance | Config Sink:MaD:1 | +| stdlib.go:212:23:212:23 | u | stdlib.go:212:23:212:23 | implicit dereference | provenance | Config | +| stdlib.go:212:23:212:23 | u | stdlib.go:212:23:212:28 | selection of Path | provenance | Config Sink:MaD:1 | +| stdlib.go:212:23:212:23 | u | stdlib.go:214:23:214:23 | u | provenance | | +| stdlib.go:212:23:212:23 | u [pointer] | stdlib.go:212:23:212:23 | implicit dereference | provenance | | +| stdlib.go:212:23:212:23 | u [postupdate] | stdlib.go:212:23:212:23 | implicit dereference | provenance | Config | +| stdlib.go:212:23:212:23 | u [postupdate] | stdlib.go:214:23:214:23 | u | provenance | | +| stdlib.go:214:23:214:23 | u | stdlib.go:214:23:214:32 | call to String | provenance | Config Sink:MaD:1 | +| stdlib.go:257:3:257:3 | implicit dereference [postupdate] | stdlib.go:257:3:257:3 | u [postupdate] | provenance | Config | +| stdlib.go:257:3:257:3 | implicit dereference [postupdate] | stdlib.go:257:3:257:3 | u [postupdate] [pointer] | provenance | | +| stdlib.go:257:3:257:3 | u [postupdate] | stdlib.go:260:3:260:3 | u | provenance | | +| stdlib.go:257:3:257:3 | u [postupdate] [pointer] | stdlib.go:260:3:260:3 | u [pointer] | provenance | | +| stdlib.go:257:12:257:30 | call to FormValue | stdlib.go:257:3:257:3 | implicit dereference [postupdate] | provenance | Src:MaD:3 Config | +| stdlib.go:257:12:257:30 | call to FormValue | stdlib.go:257:3:257:3 | u [postupdate] | provenance | Src:MaD:3 Config | +| stdlib.go:260:3:260:3 | implicit dereference | stdlib.go:260:3:260:3 | u [postupdate] | provenance | Config | +| stdlib.go:260:3:260:3 | u | stdlib.go:260:3:260:3 | implicit dereference | provenance | Config | +| stdlib.go:260:3:260:3 | u | stdlib.go:261:23:261:23 | u | provenance | | +| stdlib.go:260:3:260:3 | u [pointer] | stdlib.go:260:3:260:3 | implicit dereference | provenance | | +| stdlib.go:260:3:260:3 | u [postupdate] | stdlib.go:260:3:260:3 | implicit dereference | provenance | Config | +| stdlib.go:260:3:260:3 | u [postupdate] | stdlib.go:261:23:261:23 | u | provenance | | +| stdlib.go:261:23:261:23 | u | stdlib.go:261:23:261:32 | call to String | provenance | Config Sink:MaD:1 | models | 1 | Sink: net/http; ; false; Redirect; ; ; Argument[2]; url-redirection[0]; manual | | 2 | Source: net/http; Request; true; Form; ; ; ; remote; manual | @@ -79,54 +103,72 @@ nodes | stdlib.go:22:13:22:18 | selection of Form | semmle.label | selection of Form | | stdlib.go:22:13:22:32 | call to Get | semmle.label | call to Get | | stdlib.go:24:30:24:35 | target | semmle.label | target | -| stdlib.go:31:13:31:18 | selection of Form | semmle.label | selection of Form | -| stdlib.go:31:13:31:32 | call to Get | semmle.label | call to Get | -| stdlib.go:35:30:35:39 | ...+... | semmle.label | ...+... | -| stdlib.go:35:34:35:39 | target | semmle.label | target | -| stdlib.go:44:13:44:18 | selection of Form | semmle.label | selection of Form | -| stdlib.go:44:13:44:32 | call to Get | semmle.label | call to Get | -| stdlib.go:46:23:46:28 | target | semmle.label | target | -| stdlib.go:64:13:64:18 | selection of Form | semmle.label | selection of Form | -| stdlib.go:64:13:64:32 | call to Get | semmle.label | call to Get | -| stdlib.go:67:23:67:28 | target | semmle.label | target | -| stdlib.go:67:23:67:37 | ...+... | semmle.label | ...+... | -| stdlib.go:67:23:67:40 | ...+... | semmle.label | ...+... | -| stdlib.go:89:13:89:18 | selection of Form | semmle.label | selection of Form | -| stdlib.go:89:13:89:32 | call to Get | semmle.label | call to Get | -| stdlib.go:90:3:90:8 | target | semmle.label | target | -| stdlib.go:90:3:90:25 | ... += ... | semmle.label | ... += ... | -| stdlib.go:92:23:92:28 | target | semmle.label | target | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL, pointer] | semmle.label | definition of r [pointer, URL, pointer] | -| stdlib.go:107:54:107:54 | definition of r [pointer, URL] | semmle.label | definition of r [pointer, URL] | -| stdlib.go:112:4:112:4 | implicit dereference [URL, pointer] | semmle.label | implicit dereference [URL, pointer] | -| stdlib.go:112:4:112:4 | implicit dereference [URL] | semmle.label | implicit dereference [URL] | -| stdlib.go:112:4:112:4 | r [pointer, URL, pointer] | semmle.label | r [pointer, URL, pointer] | -| stdlib.go:112:4:112:4 | r [pointer, URL] | semmle.label | r [pointer, URL] | -| stdlib.go:112:4:112:8 | implicit dereference | semmle.label | implicit dereference | -| stdlib.go:112:4:112:8 | selection of URL | semmle.label | selection of URL | -| stdlib.go:112:4:112:8 | selection of URL [pointer] | semmle.label | selection of URL [pointer] | -| stdlib.go:113:24:113:24 | implicit dereference [URL] | semmle.label | implicit dereference [URL] | -| stdlib.go:113:24:113:24 | r [pointer, URL] | semmle.label | r [pointer, URL] | -| stdlib.go:113:24:113:28 | selection of URL | semmle.label | selection of URL | -| stdlib.go:113:24:113:37 | call to String | semmle.label | call to String | -| stdlib.go:146:13:146:18 | selection of Form | semmle.label | selection of Form | -| stdlib.go:146:13:146:32 | call to Get | semmle.label | call to Get | -| stdlib.go:152:23:152:28 | target | semmle.label | target | -| stdlib.go:159:10:159:15 | star expression | semmle.label | star expression | -| stdlib.go:159:11:159:15 | selection of URL | semmle.label | selection of URL | -| stdlib.go:162:24:162:26 | url | semmle.label | url | -| stdlib.go:162:24:162:35 | call to String | semmle.label | call to String | -| stdlib.go:173:24:173:52 | ...+... | semmle.label | ...+... | -| stdlib.go:173:35:173:39 | selection of URL | semmle.label | selection of URL | -| stdlib.go:173:35:173:52 | call to RequestURI | semmle.label | call to RequestURI | -| stdlib.go:182:13:182:33 | call to FormValue | semmle.label | call to FormValue | -| stdlib.go:184:23:184:28 | target | semmle.label | target | -| stdlib.go:190:3:190:8 | definition of target | semmle.label | definition of target | -| stdlib.go:190:3:190:57 | ... := ...[0] | semmle.label | ... := ...[0] | -| stdlib.go:190:36:190:56 | call to FormValue | semmle.label | call to FormValue | -| stdlib.go:192:23:192:28 | implicit dereference | semmle.label | implicit dereference | -| stdlib.go:192:23:192:28 | target | semmle.label | target | -| stdlib.go:192:23:192:33 | selection of Path | semmle.label | selection of Path | -| stdlib.go:194:23:194:28 | target | semmle.label | target | -| stdlib.go:194:23:194:42 | call to EscapedPath | semmle.label | call to EscapedPath | +| stdlib.go:33:13:33:18 | selection of Form | semmle.label | selection of Form | +| stdlib.go:33:13:33:32 | call to Get | semmle.label | call to Get | +| stdlib.go:39:30:39:40 | ...+... | semmle.label | ...+... | +| stdlib.go:39:34:39:40 | target2 | semmle.label | target2 | +| stdlib.go:48:13:48:18 | selection of Form | semmle.label | selection of Form | +| stdlib.go:48:13:48:32 | call to Get | semmle.label | call to Get | +| stdlib.go:50:23:50:28 | target | semmle.label | target | +| stdlib.go:68:13:68:18 | selection of Form | semmle.label | selection of Form | +| stdlib.go:68:13:68:32 | call to Get | semmle.label | call to Get | +| stdlib.go:71:23:71:28 | target | semmle.label | target | +| stdlib.go:71:23:71:37 | ...+... | semmle.label | ...+... | +| stdlib.go:71:23:71:40 | ...+... | semmle.label | ...+... | +| stdlib.go:93:13:93:18 | selection of Form | semmle.label | selection of Form | +| stdlib.go:93:13:93:32 | call to Get | semmle.label | call to Get | +| stdlib.go:94:3:94:8 | target | semmle.label | target | +| stdlib.go:94:3:94:25 | ... += ... | semmle.label | ... += ... | +| stdlib.go:96:23:96:28 | target | semmle.label | target | +| stdlib.go:116:4:116:4 | implicit dereference [postupdate] [URL] | semmle.label | implicit dereference [postupdate] [URL] | +| stdlib.go:116:4:116:4 | r [postupdate] [pointer, URL] | semmle.label | r [postupdate] [pointer, URL] | +| stdlib.go:116:4:116:8 | implicit dereference | semmle.label | implicit dereference | +| stdlib.go:116:4:116:8 | selection of URL | semmle.label | selection of URL | +| stdlib.go:116:4:116:8 | selection of URL [postupdate] | semmle.label | selection of URL [postupdate] | +| stdlib.go:117:24:117:24 | implicit dereference [URL] | semmle.label | implicit dereference [URL] | +| stdlib.go:117:24:117:24 | r [pointer, URL] | semmle.label | r [pointer, URL] | +| stdlib.go:117:24:117:28 | selection of URL | semmle.label | selection of URL | +| stdlib.go:117:24:117:37 | call to String | semmle.label | call to String | +| stdlib.go:150:13:150:18 | selection of Form | semmle.label | selection of Form | +| stdlib.go:150:13:150:32 | call to Get | semmle.label | call to Get | +| stdlib.go:156:23:156:28 | target | semmle.label | target | +| stdlib.go:163:10:163:15 | star expression | semmle.label | star expression | +| stdlib.go:163:11:163:15 | selection of URL | semmle.label | selection of URL | +| stdlib.go:163:11:163:15 | selection of URL [postupdate] | semmle.label | selection of URL [postupdate] | +| stdlib.go:166:24:166:26 | url | semmle.label | url | +| stdlib.go:166:24:166:35 | call to String | semmle.label | call to String | +| stdlib.go:177:24:177:52 | ...+... | semmle.label | ...+... | +| stdlib.go:177:35:177:39 | selection of URL | semmle.label | selection of URL | +| stdlib.go:177:35:177:52 | call to RequestURI | semmle.label | call to RequestURI | +| stdlib.go:186:13:186:33 | call to FormValue | semmle.label | call to FormValue | +| stdlib.go:188:23:188:28 | target | semmle.label | target | +| stdlib.go:194:3:194:57 | ... := ...[0] | semmle.label | ... := ...[0] | +| stdlib.go:194:36:194:56 | call to FormValue | semmle.label | call to FormValue | +| stdlib.go:196:23:196:28 | implicit dereference | semmle.label | implicit dereference | +| stdlib.go:196:23:196:28 | target | semmle.label | target | +| stdlib.go:196:23:196:28 | target [postupdate] | semmle.label | target [postupdate] | +| stdlib.go:196:23:196:33 | selection of Path | semmle.label | selection of Path | +| stdlib.go:198:23:198:28 | target | semmle.label | target | +| stdlib.go:198:23:198:42 | call to EscapedPath | semmle.label | call to EscapedPath | +| stdlib.go:210:3:210:3 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| stdlib.go:210:3:210:3 | u [postupdate] | semmle.label | u [postupdate] | +| stdlib.go:210:3:210:3 | u [postupdate] [pointer] | semmle.label | u [postupdate] [pointer] | +| stdlib.go:210:12:210:30 | call to FormValue | semmle.label | call to FormValue | +| stdlib.go:212:23:212:23 | implicit dereference | semmle.label | implicit dereference | +| stdlib.go:212:23:212:23 | u | semmle.label | u | +| stdlib.go:212:23:212:23 | u [pointer] | semmle.label | u [pointer] | +| stdlib.go:212:23:212:23 | u [postupdate] | semmle.label | u [postupdate] | +| stdlib.go:212:23:212:28 | selection of Path | semmle.label | selection of Path | +| stdlib.go:214:23:214:23 | u | semmle.label | u | +| stdlib.go:214:23:214:32 | call to String | semmle.label | call to String | +| stdlib.go:257:3:257:3 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| stdlib.go:257:3:257:3 | u [postupdate] | semmle.label | u [postupdate] | +| stdlib.go:257:3:257:3 | u [postupdate] [pointer] | semmle.label | u [postupdate] [pointer] | +| stdlib.go:257:12:257:30 | call to FormValue | semmle.label | call to FormValue | +| stdlib.go:260:3:260:3 | implicit dereference | semmle.label | implicit dereference | +| stdlib.go:260:3:260:3 | u | semmle.label | u | +| stdlib.go:260:3:260:3 | u [pointer] | semmle.label | u [pointer] | +| stdlib.go:260:3:260:3 | u [postupdate] | semmle.label | u [postupdate] | +| stdlib.go:261:23:261:23 | u | semmle.label | u | +| stdlib.go:261:23:261:32 | call to String | semmle.label | call to String | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.go b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.go index 606b5d43ac0..752cf47decc 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.go +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.go @@ -7,6 +7,6 @@ import ( func serve() { http.HandleFunc("/redir", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - http.Redirect(w, r, r.Form.Get("target"), 302) + http.Redirect(w, r, r.Form.Get("target"), 302) // $ Alert }) } diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.qlref b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.qlref index 867dd766561..13add930f51 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.qlref +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/OpenUrlRedirect.qlref @@ -1,2 +1,4 @@ query: Security/CWE-601/OpenUrlRedirect.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/stdlib.go b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/stdlib.go index 0ccacd7d87e..57f2964288c 100644 --- a/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/stdlib.go +++ b/go/ql/test/query-tests/Security/CWE-601/OpenUrlRedirect/stdlib.go @@ -10,40 +10,44 @@ func serveStdlib() { http.HandleFunc("/ex", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source // BAD: a request parameter is incorporated without validation into a URL redirect - w.Header().Set("Location", target) + w.Header().Set("Location", target) // $ Alert w.WriteHeader(302) }) http.HandleFunc("/ex1", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source // Probably OK because the status is set to 500, but we catch it anyway - w.Header().Set("Location", target) + w.Header().Set("Location", target) // $ Alert w.WriteHeader(500) }) http.HandleFunc("/ex2", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + // Taking gratuitous copies of target so that sanitizing the use in + // the first request doesn't also sanitize other uses + target := r.Form.Get("target") // $ Source + target2 := target + target3 := target // GOOD: local redirects are unproblematic w.Header().Set("Location", "/local"+target) // BAD: this could be a non-local redirect - w.Header().Set("Location", "/"+target) + w.Header().Set("Location", "/"+target2) // $ Alert // GOOD: localhost redirects are unproblematic - w.Header().Set("Location", "//localhost/"+target) + w.Header().Set("Location", "//localhost/"+target3) w.WriteHeader(302) }) http.HandleFunc("/ex3", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source // BAD: using the utility function - http.Redirect(w, r, target, 301) + http.Redirect(w, r, target, 301) // $ Alert }) http.HandleFunc("/ex4", func(w http.ResponseWriter, r *http.Request) { @@ -61,10 +65,10 @@ func serveStdlib() { http.HandleFunc("/ex5", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source me := "me" // BAD: may be a global redirection - http.Redirect(w, r, target+"?from="+me, 301) + http.Redirect(w, r, target+"?from="+me, 301) // $ Alert }) http.HandleFunc("/ex6", func(w http.ResponseWriter, r *http.Request) { @@ -86,10 +90,10 @@ func serveStdlib() { http.HandleFunc("/ex7", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source target += "/index.html" // BAD - http.Redirect(w, r, target, 302) + http.Redirect(w, r, target, 302) // $ Alert }) http.HandleFunc("/ex7", func(w http.ResponseWriter, r *http.Request) { @@ -143,13 +147,13 @@ func serveStdlib() { http.HandleFunc("/ex9", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.Form.Get("target") + target := r.Form.Get("target") // $ Source // GOOD, but we catch this anyway: a check is done on the URL if !isValidRedirect(target) { target = "/" } - http.Redirect(w, r, target, 302) + http.Redirect(w, r, target, 302) // $ SPURIOUS: Alert }) http.HandleFunc("/ex8", func(w http.ResponseWriter, r *http.Request) { @@ -179,22 +183,38 @@ func serveStdlib() { http.HandleFunc("/ex9", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target := r.FormValue("target") + target := r.FormValue("target") // $ Source // BAD: a request parameter is incorporated without validation into a URL redirect - http.Redirect(w, r, target, 301) + http.Redirect(w, r, target, 301) // $ Alert }) http.HandleFunc("/ex10", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() - target, _ := url.ParseRequestURI(r.FormValue("target")) + target, _ := url.ParseRequestURI(r.FormValue("target")) // $ Source // BAD: Path could start with `//` - http.Redirect(w, r, target.Path, 301) + http.Redirect(w, r, target.Path, 301) // $ Alert // BAD: EscapedPath() does not help with that - http.Redirect(w, r, target.EscapedPath(), 301) + http.Redirect(w, r, target.EscapedPath(), 301) // $ Alert + target.Host = "example.com" + // BAD: Host field was overwritten but Path field remains untrusted + http.Redirect(w, r, target.Path, 301) // $ MISSING: Alert + // GOOD: untrusted Host field was overwritten + http.Redirect(w, r, target.String(), 301) }) http.HandleFunc("/ex11", func(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + + u, _ := url.Parse("http://bing.com/search?q=dotnet") + u.Host = r.FormValue("host") // $ Source + // GOOD: Path field is trusted + http.Redirect(w, r, u.Path, 301) // $ SPURIOUS: Alert + // BAD: Host field is untrusted + http.Redirect(w, r, u.String(), 301) // $ Alert + }) + + http.HandleFunc("/ex12", func(w http.ResponseWriter, r *http.Request) { // GOOD: all these fields and methods are disregarded for OpenRedirect attacks: buf := make([]byte, 100) r.Body.Read(buf) @@ -219,5 +239,27 @@ func serveStdlib() { http.Redirect(w, r, string(buf), 301) }) + http.HandleFunc("/ex13", func(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + + u, _ := url.Parse("http://example.com") + u.Host = r.FormValue("host") + // GOOD: Path field is assigned a value with a hostname-sanitizing substring, + // so subsequent uses of u are sanitized by PathAssignmentBarrier + u.Path = "/safe/" + r.FormValue("path") + http.Redirect(w, r, u.String(), 301) + }) + + http.HandleFunc("/ex14", func(w http.ResponseWriter, r *http.Request) { + r.ParseForm() + + u, _ := url.Parse("http://example.com") + u.Host = r.FormValue("host") // $ Source + // BAD: Path field is assigned but without a hostname-sanitizing substring, + // so the Host field remains untrusted + u.Path = r.FormValue("path") + http.Redirect(w, r, u.String(), 301) // $ Alert + }) + http.ListenAndServe(":80", nil) } diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailBad.go b/go/ql/test/query-tests/Security/CWE-640/EmailBad.go index aab8467b340..7ceed9e7a36 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailBad.go +++ b/go/ql/test/query-tests/Security/CWE-640/EmailBad.go @@ -6,8 +6,8 @@ import ( ) func mail(w http.ResponseWriter, r *http.Request) { - host := r.Header.Get("Host") + host := r.Header.Get("Host") // $ Source token := backend.getUserSecretResetToken(email) body := "Click to reset password: " + host + "/" + token - smtp.SendMail("test.test", nil, "from@from.com", nil, []byte(body)) + smtp.SendMail("test.test", nil, "from@from.com", nil, []byte(body)) // $ Alert } diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected index ac5985f110d..aa4b4914c18 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected +++ b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.expected @@ -1,66 +1,107 @@ #select | EmailBad.go:12:56:12:67 | type conversion | EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:12:56:12:67 | type conversion | Email content may contain $@. | EmailBad.go:9:10:9:17 | selection of Header | untrusted input | -| main.go:31:57:31:78 | type conversion | main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | Email content may contain $@. | main.go:29:21:29:31 | call to Referer | untrusted input | -| main.go:40:3:40:7 | definition of write | main.go:37:21:37:31 | call to Referer | main.go:40:3:40:7 | definition of write | Email content may contain $@. | main.go:37:21:37:31 | call to Referer | untrusted input | -| main.go:52:46:52:59 | untrustedInput | main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | Email content may contain $@. | main.go:46:21:46:31 | call to Referer | untrusted input | -| main.go:53:52:53:65 | untrustedInput | main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | Email content may contain $@. | main.go:46:21:46:31 | call to Referer | untrusted input | -| main.go:63:16:63:22 | content | main.go:58:21:58:31 | call to Referer | main.go:63:16:63:22 | content | Email content may contain $@. | main.go:58:21:58:31 | call to Referer | untrusted input | -| main.go:76:50:76:56 | content | main.go:68:21:68:31 | call to Referer | main.go:76:50:76:56 | content | Email content may contain $@. | main.go:68:21:68:31 | call to Referer | untrusted input | -| main.go:76:59:76:65 | content | main.go:68:21:68:31 | call to Referer | main.go:76:59:76:65 | content | Email content may contain $@. | main.go:68:21:68:31 | call to Referer | untrusted input | -| main.go:77:16:77:22 | content | main.go:68:21:68:31 | call to Referer | main.go:77:16:77:22 | content | Email content may contain $@. | main.go:68:21:68:31 | call to Referer | untrusted input | -| main.go:89:37:89:50 | untrustedInput | main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | Email content may contain $@. | main.go:82:21:82:31 | call to Referer | untrusted input | -| main.go:93:16:93:23 | content2 | main.go:82:21:82:31 | call to Referer | main.go:93:16:93:23 | content2 | Email content may contain $@. | main.go:82:21:82:31 | call to Referer | untrusted input | +| main.go:33:57:33:78 | type conversion | main.go:31:21:31:31 | call to Referer | main.go:33:57:33:78 | type conversion | Email content may contain $@. | main.go:31:21:31:31 | call to Referer | untrusted input | +| main.go:43:18:43:22 | write [postupdate] | main.go:39:21:39:31 | call to Referer | main.go:43:18:43:22 | write [postupdate] | Email content may contain $@. | main.go:39:21:39:31 | call to Referer | untrusted input | +| main.go:54:46:54:59 | untrustedInput | main.go:48:21:48:31 | call to Referer | main.go:54:46:54:59 | untrustedInput | Email content may contain $@. | main.go:48:21:48:31 | call to Referer | untrusted input | +| main.go:55:52:55:65 | untrustedInput | main.go:48:21:48:31 | call to Referer | main.go:55:52:55:65 | untrustedInput | Email content may contain $@. | main.go:48:21:48:31 | call to Referer | untrusted input | +| main.go:65:16:65:22 | content | main.go:60:21:60:31 | call to Referer | main.go:65:16:65:22 | content | Email content may contain $@. | main.go:60:21:60:31 | call to Referer | untrusted input | +| main.go:78:50:78:56 | content | main.go:70:21:70:31 | call to Referer | main.go:78:50:78:56 | content | Email content may contain $@. | main.go:70:21:70:31 | call to Referer | untrusted input | +| main.go:78:59:78:65 | content | main.go:70:21:70:31 | call to Referer | main.go:78:59:78:65 | content | Email content may contain $@. | main.go:70:21:70:31 | call to Referer | untrusted input | +| main.go:79:16:79:22 | content | main.go:70:21:70:31 | call to Referer | main.go:79:16:79:22 | content | Email content may contain $@. | main.go:70:21:70:31 | call to Referer | untrusted input | +| main.go:91:37:91:50 | untrustedInput | main.go:84:21:84:31 | call to Referer | main.go:91:37:91:50 | untrustedInput | Email content may contain $@. | main.go:84:21:84:31 | call to Referer | untrusted input | +| main.go:95:16:95:23 | content2 | main.go:84:21:84:31 | call to Referer | main.go:95:16:95:23 | content2 | Email content may contain $@. | main.go:84:21:84:31 | call to Referer | untrusted input | +| main.go:124:57:124:65 | call to Bytes | main.go:113:21:113:31 | call to Referer | main.go:124:57:124:65 | call to Bytes | Email content may contain $@. | main.go:113:21:113:31 | call to Referer | untrusted input | +| main.go:141:57:141:65 | call to Bytes | main.go:129:21:129:31 | call to Referer | main.go:141:57:141:65 | call to Bytes | Email content may contain $@. | main.go:129:21:129:31 | call to Referer | untrusted input | +| main.go:151:3:151:3 | w [postupdate] | main.go:146:22:146:32 | call to Referer | main.go:151:3:151:3 | w [postupdate] | Email content may contain $@. | main.go:146:22:146:32 | call to Referer | untrusted input | +| main.go:152:3:152:3 | w [postupdate] | main.go:147:22:147:32 | call to Referer | main.go:152:3:152:3 | w [postupdate] | Email content may contain $@. | main.go:147:22:147:32 | call to Referer | untrusted input | edges -| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | Src:MaD:1 MaD:5 | +| EmailBad.go:9:10:9:17 | selection of Header | EmailBad.go:9:10:9:29 | call to Get | provenance | Src:MaD:1 MaD:8 | | EmailBad.go:9:10:9:29 | call to Get | EmailBad.go:12:56:12:67 | type conversion | provenance | | -| main.go:29:21:29:31 | call to Referer | main.go:31:57:31:78 | type conversion | provenance | Src:MaD:2 | -| main.go:37:21:37:31 | call to Referer | main.go:41:25:41:38 | untrustedInput | provenance | Src:MaD:2 | -| main.go:41:25:41:38 | untrustedInput | main.go:40:3:40:7 | definition of write | provenance | MaD:4 | -| main.go:46:21:46:31 | call to Referer | main.go:52:46:52:59 | untrustedInput | provenance | Src:MaD:2 | -| main.go:46:21:46:31 | call to Referer | main.go:53:52:53:65 | untrustedInput | provenance | Src:MaD:2 | -| main.go:58:21:58:31 | call to Referer | main.go:60:47:60:60 | untrustedInput | provenance | Src:MaD:2 | -| main.go:60:14:60:61 | call to NewContent | main.go:63:16:63:22 | content | provenance | | -| main.go:60:47:60:60 | untrustedInput | main.go:60:14:60:61 | call to NewContent | provenance | MaD:3 | -| main.go:68:21:68:31 | call to Referer | main.go:74:47:74:60 | untrustedInput | provenance | Src:MaD:2 | -| main.go:74:14:74:61 | call to NewContent | main.go:76:50:76:56 | content | provenance | | -| main.go:74:14:74:61 | call to NewContent | main.go:76:59:76:65 | content | provenance | | -| main.go:74:14:74:61 | call to NewContent | main.go:77:16:77:22 | content | provenance | | -| main.go:74:47:74:60 | untrustedInput | main.go:74:14:74:61 | call to NewContent | provenance | MaD:3 | -| main.go:82:21:82:31 | call to Referer | main.go:89:37:89:50 | untrustedInput | provenance | Src:MaD:2 | -| main.go:82:21:82:31 | call to Referer | main.go:91:48:91:61 | untrustedInput | provenance | Src:MaD:2 | -| main.go:91:15:91:62 | call to NewContent | main.go:93:16:93:23 | content2 | provenance | | -| main.go:91:48:91:61 | untrustedInput | main.go:91:15:91:62 | call to NewContent | provenance | MaD:3 | +| main.go:31:21:31:31 | call to Referer | main.go:33:57:33:78 | type conversion | provenance | Src:MaD:2 | +| main.go:39:21:39:31 | call to Referer | main.go:43:25:43:38 | untrustedInput | provenance | Src:MaD:2 | +| main.go:43:25:43:38 | untrustedInput | main.go:43:18:43:22 | write [postupdate] | provenance | MaD:5 | +| main.go:48:21:48:31 | call to Referer | main.go:54:46:54:59 | untrustedInput | provenance | Src:MaD:2 | +| main.go:48:21:48:31 | call to Referer | main.go:55:52:55:65 | untrustedInput | provenance | Src:MaD:2 | +| main.go:60:21:60:31 | call to Referer | main.go:62:47:62:60 | untrustedInput | provenance | Src:MaD:2 | +| main.go:62:14:62:61 | call to NewContent | main.go:65:16:65:22 | content | provenance | | +| main.go:62:47:62:60 | untrustedInput | main.go:62:14:62:61 | call to NewContent | provenance | MaD:4 | +| main.go:70:21:70:31 | call to Referer | main.go:76:47:76:60 | untrustedInput | provenance | Src:MaD:2 | +| main.go:76:14:76:61 | call to NewContent | main.go:78:50:78:56 | content | provenance | | +| main.go:76:14:76:61 | call to NewContent | main.go:78:59:78:65 | content | provenance | | +| main.go:76:14:76:61 | call to NewContent | main.go:79:16:79:22 | content | provenance | | +| main.go:76:47:76:60 | untrustedInput | main.go:76:14:76:61 | call to NewContent | provenance | MaD:4 | +| main.go:84:21:84:31 | call to Referer | main.go:91:37:91:50 | untrustedInput | provenance | Src:MaD:2 | +| main.go:84:21:84:31 | call to Referer | main.go:93:48:93:61 | untrustedInput | provenance | Src:MaD:2 | +| main.go:93:15:93:62 | call to NewContent | main.go:95:16:95:23 | content2 | provenance | | +| main.go:93:48:93:61 | untrustedInput | main.go:93:15:93:62 | call to NewContent | provenance | MaD:4 | +| main.go:113:21:113:31 | call to Referer | main.go:119:28:119:41 | untrustedInput | provenance | Src:MaD:2 | +| main.go:116:29:116:30 | &... [postupdate] | main.go:124:57:124:57 | b | provenance | | +| main.go:119:3:119:4 | mw [postupdate] | main.go:116:29:116:30 | &... [postupdate] | provenance | FunctionModel | +| main.go:119:28:119:41 | untrustedInput | main.go:119:3:119:4 | mw [postupdate] | provenance | MaD:7 | +| main.go:124:57:124:57 | b | main.go:124:57:124:65 | call to Bytes | provenance | MaD:3 | +| main.go:129:21:129:31 | call to Referer | main.go:136:30:136:43 | untrustedInput | provenance | Src:MaD:2 | +| main.go:132:29:132:30 | &... [postupdate] | main.go:141:57:141:57 | b | provenance | | +| main.go:135:20:135:21 | mw [postupdate] | main.go:132:29:132:30 | &... [postupdate] | provenance | FunctionModel | +| main.go:136:18:136:27 | formWriter [postupdate] | main.go:135:20:135:21 | mw [postupdate] | provenance | FunctionModel | +| main.go:136:30:136:43 | untrustedInput | main.go:136:18:136:27 | formWriter [postupdate] | provenance | MaD:5 | +| main.go:141:57:141:57 | b | main.go:141:57:141:65 | call to Bytes | provenance | MaD:3 | +| main.go:146:22:146:32 | call to Referer | main.go:151:11:151:33 | type conversion | provenance | Src:MaD:2 | +| main.go:147:22:147:32 | call to Referer | main.go:152:11:152:33 | type conversion | provenance | Src:MaD:2 | +| main.go:151:11:151:33 | type conversion | main.go:151:3:151:3 | w [postupdate] | provenance | MaD:6 | +| main.go:152:11:152:33 | type conversion | main.go:152:3:152:3 | w [postupdate] | provenance | MaD:6 | models | 1 | Source: net/http; Request; true; Header; ; ; ; remote; manual | | 2 | Source: net/http; Request; true; Referer; ; ; ReturnValue; remote; manual | -| 3 | Summary: github.com/sendgrid/sendgrid-go/helpers/mail; ; false; NewContent; ; ; Argument[1]; ReturnValue; taint; manual | -| 4 | Summary: io; ; false; WriteString; ; ; Argument[1]; Argument[0]; taint; manual | -| 5 | Summary: net/http; Header; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 3 | Summary: bytes; Buffer; true; Bytes; ; ; Argument[receiver]; ReturnValue; taint; manual | +| 4 | Summary: github.com/sendgrid/sendgrid-go/helpers/mail; ; false; NewContent; ; ; Argument[1]; ReturnValue; taint; manual | +| 5 | Summary: io; ; false; WriteString; ; ; Argument[1]; Argument[0]; taint; manual | +| 6 | Summary: io; Writer; true; Write; ; ; Argument[0]; Argument[receiver]; taint; manual | +| 7 | Summary: mime/multipart; Writer; true; WriteField; ; ; Argument[0..1]; Argument[receiver]; taint; manual | +| 8 | Summary: net/http; Header; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | nodes | EmailBad.go:9:10:9:17 | selection of Header | semmle.label | selection of Header | | EmailBad.go:9:10:9:29 | call to Get | semmle.label | call to Get | | EmailBad.go:12:56:12:67 | type conversion | semmle.label | type conversion | -| main.go:29:21:29:31 | call to Referer | semmle.label | call to Referer | -| main.go:31:57:31:78 | type conversion | semmle.label | type conversion | -| main.go:37:21:37:31 | call to Referer | semmle.label | call to Referer | -| main.go:40:3:40:7 | definition of write | semmle.label | definition of write | -| main.go:41:25:41:38 | untrustedInput | semmle.label | untrustedInput | -| main.go:46:21:46:31 | call to Referer | semmle.label | call to Referer | -| main.go:52:46:52:59 | untrustedInput | semmle.label | untrustedInput | -| main.go:53:52:53:65 | untrustedInput | semmle.label | untrustedInput | -| main.go:58:21:58:31 | call to Referer | semmle.label | call to Referer | -| main.go:60:14:60:61 | call to NewContent | semmle.label | call to NewContent | -| main.go:60:47:60:60 | untrustedInput | semmle.label | untrustedInput | -| main.go:63:16:63:22 | content | semmle.label | content | -| main.go:68:21:68:31 | call to Referer | semmle.label | call to Referer | -| main.go:74:14:74:61 | call to NewContent | semmle.label | call to NewContent | -| main.go:74:47:74:60 | untrustedInput | semmle.label | untrustedInput | -| main.go:76:50:76:56 | content | semmle.label | content | -| main.go:76:59:76:65 | content | semmle.label | content | -| main.go:77:16:77:22 | content | semmle.label | content | -| main.go:82:21:82:31 | call to Referer | semmle.label | call to Referer | -| main.go:89:37:89:50 | untrustedInput | semmle.label | untrustedInput | -| main.go:91:15:91:62 | call to NewContent | semmle.label | call to NewContent | -| main.go:91:48:91:61 | untrustedInput | semmle.label | untrustedInput | -| main.go:93:16:93:23 | content2 | semmle.label | content2 | +| main.go:31:21:31:31 | call to Referer | semmle.label | call to Referer | +| main.go:33:57:33:78 | type conversion | semmle.label | type conversion | +| main.go:39:21:39:31 | call to Referer | semmle.label | call to Referer | +| main.go:43:18:43:22 | write [postupdate] | semmle.label | write [postupdate] | +| main.go:43:25:43:38 | untrustedInput | semmle.label | untrustedInput | +| main.go:48:21:48:31 | call to Referer | semmle.label | call to Referer | +| main.go:54:46:54:59 | untrustedInput | semmle.label | untrustedInput | +| main.go:55:52:55:65 | untrustedInput | semmle.label | untrustedInput | +| main.go:60:21:60:31 | call to Referer | semmle.label | call to Referer | +| main.go:62:14:62:61 | call to NewContent | semmle.label | call to NewContent | +| main.go:62:47:62:60 | untrustedInput | semmle.label | untrustedInput | +| main.go:65:16:65:22 | content | semmle.label | content | +| main.go:70:21:70:31 | call to Referer | semmle.label | call to Referer | +| main.go:76:14:76:61 | call to NewContent | semmle.label | call to NewContent | +| main.go:76:47:76:60 | untrustedInput | semmle.label | untrustedInput | +| main.go:78:50:78:56 | content | semmle.label | content | +| main.go:78:59:78:65 | content | semmle.label | content | +| main.go:79:16:79:22 | content | semmle.label | content | +| main.go:84:21:84:31 | call to Referer | semmle.label | call to Referer | +| main.go:91:37:91:50 | untrustedInput | semmle.label | untrustedInput | +| main.go:93:15:93:62 | call to NewContent | semmle.label | call to NewContent | +| main.go:93:48:93:61 | untrustedInput | semmle.label | untrustedInput | +| main.go:95:16:95:23 | content2 | semmle.label | content2 | +| main.go:113:21:113:31 | call to Referer | semmle.label | call to Referer | +| main.go:116:29:116:30 | &... [postupdate] | semmle.label | &... [postupdate] | +| main.go:119:3:119:4 | mw [postupdate] | semmle.label | mw [postupdate] | +| main.go:119:28:119:41 | untrustedInput | semmle.label | untrustedInput | +| main.go:124:57:124:57 | b | semmle.label | b | +| main.go:124:57:124:65 | call to Bytes | semmle.label | call to Bytes | +| main.go:129:21:129:31 | call to Referer | semmle.label | call to Referer | +| main.go:132:29:132:30 | &... [postupdate] | semmle.label | &... [postupdate] | +| main.go:135:20:135:21 | mw [postupdate] | semmle.label | mw [postupdate] | +| main.go:136:18:136:27 | formWriter [postupdate] | semmle.label | formWriter [postupdate] | +| main.go:136:30:136:43 | untrustedInput | semmle.label | untrustedInput | +| main.go:141:57:141:57 | b | semmle.label | b | +| main.go:141:57:141:65 | call to Bytes | semmle.label | call to Bytes | +| main.go:146:22:146:32 | call to Referer | semmle.label | call to Referer | +| main.go:147:22:147:32 | call to Referer | semmle.label | call to Referer | +| main.go:151:3:151:3 | w [postupdate] | semmle.label | w [postupdate] | +| main.go:151:11:151:33 | type conversion | semmle.label | type conversion | +| main.go:152:3:152:3 | w [postupdate] | semmle.label | w [postupdate] | +| main.go:152:11:152:33 | type conversion | semmle.label | type conversion | subpaths diff --git a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.qlref b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.qlref index c3b6cac3113..67240cd9df4 100644 --- a/go/ql/test/query-tests/Security/CWE-640/EmailInjection.qlref +++ b/go/ql/test/query-tests/Security/CWE-640/EmailInjection.qlref @@ -1,2 +1,4 @@ query: Security/CWE-640/EmailInjection.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-640/main.go b/go/ql/test/query-tests/Security/CWE-640/main.go index c6685475a8d..73ff8f6b1fb 100644 --- a/go/ql/test/query-tests/Security/CWE-640/main.go +++ b/go/ql/test/query-tests/Security/CWE-640/main.go @@ -3,11 +3,13 @@ package main //go:generate depstubber -vendor github.com/sendgrid/sendgrid-go/helpers/mail "" NewEmail,NewSingleEmail,NewContent,NewV3Mail,NewV3MailInit import ( + "bytes" "crypto/hmac" "crypto/sha256" "encoding/base64" "io" "log" + "mime/multipart" "net/http" "net/smtp" @@ -26,46 +28,46 @@ func main() { // Not OK http.HandleFunc("/ex0", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source - smtp.SendMail("test.test", nil, "from@from.com", nil, []byte(untrustedInput)) + smtp.SendMail("test.test", nil, "from@from.com", nil, []byte(untrustedInput)) // $ Alert }) // Not OK http.HandleFunc("/ex1", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source s, _ := smtp.Dial("test.test") write, _ := s.Data() - io.WriteString(write, untrustedInput) + io.WriteString(write, untrustedInput) // $ Alert }) // Not OK http.HandleFunc("/ex2", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source from := sendgrid.NewEmail("from", "from@from.com") to := sendgrid.NewEmail("to", "to@to.com") subject := "test" body := "body" - sendgrid.NewSingleEmail(from, subject, to, untrustedInput, body) - sendgrid.NewSingleEmail(from, subject, to, body, untrustedInput) + sendgrid.NewSingleEmail(from, subject, to, untrustedInput, body) // $ Alert + sendgrid.NewSingleEmail(from, subject, to, body, untrustedInput) // $ Alert }) // Not OK http.HandleFunc("/ex3", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source content := sendgrid.NewContent("text/html", untrustedInput) v := sendgrid.NewV3Mail() - v.AddContent(content) + v.AddContent(content) // $ Alert }) // Not OK http.HandleFunc("/ex4", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source from := sendgrid.NewEmail("from", "from@from.com") to := sendgrid.NewEmail("to", "to@to.com") @@ -73,24 +75,24 @@ func main() { content := sendgrid.NewContent("text/html", untrustedInput) - v := sendgrid.NewV3MailInit(from, subject, to, content, content) - v.AddContent(content) + v := sendgrid.NewV3MailInit(from, subject, to, content, content) // $ Alert + v.AddContent(content) // $ Alert }) // Not OK http.HandleFunc("/ex5", func(w http.ResponseWriter, r *http.Request) { - untrustedInput := r.Referer() + untrustedInput := r.Referer() // $ Source from := sendgrid.NewEmail("from", "from@from.com") to := sendgrid.NewEmail("to", "to@to.com") content := sendgrid.NewContent("text/html", "test") - v := sendgrid.NewV3MailInit(from, untrustedInput, to, content, content) + v := sendgrid.NewV3MailInit(from, untrustedInput, to, content, content) // $ Alert content2 := sendgrid.NewContent("text/html", untrustedInput) - v.AddContent(content2) + v.AddContent(content2) // $ Alert }) // OK @@ -106,6 +108,52 @@ func main() { smtp.SendMail("test.test", nil, "from@from.com", nil, []byte(signature)) }) + // Not OK - mime/multipart.New.Writer test + http.HandleFunc("/multipart1", func(w http.ResponseWriter, r *http.Request) { + untrustedInput := r.Referer() // $ Source + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + + // Add user-controlled data directly to the multipart writer + mw.WriteField("message", untrustedInput) // Injection point + + mw.Close() + + // Send the potentially malicious email content + smtp.SendMail("test.test", nil, "from@from.com", nil, b.Bytes()) // $ Alert + }) + + // Not OK - alternative multipart test + http.HandleFunc("/multipart2", func(w http.ResponseWriter, r *http.Request) { + untrustedInput := r.Referer() // $ Source + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + + // Create form file with untrusted content + formWriter, _ := mw.CreateFormFile("attachment", "message.txt") + io.WriteString(formWriter, untrustedInput) // Injection point + + mw.Close() + + // Send email with user-controlled form file content + smtp.SendMail("test.test", nil, "from@from.com", nil, b.Bytes()) // $ Alert + }) + + // Not OK - check only one result when sink is Client.Data() from net/smtp + { + untrustedInput1 := r.Referer() // $ Source=s1 + untrustedInput2 := r.Referer() // $ Source=s2 + c, _ := smtp.Dial("mail.example.com:smtp") + w, _ := c.Data() + w.Write([]byte("safe text")) + w.Write([]byte(untrustedInput1)) // $ Alert=s1 + w.Write([]byte(untrustedInput2)) // $ Alert=s2 + w.Close() + c.Quit() + } + log.Println(http.ListenAndServe(":80", nil)) } diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index 696d8dd700b..15b0e179e98 100644 --- a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -1,18 +1,18 @@ #select | RequestForgery.go:11:15:11:66 | call to Get | RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | The $@ of this request depends on a $@. | RequestForgery.go:11:24:11:65 | ...+... | URL | RequestForgery.go:8:12:8:34 | call to FormValue | user-provided value | -| tst.go:14:2:14:18 | call to Get | tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | The $@ of this request depends on a $@. | tst.go:14:11:14:17 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:16:2:16:19 | call to Head | tst.go:10:13:10:35 | call to FormValue | tst.go:16:12:16:18 | tainted | The $@ of this request depends on a $@. | tst.go:16:12:16:18 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:18:2:18:38 | call to Post | tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | The $@ of this request depends on a $@. | tst.go:18:12:18:18 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:20:2:20:28 | call to PostForm | tst.go:10:13:10:35 | call to FormValue | tst.go:20:16:20:22 | tainted | The $@ of this request depends on a $@. | tst.go:20:16:20:22 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:24:2:24:15 | call to Do | tst.go:10:13:10:35 | call to FormValue | tst.go:23:35:23:41 | tainted | The $@ of this request depends on a $@. | tst.go:23:35:23:41 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:27:2:27:15 | call to Do | tst.go:10:13:10:35 | call to FormValue | tst.go:26:68:26:74 | tainted | The $@ of this request depends on a $@. | tst.go:26:68:26:74 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:29:2:29:20 | call to Get | tst.go:10:13:10:35 | call to FormValue | tst.go:29:13:29:19 | tainted | The $@ of this request depends on a $@. | tst.go:29:13:29:19 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:30:2:30:21 | call to Head | tst.go:10:13:10:35 | call to FormValue | tst.go:30:14:30:20 | tainted | The $@ of this request depends on a $@. | tst.go:30:14:30:20 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:31:2:31:40 | call to Post | tst.go:10:13:10:35 | call to FormValue | tst.go:31:14:31:20 | tainted | The $@ of this request depends on a $@. | tst.go:31:14:31:20 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:32:2:32:30 | call to PostForm | tst.go:10:13:10:35 | call to FormValue | tst.go:32:18:32:24 | tainted | The $@ of this request depends on a $@. | tst.go:32:18:32:24 | tainted | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:34:2:34:30 | call to Get | tst.go:10:13:10:35 | call to FormValue | tst.go:34:11:34:29 | ...+... | The $@ of this request depends on a $@. | tst.go:34:11:34:29 | ...+... | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:36:2:36:41 | call to Get | tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:40 | ...+... | The $@ of this request depends on a $@. | tst.go:36:11:36:40 | ...+... | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | -| tst.go:44:2:44:21 | call to Get | tst.go:10:13:10:35 | call to FormValue | tst.go:44:11:44:20 | call to String | The $@ of this request depends on a $@. | tst.go:44:11:44:20 | call to String | URL | tst.go:10:13:10:35 | call to FormValue | user-provided value | +| tst.go:19:2:19:18 | call to Get | tst.go:11:13:11:35 | call to FormValue | tst.go:19:11:19:17 | tainted | The $@ of this request depends on a $@. | tst.go:19:11:19:17 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:21:2:21:19 | call to Head | tst.go:11:13:11:35 | call to FormValue | tst.go:21:12:21:18 | tainted | The $@ of this request depends on a $@. | tst.go:21:12:21:18 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:23:2:23:38 | call to Post | tst.go:11:13:11:35 | call to FormValue | tst.go:23:12:23:18 | tainted | The $@ of this request depends on a $@. | tst.go:23:12:23:18 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:25:2:25:28 | call to PostForm | tst.go:11:13:11:35 | call to FormValue | tst.go:25:16:25:22 | tainted | The $@ of this request depends on a $@. | tst.go:25:16:25:22 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:29:2:29:15 | call to Do | tst.go:11:13:11:35 | call to FormValue | tst.go:28:35:28:41 | tainted | The $@ of this request depends on a $@. | tst.go:28:35:28:41 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:32:2:32:15 | call to Do | tst.go:11:13:11:35 | call to FormValue | tst.go:31:68:31:74 | tainted | The $@ of this request depends on a $@. | tst.go:31:68:31:74 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:34:2:34:20 | call to Get | tst.go:11:13:11:35 | call to FormValue | tst.go:34:13:34:19 | tainted | The $@ of this request depends on a $@. | tst.go:34:13:34:19 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:35:2:35:21 | call to Head | tst.go:11:13:11:35 | call to FormValue | tst.go:35:14:35:20 | tainted | The $@ of this request depends on a $@. | tst.go:35:14:35:20 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:36:2:36:40 | call to Post | tst.go:11:13:11:35 | call to FormValue | tst.go:36:14:36:20 | tainted | The $@ of this request depends on a $@. | tst.go:36:14:36:20 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:37:2:37:30 | call to PostForm | tst.go:11:13:11:35 | call to FormValue | tst.go:37:18:37:24 | tainted | The $@ of this request depends on a $@. | tst.go:37:18:37:24 | tainted | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:39:2:39:30 | call to Get | tst.go:11:13:11:35 | call to FormValue | tst.go:39:11:39:29 | ...+... | The $@ of this request depends on a $@. | tst.go:39:11:39:29 | ...+... | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:41:2:41:41 | call to Get | tst.go:11:13:11:35 | call to FormValue | tst.go:41:11:41:40 | ...+... | The $@ of this request depends on a $@. | tst.go:41:11:41:40 | ...+... | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | +| tst.go:49:2:49:21 | call to Get | tst.go:11:13:11:35 | call to FormValue | tst.go:49:11:49:20 | call to String | The $@ of this request depends on a $@. | tst.go:49:11:49:20 | call to String | URL | tst.go:11:13:11:35 | call to FormValue | user-provided value | | websocket.go:65:12:65:53 | call to Dial | websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | The $@ of this request depends on a $@. | websocket.go:65:27:65:40 | untrustedInput | WebSocket URL | websocket.go:60:21:60:31 | call to Referer | user-provided value | | websocket.go:79:13:79:40 | call to DialConfig | websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | The $@ of this request depends on a $@. | websocket.go:78:36:78:49 | untrustedInput | WebSocket URL | websocket.go:74:21:74:31 | call to Referer | user-provided value | | websocket.go:91:3:91:50 | call to Dial | websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | The $@ of this request depends on a $@. | websocket.go:91:31:91:44 | untrustedInput | WebSocket URL | websocket.go:88:21:88:31 | call to Referer | user-provided value | @@ -24,29 +24,24 @@ | websocket.go:204:7:204:29 | call to New | websocket.go:202:21:202:31 | call to Referer | websocket.go:204:15:204:28 | untrustedInput | The $@ of this request depends on a $@. | websocket.go:204:15:204:28 | untrustedInput | WebSocket URL | websocket.go:202:21:202:31 | call to Referer | user-provided value | edges | RequestForgery.go:8:12:8:34 | call to FormValue | RequestForgery.go:11:24:11:65 | ...+... | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:14:11:14:17 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:16:12:16:18 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:18:12:18:18 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:20:16:20:22 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:23:35:23:41 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:26:68:26:74 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:29:13:29:19 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:30:14:30:20 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:31:14:31:20 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:32:18:32:24 | tainted | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:34:11:34:29 | ...+... | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:36:11:36:40 | ...+... | provenance | Src:MaD:1 | -| tst.go:10:13:10:35 | call to FormValue | tst.go:43:11:43:17 | tainted | provenance | Src:MaD:1 | -| tst.go:42:2:42:2 | definition of u [pointer] | tst.go:43:2:43:2 | u [pointer] | provenance | | -| tst.go:43:2:43:2 | implicit dereference | tst.go:42:2:42:2 | definition of u [pointer] | provenance | | -| tst.go:43:2:43:2 | implicit dereference | tst.go:43:2:43:2 | u | provenance | | -| tst.go:43:2:43:2 | implicit dereference | tst.go:44:11:44:11 | u | provenance | | -| tst.go:43:2:43:2 | u | tst.go:43:2:43:2 | implicit dereference | provenance | | -| tst.go:43:2:43:2 | u | tst.go:44:11:44:11 | u | provenance | | -| tst.go:43:2:43:2 | u [pointer] | tst.go:43:2:43:2 | implicit dereference | provenance | | -| tst.go:43:11:43:17 | tainted | tst.go:43:2:43:2 | u | provenance | Config | -| tst.go:43:11:43:17 | tainted | tst.go:44:11:44:11 | u | provenance | Config | -| tst.go:44:11:44:11 | u | tst.go:44:11:44:20 | call to String | provenance | MaD:3 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:19:11:19:17 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:21:12:21:18 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:23:12:23:18 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:25:16:25:22 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:28:35:28:41 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:31:68:31:74 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:34:13:34:19 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:35:14:35:20 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:36:14:36:20 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:37:18:37:24 | tainted | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:39:11:39:29 | ...+... | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:41:11:41:40 | ...+... | provenance | Src:MaD:1 | +| tst.go:11:13:11:35 | call to FormValue | tst.go:48:11:48:18 | tainted2 | provenance | Src:MaD:1 | +| tst.go:48:2:48:2 | implicit dereference [postupdate] | tst.go:48:2:48:2 | u [postupdate] | provenance | | +| tst.go:48:2:48:2 | u [postupdate] | tst.go:49:11:49:11 | u | provenance | | +| tst.go:48:11:48:18 | tainted2 | tst.go:48:2:48:2 | implicit dereference [postupdate] | provenance | Config | +| tst.go:48:11:48:18 | tainted2 | tst.go:48:2:48:2 | u [postupdate] | provenance | Config | +| tst.go:49:11:49:11 | u | tst.go:49:11:49:20 | call to String | provenance | MaD:3 | | websocket.go:60:21:60:31 | call to Referer | websocket.go:65:27:65:40 | untrustedInput | provenance | Src:MaD:2 | | websocket.go:74:21:74:31 | call to Referer | websocket.go:78:36:78:49 | untrustedInput | provenance | Src:MaD:2 | | websocket.go:88:21:88:31 | call to Referer | websocket.go:91:31:91:44 | untrustedInput | provenance | Src:MaD:2 | @@ -63,26 +58,24 @@ models nodes | RequestForgery.go:8:12:8:34 | call to FormValue | semmle.label | call to FormValue | | RequestForgery.go:11:24:11:65 | ...+... | semmle.label | ...+... | -| tst.go:10:13:10:35 | call to FormValue | semmle.label | call to FormValue | -| tst.go:14:11:14:17 | tainted | semmle.label | tainted | -| tst.go:16:12:16:18 | tainted | semmle.label | tainted | -| tst.go:18:12:18:18 | tainted | semmle.label | tainted | -| tst.go:20:16:20:22 | tainted | semmle.label | tainted | -| tst.go:23:35:23:41 | tainted | semmle.label | tainted | -| tst.go:26:68:26:74 | tainted | semmle.label | tainted | -| tst.go:29:13:29:19 | tainted | semmle.label | tainted | -| tst.go:30:14:30:20 | tainted | semmle.label | tainted | -| tst.go:31:14:31:20 | tainted | semmle.label | tainted | -| tst.go:32:18:32:24 | tainted | semmle.label | tainted | -| tst.go:34:11:34:29 | ...+... | semmle.label | ...+... | -| tst.go:36:11:36:40 | ...+... | semmle.label | ...+... | -| tst.go:42:2:42:2 | definition of u [pointer] | semmle.label | definition of u [pointer] | -| tst.go:43:2:43:2 | implicit dereference | semmle.label | implicit dereference | -| tst.go:43:2:43:2 | u | semmle.label | u | -| tst.go:43:2:43:2 | u [pointer] | semmle.label | u [pointer] | -| tst.go:43:11:43:17 | tainted | semmle.label | tainted | -| tst.go:44:11:44:11 | u | semmle.label | u | -| tst.go:44:11:44:20 | call to String | semmle.label | call to String | +| tst.go:11:13:11:35 | call to FormValue | semmle.label | call to FormValue | +| tst.go:19:11:19:17 | tainted | semmle.label | tainted | +| tst.go:21:12:21:18 | tainted | semmle.label | tainted | +| tst.go:23:12:23:18 | tainted | semmle.label | tainted | +| tst.go:25:16:25:22 | tainted | semmle.label | tainted | +| tst.go:28:35:28:41 | tainted | semmle.label | tainted | +| tst.go:31:68:31:74 | tainted | semmle.label | tainted | +| tst.go:34:13:34:19 | tainted | semmle.label | tainted | +| tst.go:35:14:35:20 | tainted | semmle.label | tainted | +| tst.go:36:14:36:20 | tainted | semmle.label | tainted | +| tst.go:37:18:37:24 | tainted | semmle.label | tainted | +| tst.go:39:11:39:29 | ...+... | semmle.label | ...+... | +| tst.go:41:11:41:40 | ...+... | semmle.label | ...+... | +| tst.go:48:2:48:2 | implicit dereference [postupdate] | semmle.label | implicit dereference [postupdate] | +| tst.go:48:2:48:2 | u [postupdate] | semmle.label | u [postupdate] | +| tst.go:48:11:48:18 | tainted2 | semmle.label | tainted2 | +| tst.go:49:11:49:11 | u | semmle.label | u | +| tst.go:49:11:49:20 | call to String | semmle.label | call to String | | websocket.go:60:21:60:31 | call to Referer | semmle.label | call to Referer | | websocket.go:65:27:65:40 | untrustedInput | semmle.label | untrustedInput | | websocket.go:74:21:74:31 | call to Referer | semmle.label | call to Referer | diff --git a/go/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml new file mode 100644 index 00000000000..1fc92a07144 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-918/RequestForgery.ext.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/go-all + extensible: sourceModel + data: + - ["main", "", False, "intSource", "", "", "ReturnValue", "remote", "manual"] diff --git a/go/ql/test/query-tests/Security/CWE-918/tst.go b/go/ql/test/query-tests/Security/CWE-918/tst.go index 44a172ddad0..e237f5f30e7 100644 --- a/go/ql/test/query-tests/Security/CWE-918/tst.go +++ b/go/ql/test/query-tests/Security/CWE-918/tst.go @@ -2,12 +2,17 @@ package main import ( "context" + "fmt" "net/http" "net/url" ) func handler2(w http.ResponseWriter, req *http.Request) { tainted := req.FormValue("target") // $ Source + // Gratuitous copy due to use-use flow propagating sanitization when + // used as a suffix in the last two OK cases forwards onto the final + // Not OK case. + tainted2 := tainted http.Get("example.com") // OK @@ -40,10 +45,18 @@ func handler2(w http.ResponseWriter, req *http.Request) { http.Get("http://example.com/?" + tainted) // OK u, _ := url.Parse("http://example.com/relative-path") - u.Host = tainted + u.Host = tainted2 http.Get(u.String()) // $ Alert + + // Simple types are considered sanitized. + url := fmt.Sprintf("%s/%d", "some-url", intSource()) + http.Get("http://" + url) } func main() { } + +func intSource() int64 { + return 0 +} diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index 7ec0b4c5f0f..a936bcdeddf 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -76,7 +76,7 @@ jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,,2, jakarta.faces.context,4,7,,,,,,,,,,,,,,2,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,7,, jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23 jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,1, -jakarta.servlet,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,, +jakarta.servlet,2,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,19,, jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55 @@ -85,7 +85,7 @@ java.applet,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11, java.awt,1,,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,3 java.beans,1,,177,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,82,95 java.io,66,1,225,,,,,,,,,22,,,,,,,,,,,,,,,44,,,,,,,,,,,,,,,,,,,,,,,1,,202,23 -java.lang,38,3,783,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,,3,,,506,277 +java.lang,38,3,790,,13,,,,,,1,,,,,,,,,,,,8,,,,11,,,4,,,1,,,,,,,,,,,,,,,,3,,,510,280 java.math,,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9 java.net,23,3,347,,,,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,21,,,,,,,,,,,,,,,3,248,99 java.nio,47,,499,,,,,,,,,5,,,,,,,,,,,,,,,41,,,,,,,,,1,,,,,,,,,,,,,,,,302,197 @@ -99,7 +99,7 @@ javafx.scene.web,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, javax.accessibility,,,63,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,35 javax.activation,2,,7,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,,7, javax.annotation.processing,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,25,3 -javax.crypto,19,,114,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,61,53 +javax.crypto,19,,140,,,12,3,,2,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,76,64 javax.faces.context,4,7,,,,,,,,,,,,,,2,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,7,, javax.imageio,1,,304,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,138,166 javax.jms,,9,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,57, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index aa6a3f2c171..22e3ecfa5e7 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -18,10 +18,10 @@ Java framework & library support `Google Guava `_,``com.google.common.*``,,730,43,9,,,,, JBoss Logging,``org.jboss.logging``,,,324,,,,,, `JSON-java `_,``org.json``,,236,,,,,,, - Java Standard Library,``java.*``,10,4621,260,99,,9,,,26 - Java extensions,"``javax.*``, ``jakarta.*``",69,4159,90,10,4,2,1,1,4 + Java Standard Library,``java.*``,10,4628,260,99,,9,,,26 + Java extensions,"``javax.*``, ``jakarta.*``",87,4185,90,10,4,2,1,1,4 Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2 `Spring `_,``org.springframework.*``,38,486,143,26,,28,14,,35 Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.com.caucho.hessian.io``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.caucho.burlap.io``, ``com.caucho.hessian.io``, ``com.cedarsoftware.util.io``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.esotericsoftware.yamlbeans``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.lingala.zip4j``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.authc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.exolab.castor.xml``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.ho.yaml``, ``org.influxdb``, ``org.jabsorb``, ``org.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.lastaflute.web``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``software.amazon.awssdk.transfer.s3.model``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",133,10525,927,140,6,22,18,,208 - Totals,,312,26328,2656,404,16,128,33,1,409 + Totals,,330,26361,2656,404,16,128,33,1,409 diff --git a/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/old.dbscheme b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/old.dbscheme new file mode 100644 index 00000000000..9f6026c4009 --- /dev/null +++ b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/old.dbscheme @@ -0,0 +1,1240 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isImplicitClass( + unique int classid: @classorinterface ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/semmlecode.dbscheme b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/semmlecode.dbscheme new file mode 100644 index 00000000000..1b8f5f4c747 --- /dev/null +++ b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/semmlecode.dbscheme @@ -0,0 +1,1236 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/upgrade.properties b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/upgrade.properties new file mode 100644 index 00000000000..cfc9417d13e --- /dev/null +++ b/java/downgrades/9f6026c400996c13842974b24f076a486ad1f69c/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove Java 25 compact source files support by removing `isImplicitClass` table +compatibility: partial +isImplicitClass.rel: delete diff --git a/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt b/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt index 43cfad2f621..0a9e8df8073 100644 --- a/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/ExternalDeclExtractor.kt @@ -1,5 +1,6 @@ package com.github.codeql +import com.github.codeql.utils.ClassInstanceStack import com.github.codeql.utils.isExternalFileClassMember import com.semmle.extractor.java.OdasaOutput import com.semmle.util.data.StringDigestor @@ -18,6 +19,7 @@ class ExternalDeclExtractor( val compression: Compression, val invocationTrapFile: String, val sourceFilePath: String, + val classInstanceStack: ClassInstanceStack, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState, @@ -163,6 +165,7 @@ class ExternalDeclExtractor( binaryPath, manager, this, + classInstanceStack, primitiveTypeMapping, pluginContext, KotlinFileExtractor.DeclarationStack(), diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 1fc8ee37fc0..9f524de737e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1,5 +1,6 @@ package com.github.codeql +import com.github.codeql.utils.ClassInstanceStack import com.github.codeql.utils.versions.usesK2 import com.semmle.util.files.FileUtil import com.semmle.util.trap.pathtransformers.PathTransformer @@ -151,6 +152,7 @@ class KotlinExtractorExtension( } val compression = getCompression(logger) + val classInstanceStack = ClassInstanceStack() val primitiveTypeMapping = PrimitiveTypeMapping(logger, pluginContext) // FIXME: FileUtil expects a static global logger // which should be provided by SLF4J's factory facility. For now we set it here. @@ -182,6 +184,7 @@ class KotlinExtractorExtension( trapDir, srcDir, file, + classInstanceStack, primitiveTypeMapping, pluginContext, globalExtensionState @@ -358,6 +361,7 @@ private fun doFile( dbTrapDir: File, dbSrcDir: File, srcFile: IrFile, + classInstanceStack: ClassInstanceStack, primitiveTypeMapping: PrimitiveTypeMapping, pluginContext: IrPluginContext, globalExtensionState: KotlinExtractorGlobalState @@ -415,6 +419,7 @@ private fun doFile( compression, invocationTrapFile, srcFilePath, + classInstanceStack, primitiveTypeMapping, pluginContext, globalExtensionState, @@ -429,6 +434,7 @@ private fun doFile( srcFilePath, null, externalDeclExtractor, + classInstanceStack, primitiveTypeMapping, pluginContext, KotlinFileExtractor.DeclarationStack(), diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 376736611d1..72c766bb082 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -62,6 +62,7 @@ open class KotlinFileExtractor( val filePath: String, dependencyCollector: OdasaOutput.TrapFileManager?, externalClassExtractor: ExternalDeclExtractor, + classInstanceStack: ClassInstanceStack, primitiveTypeMapping: PrimitiveTypeMapping, pluginContext: IrPluginContext, val declarationStack: DeclarationStack, @@ -72,6 +73,7 @@ open class KotlinFileExtractor( tw, dependencyCollector, externalClassExtractor, + classInstanceStack, primitiveTypeMapping, pluginContext, globalExtensionState @@ -496,12 +498,17 @@ open class KotlinFileExtractor( } extractClassModifiers(c, id) - extractClassSupertypes( - c, - id, - if (argsIncludingOuterClasses == null) ExtractSupertypesMode.Raw - else ExtractSupertypesMode.Specialised(argsIncludingOuterClasses) - ) + classInstanceStack.push(c) + try { + extractClassSupertypes( + c, + id, + if (argsIncludingOuterClasses == null) ExtractSupertypesMode.Raw + else ExtractSupertypesMode.Specialised(argsIncludingOuterClasses) + ) + } finally { + classInstanceStack.pop() + } val locId = getLocation(c, argsIncludingOuterClasses) tw.writeHasLocation(id, locId) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt index 2f87c77f8ee..83cbec771fc 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt @@ -49,6 +49,7 @@ open class KotlinUsesExtractor( open val tw: TrapWriter, val dependencyCollector: OdasaOutput.TrapFileManager?, val externalClassExtractor: ExternalDeclExtractor, + val classInstanceStack: ClassInstanceStack, val primitiveTypeMapping: PrimitiveTypeMapping, val pluginContext: IrPluginContext, val globalExtensionState: KotlinExtractorGlobalState @@ -182,6 +183,7 @@ open class KotlinUsesExtractor( filePath, dependencyCollector, externalClassExtractor, + classInstanceStack, primitiveTypeMapping, pluginContext, newDeclarationStack, @@ -199,6 +201,7 @@ open class KotlinUsesExtractor( clsFile.path, dependencyCollector, externalClassExtractor, + classInstanceStack, primitiveTypeMapping, pluginContext, newDeclarationStack, @@ -537,6 +540,19 @@ open class KotlinUsesExtractor( return Pair(p?.first ?: c, p?.second ?: argsIncludingOuterClassesBeforeReplacement) } + private fun avoidInfiniteRecursion( + pair: Pair?> + ): Pair?> { + val c = pair.first + val args = pair.second + if (args != null && args.isNotEmpty() && classInstanceStack.possiblyCyclicExtraction(c, args)) { + logger.warn("Making use of ${c.name} a raw type to avoid infinite recursion") + return Pair(c, null) + } else { + return pair + } + } + // `typeArgs` can be null to describe a raw generic type. // For non-generic types it will be zero-length list. private fun addClassLabel( @@ -545,7 +561,7 @@ open class KotlinUsesExtractor( inReceiverContext: Boolean = false ): TypeResult { val replaced = - tryReplaceType(cBeforeReplacement, argsIncludingOuterClassesBeforeReplacement) + avoidInfiniteRecursion(tryReplaceType(cBeforeReplacement, argsIncludingOuterClassesBeforeReplacement)) val replacedClass = replaced.first val replacedArgsIncludingOuterClasses = replaced.second diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassInstanceStack.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassInstanceStack.kt new file mode 100644 index 00000000000..fdd0deb5151 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassInstanceStack.kt @@ -0,0 +1,47 @@ +package com.github.codeql.utils + +import java.util.Stack +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.ir.types.* + +class ClassInstanceStack { + private val stack: Stack = Stack() + + fun push(c: IrClass) = stack.push(c) + fun pop() = stack.pop() + + private fun checkTypeArgs(sym: IrClassSymbol, args: List): Boolean { + for (arg in args) { + if (arg is IrTypeProjection) { + if (checkType(sym, arg.type)) { + return true + } + } + } + return false + } + + private fun checkType(sym: IrClassSymbol, type: IrType): Boolean { + if (type is IrSimpleType) { + val decl = type.classifier.owner + if (decl.symbol == sym) { + return true + } + if (checkTypeArgs(sym, type.arguments)) { + return true + } + } + return false + } + + fun possiblyCyclicExtraction(classToCheck: IrClass, args: List): Boolean { + for (c in stack) { + if (c.symbol == classToCheck.symbol && checkTypeArgs(c.symbol, args)) { + return true + } + } + return false + } +} + diff --git a/java/ql/integration-tests/java/buildless-dependency-different-repository/test.py b/java/ql/integration-tests/java/buildless-dependency-different-repository/test.py index 6e0e201d9a2..a74fd05be8f 100644 --- a/java/ql/integration-tests/java/buildless-dependency-different-repository/test.py +++ b/java/ql/integration-tests/java/buildless-dependency-different-repository/test.py @@ -1,12 +1,29 @@ import subprocess import logging +import time +import socket + + +def wait_for_port(port, process, timeout=100): + start = time.time() + while time.time() - start < timeout: + # Check if process died + if process.poll() is not None: + raise RuntimeError(f"Server process exited with code {process.returncode}") + try: + with socket.create_connection(("localhost", port), timeout=1): + return True + except (socket.timeout, ConnectionRefusedError, OSError): + time.sleep(0.2) + raise RuntimeError(f"Port {port} not ready within {timeout}s") def test(codeql, java): - # Each of these serves the "repo" and "repo2" directories on http://localhost:924[89] - repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9428"], cwd="repo") - repo_server_process2 = subprocess.Popen(["python3", "-m", "http.server", "9429"], cwd="repo2") + repo_server_process = subprocess.Popen(["python3", "-m", "http.server", "9428", "-b", "localhost"], cwd="repo", stderr=subprocess.PIPE, stdout=subprocess.PIPE) + repo_server_process2 = subprocess.Popen(["python3", "-m", "http.server", "9429", "-b", "localhost"], cwd="repo2", stderr=subprocess.PIPE, stdout=subprocess.PIPE) try: + wait_for_port(9428, repo_server_process) + wait_for_port(9429, repo_server_process2) codeql.database.create( extractor_option="buildless=true", _env={"CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true"}, diff --git a/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected b/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected index e50a800d25c..a22cf324a38 100644 --- a/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected +++ b/java/ql/integration-tests/java/buildless-erroneous/DatabaseQualityDiagnostics.expected @@ -1,6 +1,6 @@ diagnosticAttributes -| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | -| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | -| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | +| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 20 % (threshold 85 %). Percentage of expressions with known type: 14 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityCliSummaryTable | true | +| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 20 % (threshold 85 %). Percentage of expressions with known type: 14 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityStatusPage | true | +| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 20 % (threshold 85 %). Percentage of expressions with known type: 14 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | visibilityTelemetry | true | #select -| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | +| Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 20 % (threshold 85 %). Percentage of expressions with known type: 14 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | Scanning Java code completed successfully, but the scan encountered issues. This may be caused by problems identifying dependencies or use of generated source code. Some metrics of the database quality are: Percentage of calls with call target: 20 % (threshold 85 %). Percentage of expressions with known type: 14 % (threshold 85 %). Ideally these metrics should be above their thresholds. Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes). | 1 | diff --git a/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected b/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected index 0a45568a536..b43963e4aca 100644 --- a/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected +++ b/java/ql/integration-tests/java/buildless-erroneous/ExtractorInformation.expected @@ -1,4 +1,4 @@ -| Annotation processors enabled: true | 1 | +| Annotation processors enabled: false | 1 | | Number of calls with call target | 1 | | Number of calls with missing call target | 4 | | Number of diagnostics from CodeQL Java extractor with severity 5 | 10 | @@ -15,5 +15,3 @@ | Total number of diagnostics from CodeQL Java extractor | 12 | | Total number of lines | 13 | | Total number of lines with extension java | 13 | -| Used annotation processor: lombok.launch.AnnotationProcessorHider$AnnotationProcessor | 1 | -| Used annotation processor: lombok.launch.AnnotationProcessorHider$ClaimingProcessor | 1 | diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/RequireSSL.expected b/java/ql/integration-tests/java/evaluation-to-constant-errortype/ConstantExpAppearsNonConstant.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLFalseAspNetCore/UseCookiePolicyCallback/RequireSSL.expected rename to java/ql/integration-tests/java/evaluation-to-constant-errortype/ConstantExpAppearsNonConstant.expected diff --git a/java/ql/integration-tests/java/evaluation-to-constant-errortype/ConstantExpAppearsNonConstant.qlref b/java/ql/integration-tests/java/evaluation-to-constant-errortype/ConstantExpAppearsNonConstant.qlref new file mode 100644 index 00000000000..6d2b25768e5 --- /dev/null +++ b/java/ql/integration-tests/java/evaluation-to-constant-errortype/ConstantExpAppearsNonConstant.qlref @@ -0,0 +1,2 @@ +query: Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/integration-tests/java/evaluation-to-constant-errortype/Test.java b/java/ql/integration-tests/java/evaluation-to-constant-errortype/Test.java new file mode 100644 index 00000000000..913c7817c7f --- /dev/null +++ b/java/ql/integration-tests/java/evaluation-to-constant-errortype/Test.java @@ -0,0 +1,7 @@ +class Test { + public static void updateFlashlights(Minecraft mc){ + if(mc.world != null){ + + } + } +} \ No newline at end of file diff --git a/java/ql/integration-tests/java/evaluation-to-constant-errortype/test.py b/java/ql/integration-tests/java/evaluation-to-constant-errortype/test.py new file mode 100644 index 00000000000..759e4cf8b82 --- /dev/null +++ b/java/ql/integration-tests/java/evaluation-to-constant-errortype/test.py @@ -0,0 +1,2 @@ +def test(codeql, java): + codeql.database.create(build_mode="none") \ No newline at end of file diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.expected b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.expected new file mode 100644 index 00000000000..c9e472ebeb6 --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.expected @@ -0,0 +1,3 @@ +| Frontend errors in file: (2 errors during annotation processing) | 2 | +| Frontend errors in file: Test.java (7 javac errors) | 2 | +| Unknown errors in file: Test.java (5) | 2 | diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.qlref b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.qlref new file mode 100644 index 00000000000..488db09ab05 --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/ExtractionErrors.qlref @@ -0,0 +1 @@ +Diagnostics/ExtractionErrors.ql diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/Test.java b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/Test.java new file mode 100644 index 00000000000..e1df4c2a42f --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/Test.java @@ -0,0 +1,35 @@ +// The import below is intentionally commented out to test buildless recovery. +// import java.util.stream.Stream; + +public class LambdaBuildlessRecoveryTest { + + private Stream getStringStream() { + return getStringStream(); + } + + public void testSimpleLambdaExpression() { + int unused = 0; + Stream s = getStringStream(); + Stream mapped = s.map(x -> x); + mapped.forEach(System.out::println); + } + + public void testLambdaWithBlockBody() { + int unused = 42; + Stream s = getStringStream(); + Stream filtered = s.filter(item -> { + int unused = 42; + String proc = item.toUpperCase(); + return proc.length() > 0; + }); + filtered.forEach(System.out::println); + } + + public void testVariableCapture() { + int unused = 99; + String prefix = "proc_"; + Stream s = getStringStream(); + Stream result = s.map(item -> prefix + item); + result.forEach(System.out::println); + } +} diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/test.py b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/test.py new file mode 100755 index 00000000000..773127096a7 --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/test.py @@ -0,0 +1,5 @@ +def test(codeql, java, use_java_17): + codeql.database.create( + build_mode="none", + source_root="." + ) \ No newline at end of file diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.expected b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.expected new file mode 100644 index 00000000000..282d65e7e63 --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.expected @@ -0,0 +1,4 @@ +| Test.java:11:9:11:23 | int unused | +| Test.java:18:9:18:24 | int unused | +| Test.java:21:13:21:28 | int unused | +| Test.java:29:9:29:24 | int unused | \ No newline at end of file diff --git a/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.ql b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.ql new file mode 100644 index 00000000000..cba463c0827 --- /dev/null +++ b/java/ql/integration-tests/java/lambda-expression-buildless-recovery/unused_variable.ql @@ -0,0 +1,5 @@ +import java + +from LocalVariableDecl v +where not exists(v.getAnAccess()) and exists(v.getFile().getRelativePath()) +select v diff --git a/java/ql/integration-tests/java/maven-add-exports-module-flags/pom.xml b/java/ql/integration-tests/java/maven-add-exports-module-flags/pom.xml new file mode 100644 index 00000000000..94f5f90981e --- /dev/null +++ b/java/ql/integration-tests/java/maven-add-exports-module-flags/pom.xml @@ -0,0 +1,41 @@ + + + + 4.0.0 + + com.example + maven-add-exports-module-flags + 1.0-SNAPSHOT + + maven-add-exports-module-flags + Test case: Project using --add-exports. Autobuilder should detect this and use --source/--target. + + + UTF-8 + 11 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${java.version} + ${java.version} + + --add-exports + jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED + --add-exports + jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED + --add-exports + jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED + --add-exports + jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED + + + + + + diff --git a/java/ql/integration-tests/java/maven-add-exports-module-flags/source_archive.expected b/java/ql/integration-tests/java/maven-add-exports-module-flags/source_archive.expected new file mode 100644 index 00000000000..3d84bfa09ab --- /dev/null +++ b/java/ql/integration-tests/java/maven-add-exports-module-flags/source_archive.expected @@ -0,0 +1,3 @@ +pom.xml +src/main/java/com/example/CompilerUser.java +target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-add-exports-module-flags/src/main/java/com/example/CompilerUser.java b/java/ql/integration-tests/java/maven-add-exports-module-flags/src/main/java/com/example/CompilerUser.java new file mode 100644 index 00000000000..13685d097a4 --- /dev/null +++ b/java/ql/integration-tests/java/maven-add-exports-module-flags/src/main/java/com/example/CompilerUser.java @@ -0,0 +1,15 @@ +package com.example; + +import com.sun.tools.javac.api.JavacTool; + +/** + * Simple class that uses JDK compiler internals. + * This requires --add-exports flags to compile. + */ +public class CompilerUser { + public static void main(String[] args) { + // Use JavacTool from jdk.compiler module + JavacTool tool = JavacTool.create(); + System.out.println("Compiler tool: " + tool.getClass().getName()); + } +} diff --git a/java/ql/integration-tests/java/maven-add-exports-module-flags/test.py b/java/ql/integration-tests/java/maven-add-exports-module-flags/test.py new file mode 100644 index 00000000000..73c4b1415a1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-add-exports-module-flags/test.py @@ -0,0 +1,2 @@ +def test(codeql, java, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/maven-execution-specific-java-version/pom.xml b/java/ql/integration-tests/java/maven-execution-specific-java-version/pom.xml new file mode 100644 index 00000000000..fca47a5ba6d --- /dev/null +++ b/java/ql/integration-tests/java/maven-execution-specific-java-version/pom.xml @@ -0,0 +1,51 @@ + + + + 4.0.0 + + com.example + maven-execution-specific-java-version + 1.0-SNAPSHOT + + maven-execution-specific-java-version + Test case: Project with execution-specific Java versions (Java 11 for main, Java 17 for test). Maven.java should detect the highest version (17) and use it for compilation. + + + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + + + default-compile + compile + + compile + + + 11 + + + + + + default-testCompile + test-compile + + testCompile + + + 17 + + + + + + + diff --git a/java/ql/integration-tests/java/maven-execution-specific-java-version/source_archive.expected b/java/ql/integration-tests/java/maven-execution-specific-java-version/source_archive.expected new file mode 100644 index 00000000000..16e83f3a7f6 --- /dev/null +++ b/java/ql/integration-tests/java/maven-execution-specific-java-version/source_archive.expected @@ -0,0 +1,4 @@ +pom.xml +src/main/java/com/example/App.java +src/test/java/com/example/AppTest.java +target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-execution-specific-java-version/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-execution-specific-java-version/src/main/java/com/example/App.java new file mode 100644 index 00000000000..74ddfe58348 --- /dev/null +++ b/java/ql/integration-tests/java/maven-execution-specific-java-version/src/main/java/com/example/App.java @@ -0,0 +1,12 @@ +package com.example; + +public class App { + public static void main(String[] args) { + var message = "Hello World! Running on Java " + System.getProperty("java.version"); + System.out.println(message); + } + + public String getMessage() { + return "Hello from App"; + } +} diff --git a/java/ql/integration-tests/java/maven-execution-specific-java-version/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/maven-execution-specific-java-version/src/test/java/com/example/AppTest.java new file mode 100644 index 00000000000..4f8e04f7d78 --- /dev/null +++ b/java/ql/integration-tests/java/maven-execution-specific-java-version/src/test/java/com/example/AppTest.java @@ -0,0 +1,11 @@ +package com.example; + +public class AppTest { + public static void main(String[] args) { + var text = """ + Hello + World + """; + System.out.println(text.strip()); + } +} diff --git a/java/ql/integration-tests/java/maven-execution-specific-java-version/test.py b/java/ql/integration-tests/java/maven-execution-specific-java-version/test.py new file mode 100644 index 00000000000..73c4b1415a1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-execution-specific-java-version/test.py @@ -0,0 +1,2 @@ +def test(codeql, java, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/maven-java16-with-higher-jdk/pom.xml b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/pom.xml new file mode 100644 index 00000000000..e6a09518d8f --- /dev/null +++ b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/pom.xml @@ -0,0 +1,30 @@ + + + + 4.0.0 + + com.example + maven-java16-with-higher-jdk + 1.0-SNAPSHOT + + maven-java16-with-higher-jdk + Test case: Java 16 target when only Java 17+ is available. + + + UTF-8 + 16 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${java.version} + + + + + diff --git a/java/ql/integration-tests/java/maven-java16-with-higher-jdk/source_archive.expected b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/source_archive.expected new file mode 100644 index 00000000000..eb5dbc368ee --- /dev/null +++ b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/source_archive.expected @@ -0,0 +1,3 @@ +pom.xml +src/main/java/com/example/App.java +target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-java16-with-higher-jdk/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/src/main/java/com/example/App.java new file mode 100644 index 00000000000..707e579ad68 --- /dev/null +++ b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/src/main/java/com/example/App.java @@ -0,0 +1,15 @@ +package com.example; + +import java.util.List; + +/** + * Simple class using Java 16 features (e.g.,records). + */ +public class App { + public static void main(String[] args) { + Person person = new Person("Bob", 42); + System.out.println(person); + } +} + +record Person(String name, int age) {} diff --git a/java/ql/integration-tests/java/maven-java16-with-higher-jdk/test.py b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/test.py new file mode 100644 index 00000000000..73c4b1415a1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-java16-with-higher-jdk/test.py @@ -0,0 +1,2 @@ +def test(codeql, java, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/maven-java8-java11-dependency/pom.xml b/java/ql/integration-tests/java/maven-java8-java11-dependency/pom.xml new file mode 100644 index 00000000000..f50a3aadd23 --- /dev/null +++ b/java/ql/integration-tests/java/maven-java8-java11-dependency/pom.xml @@ -0,0 +1,41 @@ + + + + 4.0.0 + + com.example + maven-java8-java11-dependency + 1.0-SNAPSHOT + + maven-java8-java11-dependency + Test case: Java 8 project with dependency requiring Java 11+ + + + UTF-8 + 1.8 + 1.8 + + + + + + org.testng + testng + 7.7.0 + test + + + + + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + + diff --git a/java/ql/integration-tests/java/maven-java8-java11-dependency/source_archive.expected b/java/ql/integration-tests/java/maven-java8-java11-dependency/source_archive.expected new file mode 100644 index 00000000000..5088f76cc38 --- /dev/null +++ b/java/ql/integration-tests/java/maven-java8-java11-dependency/source_archive.expected @@ -0,0 +1,4 @@ +pom.xml +src/main/java/com/example/Calculator.java +src/test/java/com/example/CalculatorTest.java +target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-java8-java11-dependency/src/main/java/com/example/Calculator.java b/java/ql/integration-tests/java/maven-java8-java11-dependency/src/main/java/com/example/Calculator.java new file mode 100644 index 00000000000..4cc529e4f0f --- /dev/null +++ b/java/ql/integration-tests/java/maven-java8-java11-dependency/src/main/java/com/example/Calculator.java @@ -0,0 +1,11 @@ +package com.example; + +public class Calculator { + public int add(int a, int b) { + return a + b; + } + + public int multiply(int a, int b) { + return a * b; + } +} diff --git a/java/ql/integration-tests/java/maven-java8-java11-dependency/src/test/java/com/example/CalculatorTest.java b/java/ql/integration-tests/java/maven-java8-java11-dependency/src/test/java/com/example/CalculatorTest.java new file mode 100644 index 00000000000..821330a32cc --- /dev/null +++ b/java/ql/integration-tests/java/maven-java8-java11-dependency/src/test/java/com/example/CalculatorTest.java @@ -0,0 +1,21 @@ +package com.example; + +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + * Test class using TestNG 7.7.0 which requires Java 11+. + */ +public class CalculatorTest { + @Test + public void testAdd() { + Calculator calc = new Calculator(); + Assert.assertEquals(calc.add(2, 3), 5); + } + + @Test + public void testMultiply() { + Calculator calc = new Calculator(); + Assert.assertEquals(calc.multiply(3, 4), 12); + } +} diff --git a/java/ql/integration-tests/java/maven-java8-java11-dependency/test.py b/java/ql/integration-tests/java/maven-java8-java11-dependency/test.py new file mode 100644 index 00000000000..73c4b1415a1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-java8-java11-dependency/test.py @@ -0,0 +1,2 @@ +def test(codeql, java, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml new file mode 100644 index 00000000000..39586e4e0ab --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/pom.xml @@ -0,0 +1,10 @@ + + + 4.0.0 + + com.example + maven-multimodule-test-java-version + 1.0 + + main-module + diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java new file mode 100644 index 00000000000..d2397803d55 --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/main-module/src/main/java/com/example/App.java @@ -0,0 +1,7 @@ +package com.example; + +public class App { + public static void main(String[] args) { + System.out.println("Hello World!"); + } +} \ No newline at end of file diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml new file mode 100644 index 00000000000..ea5f8b5b03b --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + com.example + maven-multimodule-test-java-version + 1.0 + pom + + + 17 + + + + main-module + test-module + + diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected b/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected new file mode 100644 index 00000000000..08385ca91a0 --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/source_archive.expected @@ -0,0 +1,7 @@ +main-module/pom.xml +main-module/src/main/java/com/example/App.java +main-module/target/maven-archiver/pom.properties +pom.xml +test-module/pom.xml +test-module/src/main/java/com/example/tests/TestUtils.java +test-module/target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml new file mode 100644 index 00000000000..5895a91b2c1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + com.example + maven-multimodule-test-java-version + 1.0 + + test-module + + + 21 + + diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java new file mode 100644 index 00000000000..30e83856200 --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test-module/src/main/java/com/example/tests/TestUtils.java @@ -0,0 +1,12 @@ +package com.example.tests; + +// Requires Java 21: switch with pattern matching and guards +public class TestUtils { + public static String analyze(Object obj) { + return switch (obj) { + case String s when s.length() > 5 -> "long"; + case String s -> "short"; + default -> "other"; + }; + } +} \ No newline at end of file diff --git a/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py new file mode 100644 index 00000000000..73c4b1415a1 --- /dev/null +++ b/java/ql/integration-tests/java/maven-multimodule-test-java-version/test.py @@ -0,0 +1,2 @@ +def test(codeql, java, actions_toolchains_file): + codeql.database.create(_env={"LGTM_INDEX_MAVEN_TOOLCHAINS_FILE": str(actions_toolchains_file)}) diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw b/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw new file mode 100755 index 00000000000..b7f064624f8 --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw @@ -0,0 +1,287 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.1.1 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="`/usr/libexec/java_home`"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + printf '%s' "$(cd "$basedir"; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname $0)") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $wrapperUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + QUIET="--quiet" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + QUIET="" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" + fi + [ $? -eq 0 ] || rm -f "$wrapperJarPath" + elif command -v curl > /dev/null; then + QUIET="--silent" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + QUIET="" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L + fi + [ $? -eq 0 ] || rm -f "$wrapperJarPath" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=`cygpath --path --windows "$javaSource"` + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw.cmd b/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw.cmd new file mode 100644 index 00000000000..474c9d6b74c --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/mvnw.cmd @@ -0,0 +1,187 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.1.1 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/pom.xml b/java/ql/integration-tests/java/maven-wrapper-missing-properties/pom.xml new file mode 100644 index 00000000000..17dfd04484f --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + com.example + maven-wrapper-missing-properties-test + 1.0-SNAPSHOT + jar + + + 11 + 11 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + + diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/source_archive.expected b/java/ql/integration-tests/java/maven-wrapper-missing-properties/source_archive.expected new file mode 100644 index 00000000000..6ea990c4d1b --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/source_archive.expected @@ -0,0 +1,4 @@ +.mvn/wrapper/maven-wrapper.properties +pom.xml +src/main/java/com/example/Hello.java +target/maven-archiver/pom.properties diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/src/main/java/com/example/Hello.java b/java/ql/integration-tests/java/maven-wrapper-missing-properties/src/main/java/com/example/Hello.java new file mode 100644 index 00000000000..0d2931004a0 --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/src/main/java/com/example/Hello.java @@ -0,0 +1,7 @@ +package com.example; + +public class Hello { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } +} diff --git a/java/ql/integration-tests/java/maven-wrapper-missing-properties/test.py b/java/ql/integration-tests/java/maven-wrapper-missing-properties/test.py new file mode 100644 index 00000000000..ef93712d879 --- /dev/null +++ b/java/ql/integration-tests/java/maven-wrapper-missing-properties/test.py @@ -0,0 +1,2 @@ +def test(codeql, java): + codeql.database.create(build_mode="autobuild") diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/RequireSSL.expected b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/ExtractionErrors.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/FormsTrue/RequireSSL.expected rename to java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/ExtractionErrors.expected diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/ExtractionErrors.qlref b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/ExtractionErrors.qlref new file mode 100644 index 00000000000..5e501b2469d --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/ExtractionErrors.qlref @@ -0,0 +1 @@ +Diagnostics/ExtractionErrors.ql \ No newline at end of file diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/.mvn/wrapper/maven-wrapper.properties b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000000..c0bcafe984f --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,3 @@ +wrapperVersion=3.3.4 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw new file mode 100755 index 00000000000..bd8896bf221 --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw @@ -0,0 +1,295 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.4 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +scriptDir="$(dirname "$0")" +scriptName="$(basename "$0")" + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +actualDistributionDir="" + +# First try the expected directory name (for regular distributions) +if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then + if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then + actualDistributionDir="$distributionUrlNameMain" + fi +fi + +# If not found, search for any directory with the Maven executable (for snapshots) +if [ -z "$actualDistributionDir" ]; then + # enable globbing to iterate over items + set +f + for dir in "$TMP_DOWNLOAD_DIR"/*; do + if [ -d "$dir" ]; then + if [ -f "$dir/bin/$MVN_CMD" ]; then + actualDistributionDir="$(basename "$dir")" + break + fi + fi + done + set -f +fi + +if [ -z "$actualDistributionDir" ]; then + verbose "Contents of $TMP_DOWNLOAD_DIR:" + verbose "$(ls -la "$TMP_DOWNLOAD_DIR")" + die "Could not find Maven distribution directory in extracted archive" +fi + +verbose "Found extracted Maven distribution directory: $actualDistributionDir" +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw.cmd b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw.cmd new file mode 100644 index 00000000000..92450f93273 --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/mvnw.cmd @@ -0,0 +1,189 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.4 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' + +$MAVEN_M2_PATH = "$HOME/.m2" +if ($env:MAVEN_USER_HOME) { + $MAVEN_M2_PATH = "$env:MAVEN_USER_HOME" +} + +if (-not (Test-Path -Path $MAVEN_M2_PATH)) { + New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null +} + +$MAVEN_WRAPPER_DISTS = $null +if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) { + $MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists" +} else { + $MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists" +} + +$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain" +$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null + +# Find the actual extracted directory name (handles snapshots where filename != directory name) +$actualDistributionDir = "" + +# First try the expected directory name (for regular distributions) +$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain" +$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD" +if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) { + $actualDistributionDir = $distributionUrlNameMain +} + +# If not found, search for any directory with the Maven executable (for snapshots) +if (!$actualDistributionDir) { + Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object { + $testPath = Join-Path $_.FullName "bin/$MVN_CMD" + if (Test-Path -Path $testPath -PathType Leaf) { + $actualDistributionDir = $_.Name + } + } +} + +if (!$actualDistributionDir) { + Write-Error "Could not find Maven distribution directory in extracted archive" +} + +Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir" +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/pom.xml b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/pom.xml new file mode 100644 index 00000000000..2d203a7dcba --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + com.example + maven3-fetch-maven4-wrapper-test + 1.0.0 + jar + + Maven 3 Fetch Maven 4 Wrapper Test + Integration test for Maven 3 system trying to fetch Maven 4 wrapper binary + + + 11 + 11 + UTF-8 + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 11 + 11 + + + + + \ No newline at end of file diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/src/main/java/testmaven/Test.java b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/src/main/java/testmaven/Test.java new file mode 100644 index 00000000000..79a9aa9a064 --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/app/src/main/java/testmaven/Test.java @@ -0,0 +1,10 @@ +package testmaven; + +public class Test { + public static void main(String[] args) { + System.out.println("Test"); + } + + public void trivial() { + } +} diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.expected b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.expected new file mode 100644 index 00000000000..0f1a4ca9dfb --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.expected @@ -0,0 +1,2 @@ +| app/src/main/java/testmaven/Test.java:4:24:4:27 | main | +| app/src/main/java/testmaven/Test.java:8:17:8:23 | trivial | diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.ql b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.ql new file mode 100644 index 00000000000..9d32c93e69c --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/methods.ql @@ -0,0 +1,5 @@ +import java + +from Method m +where exists(m.getFile().getRelativePath()) +select m diff --git a/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/test.py b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/test.py new file mode 100644 index 00000000000..666691824b9 --- /dev/null +++ b/java/ql/integration-tests/java/maven_3_fetch_maven_4_wrapper/test.py @@ -0,0 +1,20 @@ +import os +import tarfile +import tempfile +import pathlib +from fixtures.util import download_file_cached + +def test_maven3_fetch_maven4_wrapper(codeql, java, use_java_17, cache): + maven_url = "https://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz" + maven_archive = download_file_cached(maven_url, "apache-maven-3.6.0-bin.tar.gz", cache) + + temp_dir = pathlib.Path(tempfile.mkdtemp()) + with tarfile.open(maven_archive, "r:gz") as tar: + tar.extractall(temp_dir, filter='data') + + # Set maven_home_path to the extracted directory + maven_home_path = temp_dir / "apache-maven-3.6.0" + + codeql.database.create(source_root="app", + build_mode="autobuild", + _env={"MAVEN_USER_HOME": str(maven_home_path)}) \ No newline at end of file diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected index 7a1a986b2aa..6d0319431d6 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected @@ -1,61 +1,120 @@ ql/java/ql/src/Advisory/Declarations/MissingOverrideAnnotation.ql +ql/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql +ql/java/ql/src/Advisory/Declarations/NonPrivateField.ql ql/java/ql/src/Advisory/Documentation/ImpossibleJavadocThrows.ql ql/java/ql/src/Advisory/Documentation/SpuriousJavadocParam.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql +ql/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql +ql/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql +ql/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql +ql/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql +ql/java/ql/src/Advisory/Statements/OneStatementPerLine.ql +ql/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql +ql/java/ql/src/Advisory/Types/GenericsConstructor.ql +ql/java/ql/src/Advisory/Types/GenericsReturnType.ql +ql/java/ql/src/Advisory/Types/GenericsVariable.ql ql/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql ql/java/ql/src/Compatibility/JDK9/UnderscoreIdentifier.ql +ql/java/ql/src/DeadCode/DeadClass.ql +ql/java/ql/src/DeadCode/DeadEnumConstant.ql +ql/java/ql/src/DeadCode/DeadField.ql +ql/java/ql/src/DeadCode/DeadMethod.ql ql/java/ql/src/DeadCode/UselessParameter.ql ql/java/ql/src/Language Abuse/EmptyMethod.ql ql/java/ql/src/Language Abuse/IterableIterator.ql ql/java/ql/src/Language Abuse/LabelInSwitch.ql +ql/java/ql/src/Language Abuse/OverridePackagePrivate.ql +ql/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql ql/java/ql/src/Language Abuse/TypeVariableHidesType.ql ql/java/ql/src/Language Abuse/UselessNullCheck.ql ql/java/ql/src/Language Abuse/UselessTypeTest.ql ql/java/ql/src/Language Abuse/WrappedIterator.ql +ql/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql ql/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql ql/java/ql/src/Likely Bugs/Arithmetic/IntMultToLong.ql ql/java/ql/src/Likely Bugs/Arithmetic/LShiftLargerThanTypeWidth.ql +ql/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql +ql/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql ql/java/ql/src/Likely Bugs/Arithmetic/WhitespaceContradictsPrecedence.ql +ql/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql +ql/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql ql/java/ql/src/Likely Bugs/Collections/ArrayIndexOutOfBounds.ql ql/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql +ql/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql ql/java/ql/src/Likely Bugs/Collections/ReadOnlyContainer.ql ql/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql ql/java/ql/src/Likely Bugs/Collections/WriteOnlyContainer.ql ql/java/ql/src/Likely Bugs/Comparison/CompareIdenticalValues.ql +ql/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql +ql/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql ql/java/ql/src/Likely Bugs/Comparison/EqualsArray.ql ql/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql ql/java/ql/src/Likely Bugs/Comparison/IncomparableEquals.ql +ql/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql ql/java/ql/src/Likely Bugs/Comparison/InconsistentEqualsHashCode.ql ql/java/ql/src/Likely Bugs/Comparison/MissingInstanceofInEquals.ql ql/java/ql/src/Likely Bugs/Comparison/RefEqBoxed.ql +ql/java/ql/src/Likely Bugs/Comparison/StringComparison.ql ql/java/ql/src/Likely Bugs/Comparison/UselessComparisonTest.ql ql/java/ql/src/Likely Bugs/Comparison/WrongNanComparison.ql +ql/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql ql/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql +ql/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLockingWithInitRace.ql +ql/java/ql/src/Likely Bugs/Concurrency/Escaping.ql +ql/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql ql/java/ql/src/Likely Bugs/Concurrency/NonSynchronizedOverride.ql +ql/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql +ql/java/ql/src/Likely Bugs/Concurrency/SafePublication.ql ql/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql +ql/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql +ql/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchOnBoxedType.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchSetUnsynchGet.ql +ql/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql +ql/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.ql +ql/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql +ql/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql ql/java/ql/src/Likely Bugs/Frameworks/JUnit/JUnit5MissingNestedAnnotation.ql +ql/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql ql/java/ql/src/Likely Bugs/Inheritance/NoNonFinalInConstructor.ql ql/java/ql/src/Likely Bugs/Likely Typos/ContainerSizeCmpZero.ql ql/java/ql/src/Likely Bugs/Likely Typos/ContradictoryTypeChecks.ql +ql/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql +ql/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql +ql/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/MissingFormatArg.ql ql/java/ql/src/Likely Bugs/Likely Typos/MissingSpaceTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql ql/java/ql/src/Likely Bugs/Likely Typos/StringBufferCharInit.ql ql/java/ql/src/Likely Bugs/Likely Typos/SuspiciousDateFormat.ql +ql/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql ql/java/ql/src/Likely Bugs/Likely Typos/UnusedFormatArg.ql ql/java/ql/src/Likely Bugs/Nullness/NullAlways.ql ql/java/ql/src/Likely Bugs/Nullness/NullExprDeref.ql ql/java/ql/src/Likely Bugs/Nullness/NullMaybe.ql +ql/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseReader.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseSql.ql ql/java/ql/src/Likely Bugs/Resource Leaks/CloseWriter.ql +ql/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql +ql/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql +ql/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql +ql/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql +ql/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql +ql/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql ql/java/ql/src/Likely Bugs/Statements/ContinueInFalseLoop.ql +ql/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql ql/java/ql/src/Likely Bugs/Statements/PartiallyMaskedCatch.ql ql/java/ql/src/Likely Bugs/Statements/UseBraces.ql ql/java/ql/src/Likely Bugs/Termination/ConstantLoopCondition.ql +ql/java/ql/src/Likely Bugs/Termination/SpinOnField.ql ql/java/ql/src/Performance/InefficientEmptyStringTest.ql ql/java/ql/src/Performance/InefficientKeySetIterator.ql ql/java/ql/src/Performance/InefficientOutputStream.ql @@ -64,6 +123,7 @@ ql/java/ql/src/Performance/InnerClassCouldBeStatic.ql ql/java/ql/src/Performance/NewStringString.ql ql/java/ql/src/Performance/StringReplaceAllWithNonRegex.ql ql/java/ql/src/Violations of Best Practice/Boxed Types/BoxedVariable.ql +ql/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql ql/java/ql/src/Violations of Best Practice/Dead Code/DeadRefTypes.ql ql/java/ql/src/Violations of Best Practice/Dead Code/InterfaceCannotBeImplemented.ql ql/java/ql/src/Violations of Best Practice/Dead Code/UnreadLocal.ql @@ -73,14 +133,21 @@ ql/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalR ql/java/ql/src/Violations of Best Practice/Exception Handling/NumberFormatException.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/AbstractToConcreteCollection.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/ExposeRepresentation.ql +ql/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql +ql/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/AmbiguousOuterSuper.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingMethodNames.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql +ql/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/LocalShadowsFieldConfusing.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/SameNameAsSuper.ql ql/java/ql/src/Violations of Best Practice/Records/IgnoredSerializationMembersOfRecordClass.ql ql/java/ql/src/Violations of Best Practice/SpecialCharactersInLiterals/NonExplicitControlAndWhitespaceCharsInLiterals.ql +ql/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql +ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToStringToString.ql +ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DefaultToString.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.ql +ql/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/PrintLnArray.ql diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected index 17253dbe0f8..56e2daa58ce 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected @@ -30,10 +30,13 @@ ql/java/ql/src/Likely Bugs/Comparison/WrongNanComparison.ql ql/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLockingWithInitRace.ql +ql/java/ql/src/Likely Bugs/Concurrency/Escaping.ql ql/java/ql/src/Likely Bugs/Concurrency/NonSynchronizedOverride.ql +ql/java/ql/src/Likely Bugs/Concurrency/SafePublication.ql ql/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchOnBoxedType.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchSetUnsynchGet.ql +ql/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.ql ql/java/ql/src/Likely Bugs/Frameworks/JUnit/JUnit5MissingNestedAnnotation.ql ql/java/ql/src/Likely Bugs/Inheritance/NoNonFinalInConstructor.ql ql/java/ql/src/Likely Bugs/Likely Typos/ContainerSizeCmpZero.ql @@ -71,6 +74,7 @@ ql/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalR ql/java/ql/src/Violations of Best Practice/Exception Handling/NumberFormatException.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/AbstractToConcreteCollection.ql ql/java/ql/src/Violations of Best Practice/Implementation Hiding/ExposeRepresentation.ql +ql/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/AmbiguousOuterSuper.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingMethodNames.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql @@ -78,6 +82,7 @@ ql/java/ql/src/Violations of Best Practice/Naming Conventions/LocalShadowsFieldC ql/java/ql/src/Violations of Best Practice/Naming Conventions/SameNameAsSuper.ql ql/java/ql/src/Violations of Best Practice/Records/IgnoredSerializationMembersOfRecordClass.ql ql/java/ql/src/Violations of Best Practice/SpecialCharactersInLiterals/NonExplicitControlAndWhitespaceCharsInLiterals.ql +ql/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToStringToString.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DefaultToString.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.ql diff --git a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected index 3290e0d84b0..dd67b7df413 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected @@ -21,12 +21,14 @@ ql/java/ql/src/Security/CWE/CWE-094/JexlInjection.ql ql/java/ql/src/Security/CWE/CWE-094/MvelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/TemplateInjection.ql +ql/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql ql/java/ql/src/Security/CWE/CWE-1104/MavenPomDependsOnBintray.ql ql/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql ql/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql ql/java/ql/src/Security/CWE/CWE-1204/StaticInitializationVector.ql ql/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql +ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql ql/java/ql/src/Security/CWE/CWE-266/IntentUriPermissionManipulation.ql diff --git a/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected b/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected index f4317f8e2a5..7e4401bcce9 100644 --- a/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected @@ -127,6 +127,7 @@ ql/java/ql/src/Security/CWE/CWE-094/JexlInjection.ql ql/java/ql/src/Security/CWE/CWE-094/MvelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/TemplateInjection.ql +ql/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql ql/java/ql/src/Security/CWE/CWE-1104/MavenPomDependsOnBintray.ql ql/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql ql/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql @@ -143,6 +144,7 @@ ql/java/ql/src/Security/CWE/CWE-200/AndroidSensitiveTextField.ql ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsFileAccess.ql ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql +ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql ql/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql diff --git a/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected index 209777cf4d9..b2981db13c2 100644 --- a/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected @@ -30,6 +30,7 @@ ql/java/ql/src/Security/CWE/CWE-094/JexlInjection.ql ql/java/ql/src/Security/CWE/CWE-094/MvelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/SpelInjection.ql ql/java/ql/src/Security/CWE/CWE-094/TemplateInjection.ql +ql/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql ql/java/ql/src/Security/CWE/CWE-1104/MavenPomDependsOnBintray.ql ql/java/ql/src/Security/CWE/CWE-113/NettyResponseSplitting.ql ql/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql @@ -46,6 +47,7 @@ ql/java/ql/src/Security/CWE/CWE-200/AndroidSensitiveTextField.ql ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsFileAccess.ql ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql +ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql ql/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql diff --git a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected index 1f58e51ad80..8045226ace4 100644 --- a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected +++ b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected @@ -1,25 +1,8 @@ -ql/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql -ql/java/ql/src/Advisory/Declarations/NonPrivateField.ql ql/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql ql/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql ql/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql ql/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql ql/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql -ql/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql -ql/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql -ql/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql -ql/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql -ql/java/ql/src/Advisory/Statements/OneStatementPerLine.ql -ql/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql -ql/java/ql/src/Advisory/Types/GenericsConstructor.ql -ql/java/ql/src/Advisory/Types/GenericsReturnType.ql -ql/java/ql/src/Advisory/Types/GenericsVariable.ql ql/java/ql/src/AlertSuppression.ql ql/java/ql/src/AlertSuppressionAnnotations.ql ql/java/ql/src/Architecture/Dependencies/MutualDependency.ql @@ -31,10 +14,6 @@ ql/java/ql/src/Architecture/Refactoring Opportunities/HubClasses.ql ql/java/ql/src/Architecture/Refactoring Opportunities/InappropriateIntimacy.ql ql/java/ql/src/Complexity/BlockWithTooManyStatements.ql ql/java/ql/src/Complexity/ComplexCondition.ql -ql/java/ql/src/DeadCode/DeadClass.ql -ql/java/ql/src/DeadCode/DeadEnumConstant.ql -ql/java/ql/src/DeadCode/DeadField.ql -ql/java/ql/src/DeadCode/DeadMethod.ql ql/java/ql/src/DeadCode/FLinesOfDeadCode.ql ql/java/ql/src/Frameworks/JavaEE/EJB/EjbContainerInterference.ql ql/java/ql/src/Frameworks/JavaEE/EJB/EjbFileIO.ql @@ -66,7 +45,6 @@ ql/java/ql/src/Frameworks/Spring/XML Configuration Errors/MissingSetters.ql ql/java/ql/src/Language Abuse/CastThisToTypeParameter.ql ql/java/ql/src/Language Abuse/DubiousDowncastOfThis.ql ql/java/ql/src/Language Abuse/DubiousTypeTestOfThis.ql -ql/java/ql/src/Language Abuse/EmptyStatement.ql ql/java/ql/src/Language Abuse/EnumIdentifier.ql ql/java/ql/src/Language Abuse/ImplementsAnnotation.ql ql/java/ql/src/Language Abuse/MissedTernaryOpportunity.ql @@ -187,7 +165,6 @@ ql/java/ql/src/Violations of Best Practice/Magic Constants/MagicNumbersUseConsta ql/java/ql/src/Violations of Best Practice/Magic Constants/MagicStringsUseConstant.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverridesNames.ql ql/java/ql/src/Violations of Best Practice/Naming Conventions/LocalShadowsField.ql -ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql ql/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql ql/java/ql/src/Violations of Best Practice/legacy/AutoBoxing.ql ql/java/ql/src/Violations of Best Practice/legacy/FinallyMayNotComplete.ql @@ -196,7 +173,6 @@ ql/java/ql/src/Violations of Best Practice/legacy/ParameterAssignment.ql ql/java/ql/src/Violations of Best Practice/legacy/UnnecessaryCast.ql ql/java/ql/src/Violations of Best Practice/legacy/UnnecessaryImport.ql ql/java/ql/src/definitions.ql -ql/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql ql/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql ql/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql ql/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -214,7 +190,6 @@ ql/java/ql/src/experimental/Security/CWE/CWE-094/ScriptInjection.ql ql/java/ql/src/experimental/Security/CWE/CWE-094/SpringImplicitViewManipulation.ql ql/java/ql/src/experimental/Security/CWE/CWE-094/SpringViewManipulation.ql ql/java/ql/src/experimental/Security/CWE/CWE-1004/InsecureTomcatConfig.ql -ql/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql ql/java/ql/src/experimental/Security/CWE/CWE-200/InsecureWebResourceResponse.ql ql/java/ql/src/experimental/Security/CWE/CWE-200/SensitiveAndroidFileLeak.ql ql/java/ql/src/experimental/Security/CWE/CWE-208/PossibleTimingAttackAgainstSignature.ql @@ -253,14 +228,25 @@ ql/java/ql/src/experimental/Security/CWE/CWE-665/InsecureRmiJmxEnvironmentConfig ql/java/ql/src/experimental/Security/CWE/CWE-755/NFEAndroidDoS.ql ql/java/ql/src/experimental/Security/CWE/CWE-759/HashWithoutSalt.ql ql/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql -ql/java/ql/src/experimental/quantum/Analysis/InsecureNonceSource.ql -ql/java/ql/src/experimental/quantum/Analysis/KnownWeakKDFIterationCount.ql -ql/java/ql/src/experimental/quantum/Analysis/ReusedNonce.ql -ql/java/ql/src/experimental/quantum/Analysis/UnknownKDFIterationCount.ql +ql/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptThenMac.ql +ql/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptToMac.ql +ql/java/ql/src/experimental/quantum/Examples/BadMacOrderMacOnEncryptPlaintext.ql ql/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql +ql/java/ql/src/experimental/quantum/Examples/InsecureIVorNonceSource.ql +ql/java/ql/src/experimental/quantum/Examples/NonAESGCMCipher.ql +ql/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql ql/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql ql/java/ql/src/experimental/quantum/Examples/TestCipher.ql ql/java/ql/src/experimental/quantum/Examples/TestHash.ql +ql/java/ql/src/experimental/quantum/Examples/UnknownHash.ql +ql/java/ql/src/experimental/quantum/Examples/UnknownIVorNonceSource.ql +ql/java/ql/src/experimental/quantum/Examples/UnknownKDFIterationCount.ql +ql/java/ql/src/experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql +ql/java/ql/src/experimental/quantum/Examples/WeakBlockModes.ql +ql/java/ql/src/experimental/quantum/Examples/WeakHash.ql +ql/java/ql/src/experimental/quantum/Examples/WeakKDFIterationCount.ql +ql/java/ql/src/experimental/quantum/Examples/WeakKDFKeySize.ql +ql/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.ql ql/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricAlgorithm.ql ql/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricCipherAlgorithm.ql ql/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricOperationAlgorithm.ql @@ -285,10 +271,6 @@ ql/java/ql/src/external/MostlyDuplicateMethod.ql ql/java/ql/src/external/MostlySimilarFile.ql ql/java/ql/src/filters/ClassifyFiles.ql ql/java/ql/src/meta/frameworks/Coverage.ql -ql/java/ql/src/meta/ssa/AmbiguousToString.ql -ql/java/ql/src/meta/ssa/TooFewPhiInputs.ql -ql/java/ql/src/meta/ssa/UncertainDefWithoutPrior.ql -ql/java/ql/src/meta/ssa/UseWithoutUniqueSsaVariable.ql ql/java/ql/src/utils/modelconverter/ExtractNeutrals.ql ql/java/ql/src/utils/modelconverter/ExtractSinks.ql ql/java/ql/src/utils/modelconverter/ExtractSources.ql diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceA.java b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceA.java new file mode 100644 index 00000000000..b8ffc44dada --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceA.java @@ -0,0 +1,4 @@ + +package somepkg; + +public interface IfaceA extends IfaceB {} diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceB.java b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceB.java new file mode 100644 index 00000000000..6c45ba3dcb3 --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceB.java @@ -0,0 +1,4 @@ + +package somepkg; + +public interface IfaceB extends IfaceC>> {} diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceC.java b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceC.java new file mode 100644 index 00000000000..e75348f1c26 --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceC.java @@ -0,0 +1,4 @@ + +package somepkg; + +public interface IfaceC {} diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceZ.java b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceZ.java new file mode 100644 index 00000000000..b46c132b0e0 --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/somepkg/IfaceZ.java @@ -0,0 +1,6 @@ + +package somepkg; + +public interface IfaceZ { + public IfaceA someFun(); +} diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.kt b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.kt new file mode 100644 index 00000000000..55767ae75f3 --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.kt @@ -0,0 +1,5 @@ +package mypkg + +import somepkg.IfaceZ + +class SomeClass(private val myVal: IfaceZ) { } diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.py b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.py new file mode 100644 index 00000000000..daa246c8c7c --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/test.py @@ -0,0 +1,6 @@ +import commands + +def test(codeql, java_full): + codeql.database.create( + command=["kotlinc somepkg/IfaceA.java somepkg/IfaceB.java somepkg/IfaceC.java somepkg/IfaceZ.java test.kt"] + ) diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.expected b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.expected new file mode 100644 index 00000000000..cf39c2a5457 --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.expected @@ -0,0 +1,19 @@ +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA<> | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA> | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA> | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA> | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA | +| file:///!unknown-binary-location/somepkg/IfaceA.class:0:0:0:0 | IfaceA | +| file:///!unknown-binary-location/somepkg/IfaceB.class:0:0:0:0 | IfaceB | +| file:///!unknown-binary-location/somepkg/IfaceB.class:0:0:0:0 | IfaceB<> | +| file:///!unknown-binary-location/somepkg/IfaceB.class:0:0:0:0 | IfaceB | +| file:///!unknown-binary-location/somepkg/IfaceB.class:0:0:0:0 | IfaceB | +| file:///!unknown-binary-location/somepkg/IfaceB.class:0:0:0:0 | IfaceB | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC<> | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC>> | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC>> | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC>> | +| file:///!unknown-binary-location/somepkg/IfaceC.class:0:0:0:0 | IfaceC> | +| file:///!unknown-binary-location/somepkg/IfaceZ.class:0:0:0:0 | IfaceZ | diff --git a/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.ql b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.ql new file mode 100644 index 00000000000..fad3645276c --- /dev/null +++ b/java/ql/integration-tests/kotlin/all-platforms/recursive_interfaces/types.ql @@ -0,0 +1,5 @@ +import java + +from Type t +where t.getName().matches("Iface%") +select t diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index e15d695efea..e261dbee59e 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,46 @@ +## 7.7.3 + +No user-facing changes. + +## 7.7.2 + +### Minor Analysis Improvements + +* Fields of certain objects are considered tainted if the object is tainted. This holds, for example, for objects that occur directly as sources in the active threat model (for instance, a remote flow source). This has now been amended to also include array types, such that if an array like `MyPojo[]` is a source, then fields of a tainted `MyPojo` are now also considered tainted. + +## 7.7.1 + +No user-facing changes. + +## 7.7.0 + +### New Features + +* The Java extractor and QL libraries now support Java 25. +* Added support for Java 25 compact source files (JEP 512). The new predicate `Class.isImplicit()` identifies classes that are implicitly declared when using compact source files, and the new predicate `CompilationUnit.isCompactSourceFile()` identifies compilation units that contain compact source files. +* Added support for Java 25 module import declarations. +* Add `ModuleImportDeclaration` class. + +### Minor Analysis Improvements + +* Improved support for various assertion libraries, in particular JUnit. This affects the control-flow graph slightly, and in turn affects several queries (mainly quality queries). Most queries should see improved precision (new true positives and fewer false positives), in particular `java/constant-comparison`, `java/index-out-of-bounds`, `java/dereferenced-value-may-be-null`, and `java/useless-null-check`. Some medium precision queries like `java/toctou-race-condition` and `java/unreleased-lock` may see mixed result changes (both slight improvements and slight regressions). +* Added taint flow model for `java.crypto.KDF`. +* Added taint flow model for `java.lang.ScopedValue`. + +## 7.6.1 + +No user-facing changes. + +## 7.6.0 + +### Major Analysis Improvements + +* Added library models for the relevant method calls under `jakarta.servlet.ServletRequest` and `jakarta.servlet.http.HttpServletRequest` as remote flow sources. + +### Minor Analysis Improvements + +* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`. + ## 7.5.0 ### New Features diff --git a/java/ql/lib/change-notes/2025-07-28-guardwrappers.md b/java/ql/lib/change-notes/2025-07-28-guardwrappers.md deleted file mode 100644 index cf976fe7789..00000000000 --- a/java/ql/lib/change-notes/2025-07-28-guardwrappers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`. diff --git a/java/ql/lib/change-notes/released/7.6.0.md b/java/ql/lib/change-notes/released/7.6.0.md new file mode 100644 index 00000000000..6c7a1c3338c --- /dev/null +++ b/java/ql/lib/change-notes/released/7.6.0.md @@ -0,0 +1,9 @@ +## 7.6.0 + +### Major Analysis Improvements + +* Added library models for the relevant method calls under `jakarta.servlet.ServletRequest` and `jakarta.servlet.http.HttpServletRequest` as remote flow sources. + +### Minor Analysis Improvements + +* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`. diff --git a/java/ql/lib/change-notes/released/7.6.1.md b/java/ql/lib/change-notes/released/7.6.1.md new file mode 100644 index 00000000000..fd15c208d88 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.6.1.md @@ -0,0 +1,3 @@ +## 7.6.1 + +No user-facing changes. diff --git a/java/ql/lib/change-notes/released/7.7.0.md b/java/ql/lib/change-notes/released/7.7.0.md new file mode 100644 index 00000000000..f33b45cd74d --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.0.md @@ -0,0 +1,14 @@ +## 7.7.0 + +### New Features + +* The Java extractor and QL libraries now support Java 25. +* Added support for Java 25 compact source files (JEP 512). The new predicate `Class.isImplicit()` identifies classes that are implicitly declared when using compact source files, and the new predicate `CompilationUnit.isCompactSourceFile()` identifies compilation units that contain compact source files. +* Added support for Java 25 module import declarations. +* Add `ModuleImportDeclaration` class. + +### Minor Analysis Improvements + +* Improved support for various assertion libraries, in particular JUnit. This affects the control-flow graph slightly, and in turn affects several queries (mainly quality queries). Most queries should see improved precision (new true positives and fewer false positives), in particular `java/constant-comparison`, `java/index-out-of-bounds`, `java/dereferenced-value-may-be-null`, and `java/useless-null-check`. Some medium precision queries like `java/toctou-race-condition` and `java/unreleased-lock` may see mixed result changes (both slight improvements and slight regressions). +* Added taint flow model for `java.crypto.KDF`. +* Added taint flow model for `java.lang.ScopedValue`. diff --git a/java/ql/lib/change-notes/released/7.7.1.md b/java/ql/lib/change-notes/released/7.7.1.md new file mode 100644 index 00000000000..7349fc621cc --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.1.md @@ -0,0 +1,3 @@ +## 7.7.1 + +No user-facing changes. diff --git a/java/ql/lib/change-notes/released/7.7.2.md b/java/ql/lib/change-notes/released/7.7.2.md new file mode 100644 index 00000000000..43d4f94b816 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.2.md @@ -0,0 +1,5 @@ +## 7.7.2 + +### Minor Analysis Improvements + +* Fields of certain objects are considered tainted if the object is tainted. This holds, for example, for objects that occur directly as sources in the active threat model (for instance, a remote flow source). This has now been amended to also include array types, such that if an array like `MyPojo[]` is a source, then fields of a tainted `MyPojo` are now also considered tainted. diff --git a/java/ql/lib/change-notes/released/7.7.3.md b/java/ql/lib/change-notes/released/7.7.3.md new file mode 100644 index 00000000000..d03e3181a52 --- /dev/null +++ b/java/ql/lib/change-notes/released/7.7.3.md @@ -0,0 +1,3 @@ +## 7.7.3 + +No user-facing changes. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 7ed5cb290ca..6856106e771 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.5.0 +lastReleaseVersion: 7.7.3 diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 1b8f5f4c747..9f6026c4009 100644 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -537,6 +537,10 @@ isLocalClassOrInterface( int parent: @localtypedeclstmt ref ); +isImplicitClass( + unique int classid: @classorinterface ref +); + isDefConstr( int constructorid: @constructor ref ); diff --git a/java/ql/lib/config/semmlecode.dbscheme.stats b/java/ql/lib/config/semmlecode.dbscheme.stats index 650c4649439..d530051f3a4 100644 --- a/java/ql/lib/config/semmlecode.dbscheme.stats +++ b/java/ql/lib/config/semmlecode.dbscheme.stats @@ -13986,6 +13986,17 @@ + + isImplicitClass + 4 + + + classid + 4 + + + + isDefConstr 139376 diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index dc86c463750..c0ddd1ae7fa 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -18,23 +18,18 @@ module JCAModel { abstract class KeyAgreementAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { } + abstract class SignatureAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { } + + abstract class MacAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { } + // TODO: Verify that the PBEWith% case works correctly bindingset[algo] predicate cipher_names(string algo) { algo.toUpperCase() .matches([ "AES", "AESWrap", "AESWrapPad", "ARCFOUR", "Blowfish", "ChaCha20", "ChaCha20-Poly1305", - "DES", "DESede", "DESedeWrap", "ECIES", "PBEWith%", "RC2", "RC4", "RC5", "RSA" - ].toUpperCase()) - } - - // TODO: Verify that the CFB% case works correctly - bindingset[mode] - predicate cipher_modes(string mode) { - mode.toUpperCase() - .matches([ - "NONE", "CBC", "CCM", "CFB", "CFB%", "CTR", "CTS", "ECB", "GCM", "KW", "KWP", "OFB", - "OFB%", "PCBC" + "DES", "DESede", "DESedeWrap", "ECIES", "PBEWith%", "RC2", "RC4", "RC5", "RSA", + "Skipjack", "Idea" ].toUpperCase()) } @@ -50,11 +45,7 @@ module JCAModel { } bindingset[hash] - predicate hash_names(string hash) { - hash.toUpperCase() - .matches(["SHA-%", "SHA3-%", "BLAKE2b%", "BLAKE2s%", "MD5", "RIPEMD160", "Whirlpool"] - .toUpperCase()) - } + predicate hash_names(string hash) { exists(hash_name_to_type_known(hash, _)) } bindingset[kdf] predicate kdf_names(string kdf) { @@ -96,13 +87,26 @@ module JCAModel { name.toUpperCase() .matches([ "HMAC%", "AESCMAC", "DESCMAC", "GMAC", "Poly1305", "SipHash", "BLAKE2BMAC", - "HMACRIPEMD160" + "HMACRIPEMD160", "%CMAC" ].toUpperCase()) } + /** + * Names that match known signature algorithms. + * https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html + */ + bindingset[name] + predicate signature_names(string name) { + name.toUpperCase().splitAt("WITH", 1).matches(["RSA%", "ECDSA%", "DSA%"]) + or + name.toUpperCase() + .matches(["RSASSA-PSS", "ED25519", "ED448", "EDDSA", "ML-DSA%", "HSS/LMS", "DSA"]) + } + bindingset[name] predicate key_agreement_names(string name) { - name.toUpperCase().matches(["DH", "EDH", "ECDH", "X25519", "X448"].toUpperCase()) + name.toUpperCase() + .matches(["DH", "EDH", "ECDH", "X25519", "X448", "ML-KEM%", "XDH"].toUpperCase()) } bindingset[name] @@ -117,41 +121,47 @@ module JCAModel { // TODO: add additional } - bindingset[name] - Crypto::HashType hash_name_to_type_known(string name, int digestLength) { - name = "SHA-1" and result instanceof Crypto::SHA1 and digestLength = 160 - or - name = ["SHA-256", "SHA-384", "SHA-512"] and - result instanceof Crypto::SHA2 and - digestLength = name.splitAt("-", 1).toInt() - or - name = ["SHA3-224", "SHA3-256", "SHA3-384", "SHA3-512"] and - result instanceof Crypto::SHA3 and - digestLength = name.splitAt("-", 1).toInt() - or - ( - name.matches("BLAKE2b%") and - result instanceof Crypto::BLAKE2B + bindingset[nameRaw] + Crypto::HashType hash_name_to_type_known(string nameRaw, int digestLength) { + exists(string name | name = nameRaw.toUpperCase() | + name in ["SHA-1", "SHA1"] and result instanceof Crypto::SHA1 and digestLength = 160 or - name = "BLAKE2s" and result instanceof Crypto::BLAKE2S - ) and - ( - if exists(name.indexOf("-")) - then name.splitAt("-", 1).toInt() = digestLength - else digestLength = 512 + name in ["SHA-256", "SHA-224", "SHA-384", "SHA-512", "SHA224", "SHA256", "SHA384", "SHA512"] and + result instanceof Crypto::SHA2 and + digestLength = name.replaceAll("-", "").splitAt("SHA", 1).toInt() + or + name in ["SHA-512/224", "SHA-512/256", "SHA512/224", "SHA512/256"] and + result instanceof Crypto::SHA2 and + digestLength = name.replaceAll("-", "").splitAt("SHA-512/", 1).toInt() + or + name in ["SHA3-224", "SHA3-256", "SHA3-384", "SHA3-512", "SHA3256", "SHA3384", "SHA3512"] and + result instanceof Crypto::SHA3 and + digestLength = name.replaceAll("-", "").splitAt("SHA3", 1).toInt() + or + ( + name.toUpperCase().matches("BLAKE2B%") and + result instanceof Crypto::BLAKE2B + or + name.toUpperCase() = "BLAKE2S" and result instanceof Crypto::BLAKE2S + ) and + ( + if exists(name.indexOf("-")) + then name.splitAt("-", 1).toInt() = digestLength + else digestLength = 512 + ) + or + name = "MD5" and + result instanceof Crypto::MD5 and + digestLength = 128 + or + name = "RIPEMD160" and + result instanceof Crypto::RIPEMD160 and + digestLength = 160 + or + name = "WHIRLPOOL" and + result instanceof Crypto::WHIRLPOOL and + digestLength = 512 // TODO: verify ) - or - name = "MD5" and - result instanceof Crypto::MD5 and - digestLength = 128 - or - name = "RIPEMD160" and - result instanceof Crypto::RIPEMD160 and - digestLength = 160 - or - name = "Whirlpool" and - result instanceof Crypto::WHIRLPOOL and - digestLength = 512 // TODO: verify } bindingset[name] @@ -171,6 +181,14 @@ module JCAModel { type = KeyOpAlg::SIV() and name = "SIV" or type = KeyOpAlg::OCB() and name = "OCB" + or + type = KeyOpAlg::CFB() and name = "CFB" + or + type = KeyOpAlg::OFB() and name = "OFB" + or + type = KeyOpAlg::PCBC() and name = "PCBC" + or + type = KeyOpAlg::KWP() and name = "KWP" } bindingset[name] @@ -179,7 +197,8 @@ module JCAModel { upper.matches("AES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::AES()) or - upper = "DES" and + // NOTE: there is DES and DESede + upper.matches("DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DES()) or upper = "TRIPLEDES" and @@ -194,6 +213,9 @@ module JCAModel { upper = "CHACHA20" and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::CHACHA20()) or + upper = "RC2" and + type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::RC2()) + or upper = "RC4" and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::RC4()) or @@ -202,15 +224,15 @@ module JCAModel { or upper = "RSA" and type = KeyOpAlg::TAsymmetricCipher(KeyOpAlg::RSA()) + or + upper = "SKIPJACK" and + type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::SKIPJACK()) + or + upper = "BLOWFISH" and + type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::BLOWFISH()) ) } - bindingset[name] - predicate mac_name_to_mac_type_known(Crypto::TMacType type, string name) { - type = Crypto::HMAC() and - name.toUpperCase().matches("HMAC%") - } - bindingset[name] predicate key_agreement_name_to_type_known(Crypto::TKeyAgreementType type, string name) { type = Crypto::DH() and @@ -220,13 +242,48 @@ module JCAModel { name.toUpperCase() = "EDH" or type = Crypto::ECDH() and - name.toUpperCase() in ["ECDH", "X25519", "X448"] + name.toUpperCase() in ["ECDH", "X25519", "X448", "XDH"] + or + type = Crypto::OtherKeyAgreementType() and + name.toUpperCase().matches("ML-KEM%") } /** - * A `StringLiteral` in the `"ALG/MODE/PADDING"` or `"ALG"` format + * Maps a signature algorithm name to its type, if known. + * see https://docs.oracle.com/en/java/javase/25/docs/specs/security/standard-names.html */ - class CipherStringLiteral extends StringLiteral { + bindingset[name] + predicate signature_name_to_type_known(Crypto::KeyOpAlg::TAlgorithm type, string name) { + name.toUpperCase().splitAt("with".toUpperCase(), 1).matches("RSA%") and + type = KeyOpAlg::TAsymmetricCipher(KeyOpAlg::RSA()) + or + name.toUpperCase().splitAt("with".toUpperCase(), 1).matches("ECDSA%") and + type = KeyOpAlg::TSignature(KeyOpAlg::ECDSA()) + or + name.toUpperCase().splitAt("with".toUpperCase(), 1).matches("DSA%") and + type = KeyOpAlg::TSignature(KeyOpAlg::DSA()) + or + name.toUpperCase() = "RSASSA-PSS" and type = KeyOpAlg::TAsymmetricCipher(KeyOpAlg::RSA()) + or + name.toUpperCase().matches(["EDDSA", "ED25519", "ED448"]) and + type = KeyOpAlg::TSignature(KeyOpAlg::EDDSA()) + or + name.toUpperCase().matches("ML-DSA%") and type = KeyOpAlg::TSignature(KeyOpAlg::DSA()) + or + name.toUpperCase() = "HSS/LMS" and type = KeyOpAlg::TSignature(KeyOpAlg::HSS_LMS()) + or + name.toUpperCase() = "DSA" and type = KeyOpAlg::TSignature(KeyOpAlg::DSA()) + } + + bindingset[name] + Crypto::HashType signature_name_to_hash_type_known(string name, int digestLength) { + result = hash_name_to_type_known(name.splitAt("with", 0), digestLength) + } + + /** + * A `JavaConstant` in the `"ALG/MODE/PADDING"` or `"ALG"` format + */ + class CipherStringLiteral extends JavaConstant { CipherStringLiteral() { cipher_names(this.getValue().splitAt("/")) } string getAlgorithmName() { result = this.getValue().splitAt("/", 0) } @@ -269,7 +326,7 @@ module JCAModel { } /** - * Data-flow configuration modelling flow from a cipher string literal to a cipher algorithm consumer. + * Data-flow configuration modeling flow from a cipher string literal to a cipher algorithm consumer. */ private module CipherAlgorithmStringToCipherConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { src.asExpr() instanceof CipherStringLiteral } @@ -351,7 +408,7 @@ module JCAModel { override KeyOpAlg::AlgorithmType getAlgorithmType() { if cipher_name_to_type_known(_, super.getAlgorithmName()) then cipher_name_to_type_known(result, super.getAlgorithmName()) - else result instanceof KeyOpAlg::TUnknownKeyOperationAlgorithmType + else result instanceof KeyOpAlg::TOtherKeyOperationAlgorithmType } override int getKeySizeFixed() { @@ -385,7 +442,7 @@ module JCAModel { override string getRawHashAlgorithmName() { result = super.getPadding() } - override Crypto::THashType getHashFamily() { result = hash_name_to_type_known(hashName, _) } + override Crypto::THashType getHashType() { result = hash_name_to_type_known(hashName, _) } override int getFixedDigestLength() { exists(hash_name_to_type_known(hashName, result)) } } @@ -404,9 +461,7 @@ module JCAModel { * For example, in `Cipher.getInstance(algorithm)`, this class represents `algorithm`. */ class CipherGetInstanceAlgorithmArg extends CipherAlgorithmValueConsumer instanceof Expr { - CipherGetInstanceCall call; - - CipherGetInstanceAlgorithmArg() { this = call.getAlgorithmArg() } + CipherGetInstanceAlgorithmArg() { this = any(CipherGetInstanceCall call).getAlgorithmArg() } override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } @@ -657,29 +712,23 @@ module JCAModel { abstract DataFlow::Node getInputNode(); } + // TODO: for all parametert specs, I think they can be set through the constructor + // and through setter methods class IvParameterSpecInstance extends NonceParameterInstantiation { IvParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("javax.crypto.spec", "IvParameterSpec") + super.getConstructedType().hasQualifiedName("javax.crypto.spec", "IvParameterSpec") } - override DataFlow::Node getInputNode() { - result.asExpr() = this.(ClassInstanceExpr).getArgument(0) - } + override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(0) } } // TODO: this also specifies the tag length for GCM class GCMParameterSpecInstance extends NonceParameterInstantiation { GCMParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("javax.crypto.spec", "GCMParameterSpec") + super.getConstructedType().hasQualifiedName("javax.crypto.spec", "GCMParameterSpec") } - override DataFlow::Node getInputNode() { - result.asExpr() = this.(ClassInstanceExpr).getArgument(1) - } + override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(1) } } class IvParameterSpecGetIvCall extends MethodCall { @@ -805,7 +854,7 @@ module JCAModel { * Flow from a known hash algorithm name to a `MessageDigest.getInstance(sink)` call. */ module KnownHashAlgorithmLiteralToMessageDigestConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { hash_names(src.asExpr().(StringLiteral).getValue()) } + predicate isSource(DataFlow::Node src) { hash_names(src.asExpr().(JavaConstant).getValue()) } predicate isSink(DataFlow::Node sink) { exists(HashAlgorithmValueConsumer consumer | sink = consumer.getInputNode()) @@ -815,20 +864,20 @@ module JCAModel { module KnownHashAlgorithmLiteralToMessageDigestFlow = DataFlow::Global; - class KnownHashAlgorithm extends Crypto::HashAlgorithmInstance instanceof StringLiteral { + class KnownHashAlgorithm extends Crypto::HashAlgorithmInstance instanceof JavaConstant { HashAlgorithmValueConsumer consumer; KnownHashAlgorithm() { - hash_names(this.getValue()) and + hash_names(super.getValue()) and KnownHashAlgorithmLiteralToMessageDigestFlow::flow(DataFlow::exprNode(this), consumer.getInputNode()) } HashAlgorithmValueConsumer getConsumer() { result = consumer } - override string getRawHashAlgorithmName() { result = this.(StringLiteral).getValue() } + override string getRawHashAlgorithmName() { result = super.getValue() } - override Crypto::THashType getHashFamily() { + override Crypto::THashType getHashType() { result = hash_name_to_type_known(this.getRawHashAlgorithmName(), _) } @@ -925,9 +974,7 @@ module JCAModel { class DHGenParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { DHGenParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") + super.getConstructedType().hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") } Expr getPrimeSizeArg() { result = this.getArgument(0) } @@ -937,9 +984,7 @@ module JCAModel { class DSAParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { DSAParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("java.security.spec", "DSAParameterSpec") + super.getConstructedType().hasQualifiedName("java.security.spec", "DSAParameterSpec") } Expr getPArg() { result = this.getArgument(0) } @@ -951,9 +996,7 @@ module JCAModel { class ECGenParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { ECGenParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("java.security.spec", "ECGenParameterSpec") + super.getConstructedType().hasQualifiedName("java.security.spec", "ECGenParameterSpec") } Expr getCurveNameArg() { result = this.getArgument(0) } @@ -963,9 +1006,7 @@ module JCAModel { class RSAGenParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { RSAGenParameterSpecInstance() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("java.security.spec", "RSAGenParameterSpec") + super.getConstructedType().hasQualifiedName("java.security.spec", "RSAGenParameterSpec") } Expr getKeySizeArg() { result = this.getArgument(0) } @@ -989,16 +1030,15 @@ module JCAModel { class ECGenParameterSpecClassInstanceExpr extends KeyGeneratorParameterSpecClassInstanceExpr { ECGenParameterSpecClassInstanceExpr() { - this.(ClassInstanceExpr) - .getConstructedType() - .hasQualifiedName("java.security.spec", "ECGenParameterSpec") + super.getConstructedType().hasQualifiedName("java.security.spec", "ECGenParameterSpec") } Expr getAlgorithmArg() { result = this.getArgument(0) } } class KeyGenerationAlgorithmValueConsumer extends CipherAlgorithmValueConsumer, - KeyAgreementAlgorithmValueConsumer, EllipticCurveAlgorithmValueConsumer instanceof Expr + KeyAgreementAlgorithmValueConsumer, EllipticCurveAlgorithmValueConsumer, + SignatureAlgorithmValueConsumer instanceof Expr { KeyGeneratorGetInstanceCall instantiationCall; @@ -1025,7 +1065,8 @@ module JCAModel { override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { result.(CipherStringLiteralAlgorithmInstance).getConsumer() = this or result.(KeyAgreementStringLiteralAlgorithmInstance).getConsumer() = this or - result.(EllipticCurveStringLiteralInstance).getConsumer() = this + result.(EllipticCurveStringLiteralInstance).getConsumer() = this or + result.(SignatureStringLiteralAlgorithmInstance).getConsumer() = this } KeyGeneratorGetInstanceCall getInstantiationCall() { result = instantiationCall } @@ -1169,7 +1210,7 @@ module JCAModel { } module KDFAlgorithmStringToGetInstanceConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { kdf_names(src.asExpr().(StringLiteral).getValue()) } + predicate isSource(DataFlow::Node src) { kdf_names(src.asExpr().(JavaConstant).getValue()) } predicate isSink(DataFlow::Node sink) { exists(SecretKeyFactoryGetInstanceCall call | sink.asExpr() = call.getAlgorithmArg()) @@ -1210,7 +1251,7 @@ module JCAModel { predicate isIntermediate() { none() } } - class KdfAlgorithmStringLiteral extends Crypto::KeyDerivationAlgorithmInstance instanceof StringLiteral + class KdfAlgorithmStringLiteral extends Crypto::KeyDerivationAlgorithmInstance instanceof JavaConstant { SecretKeyFactoryKDFAlgorithmValueConsumer consumer; @@ -1228,37 +1269,86 @@ module JCAModel { SecretKeyFactoryKDFAlgorithmValueConsumer getConsumer() { result = consumer } } - class Pbkdf2AlgorithmStringLiteral extends KdfAlgorithmStringLiteral, - Crypto::Pbkdf2AlgorithmInstance, Crypto::HmacAlgorithmInstance, Crypto::HashAlgorithmInstance, - Crypto::AlgorithmValueConsumer + class Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral extends Crypto::KeyOperationAlgorithmInstance instanceof KdfAlgorithmStringLiteral { - Pbkdf2AlgorithmStringLiteral() { super.getKdfType() instanceof Crypto::PBKDF2 } - - override Crypto::ConsumerInputDataFlowNode getInputNode() { none() } - - override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { result = this } - - override Crypto::THashType getHashFamily() { - result = hash_name_to_type_known(this.getRawHashAlgorithmName(), _) + Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral() { + this.(JavaConstant).getValue().toUpperCase().matches("PBKDF2WithHmac%".toUpperCase()) } - override int getFixedDigestLength() { - exists(hash_name_to_type_known(this.getRawHashAlgorithmName(), result)) + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + result = KeyOpAlg::TMac(KeyOpAlg::HMAC()) } - override string getRawMacAlgorithmName() { - result = super.getRawKdfAlgorithmName().splitAt("PBKDF2With", 1) + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // TODO: trace to any key size initializer? + none() } - override string getRawHashAlgorithmName() { - result = super.getRawKdfAlgorithmName().splitAt("WithHmac", 1) + override int getKeySizeFixed() { + // TODO: are there known fixed key sizes to consider? + none() } - override Crypto::MacType getMacType() { result = Crypto::HMAC() } + override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() } - override Crypto::AlgorithmValueConsumer getHmacAlgorithmValueConsumer() { result = this } + override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() } - override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { result = this } + override string getRawAlgorithmName() { result = this.(JavaConstant).getValue() } + } + + class Pbkdf2WithHmac_HashAlgorithmStringLiteral extends Crypto::HashAlgorithmInstance instanceof Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral + { + string hashName; + + Pbkdf2WithHmac_HashAlgorithmStringLiteral() { + hashName = this.(JavaConstant).getValue().splitAt("WithHmac", 1) + } + + override string getRawHashAlgorithmName() { result = this.(JavaConstant).getValue() } + + override Crypto::THashType getHashType() { result = hash_name_to_type_known(hashName, _) } + + override int getFixedDigestLength() { exists(hash_name_to_type_known(hashName, result)) } + } + + //TODO: handle PBE "with" cases + class Pbkdf2WithHmac_Pbkdf2AlgorithmInstance extends Crypto::Pbkdf2AlgorithmInstance, + KdfAlgorithmStringLiteral, // this is a parent already, but extending to have immediate access to 'getConsumer()' + Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral + { + override Crypto::AlgorithmValueConsumer getHmacAlgorithmValueConsumer() { + result = this.getConsumer() + } + } + + // NOTE: must use instanceof to avoid non-monotonic recursion + class Pbkdf2WithHmac_HmacAlgorithmInstance extends Crypto::HmacAlgorithmInstance instanceof Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral + { + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + result = this.(KdfAlgorithmStringLiteral).getConsumer() + } + + override int getKeySizeFixed() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getKeySizeFixed() + } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getKeySizeConsumer() + } + + override string getRawAlgorithmName() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getRawAlgorithmName() + } + + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + result = KeyOpAlg::TMac(KeyOpAlg::HMAC()) + } } class SecretKeyFactoryKDFAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer instanceof Expr @@ -1328,12 +1418,12 @@ module JCAModel { GetInstanceInitUseFlowAnalysis; - class KeyAgreementStringLiteral extends StringLiteral { + class KeyAgreementStringLiteral extends JavaConstant { KeyAgreementStringLiteral() { key_agreement_names(this.getValue()) } } /** - * Data-flow configuration modelling flow from a key agreement string literal to a key agreement algorithm consumer. + * Data-flow configuration modeling flow from a key agreement string literal to a key agreement algorithm consumer. */ private module KeyAgreementAlgorithmStringToConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { src.asExpr() instanceof KeyAgreementStringLiteral } @@ -1446,7 +1536,7 @@ module JCAModel { */ module MacKnownAlgorithmToConsumerConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { mac_names(src.asExpr().(StringLiteral).getValue()) } + predicate isSource(DataFlow::Node src) { mac_names(src.asExpr().(JavaConstant).getValue()) } predicate isSink(DataFlow::Node sink) { exists(MacGetInstanceCall call | sink.asExpr() = call.getAlgorithmArg()) @@ -1480,7 +1570,7 @@ module JCAModel { module MacInitCallToMacOperationFlow = DataFlow::Global; - class KnownMacAlgorithm extends Crypto::MacAlgorithmInstance instanceof StringLiteral { + class KnownMacAlgorithm extends Crypto::KeyOperationAlgorithmInstance instanceof JavaConstant { MacGetInstanceAlgorithmValueConsumer consumer; KnownMacAlgorithm() { @@ -1490,13 +1580,78 @@ module JCAModel { MacGetInstanceAlgorithmValueConsumer getConsumer() { result = consumer } - override string getRawMacAlgorithmName() { result = super.getValue() } + override string getRawAlgorithmName() { result = super.getValue() } - override Crypto::MacType getMacType() { - if mac_name_to_mac_type_known(_, super.getValue()) - then mac_name_to_mac_type_known(result, super.getValue()) - else result = Crypto::OtherMacType() + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + if super.getValue().toUpperCase().matches("HMAC%") + then result = KeyOpAlg::TMac(KeyOpAlg::HMAC()) + else + if super.getValue().toUpperCase().matches("%CMAC%") + then result = KeyOpAlg::TMac(KeyOpAlg::CMAC()) + else result = KeyOpAlg::TMac(KeyOpAlg::OtherMacAlgorithmType()) } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // TODO: trace to any key size initializer? + none() + } + + override int getKeySizeFixed() { + // TODO: are there known fixed key sizes to consider? + none() + } + + override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() } + + override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() } + } + + class KnownHmacAlgorithmInstance extends Crypto::HmacAlgorithmInstance instanceof KnownMacAlgorithm + { + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + result = this.(KnownMacAlgorithm).getConsumer() + } + + override int getKeySizeFixed() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getKeySizeFixed() + } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getKeySizeConsumer() + } + + override string getRawAlgorithmName() { + // already defined by parent key operation algorithm, but extending an instance + // still requires we override this method + result = super.getRawAlgorithmName() + } + + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + result = KeyOpAlg::TMac(KeyOpAlg::HMAC()) + } + } + + class KnownMacHashAlgorithm extends Crypto::HashAlgorithmInstance instanceof KnownMacAlgorithm, + JavaConstant + { + Crypto::THashType hashType; + int digestLength; + + KnownMacHashAlgorithm() { + super.getValue().toUpperCase().matches("HMAC%") and + hashType = + hash_name_to_type_known(super.getValue().toUpperCase().splitAt("HMAC", 1), digestLength) + } + + override string getRawHashAlgorithmName() { result = super.getValue() } + + override Crypto::THashType getHashType() { result = hashType } + + override int getFixedDigestLength() { result = digestLength } } class MacGetInstanceCall extends MethodCall { @@ -1528,7 +1683,9 @@ module JCAModel { } } - class MacGetInstanceAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { + class MacGetInstanceAlgorithmValueConsumer extends MacAlgorithmValueConsumer, + HashAlgorithmValueConsumer + { MacGetInstanceAlgorithmValueConsumer() { this = any(MacGetInstanceCall c).getAlgorithmArg() } override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } @@ -1538,7 +1695,7 @@ module JCAModel { } } - class MacOperationCall extends Crypto::MacOperationInstance instanceof MethodCall { + class MacOperationCall extends MethodCall { Expr output; MacOperationCall() { @@ -1548,30 +1705,263 @@ module JCAModel { or super.getMethod().hasStringSignature("doFinal(byte[], int)") and this.getArgument(0) = output + or + super.getMethod().hasStringSignature("update(byte[])") and this = output ) } + predicate isIntermediate() { super.getMethod().getName() = "update" } + + Expr getOutput() { result = output } + + Expr getInput() { + super.getMethod().hasStringSignature("doFinal(byte[])") and result = this.getArgument(0) + or + super.getMethod().hasStringSignature("update(byte[])") and result = this.getArgument(0) + } + } + + module MacFlowAnalysisImpl = + GetInstanceInitUseFlowAnalysis; + + class MacOperationInstance extends Crypto::MacOperationInstance instanceof MacOperationCall { + MacOperationInstance() { not super.isIntermediate() } + + MacGetInstanceCall getInstantiationCall() { + result = MacFlowAnalysisImpl::getInstantiationFromUse(this, _, _) + } + + MacInitCall getInitCall() { result = MacFlowAnalysisImpl::getInitFromUse(this, _, _) } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result.asExpr() = super.getInput() or + result.asExpr() = MacFlowAnalysisImpl::getAnIntermediateUseFromFinalUse(this, _, _).getInput() + } + override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - exists(MacGetInstanceCall instantiation | - instantiation.getOperation() = this and result = instantiation.getAlgorithmArg() - ) + result = this.getInstantiationCall().getAlgorithmArg() } override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { - exists(MacGetInstanceCall instantiation, MacInitCall initCall | - instantiation.getOperation() = this and - initCall.getOperation() = this and - instantiation.getInitCall() = initCall and - result.asExpr() = initCall.getKeyArg() + result.asExpr() = this.getInitCall().getKeyArg() + } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result.asExpr() = super.getOutput() or + result.asExpr() = + MacFlowAnalysisImpl::getAnIntermediateUseFromFinalUse(this, _, _).getOutput() + } + + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + result = this.getInstantiationCall().getAlgorithmArg() + } + + override predicate hasHashAlgorithmConsumer() { + // TODO: do we consider that these operations have no hash and that it is only associated to the mac algorithm node? + // in JCA that seems to be correct, but would removing the hash consumer here break things generally? + this.getHashAlgorithmValueConsumer() + .getAKnownAlgorithmSource() + .(Crypto::KeyOperationAlgorithmInstance) + .getAlgorithmType() = KeyOpAlg::TMac(KeyOpAlg::HMAC()) + } + + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { + result instanceof Crypto::TMacMode + } + + override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { none() } + } + + /** + * Signatures + */ + module SignatureKnownAlgorithmToConsumerConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { src.asExpr() instanceof SignatureStringLiteral } + + predicate isSink(DataFlow::Node sink) { + sink = any(SignatureAlgorithmValueConsumer call).getInputNode() + } + } + + module SignatureKnownAlgorithmToConsumerFlow = + TaintTracking::Global; + + class SignatureGetInstanceCall extends MethodCall { + SignatureGetInstanceCall() { + this.getCallee().hasQualifiedName("java.security", "Signature", "getInstance") + } + + Expr getAlgorithmArg() { result = this.getArgument(0) } + } + + class SignatureGetInstanceAlgorithmValueConsumer extends SignatureAlgorithmValueConsumer instanceof Expr + { + SignatureGetInstanceAlgorithmValueConsumer() { + this = any(SignatureGetInstanceCall c).getAlgorithmArg() + } + + override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } + + override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { + result.(SignatureStringLiteralAlgorithmInstance).getConsumer() = this + } + } + + class SignatureStringLiteral extends JavaConstant { + SignatureStringLiteral() { signature_names(this.getValue()) } + } + + class SignatureStringLiteralAlgorithmInstance extends Crypto::KeyOperationAlgorithmInstance instanceof SignatureStringLiteral + { + SignatureAlgorithmValueConsumer consumer; + + SignatureStringLiteralAlgorithmInstance() { + SignatureKnownAlgorithmToConsumerFlow::flow(DataFlow::exprNode(this), consumer.getInputNode()) + } + + SignatureAlgorithmValueConsumer getConsumer() { result = consumer } + + override string getRawAlgorithmName() { result = super.getValue() } + + override Crypto::KeyOpAlg::AlgorithmType getAlgorithmType() { + if signature_name_to_type_known(_, super.getValue()) + then signature_name_to_type_known(result, super.getValue()) + else result = Crypto::KeyOpAlg::TOtherKeyOperationAlgorithmType() + } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + // TODO: trace to any key size initializer? + none() + } + + override int getKeySizeFixed() { + // TODO: are there known fixed key sizes to consider? + none() + } + + override Crypto::ModeOfOperationAlgorithmInstance getModeOfOperationAlgorithm() { none() } + + override Crypto::PaddingAlgorithmInstance getPaddingAlgorithm() { none() } + } + + class SignatureHashAlgorithmInstance extends Crypto::HashAlgorithmInstance instanceof SignatureStringLiteralAlgorithmInstance + { + Crypto::THashType hashType; + int digestLength; + + SignatureHashAlgorithmInstance() { + hashType = signature_name_to_hash_type_known(this.(JavaConstant).getValue(), digestLength) + } + + override string getRawHashAlgorithmName() { result = this.(JavaConstant).getValue() } + + override Crypto::THashType getHashType() { result = hashType } + + override int getFixedDigestLength() { result = digestLength } + } + + class SignatureInitCall extends MethodCall { + SignatureInitCall() { + this.getCallee().hasQualifiedName("java.security", "Signature", ["initSign", "initVerify"]) + } + + Expr getKeyArg() { + result = this.getArgument(0) + // TODO: verify can take in a certificate too? + } + } + + class SignatureOperationCall extends MethodCall { + SignatureOperationCall() { + this.getMethod().hasQualifiedName("java.security", "Signature", ["update", "sign", "verify"]) + } + + predicate isIntermediate() { super.getMethod().getName() = "update" } + + Expr getMsgInput() { result = this.getArgument(0) and this.getMethod().getName() = "update" } + + Expr getSignatureOutput() { + // no args, the signature is returned + result = this and this.getMethod().getName() = "sign" and not exists(this.getArgument(0)) + or + // with args, the signature is written to the arg + result = this.getArgument(0) and this.getMethod().getName() = "sign" + } + + Expr getSignatureInput() { + result = this.getArgument(0) and this.getMethod().getName() = "verify" + } + + Crypto::KeyOperationSubtype getSubtype() { + result instanceof Crypto::TSignMode and this.getMethod().getName() = "sign" + or + result instanceof Crypto::TVerifyMode and this.getMethod().getName() = "verify" + } + } + + class SignatureOperationInstance extends Crypto::SignatureOperationInstance instanceof SignatureOperationCall + { + SignatureOperationInstance() { + // exclude update (only include sign and verify) + not super.isIntermediate() + } + + SignatureGetInstanceCall getInstantiationCall() { + result = SignatureFlowAnalysisImpl::getInstantiationFromUse(this, _, _) + } + + SignatureInitCall getInitCall() { + result = SignatureFlowAnalysisImpl::getInitFromUse(this, _, _) + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result.asExpr() = super.getMsgInput() or + result.asExpr() = + SignatureFlowAnalysisImpl::getAnIntermediateUseFromFinalUse(this, _, _).getMsgInput() + } + + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { + result.asExpr() = this.getInitCall().getKeyArg() + } + + override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { + result = this.getInstantiationCall().getAlgorithmArg() + } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result.asExpr() = super.getSignatureOutput() or + result.asExpr() = + SignatureFlowAnalysisImpl::getAnIntermediateUseFromFinalUse(this, _, _).getSignatureOutput() + } + + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + // TODO: RSASSA-PSS literal sets hashes differently, through a ParameterSpec + result = this.getInstantiationCall().getAlgorithmArg() + } + + override predicate hasHashAlgorithmConsumer() { + // All jca signature algorithms specify a hash unless explicitly set as "NONEwith..." + exists(SignatureStringLiteralAlgorithmInstance i | + i.getConsumer() = this.getAnAlgorithmValueConsumer() and + not i.getRawAlgorithmName().toUpperCase().matches("NONEwith%".toUpperCase()) ) } - override Crypto::ConsumerInputDataFlowNode getMessageConsumer() { - result.asExpr() = super.getArgument(0) and - super.getMethod().getParameterType(0).hasName("byte[]") + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { result = super.getSubtype() } + + override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { none() } + + override Crypto::ConsumerInputDataFlowNode getSignatureConsumer() { + result.asExpr() = super.getSignatureInput() or + result.asExpr() = + SignatureFlowAnalysisImpl::getAnIntermediateUseFromFinalUse(this, _, _).getSignatureInput() } } + module SignatureFlowAnalysisImpl = + GetInstanceInitUseFlowAnalysis; + /* * Elliptic Curves (EC) */ @@ -1586,7 +1976,7 @@ module JCAModel { module EllipticCurveStringToConsumerFlow = DataFlow::Global; - class EllipticCurveStringLiteral extends StringLiteral { + class EllipticCurveStringLiteral extends JavaConstant { EllipticCurveStringLiteral() { elliptic_curve_names(this.getValue()) } } @@ -1600,7 +1990,7 @@ module JCAModel { override string getRawEllipticCurveName() { result = super.getValue() } - override Crypto::EllipticCurveFamilyType getEllipticCurveFamilyType() { + override Crypto::EllipticCurveType getEllipticCurveType() { if Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), _, _) then diff --git a/java/ql/lib/experimental/quantum/Language.qll b/java/ql/lib/experimental/quantum/Language.qll index 975a8ad8e1f..bcc8b62ca87 100644 --- a/java/ql/lib/experimental/quantum/Language.qll +++ b/java/ql/lib/experimental/quantum/Language.qll @@ -30,7 +30,7 @@ module CryptoInput implements InputSig { class UnknownLocation = UnknownDefaultLocation; string locationToFileBaseNameAndLineNumberString(Location location) { - result = location.getFile().getBaseName() + ":" + location.getStartLine() + result = location.toString() } LocatableElement dfn_to_element(DataFlow::Node node) { @@ -55,7 +55,18 @@ final class DefaultRemoteFlowSource = RemoteFlowSource; private class GenericUnreferencedParameterSource extends Crypto::GenericUnreferencedParameterSource { GenericUnreferencedParameterSource() { - exists(Parameter p | this = p and not exists(p.getAnArgument())) + exists(Parameter p | + this = p and + not exists(p.getAnArgument()) + // or + // // TODO: this is test code which causes regression in unit tests, but will + // // find sources where ordinarily a source might be missing + // // If all calls to a function occur in a test file, ignore those calls + // // and consider the parameter to the function a potential source as well. + // forall(Call testCall | testCall.getCallee() = p.getCallable() | + // testCall.getFile().getBaseName().toUpperCase().matches("%TEST%") + // ) + ) } override predicate flowsTo(Crypto::FlowAwareElement other) { @@ -93,8 +104,54 @@ private class GenericRemoteDataSource extends Crypto::GenericRemoteDataSource { override string getAdditionalDescription() { result = this.toString() } } -private class ConstantDataSource extends Crypto::GenericConstantSourceInstance instanceof Literal { - ConstantDataSource() { +import semmle.code.java.frameworks.Properties +private import semmle.code.configfiles.ConfigFiles + +/** + * A class to represent constants in Java code, either literals or + * values retrieved from properties files. + * Java CodeQL does not consider the values of known properties to be literals, + * hence we need to model both literals and property calls. + */ +class JavaConstant extends Expr { + string value; + + JavaConstant() { + // If arg 0 in a getProperty call, consider it a literal only if + // we haven't resolved it to a known property value, otherwise + // use the resolved config value. + // If getProperty is used, always assume the default value is potentially used. + // CAVEAT/ASSUMPTION: this assumes the literal is immediately known at arg0 + // of a getProperty call. + // also if the properties file is reloaded in a way where the reloaded file + // wouldn't have the property but the original does, we would erroneously + // consider the literal to be mapped to that property value. + exists(ConfigPair p, PropertiesGetPropertyMethodCall c | + c.getArgument(0).(Literal).getValue() = p.getNameElement().getName() and + value = p.getValueElement().getValue() and + this = c + ) + or + // in this case, the property value is not known, use the literal property name as the value + exists(PropertiesGetPropertyMethodCall c | + value = c.getArgument(0).(Literal).getValue() and + not exists(ConfigPair p | + c.getArgument(0).(Literal).getValue() = p.getNameElement().getName() + ) and + this = c + ) + or + // in this case, there is not propery getter, we just have a literal + not exists(PropertiesGetPropertyMethodCall c | c.getArgument(0) = this) and + value = this.(Literal).getValue() + } + + string getValue() { result = value } +} + +private class ConstantDataSourceLiteral extends Crypto::GenericConstantSourceInstance instanceof JavaConstant +{ + ConstantDataSourceLiteral() { // TODO: this is an API specific workaround for JCA, as 'EC' is a constant that may be used // where typical algorithms are specified, but EC specifically means set up a // default curve container, that will later be specified explicitly (or if not a default) @@ -112,8 +169,22 @@ private class ConstantDataSource extends Crypto::GenericConstantSourceInstance i override string getAdditionalDescription() { result = this.toString() } } +private class ConstantDataSourceArrayInitializer extends Crypto::GenericConstantSourceInstance instanceof ArrayInit +{ + ConstantDataSourceArrayInitializer() { this.getAnInit() instanceof Literal } + + override DataFlow::Node getOutputNode() { result.asExpr() = this } + + override predicate flowsTo(Crypto::FlowAwareElement other) { + // TODO: separate config to avoid blowing up data-flow analysis + GenericDataSourceFlow::flow(this.getOutputNode(), other.getInputNode()) + } + + override string getAdditionalDescription() { result = this.toString() } +} + /** - * An instance of random number generation, modelled as the expression + * An instance of random number generation, modeled as the expression * tied to an output node (i.e., the result of the source of randomness) */ abstract class RandomnessInstance extends Crypto::RandomNumberGenerationInstance { @@ -215,7 +286,7 @@ module ArtifactFlowConfig implements DataFlow::ConfigSig { module GenericDataSourceFlow = TaintTracking::Global; -module ArtifactFlow = DataFlow::Global; +module ArtifactFlow = TaintTracking::Global; // Import library-specific modeling import JCA diff --git a/java/ql/lib/ext/jakarta.servlet.http.model.yml b/java/ql/lib/ext/jakarta.servlet.http.model.yml index 5a83b1ac08d..fabbe4a3eb0 100644 --- a/java/ql/lib/ext/jakarta.servlet.http.model.yml +++ b/java/ql/lib/ext/jakarta.servlet.http.model.yml @@ -4,3 +4,15 @@ extensions: extensible: sourceModel data: - ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeader", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeaderNames", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeaders", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameter", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterMap", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterNames", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterValues", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getPathInfo", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getQueryString", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getRemoteUser", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "remote", "manual"] diff --git a/java/ql/lib/ext/jakarta.servlet.model.yml b/java/ql/lib/ext/jakarta.servlet.model.yml index be2feeb3c37..ad1a38bb4bf 100644 --- a/java/ql/lib/ext/jakarta.servlet.model.yml +++ b/java/ql/lib/ext/jakarta.servlet.model.yml @@ -1,4 +1,14 @@ extensions: + - addsTo: + pack: codeql/java-all + extensible: sourceModel + data: + - ["jakarta.servlet", "ServletRequest", False, "getInputStream", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet", "ServletRequest", False, "getParameter", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet", "ServletRequest", False, "getParameterMap", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet", "ServletRequest", False, "getParameterNames", "()", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet", "ServletRequest", False, "getParameterValues", "(String)", "", "ReturnValue", "remote", "manual"] + - ["jakarta.servlet", "ServletRequest", False, "getReader", "()", "", "ReturnValue", "remote", "manual"] - addsTo: pack: codeql/java-all extensible: sinkModel diff --git a/java/ql/lib/ext/java.lang.scoped.model.yml b/java/ql/lib/ext/java.lang.scoped.model.yml new file mode 100644 index 00000000000..3eeae5a5b1f --- /dev/null +++ b/java/ql/lib/ext/java.lang.scoped.model.yml @@ -0,0 +1,19 @@ +extensions: + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["java.lang", "ScopedValue", False, "where", "(ScopedValue,Object)", "", "Argument[1]", "Argument[0].SyntheticField[java.lang.ScopedValue.boundValue]", "value", "manual"] + - ["java.lang", "ScopedValue", True, "get", "()", "", "Argument[this].SyntheticField[java.lang.ScopedValue.boundValue]", "ReturnValue", "value", "manual"] + - ["java.lang", "ScopedValue", False, "where", "(ScopedValue,Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.lang", "ScopedValue$Carrier", False, "where", "(ScopedValue,Object)", "", "Argument[1]", "Argument[0].SyntheticField[java.lang.ScopedValue.boundValue]", "value", "manual"] + - ["java.lang", "ScopedValue$Carrier", False, "where", "(ScopedValue,Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["java.lang", "ScopedValue$Carrier", False, "run", "(Runnable)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["java.lang", "ScopedValue$Carrier", False, "call", "(Callable)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + + - addsTo: + pack: codeql/java-all + extensible: neutralModel + data: + - ["java.lang", "ScopedValue", "newInstance", "()", "summary", "manual"] + - ["java.lang", "ScopedValue", "isBound", "()", "summary", "manual"] \ No newline at end of file diff --git a/java/ql/lib/ext/javax.crypto.model.yml b/java/ql/lib/ext/javax.crypto.model.yml index 2b3bfc1abe8..0a2d43fce17 100644 --- a/java/ql/lib/ext/javax.crypto.model.yml +++ b/java/ql/lib/ext/javax.crypto.model.yml @@ -7,6 +7,21 @@ extensions: - ["javax.crypto", "Cipher", True, "init", "(int,Key,AlgorithmParameterSpec,SecureRandom)", "", "Argument[2]", "encryption-iv", "manual"] - ["javax.crypto", "Cipher", False, "unwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] - ["javax.crypto", "CipherSpi", True, "engineUnwrap", "(byte[],String,int)", "", "Argument[0]", "credentials-key", "hq-generated"] + - addsTo: + pack: codeql/java-all + extensible: summaryModel + data: + - ["javax.crypto", "KDF", False, "getInstance", "(String)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", False, "getInstance", "(String,Provider)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", False, "getInstance", "(String,String)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", False, "getInstance", "(String,KDFParameters)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", False, "getInstance", "(String,KDFParameters,Provider)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", False, "getInstance", "(String,KDFParameters,String)", "", "Argument[0]", "ReturnValue.SyntheticField[javax.crypto.KDF.algorithm]", "value", "manual"] + - ["javax.crypto", "KDF", True, "getAlgorithm", "()", "", "Argument[this].SyntheticField[javax.crypto.KDF.algorithm]", "ReturnValue", "value", "manual"] + - ["javax.crypto", "KDF", True, "getProvider", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "KDF", True, "deriveKey", "(String,AlgorithmParameterSpec)", "", "Argument[1]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "KDF", True, "deriveData", "(AlgorithmParameterSpec)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto", "SecretKey", True, "getEncoded", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - addsTo: pack: codeql/java-all extensible: neutralModel diff --git a/java/ql/lib/ext/javax.crypto.spec.model.yml b/java/ql/lib/ext/javax.crypto.spec.model.yml index d2b7dbc99b8..e51c27c5088 100644 --- a/java/ql/lib/ext/javax.crypto.spec.model.yml +++ b/java/ql/lib/ext/javax.crypto.spec.model.yml @@ -7,6 +7,21 @@ extensions: - ["javax.crypto.spec", "GCMParameterSpec", True, "GCMParameterSpec", "", "", "Argument[1]", "Argument[this]", "taint", "manual"] - ["javax.crypto.spec", "RC2ParameterSpec", True, "RC2ParameterSpec", "", "", "Argument[1]", "Argument[this]", "taint", "manual"] - ["javax.crypto.spec", "RC5ParameterSpec", True, "RC5ParameterSpec", "", "", "Argument[3]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addIKM", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addIKM", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addIKM", "(SecretKey)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addIKM", "(SecretKey)", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addSalt", "(byte[])", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addSalt", "(byte[])", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addSalt", "(SecretKey)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "addSalt", "(SecretKey)", "", "Argument[this]", "ReturnValue", "value", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "thenExpand", "(byte[],int)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "thenExpand", "(byte[],int)", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec$Builder", True, "thenExpand", "(byte[],int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec", False, "expandOnly", "(SecretKey,byte[],int)", "", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["javax.crypto.spec", "HKDFParameterSpec", False, "expandOnly", "(SecretKey,byte[],int)", "", "Argument[1]", "ReturnValue", "taint", "manual"] + - ["javax.crypto.spec", "SecretKeySpec", False, "SecretKeySpec", "(byte[],String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["javax.crypto.spec", "SecretKeySpec", False, "SecretKeySpec", "(byte[],int,int,String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - addsTo: pack: codeql/java-all extensible: sinkModel diff --git a/java/ql/lib/printAst.ql b/java/ql/lib/printAst.ql index cd72403de90..8ea0efaed5f 100644 --- a/java/ql/lib/printAst.ql +++ b/java/ql/lib/printAst.ql @@ -18,8 +18,8 @@ external string selectedSourceFile(); class PrintAstConfigurationOverride extends PrintAstConfiguration { /** - * Holds if the location matches the selected file in the VS Code extension and - * the element is `fromSource`. + * Holds if the location `l` matches the selected file in the VS Code extension and + * the element `e` is `fromSource`. */ override predicate shouldPrint(Element e, Location l) { super.shouldPrint(e, l) and diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 0e69cc38681..bcfc194a4cb 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.5.1-dev +version: 7.7.4-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll index 0c69f45c56f..1655ed2d648 100644 --- a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll +++ b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll @@ -70,7 +70,12 @@ class ConfigValue extends @configValue, ConfigLocatable { override string toString() { result = this.getValue() } } +/** A `.properties` file. */ +class PropertiesFile extends File { + PropertiesFile() { this.getExtension() = "properties" } +} + /** A Java property is a name-value pair in a `.properties` file. */ class JavaProperty extends ConfigPair { - JavaProperty() { this.getFile().getExtension() = "properties" } + JavaProperty() { this.getFile() instanceof PropertiesFile } } diff --git a/java/ql/lib/semmle/code/java/CompilationUnit.qll b/java/ql/lib/semmle/code/java/CompilationUnit.qll index 546c3d26ea3..5b26828b47c 100644 --- a/java/ql/lib/semmle/code/java/CompilationUnit.qll +++ b/java/ql/lib/semmle/code/java/CompilationUnit.qll @@ -33,5 +33,13 @@ class CompilationUnit extends Element, File { */ Module getModule() { cumodule(this, result) } + /** + * Holds if this compilation unit represents a compact source file. + * A compact source file contains an implicitly declared top-level class. + */ + predicate isCompactSourceFile() { + exists(Class c | c.getCompilationUnit() = this and c.isImplicit()) + } + override string getAPrimaryQlClass() { result = "CompilationUnit" } } diff --git a/java/ql/lib/semmle/code/java/Concurrency.qll b/java/ql/lib/semmle/code/java/Concurrency.qll index 0e510db3443..da2783bc308 100644 --- a/java/ql/lib/semmle/code/java/Concurrency.qll +++ b/java/ql/lib/semmle/code/java/Concurrency.qll @@ -2,6 +2,57 @@ overlay[local?] module; import java +import semmle.code.java.frameworks.Mockito + +/** + * A Java type representing a lock. + * We identify a lock type as one that has both `lock` and `unlock` methods. + */ +class LockType extends RefType { + LockType() { + this.getAMethod().hasName("lock") and + this.getAMethod().hasName("unlock") + } + + /** Gets a method that is locking this lock type. */ + private Method getLockMethod() { + result.getDeclaringType() = this and + result.hasName(["lock", "lockInterruptibly", "tryLock"]) + } + + /** Gets a method that is unlocking this lock type. */ + private Method getUnlockMethod() { + result.getDeclaringType() = this and + result.hasName("unlock") + } + + /** Gets an `isHeldByCurrentThread` method of this lock type. */ + private Method getIsHeldByCurrentThreadMethod() { + result.getDeclaringType() = this and + result.hasName("isHeldByCurrentThread") + } + + /** Gets a call to a method that is locking this lock type. */ + MethodCall getLockAccess() { + result.getMethod() = this.getLockMethod() and + // Not part of a Mockito verification call + not result instanceof MockitoVerifiedMethodCall + } + + /** Gets a call to a method that is unlocking this lock type. */ + MethodCall getUnlockAccess() { + result.getMethod() = this.getUnlockMethod() and + // Not part of a Mockito verification call + not result instanceof MockitoVerifiedMethodCall + } + + /** Gets a call to a method that checks if the lock is held by the current thread. */ + MethodCall getIsHeldByCurrentThreadAccess() { + result.getMethod() = this.getIsHeldByCurrentThreadMethod() and + // Not part of a Mockito verification call + not result instanceof MockitoVerifiedMethodCall + } +} /** * Holds if `e` is synchronized by a local synchronized statement `sync` on the variable `v`. @@ -26,7 +77,8 @@ predicate locallySynchronizedOnThis(Expr e, RefType thisType) { } /** - * Holds if `e` is synchronized by a `synchronized` modifier on the enclosing (static) method. + * Holds if `e` is synchronized by a `synchronized` modifier on the enclosing (static) method + * declared in the type `classType`. */ predicate locallySynchronizedOnClass(Expr e, RefType classType) { exists(SynchronizedCallable c | c = e.getEnclosingCallable() | @@ -48,3 +100,136 @@ class SynchronizedCallable extends Callable { ) } } + +/** + * This module provides predicates, chiefly `locallyMonitors`, to check if a given expression is synchronized on a specific monitor. + */ +module Monitors { + /** + * A monitor is any object that is used to synchronize access to a shared resource. + * This includes locks as well as variables used in synchronized blocks (including `this`). + */ + newtype TMonitor = + /** Either a lock or a variable used in a synchronized block. */ + TVariableMonitor(Variable v) { + v.getType() instanceof LockType or locallySynchronizedOn(_, _, v) + } or + /** An instance reference used as a monitor. */ + TInstanceMonitor(RefType thisType) { locallySynchronizedOnThis(_, thisType) } or + /** A class used as a monitor. */ + TClassMonitor(RefType classType) { locallySynchronizedOnClass(_, classType) } + + /** + * A monitor is any object that is used to synchronize access to a shared resource. + * This includes locks as well as variables used in synchronized blocks (including `this`). + */ + class Monitor extends TMonitor { + /** Gets the location of this monitor. */ + abstract Location getLocation(); + + /** Gets a textual representation of this element. */ + abstract string toString(); + } + + /** + * A variable used as a monitor. + * The variable is either a lock or is used in a synchronized block. + * E.g `synchronized (m) { ... }` or `m.lock();` + */ + class VariableMonitor extends Monitor, TVariableMonitor { + override Location getLocation() { result = this.getVariable().getLocation() } + + override string toString() { result = "VariableMonitor(" + this.getVariable().toString() + ")" } + + /** Gets the variable being used as a monitor. */ + Variable getVariable() { this = TVariableMonitor(result) } + } + + /** + * An instance reference used as a monitor. + * Either via `synchronized (this) { ... }` or by marking a non-static method as `synchronized`. + */ + class InstanceMonitor extends Monitor, TInstanceMonitor { + override Location getLocation() { result = this.getThisType().getLocation() } + + override string toString() { result = "InstanceMonitor(" + this.getThisType().toString() + ")" } + + /** Gets the instance reference being used as a monitor. */ + RefType getThisType() { this = TInstanceMonitor(result) } + } + + /** + * A class used as a monitor. + * This is achieved by marking a static method as `synchronized`. + */ + class ClassMonitor extends Monitor, TClassMonitor { + override Location getLocation() { result = this.getClassType().getLocation() } + + override string toString() { result = "ClassMonitor(" + this.getClassType().toString() + ")" } + + /** Gets the class being used as a monitor. */ + RefType getClassType() { this = TClassMonitor(result) } + } + + /** Holds if the expression `e` is synchronized on the monitor `m`. */ + predicate locallyMonitors(Expr e, Monitor m) { + exists(Variable v | v = m.(VariableMonitor).getVariable() | + locallyLockedOn(e, v) + or + locallySynchronizedOn(e, _, v) + ) + or + locallySynchronizedOnThis(e, m.(InstanceMonitor).getThisType()) + or + locallySynchronizedOnClass(e, m.(ClassMonitor).getClassType()) + } + + /** Gets the control flow node that must dominate `e` when `e` is synchronized on a lock. */ + ControlFlowNode getNodeToBeDominated(Expr e) { + // If `e` is the LHS of an assignment, use the control flow node for the assignment + exists(Assignment asgn | asgn.getDest() = e | result = asgn.getControlFlowNode()) + or + // if `e` is not the LHS of an assignment, use the default control flow node + not exists(Assignment asgn | asgn.getDest() = e) and + result = e.getControlFlowNode() + } + + /** A field storing a lock. */ + class LockField extends Field { + LockField() { this.getType() instanceof LockType } + + /** Gets a call to a method locking the lock stored in this field. */ + MethodCall getLockCall() { + result.getQualifier() = this.getRepresentative().getAnAccess() and + result = this.getType().(LockType).getLockAccess() + } + + /** Gets a call to a method unlocking the lock stored in this field. */ + MethodCall getUnlockCall() { + result.getQualifier() = this.getRepresentative().getAnAccess() and + result = this.getType().(LockType).getUnlockAccess() + } + + /** + * Gets a variable representing this field. + * It can be the field itself or a local variable initialized to the field. + */ + private Variable getRepresentative() { + result = this + or + result.getInitializer() = this.getAnAccess() + } + } + + /** Holds if `e` is synchronized on the `Lock` `lock` by a locking call. */ + predicate locallyLockedOn(Expr e, LockField lock) { + exists(MethodCall lockCall, MethodCall unlockCall | + lockCall = lock.getLockCall() and + unlockCall = lock.getUnlockCall() + | + dominates(lockCall.getControlFlowNode(), unlockCall.getControlFlowNode()) and + dominates(lockCall.getControlFlowNode(), getNodeToBeDominated(e)) and + postDominates(unlockCall.getControlFlowNode(), getNodeToBeDominated(e)) + ) + } +} diff --git a/java/ql/lib/semmle/code/java/ConflictingAccess.qll b/java/ql/lib/semmle/code/java/ConflictingAccess.qll new file mode 100644 index 00000000000..ceff3e4ffa3 --- /dev/null +++ b/java/ql/lib/semmle/code/java/ConflictingAccess.qll @@ -0,0 +1,286 @@ +/** + * Provides classes and predicates for detecting conflicting accesses in the sense of the Java Memory Model. + */ +overlay[local?] +module; + +import java +import Concurrency + +/** Provides predicates, chiefly `isModifying`, to check if a given expression modifies a shared resource. */ +module Modification { + import semmle.code.java.dataflow.FlowSummary + + /** Holds if the field access `a` modifies a shared resource. */ + predicate isModifying(FieldAccess a) { + a.isVarWrite() + or + exists(Call c | c.(MethodCall).getQualifier() = a | isModifyingCall(c)) + or + exists(ArrayAccess aa, Assignment asa | aa.getArray() = a | asa.getDest() = aa) + } + + /** Holds if the call `c` modifies a shared resource. */ + predicate isModifyingCall(Call c) { + exists(SummarizedCallable sc, string output | sc.getACall() = c | + sc.propagatesFlow(_, output, _, _) and + output.matches("Argument[this]%") + ) + } +} + +/** Holds if the type `t` is thread-safe. */ +predicate isThreadSafeType(Type t) { + t.(RefType).getSourceDeclaration().getName().matches(["Atomic%", "Concurrent%"]) + or + t.(RefType).getSourceDeclaration().getName() = "ThreadLocal" + or + // Anything in `java.util.concurrent` is thread safe. + // See https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html#MemoryVisibility + t.(RefType).getPackage().getName() = "java.util.concurrent" + or + t instanceof ClassAnnotatedAsThreadSafe +} + +/** Holds if the expression `e` is a thread-safe initializer. */ +private predicate isThreadSafeInitializer(Expr e) { + exists(string name | + e.(Call).getCallee().getSourceDeclaration().hasQualifiedName("java.util", "Collections", name) + | + name.matches("synchronized%") + ) +} + +/** + * A field that is exposed to potential data races. + * We require the field to be in a class that is annotated as `@ThreadSafe`. + */ +class ExposedField extends Field { + ExposedField() { + this.getDeclaringType() instanceof ClassAnnotatedAsThreadSafe and + not this.isVolatile() and + // field is not a lock + not this.getType() instanceof LockType and + // field is not thread-safe + not isThreadSafeType(this.getType()) and + not isThreadSafeType(this.getInitializer().getType()) and + // the initializer guarantees thread safety + not isThreadSafeInitializer(this.getInitializer()) + } +} + +/** + * A field access that is exposed to potential data races. + * We require the field to be in a class that is annotated as `@ThreadSafe`. + */ +class ExposedFieldAccess extends FieldAccess { + ExposedFieldAccess() { + // access is to an exposed field + this.getField() instanceof ExposedField and + // access is not the initializer of the field + not this.(VarWrite).getASource() = this.getField().getInitializer() and + // access not in a constructor + not this.getEnclosingCallable() = this.getField().getDeclaringType().getAConstructor() and + // not a field on a local variable + not this.getQualifier+().(VarAccess).getVariable() instanceof LocalVariableDecl and + // not the variable mentioned in a synchronized statement + not this = any(SynchronizedStmt sync).getExpr() + } +} + +/** + * A class annotated as `@ThreadSafe`. + * Provides predicates to check for concurrency issues. + */ +class ClassAnnotatedAsThreadSafe extends Class { + ClassAnnotatedAsThreadSafe() { this.getAnAnnotation().getType().getName() = "ThreadSafe" } + + // We wish to find conflicting accesses that are reachable from public methods + // and to know which monitors protect them. + // + // It is very easy and natural to write a predicate for conflicting accesses, + // but that would be binary, and hence not suited for reachability analysis. + // + // It is also easy to state that all accesses to a field are protected by a single monitor, + // but that would require a forall, which is not suited for recursion. + // (The recursion occurs for example as you traverse the access path and keep requiring that all tails are protected.) + // + // We therefore use a dual solution: + // - We write a unary recursive predicate for accesses that are not protected by any monitor. + // Any such write access, reachable from a public method, is conflicting with itself. + // And any such read will be conflicting with any publicly reachable write access (locked or not). + // + // - We project the above predicate down to fields, so we can find fields with unprotected accesses. + // - From this we can derive a unary recursive predicate for fields whose accesses are protected by exactly one monitor. + // The predicate tracks the monitor. + // If such a field has two accesses protected by different monitors, we have a concurrency issue. + // This can be determined by simple counting at the end of the recursion. + // Technically, we only have a concurrency issue if there is a write access, + // but if you are locking your reads with different locks, you likely made a typo. + // + // - From the above, we can derive a unary recursive predicate for fields whose accesses are protected by at least one monitor. + // This predicate tracks all the monitors that protect accesses to the field. + // This is combined with a predicate that checks if any access escapes a given monitor. + // If all the monitors that protect accesses to a field are escaped by at least one access, + // we have a concurrency issue. + // This can be determined by a single forall at the end of the recursion. + // + // With this formulation we avoid binary predicates and foralls in recursion. + // + // Cases where a field access is not protected by any monitor + /** + * Holds if the field access `a` to the field `f` is not protected by any monitor, and it can be reached via the expression `e` in the method `m`. + * We maintain the invariant that `m = e.getEnclosingCallable()`. + */ + private predicate unlockedAccess( + ExposedField f, Expr e, Method m, ExposedFieldAccess a, boolean write + ) { + m.getDeclaringType() = this and + ( + // base case + f.getDeclaringType() = this and + m = e.getEnclosingCallable() and + a.getField() = f and + a = e and + (if Modification::isModifying(a) then write = true else write = false) + or + // recursive case + exists(MethodCall c, Expr e0, Method m0 | this.unlockedAccess(f, e0, m0, a, write) | + m = c.getEnclosingCallable() and + not m0.isPublic() and + c.getCallee().getSourceDeclaration() = m0 and + c = e and + not Monitors::locallyMonitors(e0, _) + ) + ) + } + + /** Holds if the class has an unlocked access to the field `f` via the expression `e` in the method `m`. */ + private predicate hasUnlockedAccess(ExposedField f, Expr e, Method m, boolean write) { + this.unlockedAccess(f, e, m, _, write) + } + + /** Holds if the field access `a` to the field `f` is not protected by any monitor, and it can be reached via the expression `e` in the public method `m`. */ + predicate unlockedPublicAccess( + ExposedField f, Expr e, Method m, ExposedFieldAccess a, boolean write + ) { + this.unlockedAccess(f, e, m, a, write) and + m.isPublic() and + not Monitors::locallyMonitors(e, _) + } + + /** Holds if the class has an unlocked access to the field `f` via the expression `e` in the public method `m`. */ + private predicate hasUnlockedPublicAccess(ExposedField f, Expr e, Method m, boolean write) { + this.unlockedPublicAccess(f, e, m, _, write) + } + + // Cases where all accesses to a field are protected by exactly one monitor + // + /** + * Holds if the class has an access, locked by exactly one monitor, to the field `f` via the expression `e` in the method `m`. + */ + private predicate hasOnelockedAccess( + ExposedField f, Expr e, Method m, boolean write, Monitors::Monitor monitor + ) { + //base + this.hasUnlockedAccess(f, e, m, write) and + Monitors::locallyMonitors(e, monitor) + or + // recursive case + exists(MethodCall c, Method m0 | this.hasOnelockedAccess(f, _, m0, write, monitor) | + m = c.getEnclosingCallable() and + not m0.isPublic() and + c.getCallee().getSourceDeclaration() = m0 and + c = e and + // consider allowing idempotent monitors + not Monitors::locallyMonitors(e, _) and + m.getDeclaringType() = this + ) + } + + /** Holds if the class has an access, locked by exactly one monitor, to the field `f` via the expression `e` in the public method `m`. */ + private predicate hasOnelockedPublicAccess( + ExposedField f, Expr e, Method m, boolean write, Monitors::Monitor monitor + ) { + this.hasOnelockedAccess(f, e, m, write, monitor) and + m.isPublic() and + not this.hasUnlockedPublicAccess(f, e, m, write) + } + + /** Holds if the field `f` has more than one access, all locked by a single monitor, but different monitors are used. */ + predicate singleMonitorMismatch(ExposedField f) { + 2 <= strictcount(Monitors::Monitor monitor | this.hasOnelockedPublicAccess(f, _, _, _, monitor)) + } + + // Cases where all accesses to a field are protected by at least one monitor + // + /** Holds if the class has an access, locked by at least one monitor, to the field `f` via the expression `e` in the method `m`. */ + private predicate hasOnepluslockedAccess( + ExposedField f, Expr e, Method m, boolean write, Monitors::Monitor monitor + ) { + //base + this.hasOnelockedAccess(f, e, m, write, monitor) and + not this.singleMonitorMismatch(f) and + not this.hasUnlockedPublicAccess(f, _, _, _) + or + // recursive case + exists(MethodCall c, Method m0, Monitors::Monitor monitor0 | + this.hasOnepluslockedAccess(f, _, m0, write, monitor0) and + m = c.getEnclosingCallable() and + not m0.isPublic() and + c.getCallee().getSourceDeclaration() = m0 and + c = e and + m.getDeclaringType() = this + | + monitor = monitor0 + or + Monitors::locallyMonitors(e, monitor) + ) + } + + /** Holds if the class has a write access to the field `f` that can be reached via a public method. */ + predicate hasPublicWriteAccess(ExposedField f) { + this.hasUnlockedPublicAccess(f, _, _, true) + or + this.hasOnelockedPublicAccess(f, _, _, true, _) + or + exists(Method m | m.getDeclaringType() = this and m.isPublic() | + this.hasOnepluslockedAccess(f, _, m, true, _) + ) + } + + /** Holds if the class has an access, not protected by the monitor `m`, to the field `f` via the expression `e` in the method `m`. */ + private predicate escapesMonitor( + ExposedField f, Expr e, Method m, boolean write, Monitors::Monitor monitor + ) { + //base + this.hasOnepluslockedAccess(f, _, _, _, monitor) and + this.hasUnlockedAccess(f, e, m, write) and + not Monitors::locallyMonitors(e, monitor) + or + // recursive case + exists(MethodCall c, Method m0 | this.escapesMonitor(f, _, m0, write, monitor) | + m = c.getEnclosingCallable() and + not m0.isPublic() and + c.getCallee().getSourceDeclaration() = m0 and + c = e and + not Monitors::locallyMonitors(e, monitor) and + m.getDeclaringType() = this + ) + } + + /** Holds if the class has an access, not protected by the monitor `m`, to the field `f` via the expression `e` in the public method `m`. */ + private predicate escapesMonitorPublic( + ExposedField f, Expr e, Method m, boolean write, Monitors::Monitor monitor + ) { + this.escapesMonitor(f, e, m, write, monitor) and + m.isPublic() + } + + /** Holds if no monitor protects all accesses to the field `f`. */ + predicate notFullyMonitored(ExposedField f) { + forex(Monitors::Monitor monitor | this.hasOnepluslockedAccess(f, _, _, _, monitor) | + this.escapesMonitorPublic(f, _, _, _, monitor) + ) + } +} diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 612bca35a60..a31101888da 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -82,6 +82,7 @@ module; */ import java +private import codeql.controlflow.SuccessorType private import codeql.util.Boolean private import Completion private import controlflow.internal.Preconditions @@ -124,6 +125,28 @@ module ControlFlow { result = succ(this, NormalCompletion()) } + /** Gets an immediate successor of this node of a given type, if any. */ + Node getASuccessor(SuccessorType t) { + result = branchSuccessor(this, t.(BooleanSuccessor).getValue()) + or + exists(Completion completion | + result = succ(this, completion) and + not result = branchSuccessor(this, _) + | + completion = NormalCompletion() and t instanceof DirectSuccessor + or + completion = ReturnCompletion() and t instanceof ReturnSuccessor + or + completion = BreakCompletion(_) and t instanceof BreakSuccessor + or + completion = YieldCompletion(_) and t instanceof BreakSuccessor + or + completion = ContinueCompletion(_) and t instanceof ContinueSuccessor + or + completion = ThrowCompletion(_) and t instanceof ExceptionSuccessor + ) + } + /** Gets the basic block that contains this node. */ BasicBlock getBasicBlock() { result.getANode() = this } @@ -347,12 +370,28 @@ private module ControlFlowGraphImpl { ) } + private predicate methodMayThrow(Method m, ThrowableType t) { + exists(AstNode n | + t = n.(ThrowStmt).getThrownExceptionType() and + not n.(ThrowStmt).getParent() = any(Method m0).getBody() + or + uncheckedExceptionFromMethod(n, t) + | + n.getEnclosingStmt().getEnclosingCallable() = m and + not exists(TryStmt try | + exists(try.getACatchClause()) and try.getBlock() = n.getEnclosingStmt().getEnclosingStmt*() + ) + ) + } + /** - * Bind `t` to an unchecked exception that may occur in a precondition check. + * Bind `t` to an unchecked exception that may occur in a precondition check or guard wrapper. */ private predicate uncheckedExceptionFromMethod(MethodCall ma, ThrowableType t) { - conditionCheckArgument(ma, _, _) and + (methodCallChecksArgument(ma) or methodCallUnconditionallyThrows(ma)) and (t instanceof TypeError or t instanceof TypeRuntimeException) + or + methodMayThrow(ma.getMethod().getSourceDeclaration(), t) } /** @@ -570,6 +609,7 @@ private module ControlFlowGraphImpl { * Gets a `MethodCall` that always throws an exception or calls `exit`. */ private MethodCall nonReturningMethodCall() { + methodCallUnconditionallyThrows(result) or result.getMethod().getSourceDeclaration() = nonReturningMethod() or result = likelyNonReturningMethod().getAnAccess() } diff --git a/java/ql/lib/semmle/code/java/Conversions.qll b/java/ql/lib/semmle/code/java/Conversions.qll index 76b74fd1eb7..779eb7620be 100644 --- a/java/ql/lib/semmle/code/java/Conversions.qll +++ b/java/ql/lib/semmle/code/java/Conversions.qll @@ -100,12 +100,12 @@ class InvocationConversionContext extends ConversionSite { * See the Java Language Specification, Section 5.4. */ class StringConversionContext extends ConversionSite { - AddExpr a; - StringConversionContext() { - a.getAnOperand() = this and - not this.getType() instanceof TypeString and - a.getAnOperand().getType() instanceof TypeString + exists(AddExpr a | + a.getAnOperand() = this and + not this.getType() instanceof TypeString and + a.getAnOperand().getType() instanceof TypeString + ) } override Type getConversionTarget() { result instanceof TypeString } diff --git a/java/ql/lib/semmle/code/java/Import.qll b/java/ql/lib/semmle/code/java/Import.qll index aed04115555..03480727735 100644 --- a/java/ql/lib/semmle/code/java/Import.qll +++ b/java/ql/lib/semmle/code/java/Import.qll @@ -154,3 +154,35 @@ class ImportStaticTypeMember extends Import { override string getAPrimaryQlClass() { result = "ImportStaticTypeMember" } } + +/** + * A module import declaration, which imports an entire module. + * + * For example, `import module java.base;` makes all packages exported + * by the `java.base` module available, and through those packages, + * the types they declare become accessible. + */ +class ModuleImportDeclaration extends Import { + ModuleImportDeclaration() { imports(this, _, _, 6) } + + /** Gets the name of the imported module. */ + string getModuleName() { imports(this, _, result, _) } + + /** Gets the imported module. */ + Module getModule() { result.getName() = this.getModuleName() } + + /** Gets an exported package from the imported module. */ + Package getAnImportedPackage() { + exists(ExportsDirective exports | + exports = this.getModule().getADirective() and + result = exports.getExportedPackage() + ) + } + + /** Gets a type from a package that is accessible through this module import. */ + RefType getAnImportedType() { result.getPackage() = this.getAnImportedPackage() } + + override string toString() { result = "import module " + this.getModuleName() } + + override string getAPrimaryQlClass() { result = "ModuleImportDeclaration" } +} diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 1e814117e9e..17fe696972f 100644 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -256,7 +256,15 @@ class Callable extends StmtParent, Member, @callable { Exception getAnException() { exceptions(result, _, this) } /** Gets an exception type that occurs in the `throws` clause of this callable. */ - RefType getAThrownExceptionType() { result = this.getAnException().getType() } + RefType getAThrownExceptionType() { + result = this.getAnException().getType() + or + exists(Annotation a | + this.getAnAnnotation() = a and + a.getType().hasQualifiedName("kotlin.jvm", "Throws") and + a.getATypeArrayValue(_) = result + ) + } /** Gets a call site that references this callable. */ Call getAReference() { result.getCallee() = this } @@ -840,6 +848,9 @@ class Field extends Member, ExprParent, @field, Variable { override string getAPrimaryQlClass() { result = "Field" } } +overlay[local] +private class DiscardableField extends DiscardableReferableLocatable, @field { } + /** An instance field. */ class InstanceField extends Field { InstanceField() { not this.isStatic() } diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll index 1d1a3896ba7..b5f7264eb3d 100644 --- a/java/ql/lib/semmle/code/java/Overlay.qll +++ b/java/ql/lib/semmle/code/java/Overlay.qll @@ -18,7 +18,7 @@ predicate isOverlay() { databaseMetadata("isOverlay", "true") } overlay[local] string getRawFile(@locatable el) { exists(@location loc, @file file | - hasLocation(el, loc) and + (hasLocation(el, loc) or xmllocations(el, loc)) and locations_default(loc, file, _, _, _, _) and files(file, result) ) @@ -73,40 +73,60 @@ private predicate discardReferableLocatable(@locatable el) { ) } +/** Gets the raw file for a configLocatable. */ overlay[local] -private predicate baseConfigLocatable(@configLocatable l) { not isOverlay() and exists(l) } +private string getRawFileForConfig(@configLocatable el) { + exists(@location loc, @file file | + configLocations(el, loc) and + locations_default(loc, file, _, _, _, _) and + files(file, result) + ) +} overlay[local] -private predicate overlayHasConfigLocatables() { +private string baseConfigLocatable(@configLocatable el) { + not isOverlay() and result = getRawFileForConfig(el) +} + +overlay[local] +private predicate overlayConfigExtracted(string file) { isOverlay() and - exists(@configLocatable el) + exists(@configLocatable el | file = getRawFileForConfig(el)) } overlay[discard_entity] private predicate discardBaseConfigLocatable(@configLocatable el) { - // The properties extractor is currently not incremental, so if - // the overlay contains any config locatables, the overlay should - // contain a full extraction and all config locatables from base - // should be discarded. - baseConfigLocatable(el) and overlayHasConfigLocatables() + overlayChangedFiles(baseConfigLocatable(el)) + or + // The config extractor is currently not incremental and may extract more + // property files than those included in overlayChangedFiles. + overlayConfigExtracted(baseConfigLocatable(el)) +} + +/** + * An `@xmllocatable` that should be discarded in the base variant if its file is + * extracted in the overlay variant. + */ +overlay[local] +abstract class DiscardableXmlLocatable extends @xmllocatable { + /** Gets the raw file for an xmllocatable in base. */ + string getRawFileInBase() { not isOverlay() and result = getRawFile(this) } + + /** Gets a textual representation of this discardable xmllocatable. */ + string toString() { none() } } overlay[local] -private predicate baseXmlLocatable(@xmllocatable l) { - not isOverlay() and not files(l, _) and not xmlNs(l, _, _, _) -} - -overlay[local] -private predicate overlayHasXmlLocatable() { +private predicate overlayXmlExtracted(string file) { isOverlay() and - exists(@xmllocatable l | not files(l, _) and not xmlNs(l, _, _, _)) + exists(@xmllocatable el | not files(el, _) and not xmlNs(el, _, _, _) and file = getRawFile(el)) } overlay[discard_entity] -private predicate discardBaseXmlLocatable(@xmllocatable el) { - // The XML extractor is currently not incremental, so if - // the overlay contains any XML locatables, the overlay should - // contain a full extraction and all XML locatables from base - // should be discarded. - baseXmlLocatable(el) and overlayHasXmlLocatable() +private predicate discardXmlLocatable(@xmllocatable el) { + overlayChangedFiles(el.(DiscardableXmlLocatable).getRawFileInBase()) + or + // The XML extractor is currently not incremental and may extract more + // XML files than those included in overlayChangedFiles. + overlayXmlExtracted(el.(DiscardableXmlLocatable).getRawFileInBase()) } diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index a4872a32c91..2aea8b006ae 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -291,7 +291,7 @@ class TryStmt extends Stmt, @trystmt { CatchClause getACatchClause() { result.getParent() = this } /** - * Gets the `catch` clause at the specified (zero-based) position + * Gets the `catch` clause at the specified (zero-based) position `index` * in this `try` statement. */ CatchClause getCatchClause(int index) { @@ -305,7 +305,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource variable declaration, if any. */ LocalVariableDeclStmt getAResourceDecl() { result.getParent() = this and result.getIndex() <= -3 } - /** Gets the resource variable declaration at the specified position in this `try` statement. */ + /** Gets the resource variable declaration at the specified position `index` in this `try` statement. */ LocalVariableDeclStmt getResourceDecl(int index) { result = this.getAResourceDecl() and index = -3 - result.getIndex() @@ -314,7 +314,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource expression, if any. */ VarAccess getAResourceExpr() { result.getParent() = this and result.getIndex() <= -3 } - /** Gets the resource expression at the specified position in this `try` statement. */ + /** Gets the resource expression at the specified position `index` in this `try` statement. */ VarAccess getResourceExpr(int index) { result = this.getAResourceExpr() and index = -3 - result.getIndex() @@ -323,7 +323,7 @@ class TryStmt extends Stmt, @trystmt { /** Gets a resource in this `try` statement, if any. */ ExprParent getAResource() { result = this.getAResourceDecl() or result = this.getAResourceExpr() } - /** Gets the resource at the specified position in this `try` statement. */ + /** Gets the resource at the specified position `index` in this `try` statement. */ ExprParent getResource(int index) { result = this.getResourceDecl(index) or result = this.getResourceExpr(index) } diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index dd646e74285..ef5cc5d941c 100644 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -15,6 +15,7 @@ module; import Member import Modifier import JDK +private import semmle.code.java.Overlay /** * Holds if reference type `t` is an immediate super-type of `sub`. @@ -699,6 +700,15 @@ class Class extends ClassOrInterface { /** Holds if this class is an anonymous class. */ predicate isAnonymous() { isAnonymClass(this.getSourceDeclaration(), _) } + /** Holds if this class is an implicit class (compact source file). */ + predicate isImplicit() { isImplicitClass(this.getSourceDeclaration()) } + + /** Holds if this is an auxiliary program element generated by the compiler. */ + override predicate isCompilerGenerated() { + super.isCompilerGenerated() or + this.isImplicit() + } + /** * Gets an annotation that applies to this class. * @@ -998,6 +1008,10 @@ class ClassOrInterface extends RefType, @classorinterface { CompanionObject getCompanionObject() { type_companion_object(this, _, result) } } +overlay[local] +private class DiscardableClassOrInterface extends DiscardableReferableLocatable, @classorinterface { +} + private string getAPublicObjectMethodSignature() { exists(Method m | m.getDeclaringType() instanceof TypeObject and diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index e974f711ec4..f214cbbd0b1 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -7,10 +7,9 @@ module; import java import Dominance private import codeql.controlflow.BasicBlock as BB +private import codeql.controlflow.SuccessorType private module Input implements BB::InputSig { - import SuccessorType - /** Hold if `t` represents a conditional successor type. */ predicate successorTypeIsCondition(SuccessorType t) { none() } @@ -23,20 +22,8 @@ private module Input implements BB::InputSig { /** Gets the CFG scope in which this node occurs. */ CfgScope nodeGetCfgScope(Node node) { node.getEnclosingCallable() = result } - private Node getASpecificSuccessor(Node node, SuccessorType t) { - node.(ConditionNode).getABranchSuccessor(t.(BooleanSuccessor).getValue()) = result - or - node.getAnExceptionSuccessor() = result and t instanceof ExceptionSuccessor - } - /** Gets an immediate successor of this node. */ - Node nodeGetASuccessor(Node node, SuccessorType t) { - result = getASpecificSuccessor(node, t) - or - node.getASuccessor() = result and - t instanceof NormalSuccessor and - not result = getASpecificSuccessor(node, _) - } + Node nodeGetASuccessor(Node node, SuccessorType t) { result = node.getASuccessor(t) } /** * Holds if `node` represents an entry node to be used when calculating @@ -96,7 +83,17 @@ class BasicBlock extends BbImpl::BasicBlock { predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(Input::SuccessorType t) { result = super.getASuccessor(t) } + BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } + + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } + + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } /** * DEPRECATED: Use `getASuccessor` instead. @@ -145,3 +142,15 @@ class BasicBlock extends BbImpl::BasicBlock { class ExitBlock extends BasicBlock { ExitBlock() { this.getLastNode() instanceof ControlFlow::ExitNode } } + +private class BasicBlockAlias = BasicBlock; + +module Cfg implements BB::CfgSig { + class ControlFlowNode = BbImpl::ControlFlowNode; + + class BasicBlock = BasicBlockAlias; + + class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { } + + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) } +} diff --git a/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll b/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll new file mode 100644 index 00000000000..9fe6b9b0b1d --- /dev/null +++ b/java/ql/lib/semmle/code/java/controlflow/ControlFlowReachability.qll @@ -0,0 +1,60 @@ +/** + * Provides an implementation of local (intraprocedural) control flow reachability. + */ +overlay[local?] +module; + +import java +private import codeql.controlflow.ControlFlowReachability +private import semmle.code.java.dataflow.SSA as SSA +private import semmle.code.java.controlflow.Guards as Guards + +private module ControlFlowInput implements InputSig { + private import java as J + + AstNode getEnclosingAstNode(ControlFlowNode node) { node.getAstNode() = result } + + class AstNode = ExprParent; + + AstNode getParent(AstNode node) { + result = node.(Expr).getParent() or + result = node.(Stmt).getParent() + } + + class FinallyBlock extends AstNode { + FinallyBlock() { any(TryStmt try).getFinally() = this } + } + + class Expr = J::Expr; + + class SourceVariable = SSA::SsaSourceVariable; + + class SsaDefinition = SSA::SsaVariable; + + class SsaExplicitWrite extends SsaDefinition instanceof SSA::SsaExplicitUpdate { + Expr getValue() { + super.getDefiningExpr().(VariableAssign).getSource() = result or + super.getDefiningExpr().(AssignOp) = result + } + } + + class SsaPhiDefinition = SSA::SsaPhiNode; + + class SsaUncertainWrite extends SsaDefinition instanceof SSA::SsaUncertainImplicitUpdate { + SsaDefinition getPriorDefinition() { result = super.getPriorDef() } + } + + class GuardValue = Guards::GuardValue; + + predicate ssaControlsBranchEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, GuardValue v) { + Guards::Guards_v3::ssaControlsBranchEdge(def, bb1, bb2, v) + } + + predicate ssaControls(SsaDefinition def, BasicBlock bb, GuardValue v) { + Guards::Guards_v3::ssaControls(def, bb, v) + } + + import Guards::Guards_v3::InternalUtil +} + +module ControlFlowReachability = Make; diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index c33658cb67b..7bc53226b81 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -139,19 +139,13 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre ) } -private module GuardsInput implements SharedGuards::InputSig { +private module GuardsInput implements SharedGuards::InputSig { private import java as J + private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.dataflow.NullGuards as NullGuards - import SuccessorType - - class ControlFlowNode = J::ControlFlowNode; class NormalExitNode = ControlFlow::NormalExitNode; - class BasicBlock = J::BasicBlock; - - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { J::dominatingEdge(bb1, bb2) } - class AstNode = ExprParent; class Expr = J::Expr; @@ -216,6 +210,12 @@ private module GuardsInput implements SharedGuards::InputSig { f.isFinal() and f.getInitializer() = NullGuards::baseNotNullExpr() ) + or + exists(CatchClause cc, LocalVariableDeclExpr decl, BaseSsaUpdate v | + decl = cc.getVariable() and + decl = v.getDefiningExpr() and + this = v.getAUse() + ) } } @@ -375,7 +375,7 @@ private module GuardsInput implements SharedGuards::InputSig { } } -private module GuardsImpl = SharedGuards::Make; +private module GuardsImpl = SharedGuards::Make; private module LogicInputCommon { private import semmle.code.java.dataflow.NullGuards as NullGuards @@ -395,11 +395,13 @@ private module LogicInputCommon { predicate additionalImpliesStep( GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 ) { - exists(MethodCall check, int argIndex | + exists(MethodCall check | g1 = check and - v1.getDualValue().isThrowsException() and - conditionCheckArgument(check, argIndex, v2.asBooleanValue()) and - g2 = check.getArgument(argIndex) + v1.getDualValue().isThrowsException() + | + methodCallChecksBoolean(check, g2, v2.asBooleanValue()) + or + methodCallChecksNotNull(check, g2) and v2.isNonNullValue() ) } } @@ -413,21 +415,21 @@ private module LogicInput_v1 implements GuardsImpl::LogicInputSig { GuardsInput::Expr getARead() { result = this.getAUse() } } - class SsaWriteDefinition extends SsaDefinition instanceof BaseSsaUpdate { - GuardsInput::Expr getDefinition() { + class SsaExplicitWrite extends SsaDefinition instanceof BaseSsaUpdate { + GuardsInput::Expr getValue() { super.getDefiningExpr().(VariableAssign).getSource() = result or super.getDefiningExpr().(AssignOp) = result } } - class SsaPhiNode extends SsaDefinition instanceof BaseSsaPhiNode { + class SsaPhiDefinition extends SsaDefinition instanceof BaseSsaPhiNode { predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { super.hasInputFromBlock(inp, bb) } } - predicate parameterDefinition(Parameter p, SsaDefinition def) { - def.(BaseSsaImplicitInit).isParameterDefinition(p) + class SsaParameterInit extends SsaDefinition instanceof BaseSsaImplicitInit { + Parameter getParameter() { super.isParameterDefinition(result) } } predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; @@ -444,21 +446,21 @@ private module LogicInput_v2 implements GuardsImpl::LogicInputSig { GuardsInput::Expr getARead() { result = this.getAUse() } } - class SsaWriteDefinition extends SsaDefinition instanceof SSA::SsaExplicitUpdate { - GuardsInput::Expr getDefinition() { + class SsaExplicitWrite extends SsaDefinition instanceof SSA::SsaExplicitUpdate { + GuardsInput::Expr getValue() { super.getDefiningExpr().(VariableAssign).getSource() = result or super.getDefiningExpr().(AssignOp) = result } } - class SsaPhiNode extends SsaDefinition instanceof SSA::SsaPhiNode { + class SsaPhiDefinition extends SsaDefinition instanceof SSA::SsaPhiNode { predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { super.hasInputFromBlock(inp, bb) } } - predicate parameterDefinition(Parameter p, SsaDefinition def) { - def.(SSA::SsaImplicitInit).isParameterDefinition(p) + class SsaParameterInit extends SsaDefinition instanceof SSA::SsaImplicitInit { + Parameter getParameter() { super.isParameterDefinition(result) } } predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; @@ -490,12 +492,6 @@ module Guards_v2 = GuardsImpl::Logic; /** INTERNAL: Don't use. */ module Guards_v3 = GuardsImpl::Logic; -/** INTERNAL: Don't use. */ -predicate implies_v3(Guard g1, boolean b1, Guard g2, boolean b2) { - Guards_v3::boolImplies(g1, any(GuardValue v | v.asBooleanValue() = b1), g2, - any(GuardValue v | v.asBooleanValue() = b2)) -} - /** * A guard. This may be any expression whose value determines subsequent * control flow. It may also be a switch case, which as a guard is considered diff --git a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll b/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll deleted file mode 100644 index feabc47552f..00000000000 --- a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Provides different types of control flow successor types. - */ -overlay[local?] -module; - -import java -private import codeql.util.Boolean - -private newtype TSuccessorType = - TNormalSuccessor() or - TBooleanSuccessor(Boolean branch) or - TExceptionSuccessor() - -/** The type of a control flow successor. */ -class SuccessorType extends TSuccessorType { - /** Gets a textual representation of successor type. */ - string toString() { result = "SuccessorType" } -} - -/** A normal control flow successor. */ -class NormalSuccessor extends SuccessorType, TNormalSuccessor { } - -/** - * An exceptional control flow successor. - * - * This marks control flow edges that are taken when an exception is thrown. - */ -class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { } - -/** - * A conditional control flow successor. - * - * This currently only includes boolean successors (`BooleanSuccessor`). - */ -class ConditionalSuccessor extends SuccessorType, TBooleanSuccessor { - /** Gets the Boolean value of this successor. */ - boolean getValue() { this = TBooleanSuccessor(result) } -} - -/** - * A Boolean control flow successor. - * - * For example, this program fragment: - * - * ```java - * if (x < 0) - * return 0; - * else - * return 1; - * ``` - * - * has a control flow graph containing Boolean successors: - * - * ``` - * if - * | - * x < 0 - * / \ - * / \ - * / \ - * true false - * | \ - * return 0 return 1 - * ``` - */ -class BooleanSuccessor = ConditionalSuccessor; - -/** - * A nullness control flow successor. This is currently unused for Java. - */ -class NullnessSuccessor extends ConditionalSuccessor { - NullnessSuccessor() { none() } -} diff --git a/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll b/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll index a0d2e4ef03e..cc8ee539a5b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll +++ b/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll @@ -1,5 +1,5 @@ /** - * Provides predicates for identifying precondition checks like + * Provides predicates for identifying precondition and assertion checks like * `com.google.common.base.Preconditions` and * `org.apache.commons.lang3.Validate`. */ @@ -9,99 +9,150 @@ module; import java /** + * Holds if `m` is a method that checks that its argument at position `arg` is + * equal to true and throws otherwise. + */ +private predicate methodCheckTrue(Method m, int arg) { + arg = 0 and + ( + m.hasQualifiedName("com.google.common.base", "Preconditions", ["checkArgument", "checkState"]) or + m.hasQualifiedName("com.google.common.base", "Verify", "verify") or + m.hasQualifiedName("org.apache.commons.lang3", "Validate", ["isTrue", "validState"]) or + m.hasQualifiedName("org.junit.jupiter.api", "Assertions", "assertTrue") or + m.hasQualifiedName("org.junit.jupiter.api", "Assumptions", "assumeTrue") or + m.hasQualifiedName("org.testng", "Assert", "assertTrue") + ) + or + m.getParameter(arg).getType() instanceof BooleanType and + ( + m.hasQualifiedName("org.junit", "Assert", "assertTrue") or + m.hasQualifiedName("org.junit", "Assume", "assumeTrue") or + m.hasQualifiedName("junit.framework", _, "assertTrue") + ) +} + +/** + * Holds if `m` is a method that checks that its argument at position `arg` is + * equal to false and throws otherwise. + */ +private predicate methodCheckFalse(Method m, int arg) { + arg = 0 and + ( + m.hasQualifiedName("org.junit.jupiter.api", "Assertions", "assertFalse") or + m.hasQualifiedName("org.junit.jupiter.api", "Assumptions", "assumeFalse") or + m.hasQualifiedName("org.testng", "Assert", "assertFalse") + ) + or + m.getParameter(arg).getType() instanceof BooleanType and + ( + m.hasQualifiedName("org.junit", "Assert", "assertFalse") or + m.hasQualifiedName("org.junit", "Assume", "assumeFalse") or + m.hasQualifiedName("junit.framework", _, "assertFalse") + ) +} + +/** + * Holds if `m` is a method that checks that its argument at position `arg` is + * not null and throws otherwise. + */ +private predicate methodCheckNotNull(Method m, int arg) { + arg = 0 and + ( + m.hasQualifiedName("com.google.common.base", "Preconditions", "checkNotNull") or + m.hasQualifiedName("com.google.common.base", "Verify", "verifyNotNull") or + m.hasQualifiedName("org.apache.commons.lang3", "Validate", "notNull") or + m.hasQualifiedName("java.util", "Objects", "requireNonNull") or + m.hasQualifiedName("org.junit.jupiter.api", "Assertions", "assertNotNull") or + m.hasQualifiedName("org.junit", "Assume", "assumeNotNull") or // vararg + m.hasQualifiedName("org.testng", "Assert", "assertNotNull") + ) + or + arg = m.getNumberOfParameters() - 1 and + ( + m.hasQualifiedName("org.junit", "Assert", "assertNotNull") or + m.hasQualifiedName("junit.framework", _, "assertNotNull") + ) +} + +/** + * Holds if `m` is a method that checks that its argument at position `arg` + * satisfies a property specified by another argument and throws otherwise. + */ +private predicate methodCheckThat(Method m, int arg) { + m.getParameter(arg).getType().getErasure() instanceof TypeObject and + ( + m.hasQualifiedName("org.hamcrest", "MatcherAssert", "assertThat") or + m.hasQualifiedName("org.junit", "Assert", "assertThat") or + m.hasQualifiedName("org.junit", "Assume", "assumeThat") + ) +} + +/** Holds if `m` is a method that unconditionally throws. */ +private predicate methodUnconditionallyThrows(Method m) { + m.hasQualifiedName("org.junit.jupiter.api", "Assertions", "fail") or + m.hasQualifiedName("org.junit", "Assert", "fail") or + m.hasQualifiedName("junit.framework", _, "fail") or + m.hasQualifiedName("org.testng", "Assert", "fail") +} + +/** + * Holds if `mc` is a call to a method that checks that its argument `arg` is + * equal to `checkTrue` and throws otherwise. + */ +predicate methodCallChecksBoolean(MethodCall mc, Expr arg, boolean checkTrue) { + exists(int pos | mc.getArgument(pos) = arg | + methodCheckTrue(mc.getMethod().getSourceDeclaration(), pos) and checkTrue = true + or + methodCheckFalse(mc.getMethod().getSourceDeclaration(), pos) and checkTrue = false + ) +} + +/** + * Holds if `mc` is a call to a method that checks that its argument `arg` is + * not null and throws otherwise. + */ +predicate methodCallChecksNotNull(MethodCall mc, Expr arg) { + exists(int pos | mc.getArgument(pos) = arg | + methodCheckNotNull(mc.getMethod().getSourceDeclaration(), pos) + or + methodCheckThat(mc.getMethod().getSourceDeclaration(), pos) and + mc.getAnArgument().(MethodCall).getMethod().getName() = "notNullValue" + ) +} + +/** + * Holds if `mc` is a call to a method that checks one of its arguments in some + * way and possibly throws. + */ +predicate methodCallChecksArgument(MethodCall mc) { + methodCallChecksBoolean(mc, _, _) or + methodCallChecksNotNull(mc, _) +} + +/** Holds if `mc` is a call to a method that unconditionally throws. */ +predicate methodCallUnconditionallyThrows(MethodCall mc) { + methodUnconditionallyThrows(mc.getMethod().getSourceDeclaration()) or + exists(BooleanLiteral b | methodCallChecksBoolean(mc, b, b.getBooleanValue().booleanNot())) +} + +/** + * DEPRECATED: Use `methodCallChecksBoolean` instead. + * * Holds if `m` is a non-overridable method that checks that its zero-indexed `argument` * is equal to `checkTrue` and throws otherwise. */ -predicate conditionCheckMethodArgument(Method m, int argument, boolean checkTrue) { - condtionCheckMethodGooglePreconditions(m, checkTrue) and argument = 0 +deprecated predicate conditionCheckMethodArgument(Method m, int argument, boolean checkTrue) { + methodCheckTrue(m, argument) and checkTrue = true or - conditionCheckMethodApacheCommonsLang3Validate(m, checkTrue) and argument = 0 - or - condtionCheckMethodTestingFramework(m, argument, checkTrue) - or - exists(Parameter p, MethodCall ma, int argIndex, boolean ct, Expr arg | - p = m.getParameter(argument) and - not m.isOverridable() and - m.getBody().getStmt(0).(ExprStmt).getExpr() = ma and - conditionCheckArgument(ma, argIndex, ct) and - ma.getArgument(argIndex) = arg and - ( - arg.(LogNotExpr).getExpr().(VarAccess).getVariable() = p and - checkTrue = ct.booleanNot() - or - arg.(VarAccess).getVariable() = p and checkTrue = ct - ) - ) - or - exists(Parameter p, IfStmt ifstmt, Expr cond | - p = m.getParameter(argument) and - not m.isOverridable() and - p.getType() instanceof BooleanType and - m.getBody().getStmt(0) = ifstmt and - ifstmt.getCondition() = cond and - ( - cond.(LogNotExpr).getExpr().(VarAccess).getVariable() = p and checkTrue = true - or - cond.(VarAccess).getVariable() = p and checkTrue = false - ) and - ( - ifstmt.getThen() instanceof ThrowStmt or - ifstmt.getThen().(SingletonBlock).getStmt() instanceof ThrowStmt - ) - ) -} - -private predicate condtionCheckMethodGooglePreconditions(Method m, boolean checkTrue) { - m.getDeclaringType().hasQualifiedName("com.google.common.base", "Preconditions") and - checkTrue = true and - (m.hasName("checkArgument") or m.hasName("checkState")) -} - -private predicate conditionCheckMethodApacheCommonsLang3Validate(Method m, boolean checkTrue) { - m.getDeclaringType().hasQualifiedName("org.apache.commons.lang3", "Validate") and - checkTrue = true and - (m.hasName("isTrue") or m.hasName("validState")) -} - -/** - * Holds if `m` is a non-overridable testing framework method that checks that its first argument - * is equal to `checkTrue` and throws otherwise. - */ -private predicate condtionCheckMethodTestingFramework(Method m, int argument, boolean checkTrue) { - argument = 0 and - ( - m.getDeclaringType().hasQualifiedName("org.junit", "Assume") and - checkTrue = true and - m.hasName("assumeTrue") - or - m.getDeclaringType().hasQualifiedName("org.junit.jupiter.api", "Assertions") and - ( - checkTrue = true and m.hasName("assertTrue") - or - checkTrue = false and m.hasName("assertFalse") - ) - or - m.getDeclaringType().hasQualifiedName("org.junit.jupiter.api", "Assumptions") and - ( - checkTrue = true and m.hasName("assumeTrue") - or - checkTrue = false and m.hasName("assumeFalse") - ) - ) - or - m.getDeclaringType().hasQualifiedName(["org.junit", "org.testng"], "Assert") and - m.getParameter(argument).getType() instanceof BooleanType and - ( - checkTrue = true and m.hasName("assertTrue") - or - checkTrue = false and m.hasName("assertFalse") - ) + methodCheckFalse(m, argument) and checkTrue = false } /** + * DEPRECATED: Use `methodCallChecksBoolean` instead. + * * Holds if `ma` is an access to a non-overridable method that checks that its * zero-indexed `argument` is equal to `checkTrue` and throws otherwise. */ -predicate conditionCheckArgument(MethodCall ma, int argument, boolean checkTrue) { +deprecated predicate conditionCheckArgument(MethodCall ma, int argument, boolean checkTrue) { conditionCheckMethodArgument(ma.getMethod().getSourceDeclaration(), argument, checkTrue) } diff --git a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll index 54eb809c7b9..c99a8a5a58e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll @@ -10,6 +10,6 @@ import java module DataFlow { private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import codeql.dataflow.DataFlow - import DataFlowMake + import DataFlowMakeOverlay import Public } diff --git a/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll b/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll index 042fd5194f2..ea2bce01e15 100644 --- a/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll @@ -10,7 +10,7 @@ private import RangeUtils private import RangeAnalysis /** Gets an expression that might have the value `i`. */ -private Expr exprWithIntValue(int i) { +deprecated private Expr exprWithIntValue(int i) { result.(ConstantIntegerExpr).getIntValue() = i or result.(ChooseExpr).getAResultExpr() = exprWithIntValue(i) } @@ -19,11 +19,11 @@ private Expr exprWithIntValue(int i) { * An expression for which the predicate `integerGuard` is relevant. * This includes `VarRead` and `MethodCall`. */ -class IntComparableExpr extends Expr { +deprecated class IntComparableExpr extends Expr { IntComparableExpr() { this instanceof VarRead or this instanceof MethodCall } /** Gets an integer that is directly assigned to the expression in case of a variable; or zero. */ - int relevantInt() { + deprecated int relevantInt() { exists(SsaExplicitUpdate ssa, SsaSourceVariable v | this = v.getAnAccess() and ssa.getSourceVariable() = v and @@ -55,6 +55,9 @@ private predicate comparison(ComparisonExpr comp, boolean branch, Expr e1, Expr * Holds if `guard` evaluating to `branch` ensures that: * `e <= k` when `upper = true` * `e >= k` when `upper = false` + * + * Does _not_ include the constant comparison case where the guard directly + * ensures `e == k`. */ pragma[nomagic] predicate rangeGuard(Expr guard, boolean branch, Expr e, int k, boolean upper) { @@ -62,7 +65,8 @@ predicate rangeGuard(Expr guard, boolean branch, Expr e, int k, boolean upper) { eqtest = guard and eqtest.hasOperands(e, c) and bounded(c, any(ZeroBound zb), k, upper, _) and - branch = eqtest.polarity() + branch = eqtest.polarity() and + not c instanceof ConstantIntegerExpr ) or exists(Expr c, int val, boolean strict, int d | @@ -87,6 +91,30 @@ predicate rangeGuard(Expr guard, boolean branch, Expr e, int k, boolean upper) { } /** + * Gets an expression that directly tests whether a given expression, `e`, is + * non-zero. + */ +Expr nonZeroGuard(Expr e, boolean branch) { + exists(EqualityTest eqtest, boolean polarity, int k | + eqtest = result and + eqtest.hasOperands(e, any(ConstantIntegerExpr c | c.getIntValue() = k)) and + polarity = eqtest.polarity() + | + k = 0 and branch = polarity.booleanNot() + or + k != 0 and branch = polarity + ) + or + exists(int val, boolean upper | rangeGuard(result, branch, e, val, upper) | + upper = true and val < 0 // e <= val < 0 ==> e != 0 + or + upper = false and val > 0 // e >= val > 0 ==> e != 0 + ) +} + +/** + * DEPRECATED. + * * An expression that directly tests whether a given expression is equal to `k` or not. * The set of `k`s is restricted to those that are relevant for the expression or * have a direct comparison with the expression. @@ -95,7 +123,7 @@ predicate rangeGuard(Expr guard, boolean branch, Expr e, int k, boolean upper) { * is true, and different from `k` if `is_k` is false. */ pragma[nomagic] -Expr integerGuard(IntComparableExpr e, boolean branch, int k, boolean is_k) { +deprecated Expr integerGuard(IntComparableExpr e, boolean branch, int k, boolean is_k) { exists(EqualityTest eqtest, boolean polarity | eqtest = result and eqtest.hasOperands(e, any(ConstantIntegerExpr c | c.getIntValue() = k)) and @@ -119,13 +147,15 @@ Expr integerGuard(IntComparableExpr e, boolean branch, int k, boolean is_k) { } /** + * DEPRECATED: Use `rangeGuard` instead. + * * A guard that splits the values of a variable into one range with an upper bound of `k-1` * and one with a lower bound of `k`. * * If `branch_with_lower_bound_k` is true then `result` is equivalent to `k <= x` * and if it is false then `result` is equivalent to `k > x`. */ -Expr intBoundGuard(VarRead x, boolean branch_with_lower_bound_k, int k) { +deprecated Expr intBoundGuard(VarRead x, boolean branch_with_lower_bound_k, int k) { exists(ComparisonExpr comp, ConstantIntegerExpr c, int val | comp = result and comp.hasOperands(x, c) and diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 02f228d17db..c9f5ad4f781 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -9,49 +9,31 @@ overlay[local?] module; -/* - * Implementation details: - * - * The three exported predicates, `nullDeref`, `alwaysNullDeref`, and - * `superfluousNullGuard`, compute potential null dereferences, definite null - * dereferences, and superfluous null checks, respectively. The bulk of the - * library supports `nullDeref`, while the latter two are fairly simple in - * comparison. - * - * The NPE (NullPointerException) candidates are computed by - * `nullDerefCandidate` and consist of three parts: A variable definition that - * might be null as computed by `varMaybeNull`, a dereference that can cause a - * NPE as computed by `firstVarDereferenceInBlock`, and a control flow path - * between the two points. The path is computed by `varMaybeNullInBlock`, - * which is the transitive closure of the step relation `nullVarStep` - * originating in a definition given by `varMaybeNull`. The step relation - * `nullVarStep` is essentially just the successor relation on basic blocks - * restricted to exclude edges along which the variable cannot be null. - * - * The step relation `nullVarStep` is then reused twice to produce two - * refinements of the path reachability predicate `varMaybeNullInBlock` in - * order to prune impossible paths that would otherwise lead to a potential - * NPE. These two refinements are `varMaybeNullInBlock_corrCond` and - * `varMaybeNullInBlock_trackVar` and are described in further detail below. - */ - import java private import SSA private import semmle.code.java.controlflow.Guards -private import RangeUtils private import IntegerGuards private import NullGuards private import semmle.code.java.Collections -private import semmle.code.java.frameworks.Assertions +private import semmle.code.java.controlflow.internal.Preconditions +private import semmle.code.java.controlflow.ControlFlowReachability /** Gets an expression that may be `null`. */ -Expr nullExpr() { - result instanceof NullLiteral or - result.(ChooseExpr).getAResultExpr() = nullExpr() or - result.(AssignExpr).getSource() = nullExpr() or - result.(CastExpr).getExpr() = nullExpr() or - result.(ImplicitCastExpr).getExpr() = nullExpr() or - result instanceof SafeCastExpr +Expr nullExpr() { result = nullExpr(_) } + +/** Gets an expression that may be `null`. */ +private Expr nullExpr(Expr reason) { + result instanceof NullLiteral and reason = result + or + result.(ChooseExpr).getAResultExpr() = nullExpr(reason) + or + result.(AssignExpr).getSource() = nullExpr(reason) + or + result.(CastExpr).getExpr() = nullExpr(reason) + or + result.(ImplicitCastExpr).getExpr() = nullExpr(reason) + or + result instanceof SafeCastExpr and reason = result } /** An expression of a boxed type that is implicitly unboxed. */ @@ -137,58 +119,29 @@ private ControlFlowNode varDereference(SsaVariable v, VarAccess va) { } /** - * A `ControlFlowNode` that ensures that the SSA variable is not null in any - * subsequent use, either by dereferencing it or by an assertion. - */ -private ControlFlowNode ensureNotNull(SsaVariable v) { - result = varDereference(v, _) - or - exists(AssertTrueMethod m | result.asCall() = m.getACheck(directNullGuard(v, true, false))) - or - exists(AssertFalseMethod m | result.asCall() = m.getACheck(directNullGuard(v, false, false))) - or - exists(AssertNotNullMethod m | result.asCall() = m.getACheck(v.getAUse())) - or - exists(AssertThatMethod m, MethodCall ma | - result.asCall() = m.getACheck(v.getAUse()) and ma.getControlFlowNode() = result - | - ma.getAnArgument().(MethodCall).getMethod().getName() = "notNullValue" - ) -} - -/** - * A variable dereference that cannot be reached by a `null` value, because of an earlier - * dereference or assertion in the same `BasicBlock`. - */ -private predicate unreachableVarDereference(BasicBlock bb, SsaVariable v, ControlFlowNode varDeref) { - exists(ControlFlowNode n, int i, int j | - (n = ensureNotNull(v) or assertFail(bb, n)) and - varDeref = varDereference(v, _) and - bb.getNode(i) = n and - bb.getNode(j) = varDeref and - i < j - ) -} - -/** - * The first dereference of a variable in a given `BasicBlock` excluding those dereferences - * that are preceded by a not-null assertion or a trivially failing assertion. + * The first dereference of a variable in a given `BasicBlock`. */ private predicate firstVarDereferenceInBlock(BasicBlock bb, SsaVariable v, VarAccess va) { exists(ControlFlowNode n | varDereference(v, va) = n and n.getBasicBlock() = bb and - not unreachableVarDereference(bb, v, n) + n = + min(ControlFlowNode n0, int i | + varDereference(v, _) = n0 and bb.getNode(i) = n0 + | + n0 order by i + ) ) } /** A variable suspected of being `null`. */ -private predicate varMaybeNull(SsaVariable v, string msg, Expr reason) { +private predicate varMaybeNull(SsaVariable v, ControlFlowNode node, string msg, Expr reason) { // A variable compared to null might be null. exists(Expr e | reason = e and msg = "as suggested by $@ null guard" and guardSuggestsVarMaybeNull(e, v) and + node = v.getCfgNode() and not v instanceof SsaPhiNode and not clearlyNotNull(v) and // Comparisons in finally blocks are excluded since missing exception edges in the CFG could otherwise yield FPs. @@ -204,6 +157,7 @@ private predicate varMaybeNull(SsaVariable v, string msg, Expr reason) { // A parameter might be null if there is a null argument somewhere. exists(Parameter p, Expr arg | v.(SsaImplicitInit).isParameterDefinition(p) and + node = v.getCfgNode() and p.getAnArgument() = arg and reason = arg and msg = "because of $@ null argument" and @@ -214,7 +168,7 @@ private predicate varMaybeNull(SsaVariable v, string msg, Expr reason) { // If the source of a variable is null then the variable may be null. exists(VariableAssign def | v.(SsaExplicitUpdate).getDefiningExpr() = def and - def.getSource() = nullExpr() and + def.getSource() = nullExpr(node.asExpr()) and reason = def and msg = "because of $@ assignment" ) @@ -236,7 +190,7 @@ private Expr nonEmptyExpr() { // ...or it is guarded by a condition proving its length to be non-zero. exists(ConditionBlock cond, boolean branch, FieldAccess length | cond.controls(result.getBasicBlock(), branch) and - cond.getCondition() = integerGuard(length, branch, 0, false) and + cond.getCondition() = nonZeroGuard(length, branch) and length.getField().hasName("length") and length.getQualifier() = v.getAUse() ) @@ -266,7 +220,7 @@ private Expr nonEmptyExpr() { or // ...or a check on its `size`. exists(MethodCall size | - c = integerGuard(size, branch, 0, false) and + c = nonZeroGuard(size, branch) and size.getMethod().hasName("size") and size.getQualifier() = v.getAUse() ) @@ -294,536 +248,29 @@ private predicate impossibleEdge(BasicBlock bb1, BasicBlock bb2) { ) } -/** A control flow edge that leaves a finally-block. */ -private predicate leavingFinally(BasicBlock bb1, BasicBlock bb2, boolean normaledge) { - exists(TryStmt try, BlockStmt finally | - try.getFinally() = finally and - bb1.getASuccessor() = bb2 and - bb1.getFirstNode().getEnclosingStmt().getEnclosingStmt*() = finally and - not bb2.getFirstNode().getEnclosingStmt().getEnclosingStmt*() = finally and - if bb1.getLastNode().getANormalSuccessor() = bb2.getFirstNode() - then normaledge = true - else normaledge = false - ) +private module NullnessConfig implements ControlFlowReachability::ConfigSig { + predicate source(ControlFlowNode node, SsaVariable def) { varMaybeNull(def, node, _, _) } + + predicate sink(ControlFlowNode node, SsaVariable def) { varDereference(def, _) = node } + + predicate barrierValue(GuardValue gv) { gv.isNullness(false) } + + predicate barrierEdge(BasicBlock bb1, BasicBlock bb2) { impossibleEdge(bb1, bb2) } + + predicate uncertainFlow() { none() } } -private predicate ssaSourceVarMaybeNull(SsaSourceVariable v) { - varMaybeNull(v.getAnSsaVariable(), _, _) -} +private module NullnessFlow = ControlFlowReachability::Flow; /** - * The step relation for propagating that a given SSA variable might be `null` in a given `BasicBlock`. - * - * If `midssa` is null in `mid` then `ssa` might be null in `bb`. The SSA variables share the same - * `SsaSourceVariable`. - * - * A boolean flag tracks whether a non-normal completion is waiting to resume upon the exit of a finally-block. - * If the flag is set, then the normal edge out of the finally-block is prohibited, but if it is not set then - * no knowledge is assumed of any potentially waiting completions. `midstoredcompletion` is the flag before - * the step and `storedcompletion` is the flag after the step. - */ -private predicate nullVarStep( - SsaVariable midssa, BasicBlock mid, boolean midstoredcompletion, SsaVariable ssa, BasicBlock bb, - boolean storedcompletion -) { - exists(SsaSourceVariable v | - ssaSourceVarMaybeNull(v) and - midssa.getSourceVariable() = v - | - ssa.(SsaPhiNode).getAPhiInput() = midssa and ssa.getBasicBlock() = bb - or - ssa = midssa and - not exists(SsaPhiNode phi | phi.getSourceVariable() = v and phi.getBasicBlock() = bb) - ) and - (midstoredcompletion = true or midstoredcompletion = false) and - midssa.isLiveAtEndOfBlock(mid) and - not ensureNotNull(midssa).getBasicBlock() = mid and - not assertFail(mid, _) and - bb = mid.getASuccessor() and - not impossibleEdge(mid, bb) and - not nullGuardControlsBranchEdge(midssa, false, mid, bb) and - not (leavingFinally(mid, bb, true) and midstoredcompletion = true) and - if bb.getFirstNode().asStmt() = any(TryStmt try | | try.getFinally()) - then - if bb.getFirstNode() = mid.getLastNode().getANormalSuccessor() - then storedcompletion = false - else storedcompletion = true - else - if leavingFinally(mid, bb, _) - then storedcompletion = false - else storedcompletion = midstoredcompletion -} - -/** - * The transitive closure of `nullVarStep` originating from `varMaybeNull`. That is, those `BasicBlock`s - * for which the SSA variable is suspected of being `null`. - */ -private predicate varMaybeNullInBlock( - SsaVariable ssa, SsaSourceVariable v, BasicBlock bb, boolean storedcompletion -) { - varMaybeNull(ssa, _, _) and - bb = ssa.getBasicBlock() and - storedcompletion = false and - v = ssa.getSourceVariable() - or - exists(BasicBlock mid, SsaVariable midssa, boolean midstoredcompletion | - varMaybeNullInBlock(midssa, v, mid, midstoredcompletion) and - nullVarStep(midssa, mid, midstoredcompletion, ssa, bb, storedcompletion) - ) -} - -/** - * Holds if `v` is a source variable that might reach a potential `null` - * dereference. - */ -private predicate nullDerefCandidateVariable(SsaSourceVariable v) { - exists(SsaVariable ssa, BasicBlock bb | - firstVarDereferenceInBlock(bb, ssa, _) and - varMaybeNullInBlock(ssa, v, bb, _) - ) -} - -private predicate varMaybeNullInBlock_origin( - SsaVariable origin, SsaVariable ssa, BasicBlock bb, boolean storedcompletion -) { - nullDerefCandidateVariable(ssa.getSourceVariable()) and - varMaybeNull(ssa, _, _) and - bb = ssa.getBasicBlock() and - storedcompletion = false and - origin = ssa - or - exists(BasicBlock mid, SsaVariable midssa, boolean midstoredcompletion | - varMaybeNullInBlock_origin(origin, midssa, mid, midstoredcompletion) and - nullVarStep(midssa, mid, midstoredcompletion, ssa, bb, storedcompletion) - ) -} - -/** - * A potential `null` dereference. That is, the first dereference of a variable in a block - * where it is suspected of being `null`. - */ -private predicate nullDerefCandidate(SsaVariable origin, VarAccess va) { - exists(SsaVariable ssa, BasicBlock bb | - firstVarDereferenceInBlock(bb, ssa, va) and - varMaybeNullInBlock_origin(origin, ssa, bb, _) - ) -} - -/* - * In the following, the potential `null` dereference candidates are pruned by proving that - * a `NullPointerException` (NPE) cannot occur. This is done by pruning the control-flow paths - * that lead to the NPE candidate in two ways: - * - * 1. For each set of correlated conditions that are passed by the path, consistent - * branches must be taken. For example, the following code is safe due to the two tests on - * `flag` begin correlated. - * ``` - * x = null; - * if (flag) x = new A(); - * if (flag) x.m(); - * ``` - * - * 2. For each other variable that changes its value alongside the potential NPE candidate, - * the passed conditions must be consistent with its value. For example, the following - * code is safe due to the value of `t`. - * ``` - * x = null; - * t = null; - * if (...) { x = new A(); t = new B(); } - * if (t != null) x.m(); - * ``` - * We call such a variable a _tracking variable_ as it tracks the null-ness of `x`. - */ - -/** A variable that is assigned `null` if the given condition takes the given branch. */ -private predicate varConditionallyNull(SsaExplicitUpdate v, ConditionBlock cond, boolean branch) { - exists(ConditionalExpr condexpr | - v.getDefiningExpr().(VariableAssign).getSource() = condexpr and - condexpr.getCondition() = cond.getCondition() - | - condexpr.getBranchExpr(branch) = nullExpr() and - not condexpr.getBranchExpr(branch.booleanNot()) = nullExpr() - ) - or - v.getDefiningExpr().(VariableAssign).getSource() = nullExpr() and - cond.controls(v.getBasicBlock(), branch) -} - -/** - * A condition that might be useful in proving an NPE candidate safe. - * - * This is a condition along the path that found the NPE candidate. - */ -private predicate interestingCond(SsaSourceVariable npecand, ConditionBlock cond) { - nullDerefCandidateVariable(npecand) and - ( - varMaybeNullInBlock(_, npecand, cond, _) or - varConditionallyNull(npecand.getAnSsaVariable(), cond, _) - ) and - not cond.getCondition().(Expr).getAChildExpr*() = npecand.getAnAccess() -} - -pragma[nomagic] -private ConditionBlock ssaIntegerGuard(SsaVariable v, boolean branch, int k, boolean is_k) { - result.getCondition() = integerGuard(v.getAUse(), branch, k, is_k) -} - -pragma[nomagic] -private ConditionBlock ssaIntBoundGuard(SsaVariable v, boolean branch_with_lower_bound_k, int k) { - result.getCondition() = intBoundGuard(v.getAUse(), branch_with_lower_bound_k, k) -} - -pragma[nomagic] -private ConditionBlock ssaEnumConstEquality(SsaVariable v, boolean polarity, EnumConstant c) { - result.getCondition() = enumConstEquality(v.getAUse(), polarity, c) -} - -private predicate conditionChecksNull(ConditionBlock cond, SsaVariable v, boolean branchIsNull) { - nullGuardControlsBranchEdge(v, true, cond, cond.getTestSuccessor(branchIsNull)) and - nullGuardControlsBranchEdge(v, false, cond, cond.getTestSuccessor(branchIsNull.booleanNot())) -} - -/** A pair of correlated conditions for a given NPE candidate. */ -private predicate correlatedConditions( - SsaSourceVariable npecand, ConditionBlock cond1, ConditionBlock cond2, boolean inverted -) { - interestingCond(npecand, cond1) and - interestingCond(npecand, cond2) and - cond1 != cond2 and - ( - exists(SsaVariable v | - cond1.getCondition() = v.getAUse() and - cond2.getCondition() = v.getAUse() and - inverted = false - ) - or - exists(SsaVariable v, boolean branch1, boolean branch2 | - conditionChecksNull(cond1, v, branch1) and - conditionChecksNull(cond2, v, branch2) and - inverted = branch1.booleanXor(branch2) - ) - or - exists(SsaVariable v, int k, boolean branch1, boolean branch2 | - cond1 = ssaIntegerGuard(v, branch1, k, true) and - cond1 = ssaIntegerGuard(v, branch1.booleanNot(), k, false) and - cond2 = ssaIntegerGuard(v, branch2, k, true) and - cond2 = ssaIntegerGuard(v, branch2.booleanNot(), k, false) and - inverted = branch1.booleanXor(branch2) - ) - or - exists(SsaVariable v, int k, boolean branch1, boolean branch2 | - cond1 = ssaIntBoundGuard(v, branch1, k) and - cond2 = ssaIntBoundGuard(v, branch2, k) and - inverted = branch1.booleanXor(branch2) - ) - or - exists(SsaVariable v, EnumConstant c, boolean pol1, boolean pol2 | - cond1 = ssaEnumConstEquality(v, pol1, c) and - cond2 = ssaEnumConstEquality(v, pol2, c) and - inverted = pol1.booleanXor(pol2) - ) - or - exists(SsaVariable v, RefType type | - cond1.getCondition() = instanceofExpr(v, type) and - cond2.getCondition() = instanceofExpr(v, type) and - inverted = false - ) - or - exists(SsaVariable v1, SsaVariable v2, boolean branch1, boolean branch2 | - cond1.getCondition() = varEqualityTestExpr(v1, v2, branch1) and - cond2.getCondition() = varEqualityTestExpr(v1, v2, branch2) and - inverted = branch1.booleanXor(branch2) - ) - ) -} - -/** - * This is again the transitive closure of `nullVarStep` similarly to `varMaybeNullInBlock`, but - * this time restricted based on pairs of correlated conditions consistent with `cond1` - * evaluating to `branch`. - */ -private predicate varMaybeNullInBlock_corrCond( - SsaVariable origin, SsaVariable ssa, BasicBlock bb, boolean storedcompletion, - ConditionBlock cond1, boolean branch -) { - exists(SsaSourceVariable npecand | npecand = ssa.getSourceVariable() | - nullDerefCandidateVariable(npecand) and correlatedConditions(npecand, cond1, _, _) - ) and - ( - varConditionallyNull(ssa, cond1, branch) - or - not varConditionallyNull(ssa, cond1, _) and - (branch = true or branch = false) - ) and - varMaybeNull(ssa, _, _) and - bb = ssa.getBasicBlock() and - storedcompletion = false and - origin = ssa - or - exists(BasicBlock mid, SsaVariable midssa, boolean midstoredcompletion | - varMaybeNullInBlock_corrCond(origin, midssa, mid, midstoredcompletion, cond1, branch) and - ( - cond1 = mid and cond1.getTestSuccessor(branch) = bb - or - exists(ConditionBlock cond2, boolean inverted, boolean branch2 | - cond2 = mid and - correlatedConditions(_, cond1, cond2, inverted) and - cond2.getTestSuccessor(branch2) = bb and - branch = branch2.booleanXor(inverted) - ) - or - cond1 != mid and - not exists(ConditionBlock cond2 | cond2 = mid and correlatedConditions(_, cond1, cond2, _)) - ) and - nullVarStep(midssa, mid, midstoredcompletion, ssa, bb, storedcompletion) - ) -} - -/* - * A tracking variable has its possible values divided into two sets, A and B, for - * which we can attribute at least one direct assignment to be contained in either - * A or B. - * Four kinds are supported: - * - null: A means null and B means non-null. - * - boolean: A means true and B means false. - * - enum: A means a specific enum constant and B means any other value. - * - int: A means a specific integer value and B means any other value. - */ - -private newtype TrackVarKind = - TrackVarKindNull() or - TrackVarKindBool() or - TrackVarKindEnum() or - TrackVarKindInt() - -/** A variable that might be relevant as a tracking variable for the NPE candidate. */ -private predicate trackingVar( - SsaSourceVariable npecand, SsaExplicitUpdate trackssa, SsaSourceVariable trackvar, - TrackVarKind kind, Expr init -) { - exists(ConditionBlock cond | - interestingCond(npecand, cond) and - varMaybeNullInBlock(_, npecand, cond, _) and - cond.getCondition().(Expr).getAChildExpr*() = trackvar.getAnAccess() and - trackssa.getSourceVariable() = trackvar and - trackssa.getDefiningExpr().(VariableAssign).getSource() = init - | - init instanceof NullLiteral and kind = TrackVarKindNull() - or - init = clearlyNotNullExpr() and kind = TrackVarKindNull() - or - init instanceof BooleanLiteral and kind = TrackVarKindBool() - or - init.(VarAccess).getVariable() instanceof EnumConstant and kind = TrackVarKindEnum() - or - exists(init.(ConstantIntegerExpr).getIntValue()) and kind = TrackVarKindInt() - ) -} - -/** Gets an expression that tests the value of a given tracking variable. */ -private Expr trackingVarGuard( - SsaVariable trackssa, SsaSourceVariable trackvar, TrackVarKind kind, boolean branch, boolean isA -) { - exists(Expr init | trackingVar(_, trackssa, trackvar, kind, init) | - result = basicNullGuard(trackvar.getAnAccess(), branch, isA) and - kind = TrackVarKindNull() - or - result = trackvar.getAnAccess() and - kind = TrackVarKindBool() and - (branch = true or branch = false) and - isA = branch - or - exists(boolean polarity, EnumConstant c, EnumConstant initc | - initc.getAnAccess() = init and - kind = TrackVarKindEnum() and - result = enumConstEquality(trackvar.getAnAccess(), polarity, c) and - ( - initc = c and branch = polarity.booleanNot() and isA = false - or - initc = c and branch = polarity and isA = true - or - initc != c and branch = polarity and isA = false - ) - ) - or - exists(int k | - init.(ConstantIntegerExpr).getIntValue() = k and - kind = TrackVarKindInt() - | - result = integerGuard(trackvar.getAnAccess(), branch, k, isA) - or - exists(int k2 | - result = integerGuard(trackvar.getAnAccess(), branch.booleanNot(), k2, true) and - isA = false and - k2 != k - ) - or - exists(int bound, boolean branch_with_lower_bound | - result = intBoundGuard(trackvar.getAnAccess(), branch_with_lower_bound, bound) and - isA = false - | - branch = branch_with_lower_bound and k < bound - or - branch = branch_with_lower_bound.booleanNot() and bound <= k - ) - ) - ) - or - exists(EqualityTest eqtest, boolean branch0, boolean polarity, BooleanLiteral boollit | - eqtest = result and - eqtest.hasOperands(trackingVarGuard(trackssa, trackvar, kind, branch0, isA), boollit) and - eqtest.polarity() = polarity and - branch = branch0.booleanXor(polarity).booleanXor(boollit.getBooleanValue()) - ) -} - -/** An update to a tracking variable that is contained fully in either A or B. */ -private predicate isReset( - SsaVariable trackssa, SsaSourceVariable trackvar, TrackVarKind kind, SsaExplicitUpdate update, - boolean isA -) { - exists(Expr init, Expr e | - trackingVar(_, trackssa, trackvar, kind, init) and - update.getSourceVariable() = trackvar and - e = update.getDefiningExpr().(VariableAssign).getSource() - | - e instanceof NullLiteral and kind = TrackVarKindNull() and isA = true - or - e = clearlyNotNullExpr() and kind = TrackVarKindNull() and isA = false - or - e.(BooleanLiteral).getBooleanValue() = isA and kind = TrackVarKindBool() - or - e.(VarAccess).getVariable().(EnumConstant) = init.(VarAccess).getVariable() and - kind = TrackVarKindEnum() and - isA = true - or - e.(VarAccess).getVariable().(EnumConstant) != init.(VarAccess).getVariable() and - kind = TrackVarKindEnum() and - isA = false - or - e.(ConstantIntegerExpr).getIntValue() = init.(ConstantIntegerExpr).getIntValue() and - kind = TrackVarKindInt() and - isA = true - or - e.(ConstantIntegerExpr).getIntValue() != init.(ConstantIntegerExpr).getIntValue() and - kind = TrackVarKindInt() and - isA = false - ) -} - -/** The abstract value of the tracked variable. */ -private newtype TrackedValue = - TrackedValueA() or - TrackedValueB() or - TrackedValueUnknown() - -private TrackedValue trackValAorB(boolean isA) { - isA = true and result = TrackedValueA() - or - isA = false and result = TrackedValueB() -} - -/** A control flow edge passing through a condition that implies a specific value for a tracking variable. */ -private predicate stepImplies( - BasicBlock bb1, BasicBlock bb2, SsaVariable trackssa, SsaSourceVariable trackvar, - TrackVarKind kind, boolean isA -) { - exists(ConditionBlock cond, boolean branch | - cond = bb1 and - cond.getTestSuccessor(branch) = bb2 and - cond.getCondition() = trackingVarGuard(trackssa, trackvar, kind, branch, isA) - ) -} - -/** - * This is again the transitive closure of `nullVarStep` similarly to `varMaybeNullInBlock`, but - * this time restricted based on a tracking variable. - */ -private predicate varMaybeNullInBlock_trackVar( - SsaVariable origin, SsaVariable ssa, BasicBlock bb, boolean storedcompletion, - SsaVariable trackssa, SsaSourceVariable trackvar, TrackVarKind kind, TrackedValue trackvalue -) { - exists(SsaSourceVariable npecand | npecand = ssa.getSourceVariable() | - nullDerefCandidateVariable(npecand) and trackingVar(npecand, trackssa, trackvar, kind, _) - ) and - ( - exists(SsaVariable init, boolean isA | - init.getSourceVariable() = trackvar and - init.isLiveAtEndOfBlock(bb) and - isReset(trackssa, trackvar, kind, init, isA) and - trackvalue = trackValAorB(isA) - ) - or - trackvalue = TrackedValueUnknown() and - not exists(SsaVariable init | - init.getSourceVariable() = trackvar and - init.isLiveAtEndOfBlock(bb) and - isReset(trackssa, trackvar, kind, init, _) - ) - ) and - varMaybeNull(ssa, _, _) and - bb = ssa.getBasicBlock() and - storedcompletion = false and - origin = ssa - or - exists(BasicBlock mid, SsaVariable midssa, boolean midstoredcompletion, TrackedValue trackvalue0 | - varMaybeNullInBlock_trackVar(origin, midssa, mid, midstoredcompletion, trackssa, trackvar, kind, - trackvalue0) and - nullVarStep(midssa, mid, midstoredcompletion, ssa, bb, storedcompletion) and - ( - trackvalue0 = TrackedValueUnknown() - or - // A step that implies a value that contradicts the current value is not allowed. - exists(boolean isA | trackvalue0 = trackValAorB(isA) | - not stepImplies(mid, bb, trackssa, trackvar, kind, isA.booleanNot()) - ) - ) and - ( - // If no update occurs then the tracked value is unchanged unless the step implies a given value via a condition. - not exists(SsaUpdate update | - update.getSourceVariable() = trackvar and - update.getBasicBlock() = bb - ) and - ( - exists(boolean isA | stepImplies(mid, bb, trackssa, trackvar, kind, isA) | - trackvalue = trackValAorB(isA) - ) - or - not stepImplies(mid, bb, trackssa, trackvar, kind, _) and trackvalue = trackvalue0 - ) - or - // If an update occurs then the tracked value is set accordingly. - exists(SsaUpdate update | - update.getSourceVariable() = trackvar and - update.getBasicBlock() = bb - | - exists(boolean isA | isReset(trackssa, trackvar, kind, update, isA) | - trackvalue = trackValAorB(isA) - ) - or - not isReset(trackssa, trackvar, kind, update, _) and trackvalue = TrackedValueUnknown() - ) - ) - ) -} - -/** - * A potential `null` dereference that has not been proven safe. + * Holds if the dereference of `v` at `va` might be `null`. */ predicate nullDeref(SsaSourceVariable v, VarAccess va, string msg, Expr reason) { - exists(SsaVariable origin, SsaVariable ssa, BasicBlock bb | - nullDerefCandidate(origin, va) and - varMaybeNull(origin, msg, reason) and + exists(SsaVariable origin, SsaVariable ssa, ControlFlowNode src, ControlFlowNode sink | + varMaybeNull(origin, src, msg, reason) and + NullnessFlow::flow(src, origin, sink, ssa) and ssa.getSourceVariable() = v and - firstVarDereferenceInBlock(bb, ssa, va) and - forall(ConditionBlock cond | correlatedConditions(v, cond, _, _) | - varMaybeNullInBlock_corrCond(origin, ssa, bb, _, cond, _) - ) and - forall(SsaVariable guardssa, SsaSourceVariable guardvar, TrackVarKind kind | - trackingVar(v, guardssa, guardvar, kind, _) - | - varMaybeNullInBlock_trackVar(origin, ssa, bb, _, guardssa, guardvar, kind, _) - ) + varDereference(ssa, va) = sink ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index dd902b70e35..40da9a4e94d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -253,17 +253,18 @@ class SsaImplicitUpdate extends SsaUpdate { or if this.hasImplicitQualifierUpdate() then - if exists(this.getANonLocalUpdate()) + if isNonLocal(this) then result = "nonlocal + nonlocal qualifier" else result = "nonlocal qualifier" else ( - exists(this.getANonLocalUpdate()) and result = "nonlocal" + isNonLocal(this) and result = "nonlocal" ) } /** * Gets a reachable `FieldWrite` that might represent this ssa update, if any. */ + overlay[global] FieldWrite getANonLocalUpdate() { exists(SsaSourceField f, Callable setter | relevantFieldUpdate(setter, f.getField(), result) and @@ -287,6 +288,11 @@ class SsaImplicitUpdate extends SsaUpdate { } } +overlay[global] +private predicate isNonLocalImpl(SsaImplicitUpdate su) { exists(su.getANonLocalUpdate()) } + +private predicate isNonLocal(SsaImplicitUpdate su) = forceLocal(isNonLocalImpl/1)(su) + /** * An SSA variable that represents an uncertain implicit update of the value. * This is a `Call` that might reach a non-local update of the field or one of @@ -330,6 +336,9 @@ class SsaPhiNode extends SsaVariable instanceof PhiNode { /** Gets an input to the phi node defining the SSA variable. */ SsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } + /** Gets an input to the phi node defining the SSA variable. */ + SsaVariable getAnInput() { this.hasInputFromBlock(result, _) } + /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ predicate hasInputFromBlock(SsaVariable inp, BasicBlock bb) { phiHasInputFromBlock(this, inp, bb) diff --git a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll index 159604a95bd..34c7b717428 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll @@ -13,5 +13,5 @@ module TaintTracking { private import semmle.code.java.dataflow.internal.DataFlowImplSpecific private import semmle.code.java.dataflow.internal.TaintTrackingImplSpecific private import codeql.dataflow.TaintTracking - import TaintFlowMake + import TaintFlowMakeOverlay } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 5c0fbb88d66..5a818d18b85 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -157,17 +157,7 @@ private module BaseSsaImpl { private import BaseSsaImpl -private module SsaInput implements SsaImplCommon::InputSig { - private import java as J - - class BasicBlock = J::BasicBlock; - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = BaseSsaSourceVariable; /** @@ -199,7 +189,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -private module Impl = SsaImplCommon::Make; +private module Impl = SsaImplCommon::Make; private import Cached @@ -376,6 +366,9 @@ class BaseSsaPhiNode extends BaseSsaVariable instanceof Impl::PhiNode { /** Gets an input to the phi node defining the SSA variable. */ BaseSsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } + /** Gets an input to the phi node defining the SSA variable. */ + BaseSsaVariable getAnInput() { this.hasInputFromBlock(result, _) } + /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ predicate hasInputFromBlock(BaseSsaVariable inp, BasicBlock bb) { phiHasInputFromBlock(this, inp, bb) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll index f9313959226..5af24642477 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -470,7 +470,8 @@ private predicate enhancedForStmtStep(Node node1, Node node2, Type containerType } /** - * Holds if the step from `node1` to `node2` reads a value from an array. + * Holds if the step from `node1` to `node2` reads a value from an array, where + * the elements are of type `elemType`. * This covers ordinary array reads as well as array iteration through enhanced * `for` statements. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll index 65034ee08b9..97f5020142e 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll @@ -6,6 +6,7 @@ module; private import semmle.code.Location private import codeql.dataflow.DataFlow +private import semmle.code.java.Overlay module Private { import DataFlowPrivate @@ -29,4 +30,6 @@ module JavaDataFlow implements InputSig { predicate mayBenefitFromCallContext = Private::mayBenefitFromCallContext/1; predicate viableImplInCallContext = Private::viableImplInCallContext/2; + + predicate isEvaluatingInOverlay = isOverlay/0; } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 8b9087ecbdc..1721569e45a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -69,28 +69,10 @@ private predicate closureFlowStep(Expr e1, Expr e2) { ) } -private module CaptureInput implements VariableCapture::InputSig { +private module CaptureInput implements VariableCapture::InputSig { private import java as J - class BasicBlock instanceof J::BasicBlock { - string toString() { result = super.toString() } - - ControlFlowNode getNode(int i) { result = super.getNode(i) } - - int length() { result = super.length() } - - Callable getEnclosingCallable() { result = super.getEnclosingCallable() } - - Location getLocation() { result = super.getLocation() } - } - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { - result.(J::BasicBlock).immediatelyDominates(bb) - } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.(J::BasicBlock).getASuccessor() } + Callable basicBlockGetEnclosingCallable(BasicBlock bb) { result = bb.getEnclosingCallable() } //TODO: support capture of `this` in lambdas class CapturedVariable instanceof LocalScopeVariable { @@ -165,7 +147,7 @@ class CapturedVariable = CaptureInput::CapturedVariable; class CapturedParameter = CaptureInput::CapturedParameter; -module CaptureFlow = VariableCapture::Flow; +module CaptureFlow = VariableCapture::Flow; private CaptureFlow::ClosureNode asClosureNode(Node n) { result = n.(CaptureNode).getSynthesizedCaptureNode() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index ab2f7f89cb4..23e9f680c97 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -83,6 +83,7 @@ overlay[caller?] pragma[inline] predicate localFlow(Node node1, Node node2) { node1 = node2 or localFlowStepPlus(node1, node2) } +overlay[caller?] private predicate localFlowStepPlus(Node node1, Node node2) = fastTC(localFlowStep/2)(node1, node2) /** @@ -263,8 +264,8 @@ class Content extends TContent { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `path`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ @@ -362,8 +363,8 @@ class ContentSet instanceof Content { /** * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. + * The location spans column `sc` of line `sl` to + * column `ec` of line `el` in file `path`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index a2d25cadd88..8dc28ea2f60 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -132,7 +132,7 @@ private module TypesInput implements Impl::Private::TypesInputSig { exists(rk) } - DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponent sc) { + DataFlowType getSourceType(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } @@ -144,7 +144,9 @@ private module StepsInput implements Impl::Private::StepsInputSig { sc = viableCallable(result).asSummarizedCallable() } - Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(Input::SourceBase source) { none() } + + Node getSourceNode(Input::SourceBase source, Impl::Private::SummaryComponentStack s) { none() } Node getSinkNode(Input::SinkBase sink, Impl::Private::SummaryComponent sc) { none() } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 5a6c5ff6339..275a0afafc0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -157,26 +157,21 @@ private predicate hasEntryDef(TrackedVar v, BasicBlock b) { } /** Holds if `n` might update the locally tracked variable `v`. */ +overlay[global] pragma[nomagic] -private predicate uncertainVariableUpdate(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) { +private predicate uncertainVariableUpdateImpl(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) { exists(Call c | c = n.asCall() | updatesNamedField(c, v, _)) and b.getNode(i) = n and hasDominanceInformation(b) or - uncertainVariableUpdate(v.getQualifier(), n, b, i) + uncertainVariableUpdateImpl(v.getQualifier(), n, b, i) } -private module SsaInput implements SsaImplCommon::InputSig { - private import java as J - - class BasicBlock = J::BasicBlock; - - class ControlFlowNode = J::ControlFlowNode; - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result.immediatelyDominates(bb) } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } +/** Holds if `n` might update the locally tracked variable `v`. */ +predicate uncertainVariableUpdate(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) = + forceLocal(uncertainVariableUpdateImpl/4)(v, n, b, i) +private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = SsaSourceVariable; /** @@ -218,7 +213,7 @@ private module SsaInput implements SsaImplCommon::InputSig { } } -import SsaImplCommon::Make as Impl +import SsaImplCommon::Make as Impl final class Definition = Impl::Definition; @@ -345,6 +340,7 @@ private module Cached { * Constructor --(intraInstanceCallEdge)-->+ Method(setter of this.f) * ``` */ + overlay[global] private predicate intraInstanceCallEdge(Callable c1, Method m2) { exists(MethodCall ma, RefType t1 | ma.getCaller() = c1 and @@ -365,6 +361,7 @@ private module Cached { ) } + overlay[global] private Callable tgt(Call c) { result = viableImpl_v2(c) or @@ -374,11 +371,13 @@ private module Cached { } /** Holds if `(c1,c2)` is an edge in the call graph. */ + overlay[global] private predicate callEdge(Callable c1, Callable c2) { exists(Call c | c.getCaller() = c1 and c2 = tgt(c)) } /** Holds if `(c1,c2)` is an edge in the call graph excluding `intraInstanceCallEdge`. */ + overlay[global] private predicate crossInstanceCallEdge(Callable c1, Callable c2) { callEdge(c1, c2) and not intraInstanceCallEdge(c1, c2) } @@ -392,6 +391,7 @@ private module Cached { relevantFieldUpdate(_, f.getField(), _) } + overlay[global] private predicate source(Call call, TrackedField f, Field field, Callable c, boolean fresh) { relevantCall(call, f) and field = f.getField() and @@ -405,9 +405,11 @@ private module Cached { * `fresh` indicates whether the instance `this` in `c` has been freshly * allocated along the call-chain. */ + overlay[global] private newtype TCallableNode = MkCallableNode(Callable c, boolean fresh) { source(_, _, _, c, fresh) or edge(_, c, fresh) } + overlay[global] private predicate edge(TCallableNode n, Callable c2, boolean f2) { exists(Callable c1, boolean f1 | n = MkCallableNode(c1, f1) | intraInstanceCallEdge(c1, c2) and f2 = f1 @@ -417,6 +419,7 @@ private module Cached { ) } + overlay[global] private predicate edge(TCallableNode n1, TCallableNode n2) { exists(Callable c2, boolean f2 | edge(n1, c2, f2) and @@ -424,6 +427,7 @@ private module Cached { ) } + overlay[global] pragma[noinline] private predicate source(Call call, TrackedField f, Field field, TCallableNode n) { exists(Callable c, boolean fresh | @@ -432,24 +436,28 @@ private module Cached { ) } + overlay[global] private predicate sink(Callable c, Field f, TCallableNode n) { setsOwnField(c, f) and n = MkCallableNode(c, false) or setsOtherField(c, f) and n = MkCallableNode(c, _) } + overlay[global] private predicate prunedNode(TCallableNode n) { sink(_, _, n) or exists(TCallableNode mid | edge(n, mid) and prunedNode(mid)) } + overlay[global] private predicate prunedEdge(TCallableNode n1, TCallableNode n2) { prunedNode(n1) and prunedNode(n2) and edge(n1, n2) } + overlay[global] private predicate edgePlus(TCallableNode c1, TCallableNode c2) = fastTC(prunedEdge/2)(c1, c2) /** @@ -457,6 +465,7 @@ private module Cached { * where `f` and `call` share the same enclosing callable in which a * `FieldRead` of `f` is reachable from `call`. */ + overlay[global] pragma[noopt] private predicate updatesNamedFieldImpl(Call call, TrackedField f, Callable setter) { exists(TCallableNode src, TCallableNode sink, Field field | @@ -467,11 +476,13 @@ private module Cached { } bindingset[call, f] + overlay[global] pragma[inline_late] private predicate updatesNamedField0(Call call, TrackedField f, Callable setter) { updatesNamedField(call, f, setter) } + overlay[global] cached predicate defUpdatesNamedField(SsaImplicitUpdate def, TrackedField f, Callable setter) { f = def.getSourceVariable() and @@ -562,14 +573,20 @@ private module Cached { cached // nothing is actually cached module BarrierGuard { - private predicate guardChecksAdjTypes( - DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, Guards::GuardValue val + private predicate guardChecksAdjTypes(Guards::Guards_v3::Guard g, Expr e, boolean branch) { + guardChecks(g, e, branch) + } + + private predicate guardChecksWithWrappers( + DataFlowIntegrationInput::Guard g, Definition def, Guards::GuardValue val, Unit state ) { - guardChecks(g, e, val.asBooleanValue()) + Guards::Guards_v3::ValidationWrapper::guardChecksDef(g, def, val) and + exists(state) } private Node getABarrierNodeImpl() { - result = DataFlowIntegrationImpl::BarrierGuard::getABarrierNode() + result = + DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(_) } predicate getABarrierNode = getABarrierNodeImpl/0; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 40e361ed158..5f1d6b66af5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -278,21 +278,23 @@ private predicate inputStreamWrapper(Constructor c, int argi) { /** An object construction that preserves the data flow status of any of its arguments. */ private predicate constructorStep(Expr tracked, ConstructorCall sink, string model) { - exists(int argi | sink.getArgument(argi) = tracked | + exists(int argi | sink.getArgument(pragma[only_bind_into](argi)) = tracked | // wrappers constructed by extension exists(Constructor c, Parameter p, SuperConstructorInvocationStmt sup | c = sink.getConstructor() and - p = c.getParameter(argi) and + p = c.getParameter(pragma[only_bind_into](argi)) and sup.getEnclosingCallable() = c and constructorStep(p.getAnAccess(), sup, model) ) or // a custom InputStream that wraps a tainted data source is tainted model = "inputStreamWrapper" and - inputStreamWrapper(sink.getConstructor(), argi) + inputStreamWrapper(sink.getConstructor(), pragma[only_bind_into](argi)) or model = "TaintPreservingCallable" and - sink.getConstructor().(TaintPreservingCallable).returnsTaintFrom(argToParam(sink, argi)) + sink.getConstructor() + .(TaintPreservingCallable) + .returnsTaintFrom(argToParam(sink, pragma[only_bind_into](argi))) ) } @@ -653,6 +655,8 @@ private SrcRefType entrypointType() { ) or result = entrypointType().getAField().getType().(RefType).getSourceDeclaration() + or + result = entrypointType().(Array).getElementType().(RefType).getSourceDeclaration() } private predicate entrypointFieldStep(DataFlow::Node src, DataFlow::Node sink) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 8789661af7d..6363b8f7ed3 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -204,7 +204,7 @@ private module Impl { /** Gets the character value of expression `e`. */ string getCharValue(Expr e) { result = e.(CharacterLiteral).getValue() } - /** Gets the constant `float` value of non-`ConstantIntegerExpr` expressions. */ + /** Gets the constant `float` value of non-`ConstantIntegerExpr` expression `e`. */ float getNonIntegerValue(Expr e) { result = e.(LongLiteral).getValue().toFloat() or result = e.(FloatLiteral).getValue().toFloat() or @@ -256,12 +256,12 @@ private module Impl { exists(EnhancedForStmt for | def = for.getVariable()) } - /** Returns the operand of the operation if `def` is a decrement. */ + /** Returns the operand of the operation if `e` is a decrement. */ Expr getDecrementOperand(Element e) { result = e.(PostDecExpr).getExpr() or result = e.(PreDecExpr).getExpr() } - /** Returns the operand of the operation if `def` is an increment. */ + /** Returns the operand of the operation if `e` is an increment. */ Expr getIncrementOperand(Element e) { result = e.(PostIncExpr).getExpr() or result = e.(PreIncExpr).getExpr() } diff --git a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll index a9988e920c6..bd293eed6b3 100644 --- a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll @@ -5,8 +5,6 @@ * data flow check for lambdas, anonymous classes, and other sufficiently * private classes where all object instantiations are accounted for. */ -overlay[local?] -module; import java private import VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index 86915f80274..a3da9118acc 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -6,8 +6,6 @@ * The set of dispatch targets for `Object.toString()` calls are reduced based * on possible data flow from objects of more specific types to the qualifier. */ -overlay[local?] -module; import java private import VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll index 877a62fb945..78bf1ad0bdc 100644 --- a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll +++ b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll @@ -2,8 +2,6 @@ * Provides predicates for reasoning about runtime call targets through virtual * dispatch. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.TypeFlow diff --git a/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll b/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll index cd585de58e4..6c92f7298d9 100644 --- a/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll +++ b/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll @@ -1,8 +1,6 @@ /** * Provides a module to check whether two `ParameterizedType`s are unifiable. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Assertions.qll b/java/ql/lib/semmle/code/java/frameworks/Assertions.qll index 9849be5f360..49afcb7a3e1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Assertions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Assertions.qll @@ -1,4 +1,6 @@ /** + * DEPRECATED. + * * A library providing uniform access to various assertion frameworks. * * Currently supports `org.junit.Assert`, `junit.framework.*`, @@ -6,7 +8,7 @@ * and `java.util.Objects`. */ overlay[local?] -module; +deprecated module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll index 1a8d987a38e..a8559060d30 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll @@ -223,10 +223,10 @@ class MockitoInjectedField extends MockitoAnnotatedField { // If there is no initializer for this field, and there is a most mockable constructor, // then we are doing a parameterized injection of mocks into a most mockable constructor. result = mockInjectedClass.getAMostMockableConstructor() - else - if this.usingPropertyInjection() - then - // We will call the no-arg constructor if the field wasn't initialized. + else ( + this.usingPropertyInjection() and + // We will call the no-arg constructor if the field wasn't initialized. + ( not exists(this.getInitializer()) and result = mockInjectedClass.getNoArgsConstructor() or @@ -241,9 +241,8 @@ class MockitoInjectedField extends MockitoAnnotatedField { // once, but we instead assume that there are sufficient mocks to go around. mockedField.getType().(RefType).getAnAncestor() = result.getParameterType(0) ) - else - // There's no instance, and no no-arg constructor we can call, so injection fails. - none() + ) + ) ) } @@ -253,18 +252,16 @@ class MockitoInjectedField extends MockitoAnnotatedField { * Field injection only occurs if property injection and not constructor injection is used. */ Field getASetField() { - if this.usingPropertyInjection() - then - result = this.getMockInjectedClass().getASetField() and - exists(MockitoMockedField mockedField | - mockedField.getDeclaringType() = this.getDeclaringType() and - mockedField.isValid() - | - // We make a simplifying assumption here - in theory, each mock can only be injected - // once, but we instead assume that there are sufficient mocks to go around. - mockedField.getType().(RefType).getAnAncestor() = result.getType() - ) - else none() + this.usingPropertyInjection() and + result = this.getMockInjectedClass().getASetField() and + exists(MockitoMockedField mockedField | + mockedField.getDeclaringType() = this.getDeclaringType() and + mockedField.isValid() + | + // We make a simplifying assumption here - in theory, each mock can only be injected + // once, but we instead assume that there are sufficient mocks to go around. + mockedField.getType().(RefType).getAnAncestor() = result.getType() + ) } } diff --git a/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll b/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll index c07ddea6dba..6dd49fc7ff6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll @@ -20,8 +20,10 @@ private predicate externalStorageFlowStep(DataFlow::Node node1, DataFlow::Node n node2.asExpr().(FieldRead).getField().getInitializer() = node1.asExpr() } -private predicate externalStorageFlow(DataFlow::Node node1, DataFlow::Node node2) { - externalStorageFlowStep*(node1, node2) +private predicate externalStorageDirFlowsTo(DataFlow::Node n) { + sourceNode(n, "android-external-storage-dir") + or + exists(DataFlow::Node mid | externalStorageDirFlowsTo(mid) and externalStorageFlowStep(mid, n)) } /** @@ -29,9 +31,8 @@ private predicate externalStorageFlow(DataFlow::Node node1, DataFlow::Node node2 * This is controllable by third-party applications, so is treated as a remote flow source. */ predicate androidExternalStorageSource(DataFlow::Node n) { - exists(DataFlow::Node externalDir, DirectFileReadExpr read | - sourceNode(externalDir, "android-external-storage-dir") and + exists(DirectFileReadExpr read | n.asExpr() = read and - externalStorageFlow(externalDir, DataFlow::exprNode(read.getFileExpr())) + externalStorageDirFlowsTo(DataFlow::exprNode(read.getFileExpr())) ) } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll index 2b003b3c94e..d59976c0c6c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll @@ -35,14 +35,14 @@ class SessionEjb extends EJB { // Either the EJB does not declare any business interfaces explicitly // and implements a single interface candidate, // which is then considered to be the business interface... - count(this.getAnExplicitBusinessInterface()) = 0 and + not exists(this.getAnExplicitBusinessInterface()) and count(this.getAnImplementedBusinessInterfaceCandidate()) = 1 and result = this.getAnImplementedBusinessInterfaceCandidate() or // ...or each business interface needs to be declared explicitly. ( count(this.getAnImplementedBusinessInterfaceCandidate()) != 1 or - count(this.getAnExplicitBusinessInterface()) != 0 + exists(this.getAnExplicitBusinessInterface()) ) and result = this.getAnExplicitBusinessInterface() } diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 6a934bdd578..929fa2d6c91 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -163,6 +163,12 @@ private module RegexFlowConfig implements DataFlow::ConfigSig { private module RegexFlow = DataFlow::Global; +private predicate usedAsRegexImpl(StringLiteral regex, string mode, boolean match_full_string) { + RegexFlow::flow(DataFlow::exprNode(regex), _) and + mode = "None" and // TODO: proper mode detection + (if matchesFullString(regex) then match_full_string = true else match_full_string = false) +} + /** * Holds if `regex` is used as a regex, with the mode `mode` (if known). * If regex mode is not known, `mode` will be `"None"`. @@ -170,11 +176,9 @@ private module RegexFlow = DataFlow::Global; * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) * and therefore may be relevant for ReDoS queries are considered. */ -predicate usedAsRegex(StringLiteral regex, string mode, boolean match_full_string) { - RegexFlow::flow(DataFlow::exprNode(regex), _) and - mode = "None" and // TODO: proper mode detection - (if matchesFullString(regex) then match_full_string = true else match_full_string = false) -} +overlay[local] +predicate usedAsRegex(StringLiteral regex, string mode, boolean match_full_string) = + forceLocal(usedAsRegexImpl/3)(regex, mode, match_full_string) /** * Holds if `regex` is used as a regular expression that is matched against a full string, diff --git a/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallationQuery.qll b/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallationQuery.qll index 8c833bb79d6..e907a9ffeaa 100644 --- a/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallationQuery.qll @@ -25,8 +25,6 @@ module ApkInstallationConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node sink) { none() } } module ApkInstallationFlow = DataFlow::Global; diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll index e0d6ff305c3..4f4c20a5263 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll @@ -20,16 +20,16 @@ predicate narrowerThanOrEqualTo(ArithExpr exp, NumType numType) { exists(CastingExpr cast | cast.getAChildExpr() = exp | numType.widerThanOrEqualTo(cast.getType())) } -private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) { +private Guard sizeGuard(Expr e, boolean branch, boolean upper) { exists(ComparisonExpr comp | comp = result | - comp.getLesserOperand() = ssaRead(v, 0) and + comp.getLesserOperand() = e and ( branch = true and upper = true or branch = false and upper = false ) or - comp.getGreaterOperand() = ssaRead(v, 0) and + comp.getGreaterOperand() = e and ( branch = true and upper = false or @@ -38,7 +38,7 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) { or exists(MethodCall ma | ma.getMethod() instanceof MethodAbs and - ma.getArgument(0) = ssaRead(v, 0) and + ma.getArgument(0) = e and ( comp.getLesserOperand() = ma and branch = true or @@ -49,7 +49,7 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) { or // overflow test exists(AddExpr add, VarRead use, Expr pos | - use = ssaRead(v, 0) and + use = e and add.hasOperands(use, pos) and positive(use) and positive(pos) and @@ -65,70 +65,38 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) { ) ) or - result.isEquality(ssaRead(v, 0), _, branch) and + result.isEquality(e, _, branch) and (upper = true or upper = false) - or - exists(MethodCall call, Method m, int ix | - call = result and - call.getArgument(ix) = ssaRead(v, 0) and - call.getMethod().getSourceDeclaration() = m and - m = customSizeGuard(ix, branch, upper) - ) } -private Guard derivedSizeGuard(SsaVariable v, boolean branch, boolean upper) { - result = sizeGuard(v, branch, upper) or - exists(boolean branch0 | implies_v3(result, branch, derivedSizeGuard(v, branch0, upper), branch0)) +private predicate sizeGuardLessThan(Guard g, Expr e, boolean branch) { + g = sizeGuard(e, branch, true) } -private Method customSizeGuard(int index, boolean retval, boolean upper) { - exists(Parameter p, SsaImplicitInit v | - result.getReturnType().(PrimitiveType).hasName("boolean") and - not result.isOverridable() and - p.getCallable() = result and - not p.isVarargs() and - p.getType() instanceof NumericOrCharType and - p.getPosition() = index and - v.isParameterDefinition(p) and - forex(ReturnStmt ret | - ret.getEnclosingCallable() = result and - exists(Expr res | res = ret.getResult() | - not res.(BooleanLiteral).getBooleanValue() = retval.booleanNot() - ) - | - ret.getResult() = derivedSizeGuard(v, retval, upper) - ) - ) +private predicate sizeGuardGreaterThan(Guard g, Expr e, boolean branch) { + g = sizeGuard(e, branch, false) } /** - * Holds if `e` is bounded in a way that is likely to prevent overflow. + * Holds if `n` is bounded in a way that is likely to prevent overflow. */ -predicate guardedLessThanSomething(Expr e) { - exists(SsaVariable v, Guard guard, boolean branch | - e = v.getAUse() and - guard = sizeGuard(v.getAPhiInputOrPriorDef*(), branch, true) and - guard.controls(e.getBasicBlock(), branch) - ) +predicate guardedLessThanSomething(DataFlow::Node n) { + DataFlow::BarrierGuard::getABarrierNode() = n or - negative(e) + negative(n.asExpr()) or - e.(MethodCall).getMethod() instanceof MethodMathMin + n.asExpr().(MethodCall).getMethod() instanceof MethodMathMin } /** * Holds if `e` is bounded in a way that is likely to prevent underflow. */ -predicate guardedGreaterThanSomething(Expr e) { - exists(SsaVariable v, Guard guard, boolean branch | - e = v.getAUse() and - guard = sizeGuard(v.getAPhiInputOrPriorDef*(), branch, false) and - guard.controls(e.getBasicBlock(), branch) - ) +predicate guardedGreaterThanSomething(DataFlow::Node n) { + DataFlow::BarrierGuard::getABarrierNode() = n or - positive(e) + positive(n.asExpr()) or - e.(MethodCall).getMethod() instanceof MethodMathMax + n.asExpr().(MethodCall).getMethod() instanceof MethodMathMax } /** Holds if `e` occurs in a context where it will be upcast to a wider type. */ @@ -182,7 +150,7 @@ private predicate unlikelyNode(DataFlow::Node n) { /** Holds if `n` is likely guarded against overflow. */ predicate overflowBarrier(DataFlow::Node n) { n.getType() instanceof BooleanType or - guardedLessThanSomething(n.asExpr()) or + guardedLessThanSomething(n) or unlikelyNode(n) or upcastToWiderType(n.asExpr()) or overflowIrrelevant(n.asExpr()) @@ -191,7 +159,7 @@ predicate overflowBarrier(DataFlow::Node n) { /** Holds if `n` is likely guarded against underflow. */ predicate underflowBarrier(DataFlow::Node n) { n.getType() instanceof BooleanType or - guardedGreaterThanSomething(n.asExpr()) or + guardedGreaterThanSomething(n) or unlikelyNode(n) or upcastToWiderType(n.asExpr()) or overflowIrrelevant(n.asExpr()) @@ -210,7 +178,6 @@ predicate overflowSink(ArithExpr exp, VarAccess use) { exp instanceof PostIncExpr or exp instanceof MulExpr ) and - not guardedLessThanSomething(use) and // Exclude widening conversions of tainted values due to binary numeric promotion (JLS 5.6.2) // unless there is an enclosing cast down to a narrower type. narrowerThanOrEqualTo(exp, use.getType()) and @@ -230,7 +197,6 @@ predicate underflowSink(ArithExpr exp, VarAccess use) { exp instanceof PostDecExpr or exp instanceof MulExpr ) and - not guardedGreaterThanSomething(use) and // Exclude widening conversions of tainted values due to binary numeric promotion (JLS 5.6.2) // unless there is an enclosing cast down to a narrower type. narrowerThanOrEqualTo(exp, use.getType()) and diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticTaintedQuery.qll b/java/ql/lib/semmle/code/java/security/ArithmeticTaintedQuery.qll index fbb8509f48f..65e73f84149 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticTaintedQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticTaintedQuery.qll @@ -19,7 +19,9 @@ module ArithmeticOverflowConfig implements DataFlow::ConfigSig { } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(ArithExpr exp | result = exp.getLocation() | overflowSink(exp, sink.asExpr())) + exists(ArithExpr exp | result = [exp.getLocation(), sink.getLocation()] | + overflowSink(exp, sink.asExpr()) + ) } } @@ -43,7 +45,9 @@ module ArithmeticUnderflowConfig implements DataFlow::ConfigSig { } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(ArithExpr exp | result = exp.getLocation() | underflowSink(exp, sink.asExpr())) + exists(ArithExpr exp | result = [exp.getLocation(), sink.getLocation()] | + underflowSink(exp, sink.asExpr()) + ) } } diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticUncontrolledQuery.qll b/java/ql/lib/semmle/code/java/security/ArithmeticUncontrolledQuery.qll index 6b7b337ad65..3c1ceaddc2f 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticUncontrolledQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticUncontrolledQuery.qll @@ -25,7 +25,9 @@ module ArithmeticUncontrolledOverflowConfig implements DataFlow::ConfigSig { } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(ArithExpr exp | result = exp.getLocation() | overflowSink(exp, sink.asExpr())) + exists(ArithExpr exp | result = [exp.getLocation(), sink.getLocation()] | + overflowSink(exp, sink.asExpr()) + ) } } @@ -46,7 +48,9 @@ module ArithmeticUncontrolledUnderflowConfig implements DataFlow::ConfigSig { } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(ArithExpr exp | result = exp.getLocation() | underflowSink(exp, sink.asExpr())) + exists(ArithExpr exp | result = [exp.getLocation(), sink.getLocation()] | + underflowSink(exp, sink.asExpr()) + ) } } diff --git a/java/ql/lib/semmle/code/java/security/BrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/BrokenCryptoAlgorithmQuery.qll index 4f9e39b23f2..60f1e179397 100644 --- a/java/ql/lib/semmle/code/java/security/BrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/BrokenCryptoAlgorithmQuery.qll @@ -12,6 +12,7 @@ private class ShortStringLiteral extends StringLiteral { /** * A string literal that may refer to a broken or risky cryptographic algorithm. */ +overlay[local?] class BrokenAlgoLiteral extends ShortStringLiteral { BrokenAlgoLiteral() { this.getValue().regexpMatch(getInsecureAlgorithmRegex()) and @@ -35,7 +36,11 @@ module InsecureCryptoConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(CryptoAlgoSpec c | sink.asExpr() = c.getAlgoSpec() | result = c.getLocation()) + exists(CryptoAlgoSpec c | sink.asExpr() = c.getAlgoSpec() | + result = c.getLocation() + or + result = sink.getLocation() + ) } } diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll index 98acdbc1c55..89867398148 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll @@ -55,7 +55,7 @@ private predicate isVarargs(Argument arg, DataFlow::ImplicitVarargsArray varargs arg.isVararg() and arg.getCall() = varargs.getCall() } -/** Holds if `store` closes `file`. */ +/** Holds if `closeCall` closes `file`. */ private predicate closesFile(DataFlow::Node file, Call closeCall) { closeCall.getCallee() instanceof CloseFileMethod and if closeCall.getCallee().isStatic() diff --git a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll index a1c75f93802..b6b9d02e289 100644 --- a/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CommandLineQuery.qll @@ -63,10 +63,14 @@ module InputToArgumentToExecFlowConfig implements DataFlow::ConfigSig { // only to prevent overlapping results between two queries. predicate observeDiffInformedIncrementalMode() { any() } - // All queries use the argument as the primary location and do not use the - // sink as an associated location. + // ExecTainted.ql queries use the argument as the primary location; + // ExecUnescaped.ql does not (used to prevent overlapping results). Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(Expr argument | argumentToExec(argument, sink) | result = argument.getLocation()) + exists(Expr argument | argumentToExec(argument, sink) | + result = argument.getLocation() + or + result = sink.getLocation() + ) } } diff --git a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll index 31457036937..babf129f19e 100644 --- a/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ConditionalBypassQuery.qll @@ -51,7 +51,7 @@ module ConditionalBypassFlowConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(MethodCall m, Expr e | result = [m, e].getLocation() | + exists(MethodCall m, Expr e | result = [[m, e].getLocation(), sink.getLocation()] | conditionControlsMethod(m, e) and sink.asExpr() = e ) diff --git a/java/ql/lib/semmle/code/java/security/FileWritable.qll b/java/ql/lib/semmle/code/java/security/FileWritable.qll index d1833bf64d4..a5efad31bcb 100644 --- a/java/ql/lib/semmle/code/java/security/FileWritable.qll +++ b/java/ql/lib/semmle/code/java/security/FileWritable.qll @@ -89,7 +89,7 @@ private VarAccess getFileForPathConversion(Expr pathExpr) { } /** - * Holds if `fileAccess` is used in the `setWorldWritableExpr` to set the file to be world writable. + * Holds if `fileAccess` is used in the `setWorldWritable` to set the file to be world writable. */ private predicate fileSetWorldWritable(VarAccess fileAccess, Expr setWorldWritable) { // Calls to `File.setWritable(.., false)`. diff --git a/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionCodeSpecifiedQuery.qll b/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionCodeSpecifiedQuery.qll index e952971c389..97a6d159bc9 100644 --- a/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionCodeSpecifiedQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionCodeSpecifiedQuery.qll @@ -22,7 +22,10 @@ module BoundedFlowSourceConfig implements DataFlow::ConfigSig { Location getASelectedSinkLocation(DataFlow::Node sink) { exists(ArrayCreationExpr arrayCreation, CheckableArrayAccess arrayAccess | - result = [arrayCreation, arrayAccess.getIndexExpr()].getLocation() and + result = [arrayCreation, arrayAccess.getIndexExpr()].getLocation() + or + result = sink.getLocation() + | arrayAccess.canThrowOutOfBoundsDueToEmptyArray(sink.asExpr(), arrayCreation) ) } diff --git a/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionQuery.qll b/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionQuery.qll index 913d50b3159..74b8af7e588 100644 --- a/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ImproperValidationOfArrayConstructionQuery.qll @@ -19,7 +19,10 @@ module ImproperValidationOfArrayConstructionConfig implements DataFlow::ConfigSi Location getASelectedSinkLocation(DataFlow::Node sink) { exists(ArrayCreationExpr arrayCreation, CheckableArrayAccess arrayAccess | - result = [arrayCreation, arrayAccess.getIndexExpr()].getLocation() and + result = [arrayCreation, arrayAccess.getIndexExpr()].getLocation() + or + result = sink.getLocation() + | arrayAccess.canThrowOutOfBoundsDueToEmptyArray(sink.asExpr(), arrayCreation) ) } diff --git a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll index 57622b367f3..22c7320a55a 100644 --- a/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll +++ b/java/ql/lib/semmle/code/java/security/MaybeBrokenCryptoAlgorithmQuery.qll @@ -81,7 +81,9 @@ module InsecureCryptoConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(CryptoAlgoSpec c | result = c.getLocation() | sink.asExpr() = c.getAlgoSpec()) + exists(CryptoAlgoSpec c | result = sink.getLocation() or result = c.getLocation() | + sink.asExpr() = c.getAlgoSpec() + ) } } diff --git a/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll b/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll index bfe22c69e64..841ff4f8515 100644 --- a/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll +++ b/java/ql/lib/semmle/code/java/security/NumericCastTaintedQuery.qll @@ -106,8 +106,9 @@ module NumericCastFlowConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(NumericNarrowingCastExpr cast | - cast.getExpr() = sink.asExpr() and + exists(NumericNarrowingCastExpr cast | cast.getExpr() = sink.asExpr() | + result = sink.getLocation() + or result = cast.getLocation() ) } diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index e789d3c4778..da6f242bde5 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -13,33 +13,6 @@ private import semmle.code.java.dataflow.Nullness /** A sanitizer that protects against path injection vulnerabilities. */ abstract class PathInjectionSanitizer extends DataFlow::Node { } -/** - * Provides a set of nodes validated by a method that uses a validation guard. - */ -private module ValidationMethod { - /** Gets a node that is safely guarded by a method that uses the given guard check. */ - DataFlow::Node getAValidatedNode() { - exists(MethodCall ma, int pos, VarRead rv | - validationMethod(ma.getMethod(), pos) and - ma.getArgument(pos) = rv and - adjacentUseUseSameVar(rv, result.asExpr()) and - ma.getBasicBlock().dominates(result.asExpr().getBasicBlock()) - ) - } - - /** - * Holds if `m` validates its `arg`th parameter by using `validationGuard`. - */ - private predicate validationMethod(Method m, int arg) { - exists(Guard g, SsaImplicitInit var, ControlFlow::NormalExitNode normexit, boolean branch | - validationGuard(g, var.getAUse(), branch) and - var.isParameterDefinition(m.getParameter(arg)) and - normexit.getEnclosingCallable() = m and - g.controls(normexit.getBasicBlock(), branch) - ) - } -} - /** * Holds if `g` is guard that compares a path to a trusted value. */ @@ -68,8 +41,6 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) { class ExactPathMatchSanitizer extends PathInjectionSanitizer { ExactPathMatchSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() - or - this = ValidationMethod::getAValidatedNode() } } @@ -120,8 +91,7 @@ private predicate allowedPrefixGuard(Guard g, Expr e, boolean branch) { private class AllowedPrefixSanitizer extends PathInjectionSanitizer { AllowedPrefixSanitizer() { - this = DataFlow::BarrierGuard::getABarrierNode() or - this = ValidationMethod::getAValidatedNode() + this = DataFlow::BarrierGuard::getABarrierNode() } } @@ -139,10 +109,7 @@ private predicate dotDotCheckGuard(Guard g, Expr e, boolean branch) { } private class DotDotCheckSanitizer extends PathInjectionSanitizer { - DotDotCheckSanitizer() { - this = DataFlow::BarrierGuard::getABarrierNode() or - this = ValidationMethod::getAValidatedNode() - } + DotDotCheckSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } } private class BlockListGuard extends PathGuard instanceof MethodCall { @@ -179,10 +146,7 @@ private predicate blockListGuard(Guard g, Expr e, boolean branch) { } private class BlockListSanitizer extends PathInjectionSanitizer { - BlockListSanitizer() { - this = DataFlow::BarrierGuard::getABarrierNode() or - this = ValidationMethod::getAValidatedNode() - } + BlockListSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } } private class ConstantOrRegex extends Expr { @@ -368,7 +332,6 @@ private class FileConstructorChildArgumentStep extends AdditionalTaintStep { n2.asExpr() = constrCall | not n1 = DataFlow::BarrierGuard::getABarrierNode() and - not n1 = ValidationMethod::getAValidatedNode() and not TaintTracking::localExprTaint(any(PathNormalizeSanitizer p), n1.asExpr()) or DataFlow::localExprFlow(nullExpr(), constrCall.getArgument(0)) @@ -546,7 +509,6 @@ private predicate directoryCharactersGuard(Guard g, Expr e, boolean branch) { private class DirectoryCharactersSanitizer extends PathInjectionSanitizer { DirectoryCharactersSanitizer() { this.asExpr() instanceof ReplaceDirectoryCharactersSanitizer or - this = DataFlow::BarrierGuard::getABarrierNode() or - this = ValidationMethod::getAValidatedNode() + this = DataFlow::BarrierGuard::getABarrierNode() } } diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index 5eb35c05cd4..dc15ad943bc 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -164,3 +164,24 @@ private class HostComparisonSanitizer extends RequestForgerySanitizer { this = DataFlow::BarrierGuard::getABarrierNode() } } + +/** + * A qualifier in a call to a `.matches()` method that is a sanitizer for URL redirects. + * + * Matches any method call where the method is named `matches`. + */ +private predicate isMatchesSanitizer(Guard guard, Expr e, boolean branch) { + guard = + any(MethodCall method | + method.getMethod().getName() = "matches" and + e = method.getQualifier() and + branch = true + ) +} + +/** + * A qualifier in a call to `.matches()` that is a sanitizer for URL redirects. + */ +private class MatchesSanitizer extends RequestForgerySanitizer { + MatchesSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() } +} diff --git a/java/ql/lib/semmle/code/java/security/SpringBootActuatorsConfigQuery.qll b/java/ql/lib/semmle/code/java/security/SpringBootActuatorsConfigQuery.qll new file mode 100644 index 00000000000..163cd46d5d8 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/SpringBootActuatorsConfigQuery.qll @@ -0,0 +1,128 @@ +/** Provides classes and predicates to reason about Spring Boot actuators exposed in configuration files. */ +overlay[local?] +module; + +import java +private import semmle.code.configfiles.ConfigFiles +private import semmle.code.xml.MavenPom + +/** The parent node of the `org.springframework.boot` group. */ +private class SpringBootParent extends Parent { + SpringBootParent() { this.getGroup().getValue() = "org.springframework.boot" } +} + +/** A `Pom` with a Spring Boot parent node. */ +private class SpringBootPom extends Pom { + SpringBootPom() { this.getParentElement() instanceof SpringBootParent } + + /** Holds if the Spring Boot Security module is used in the project. */ + predicate isSpringBootSecurityUsed() { + this.getADependency().getArtifact().getValue() = "spring-boot-starter-security" + } +} + +/** A dependency with artifactId `spring-boot-starter-actuator`. */ +class SpringBootStarterActuatorDependency extends Dependency { + SpringBootStarterActuatorDependency() { + this.getArtifact().getValue() = "spring-boot-starter-actuator" + } +} + +/** The Spring Boot configuration property `management.security.enabled`. */ +private class ManagementSecurityEnabledProperty extends JavaProperty { + ManagementSecurityEnabledProperty() { + this.getNameElement().getName() = "management.security.enabled" + } + + /** Gets the whitespace-trimmed value of this property. */ + string getValue() { result = this.getValueElement().getValue().trim() } + + /** Holds if `management.security.enabled` is set to `false`. */ + predicate hasSecurityDisabled() { this.getValue() = "false" } +} + +/** + * The Spring Boot configuration property `management.endpoints.web.exposure.include` + * or `management.endpoints.web.expose`. + */ +private class ManagementEndpointsExposeProperty extends JavaProperty { + ManagementEndpointsExposeProperty() { + this.getNameElement().getName() = "management.endpoints.web." + ["exposure.include", "expose"] + } + + /** Gets the whitespace-trimmed value of this property. */ + string getValue() { result = this.getValueElement().getValue().trim() } +} + +private newtype TOption = + TNone() or + TSome(JavaProperty jp) + +/** + * An option type that is either a singleton `None` or a `Some` wrapping + * the `JavaProperty` type. + */ +class JavaPropertyOption extends TOption { + /** Gets a textual representation of this element. */ + string toString() { + this = TNone() and result = "(none)" + or + result = this.asSome().toString() + } + + /** Gets the location of this element. */ + Location getLocation() { result = this.asSome().getLocation() } + + /** Gets the wrapped element, if any. */ + JavaProperty asSome() { this = TSome(result) } + + /** Holds if this option is the singleton `None`. */ + predicate isNone() { this = TNone() } +} + +/** + * Holds if `JavaPropertyOption` jpOption of a repository using `SpringBootStarterActuatorDependency` + * d exposes sensitive Spring Boot Actuator endpoints. + */ +predicate exposesSensitiveEndpoint( + SpringBootStarterActuatorDependency d, JavaPropertyOption jpOption +) { + exists(PropertiesFile propFile, SpringBootPom pom | + d = pom.getADependency() and + not pom.isSpringBootSecurityUsed() and + propFile + .getParentContainer() + .getAbsolutePath() + .matches(pom.getFile().getParentContainer().getAbsolutePath() + "%") and // in the same sub-directory + exists(string springBootVersion | + springBootVersion = pom.getParentElement().getVersionString() + | + springBootVersion.regexpMatch("1\\.[0-4].*") and // version 1.0, 1.1, ..., 1.4 + not exists(ManagementSecurityEnabledProperty ep | ep.getFile() = propFile) and + jpOption.isNone() + or + springBootVersion.regexpMatch("1\\.[0-5].*") and // version 1.0, 1.1, ..., 1.5 + exists(ManagementSecurityEnabledProperty ep | + ep.hasSecurityDisabled() and ep.getFile() = propFile and ep = jpOption.asSome() + ) + or + springBootVersion.matches(["2.%", "3.%"]) and //version 2.x and 3.x + exists(ManagementEndpointsExposeProperty ep | + ep.getFile() = propFile and + ep = jpOption.asSome() and + ( + // all endpoints are exposed + ep.getValue() = "*" + or + // version 2.x: exposes health and info only by default + springBootVersion.matches("2.%") and + not ep.getValue() = ["health", "info"] + or + // version 3.x: exposes health only by default + springBootVersion.matches("3.%") and + not ep.getValue() = "health" + ) + ) + ) + ) +} diff --git a/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll b/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll index 282133ec5c6..a0377599054 100644 --- a/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll +++ b/java/ql/lib/semmle/code/java/security/StaticInitializationVectorQuery.qll @@ -33,6 +33,7 @@ private class StaticByteArrayCreation extends ArrayCreationExpr { } /** An expression that updates `array`. */ +overlay[local?] private class ArrayUpdate extends Expr { Expr array; diff --git a/java/ql/lib/semmle/code/java/security/TaintedEnvironmentVariableQuery.qll b/java/ql/lib/semmle/code/java/security/TaintedEnvironmentVariableQuery.qll index d972b59986a..2bc9dba92f0 100644 --- a/java/ql/lib/semmle/code/java/security/TaintedEnvironmentVariableQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TaintedEnvironmentVariableQuery.qll @@ -40,8 +40,6 @@ module ExecTaintedEnvironmentConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node source) { none() } } /** diff --git a/java/ql/lib/semmle/code/java/security/TaintedPermissionsCheckQuery.qll b/java/ql/lib/semmle/code/java/security/TaintedPermissionsCheckQuery.qll index bbec7d4f4e6..7113c7036e4 100644 --- a/java/ql/lib/semmle/code/java/security/TaintedPermissionsCheckQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TaintedPermissionsCheckQuery.qll @@ -63,8 +63,9 @@ module TaintedPermissionsCheckFlowConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(PermissionsConstruction p | - sink.asExpr() = p.getInput() and + exists(PermissionsConstruction p | sink.asExpr() = p.getInput() | + result = sink.getLocation() + or result = p.getLocation() ) } diff --git a/java/ql/lib/semmle/code/java/security/TempDirLocalInformationDisclosureQuery.qll b/java/ql/lib/semmle/code/java/security/TempDirLocalInformationDisclosureQuery.qll index 098362f2bd5..0ae1d7e4df0 100644 --- a/java/ql/lib/semmle/code/java/security/TempDirLocalInformationDisclosureQuery.qll +++ b/java/ql/lib/semmle/code/java/security/TempDirLocalInformationDisclosureQuery.qll @@ -147,8 +147,6 @@ module TempDirSystemGetPropertyToCreateConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSinkLocation(DataFlow::Node sink) { none() } } /** diff --git a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll index 3d1623fa334..21e289ef1ad 100644 --- a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll +++ b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll @@ -26,7 +26,8 @@ class MethodFileCreateTempFile extends Method { } /** - * Holds if `expDest` is some constructor call `new java.io.File(expSource)`, where the specific `File` constructor being used has `paramCount` parameters. + * Holds if `expSource` is an argument to a constructor call `exprDest` (constructor from `java.io.File`), where + * the specific `File` constructor being used has `paramCount` parameters. */ predicate isFileConstructorArgument(Expr expSource, Expr exprDest, int paramCount) { exists(ConstructorCall construtorCall | diff --git a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll index ce0f649eff3..dc771a46606 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll @@ -313,6 +313,8 @@ private module UnsafeDeserializationConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.(UnsafeDeserializationSink).getLocation() + or result = sink.(UnsafeDeserializationSink).getMethodCall().getLocation() } } @@ -552,7 +554,7 @@ private DataFlow::Node getASafelyConfiguredParser() { } /** - * Holds if `parseMethodQualifierExpr` is a `jodd.json.JsonParser` instance that is configured unsafely + * Holds if `parserExpr` is a `jodd.json.JsonParser` instance that is configured unsafely * and which never appears to be configured safely. */ private predicate joddJsonParserConfiguredUnsafely(Expr parserExpr) { diff --git a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll index 7234b4c788f..895e824b3db 100644 --- a/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UrlForwardQuery.qll @@ -69,6 +69,7 @@ private class FollowsBarrierPrefix extends UrlForwardBarrier { FollowsBarrierPrefix() { this.asExpr() = any(BarrierPrefix fp).getAnAppendedExpression() } } +overlay[local?] private class BarrierPrefix extends InterestingPrefix { int offset; diff --git a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll index 080a7bb482f..90e47521bf0 100644 --- a/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll +++ b/java/ql/lib/semmle/code/java/security/WebviewDebuggingEnabledQuery.qll @@ -46,12 +46,6 @@ module WebviewDebugEnabledConfig implements DataFlow::ConfigSig { } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSourceLocation(DataFlow::Node source) { - // This module is only used in `WebviewDebuggingEnabled.ql`, which doesn't - // select the source in any "$@" column. - none() - } } /** diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index e4073362fc6..d13a83e7798 100644 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -6,6 +6,7 @@ module; import semmle.files.FileSystem private import codeql.xml.Xml +private import semmle.code.java.Overlay private module Input implements InputSig { class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; @@ -69,3 +70,13 @@ private module Input implements InputSig { } import Make + +private class DiscardableXmlAttribute extends DiscardableXmlLocatable, @xmlattribute { } + +private class DiscardableXmlElement extends DiscardableXmlLocatable, @xmlelement { } + +private class DiscardableXmlComment extends DiscardableXmlLocatable, @xmlcomment { } + +private class DiscardableXmlCharacters extends DiscardableXmlLocatable, @xmlcharacters { } + +private class DiscardableXmlDtd extends DiscardableXmlLocatable, @xmldtd { } diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme new file mode 100644 index 00000000000..1b8f5f4c747 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/old.dbscheme @@ -0,0 +1,1236 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme new file mode 100644 index 00000000000..9f6026c4009 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/semmlecode.dbscheme @@ -0,0 +1,1240 @@ +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac A.java B.java C.java + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + /** + * An invocation of the compiler. Note that more than one file may + * be compiled per invocation. For example, this command compiles + * three source files: + * + * javac A.java B.java C.java + */ + unique int id : @compilation, + int kind: int ref, + string cwd : string ref, + string name : string ref +); + +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + +compilation_started( + int id : @compilation ref +) + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | *path to extractor* + * 1 | `--javac-args` + * 2 | A.java + * 3 | B.java + * 4 | C.java + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@@@someFile` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * javac A.java B.java C.java + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | A.java + * 1 | B.java + * 2 | C.java + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * For each file recorded in `compilation_compiling_files`, + * there will be a corresponding row in + * `compilation_compiling_files_completed` once extraction + * of that file is complete. The `result` will indicate the + * extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +#keyset[id, num] +compilation_compiling_files_completed( + int id : @compilation ref, + int num : int ref, + int result : int ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + * The `result` will indicate the extraction result: + * + * 0: Successfully extracted + * 1: Errors were encountered, but extraction recovered + * 2: Errors were encountered, and extraction could not recover + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref, + int result : int ref +); + +diagnostics( + unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with the other languages? + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +/* + * External artifacts + */ + +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +sourceLocationPrefix( + string prefix : string ref +); + +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path: string ref +); + +/* + * SMAP + */ + +smap_header( + int outputFileId: @file ref, + string outputFilename: string ref, + string defaultStratum: string ref +); + +smap_files( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + string inputFileName: string ref, + int inputFileId: @file ref +); + +smap_lines( + int outputFileId: @file ref, + string stratum: string ref, + int inputFileNum: int ref, + int inputStartLine: int ref, + int inputLineCount: int ref, + int outputStartLine: int ref, + int outputLineIncrement: int ref +); + +/* + * Locations and files + */ + +@location = @location_default ; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +hasLocation( + int locatableid: @locatable ref, + int id: @location ref +); + +@sourceline = @locatable ; + +#keyset[element_id] +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @folder | @file + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/* + * Java + */ + +cupackage( + unique int id: @file ref, + int packageid: @package ref +); + +#keyset[fileid,keyName] +jarManifestMain( + int fileid: @file ref, + string keyName: string ref, + string value: string ref +); + +#keyset[fileid,entryName,keyName] +jarManifestEntries( + int fileid: @file ref, + string entryName: string ref, + string keyName: string ref, + string value: string ref +); + +packages( + unique int id: @package, + string nodeName: string ref +); + +primitives( + unique int id: @primitive, + string nodeName: string ref +); + +modifiers( + unique int id: @modifier, + string nodeName: string ref +); + +/** + * An errortype is used when the extractor is unable to extract a type + * correctly for some reason. + */ +error_type( + unique int id: @errortype +); + +classes_or_interfaces( + unique int id: @classorinterface, + string nodeName: string ref, + int parentid: @package ref, + int sourceid: @classorinterface ref +); + +file_class( + int id: @classorinterface ref +); + +class_object( + unique int id: @classorinterface ref, + unique int instance: @field ref +); + +type_companion_object( + unique int id: @classorinterface ref, + unique int instance: @field ref, + unique int companion_object: @classorinterface ref +); + +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @reftype ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @reftype ref +) + +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + +isInterface( + unique int id: @classorinterface ref +); + +isRecord( + unique int id: @classorinterface ref +); + +fielddecls( + unique int id: @fielddecl, + int parentid: @reftype ref +); + +#keyset[fieldId] #keyset[fieldDeclId,pos] +fieldDeclaredIn( + int fieldId: @field ref, + int fieldDeclId: @fielddecl ref, + int pos: int ref +); + +fields( + unique int id: @field, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @reftype ref +); + +fieldsKotlinType( + unique int id: @field ref, + int kttypeid: @kt_type ref +); + +constrs( + unique int id: @constructor, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @constructor ref +); + +constrsKotlinType( + unique int id: @constructor ref, + int kttypeid: @kt_type ref +); + +methods( + unique int id: @method, + string nodeName: string ref, + string signature: string ref, + int typeid: @type ref, + int parentid: @reftype ref, + int sourceid: @method ref +); + +methodsKotlinType( + unique int id: @method ref, + int kttypeid: @kt_type ref +); + +#keyset[parentid,pos] +params( + unique int id: @param, + int typeid: @type ref, + int pos: int ref, + int parentid: @callable ref, + int sourceid: @param ref +); + +paramsKotlinType( + unique int id: @param ref, + int kttypeid: @kt_type ref +); + +paramName( + unique int id: @param ref, + string nodeName: string ref +); + +isVarargsParam( + int param: @param ref +); + +exceptions( + unique int id: @exception, + int typeid: @type ref, + int parentid: @callable ref +); + +isAnnotType( + int interfaceid: @classorinterface ref +); + +isAnnotElem( + int methodid: @method ref +); + +annotValue( + int parentid: @annotation ref, + int id2: @method ref, + unique int value: @expr ref +); + +isEnumType( + int classid: @classorinterface ref +); + +isEnumConst( + int fieldid: @field ref +); + +#keyset[parentid,pos] +typeVars( + unique int id: @typevariable, + string nodeName: string ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +wildcards( + unique int id: @wildcard, + string nodeName: string ref, + int kind: int ref +); + +#keyset[parentid,pos] +typeBounds( + unique int id: @typebound, + int typeid: @reftype ref, + int pos: int ref, + int parentid: @boundedtype ref +); + +#keyset[parentid,pos] +typeArgs( + int argumentid: @reftype ref, + int pos: int ref, + int parentid: @classorinterfaceorcallable ref +); + +isParameterized( + int memberid: @member ref +); + +isRaw( + int memberid: @member ref +); + +#keyset[classid] #keyset[parent] +isAnonymClass( + int classid: @classorinterface ref, + int parent: @classinstancexpr ref +); + +#keyset[typeid] #keyset[parent] +isLocalClassOrInterface( + int typeid: @classorinterface ref, + int parent: @localtypedeclstmt ref +); + +isImplicitClass( + unique int classid: @classorinterface ref +); + +isDefConstr( + int constructorid: @constructor ref +); + +#keyset[exprId] +lambdaKind( + int exprId: @lambdaexpr ref, + int bodyKind: int ref +); + +isCanonicalConstr( + int constructorid: @constructor ref +); + +arrays( + unique int id: @array, + string nodeName: string ref, + int elementtypeid: @type ref, + int dimension: int ref, + int componenttypeid: @type ref +); + +enclInReftype( + unique int child: @reftype ref, + int parent: @reftype ref +); + +extendsReftype( + int id1: @reftype ref, + int id2: @classorinterface ref +); + +implInterface( + int id1: @classorarray ref, + int id2: @classorinterface ref +); + +permits( + int id1: @classorinterface ref, + int id2: @classorinterface ref +); + +hasModifier( + int id1: @modifiable ref, + int id2: @modifier ref +); + +imports( + unique int id: @import, + int holder: @classorinterfaceorpackage ref, + string name: string ref, + int kind: int ref +); + +#keyset[parent,idx] +stmts( + unique int id: @stmt, + int kind: int ref, + int parent: @stmtparent ref, + int idx: int ref, + int bodydecl: @callable ref +); + +@stmtparent = @callable | @stmt | @switchexpr | @whenexpr| @stmtexpr; + +case @stmt.kind of + 0 = @block +| 1 = @ifstmt +| 2 = @forstmt +| 3 = @enhancedforstmt +| 4 = @whilestmt +| 5 = @dostmt +| 6 = @trystmt +| 7 = @switchstmt +| 8 = @synchronizedstmt +| 9 = @returnstmt +| 10 = @throwstmt +| 11 = @breakstmt +| 12 = @continuestmt +| 13 = @emptystmt +| 14 = @exprstmt +| 15 = @labeledstmt +| 16 = @assertstmt +| 17 = @localvariabledeclstmt +| 18 = @localtypedeclstmt +| 19 = @constructorinvocationstmt +| 20 = @superconstructorinvocationstmt +| 21 = @case +| 22 = @catchclause +| 23 = @yieldstmt +| 24 = @errorstmt +| 25 = @whenbranch +; + +#keyset[parent,idx] +exprs( + unique int id: @expr, + int kind: int ref, + int typeid: @type ref, + int parent: @exprparent ref, + int idx: int ref +); + +exprsKotlinType( + unique int id: @expr ref, + int kttypeid: @kt_type ref +); + +callableEnclosingExpr( + unique int id: @expr ref, + int callable_id: @callable ref +); + +statementEnclosingExpr( + unique int id: @expr ref, + int statement_id: @stmt ref +); + +isParenthesized( + unique int id: @expr ref, + int parentheses: int ref +); + +case @expr.kind of + 1 = @arrayaccess +| 2 = @arraycreationexpr +| 3 = @arrayinit +| 4 = @assignexpr +| 5 = @assignaddexpr +| 6 = @assignsubexpr +| 7 = @assignmulexpr +| 8 = @assigndivexpr +| 9 = @assignremexpr +| 10 = @assignandexpr +| 11 = @assignorexpr +| 12 = @assignxorexpr +| 13 = @assignlshiftexpr +| 14 = @assignrshiftexpr +| 15 = @assignurshiftexpr +| 16 = @booleanliteral +| 17 = @integerliteral +| 18 = @longliteral +| 19 = @floatingpointliteral +| 20 = @doubleliteral +| 21 = @characterliteral +| 22 = @stringliteral +| 23 = @nullliteral +| 24 = @mulexpr +| 25 = @divexpr +| 26 = @remexpr +| 27 = @addexpr +| 28 = @subexpr +| 29 = @lshiftexpr +| 30 = @rshiftexpr +| 31 = @urshiftexpr +| 32 = @andbitexpr +| 33 = @orbitexpr +| 34 = @xorbitexpr +| 35 = @andlogicalexpr +| 36 = @orlogicalexpr +| 37 = @ltexpr +| 38 = @gtexpr +| 39 = @leexpr +| 40 = @geexpr +| 41 = @eqexpr +| 42 = @neexpr +| 43 = @postincexpr +| 44 = @postdecexpr +| 45 = @preincexpr +| 46 = @predecexpr +| 47 = @minusexpr +| 48 = @plusexpr +| 49 = @bitnotexpr +| 50 = @lognotexpr +| 51 = @castexpr +| 52 = @newexpr +| 53 = @conditionalexpr +| 54 = @parexpr // deprecated +| 55 = @instanceofexpr +| 56 = @localvariabledeclexpr +| 57 = @typeliteral +| 58 = @thisaccess +| 59 = @superaccess +| 60 = @varaccess +| 61 = @methodaccess +| 62 = @unannotatedtypeaccess +| 63 = @arraytypeaccess +| 64 = @packageaccess +| 65 = @wildcardtypeaccess +| 66 = @declannotation +| 67 = @uniontypeaccess +| 68 = @lambdaexpr +| 69 = @memberref +| 70 = @annotatedtypeaccess +| 71 = @typeannotation +| 72 = @intersectiontypeaccess +| 73 = @switchexpr +| 74 = @errorexpr +| 75 = @whenexpr +| 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @implicitcastexpr +| 79 = @implicitnotnullexpr +| 80 = @implicitcoerciontounitexpr +| 81 = @notinstanceofexpr +| 82 = @stmtexpr +| 83 = @stringtemplateexpr +| 84 = @notnullexpr +| 85 = @unsafecoerceexpr +| 86 = @valueeqexpr +| 87 = @valueneexpr +| 88 = @propertyref +| 89 = @recordpatternexpr +; + +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + +@classinstancexpr = @newexpr | @lambdaexpr | @memberref | @propertyref + +@annotation = @declannotation | @typeannotation +@typeaccess = @unannotatedtypeaccess | @annotatedtypeaccess + +@assignment = @assignexpr + | @assignop; + +@unaryassignment = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr; + +@assignop = @assignaddexpr + | @assignsubexpr + | @assignmulexpr + | @assigndivexpr + | @assignremexpr + | @assignandexpr + | @assignorexpr + | @assignxorexpr + | @assignlshiftexpr + | @assignrshiftexpr + | @assignurshiftexpr; + +@literal = @booleanliteral + | @integerliteral + | @longliteral + | @floatingpointliteral + | @doubleliteral + | @characterliteral + | @stringliteral + | @nullliteral; + +@binaryexpr = @mulexpr + | @divexpr + | @remexpr + | @addexpr + | @subexpr + | @lshiftexpr + | @rshiftexpr + | @urshiftexpr + | @andbitexpr + | @orbitexpr + | @xorbitexpr + | @andlogicalexpr + | @orlogicalexpr + | @ltexpr + | @gtexpr + | @leexpr + | @geexpr + | @eqexpr + | @neexpr + | @valueeqexpr + | @valueneexpr; + +@unaryexpr = @postincexpr + | @postdecexpr + | @preincexpr + | @predecexpr + | @minusexpr + | @plusexpr + | @bitnotexpr + | @lognotexpr + | @notnullexpr; + +@caller = @classinstancexpr + | @methodaccess + | @constructorinvocationstmt + | @superconstructorinvocationstmt; + +callableBinding( + unique int callerid: @caller ref, + int callee: @callable ref +); + +memberRefBinding( + unique int id: @expr ref, + int callable: @callable ref +); + +propertyRefGetBinding( + unique int id: @expr ref, + int getter: @callable ref +); + +propertyRefFieldBinding( + unique int id: @expr ref, + int field: @field ref +); + +propertyRefSetBinding( + unique int id: @expr ref, + int setter: @callable ref +); + +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @classorinterface | @param | @localvar | @typevariable; + +variableBinding( + unique int expr: @varaccess ref, + int variable: @variable ref +); + +@variable = @localscopevariable | @field; + +@localscopevariable = @localvar | @param; + +localvars( + unique int id: @localvar, + string nodeName: string ref, + int typeid: @type ref, + int parentid: @localvariabledeclexpr ref +); + +localvarsKotlinType( + unique int id: @localvar ref, + int kttypeid: @kt_type ref +); + +@namedexprorstmt = @breakstmt + | @continuestmt + | @labeledstmt + | @literal; + +namestrings( + string name: string ref, + string value: string ref, + unique int parent: @namedexprorstmt ref +); + +/* + * Modules + */ + +#keyset[name] +modules( + unique int id: @module, + string name: string ref +); + +isOpen( + int id: @module ref +); + +#keyset[fileId] +cumodule( + int fileId: @file ref, + int moduleId: @module ref +); + +@directive = @requires + | @exports + | @opens + | @uses + | @provides + +#keyset[directive] +directives( + int id: @module ref, + int directive: @directive ref +); + +requires( + unique int id: @requires, + int target: @module ref +); + +isTransitive( + int id: @requires ref +); + +isStatic( + int id: @requires ref +); + +exports( + unique int id: @exports, + int target: @package ref +); + +exportsTo( + int id: @exports ref, + int target: @module ref +); + +opens( + unique int id: @opens, + int target: @package ref +); + +opensTo( + int id: @opens ref, + int target: @module ref +); + +uses( + unique int id: @uses, + string serviceInterface: string ref +); + +provides( + unique int id: @provides, + string serviceInterface: string ref +); + +providesWith( + int id: @provides ref, + string serviceImpl: string ref +); + +isNullDefaultCase( + int id: @case ref +); + +/* + * Javadoc + */ + +javadoc( + unique int id: @javadoc +); + +isNormalComment( + int commentid : @javadoc ref +); + +isEolComment( + int commentid : @javadoc ref +); + +hasJavadoc( + int documentableid: @member ref, + int javadocid: @javadoc ref +); + +#keyset[parentid,idx] +javadocTag( + unique int id: @javadocTag, + string name: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +#keyset[parentid,idx] +javadocText( + unique int id: @javadocText, + string text: string ref, + int parentid: @javadocParent ref, + int idx: int ref +); + +@javadocParent = @javadoc | @javadocTag; +@javadocElement = @javadocTag | @javadocText; + +@classorinterfaceorpackage = @classorinterface | @package; +@classorinterfaceorcallable = @classorinterface | @callable; +@boundedtype = @typevariable | @wildcard; +@reftype = @classorinterface | @array | @boundedtype | @errortype; +@classorarray = @classorinterface | @array; +@type = @primitive | @reftype; +@callable = @method | @constructor; + +/** A program element that has a name. */ +@element = @package | @modifier | @annotation | @errortype | + @locatableElement; + +@locatableElement = @file | @primitive | @classorinterface | @method | @constructor | @param | @exception | @field | + @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias | + @kt_property; + +@modifiable = @member_modifiable| @param | @localvar | @typevariable; + +@member_modifiable = @classorinterface | @method | @constructor | @field | @kt_property; + +@member = @method | @constructor | @field | @reftype ; + +/** A program element that has a location. */ +@locatable = @typebound | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment | + @locatableElement; + +@top = @element | @locatable | @folder; + +/* + * XML Files + */ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* + * configuration files with key value pairs + */ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwners( + int id: @ktcomment ref, + int owner: @top ref +) + +ktExtensionFunctions( + unique int id: @method ref, + int typeid: @type ref, + int kttypeid: @kt_type ref +) + +ktProperties( + unique int id: @kt_property, + string nodeName: string ref +) + +ktPropertyGetters( + unique int id: @kt_property ref, + int getter: @method ref +) + +ktPropertySetters( + unique int id: @kt_property ref, + int setter: @method ref +) + +ktPropertyBackingFields( + unique int id: @kt_property ref, + int backingField: @field ref +) + +ktSyntheticBody( + unique int id: @callable ref, + int kind: int ref + // 1: ENUM_VALUES + // 2: ENUM_VALUEOF + // 3: ENUM_ENTRIES +) + +ktLocalFunction( + unique int id: @method ref +) + +ktInitializerAssignment( + unique int id: @assignexpr ref +) + +ktPropertyDelegates( + unique int id: @kt_property ref, + unique int variableId: @variable ref +) + +/** + * If `id` is a compiler generated element, then the kind indicates the + * reason that the compiler generated it. + * See `Element.compilerGeneratedReason()` for an explanation of what + * each `kind` means. + */ +compiler_generated( + unique int id: @element ref, + int kind: int ref +) + +ktFunctionOriginalNames( + unique int id: @method ref, + string name: string ref +) + +ktDataClasses( + unique int id: @classorinterface ref +) diff --git a/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties new file mode 100644 index 00000000000..3ecad4ebaa4 --- /dev/null +++ b/java/ql/lib/upgrades/1b8f5f4c747e4249f4731796ccaa0661c7434d8a/upgrade.properties @@ -0,0 +1,2 @@ +description: Add support for Java 25 compact source files by introducing isImplicitClass table +compatibility: full diff --git a/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql b/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql index 493168d80a7..1ca836ab231 100644 --- a/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql +++ b/java/ql/src/Advisory/Declarations/NonFinalImmutableField.ql @@ -7,7 +7,10 @@ * @problem.severity recommendation * @precision medium * @id java/non-final-immutable-field - * @tags reliability + * @tags quality + * reliability + * correctness + * readability */ import java diff --git a/java/ql/src/Advisory/Declarations/NonPrivateField.ql b/java/ql/src/Advisory/Declarations/NonPrivateField.ql index 30b18ec53fd..ca081f41ed6 100644 --- a/java/ql/src/Advisory/Declarations/NonPrivateField.ql +++ b/java/ql/src/Advisory/Declarations/NonPrivateField.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/non-private-field - * @tags maintainability + * @tags quality + * maintainability + * readability + * complexity */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql index 49d90a595d3..3d4eacf7ee6 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocMethods.ql @@ -7,6 +7,7 @@ * @precision medium * @id java/undocumented-function * @tags maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql index ec4735e5e21..b81500ff303 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocParameters.ql @@ -7,6 +7,7 @@ * @precision medium * @id java/undocumented-parameter * @tags maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql index 6668fa6da33..87f5bf2a7ff 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocReturnValues.ql @@ -7,6 +7,7 @@ * @precision medium * @id java/undocumented-return-value * @tags maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql index 2b6b346062c..ea12c831239 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocThrows.ql @@ -7,6 +7,8 @@ * @precision medium * @id java/undocumented-exception * @tags maintainability + * readability + * error-handling */ import java diff --git a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql index b9c5958623d..21ea91703f9 100644 --- a/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql +++ b/java/ql/src/Advisory/Documentation/MissingJavadocTypes.ql @@ -7,6 +7,7 @@ * @precision medium * @id java/undocumented-type * @tags maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql index e2e9b32feee..eb3b80f4720 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneMethodAccess.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/use-of-clone-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql index 45460ad15ed..482aecd8e03 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneOverride.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/override-of-clone-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql b/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql index 02abef17130..a3ab822872d 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidCloneableInterface.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/use-of-cloneable-interface - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql b/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql index 3b5ddefbb34..0d74c4281a2 100644 --- a/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql +++ b/java/ql/src/Advisory/Java Objects/AvoidFinalizeOverride.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/override-of-finalize-method - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql b/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql index 4ee4bfd27cf..bd079b6fc20 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsConstants.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-constant - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql b/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql index a4347b783a0..90b3edd4bbc 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsMethods.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-function - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql b/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql index 7d135b21fac..efd6207d66f 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsPackages.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-package - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql b/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql index 6942eaab69a..5106b6e80b7 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsRefTypes.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-type - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql b/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql index bafa2ec5b14..0d225aa1749 100644 --- a/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql +++ b/java/ql/src/Advisory/Naming/NamingConventionsVariables.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/misnamed-variable - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql b/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql index eab8a596f0e..28387ab766b 100644 --- a/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql +++ b/java/ql/src/Advisory/Statements/MissingDefaultInSwitch.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/missing-default-in-switch - * @tags reliability + * @tags quality + * reliability + * correctness * external/cwe/cwe-478 */ diff --git a/java/ql/src/Advisory/Statements/OneStatementPerLine.ql b/java/ql/src/Advisory/Statements/OneStatementPerLine.ql index b4133761e27..2663cab57a9 100644 --- a/java/ql/src/Advisory/Statements/OneStatementPerLine.ql +++ b/java/ql/src/Advisory/Statements/OneStatementPerLine.ql @@ -5,7 +5,9 @@ * @problem.severity recommendation * @precision medium * @id java/multiple-statements-on-same-line - * @tags maintainability + * @tags quality + * maintainability + * readability */ import java diff --git a/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql b/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql index 0172719094c..b15dd1c1746 100644 --- a/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql +++ b/java/ql/src/Advisory/Statements/TerminateIfElseIfWithElse.ql @@ -6,7 +6,9 @@ * @problem.severity recommendation * @precision medium * @id java/non-terminated-if-else-if-chain - * @tags reliability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsConstructor.ql b/java/ql/src/Advisory/Types/GenericsConstructor.ql index 411c2466290..4af9f93c86f 100644 --- a/java/ql/src/Advisory/Types/GenericsConstructor.ql +++ b/java/ql/src/Advisory/Types/GenericsConstructor.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-constructor-invocation - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsReturnType.ql b/java/ql/src/Advisory/Types/GenericsReturnType.ql index 0107f7953a2..4f17664902b 100644 --- a/java/ql/src/Advisory/Types/GenericsReturnType.ql +++ b/java/ql/src/Advisory/Types/GenericsReturnType.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-return-type - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/Advisory/Types/GenericsVariable.ql b/java/ql/src/Advisory/Types/GenericsVariable.ql index 8f5fb3c05c9..d686feae512 100644 --- a/java/ql/src/Advisory/Types/GenericsVariable.ql +++ b/java/ql/src/Advisory/Types/GenericsVariable.ql @@ -6,7 +6,10 @@ * @problem.severity recommendation * @precision medium * @id java/raw-variable - * @tags maintainability + * @tags quality + * maintainability + * readability + * correctness */ import java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 9d630f16f4b..ed02fdc5bb2 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,54 @@ +## 1.9.0 + +### New Queries + +* The `java/sensitive-cookie-not-httponly` query has been promoted from experimental to the main query pack. +* Added a new query, `java/escaping`, to detect values escaping from classes marked as `@ThreadSafe`. +* Added a new query, `java/not-threadsafe`, to detect data races in classes marked as `@ThreadSafe`. +* Added a new query, `java/safe-publication`, to detect unsafe publication in classes marked as `@ThreadSafe`. + +### Minor Analysis Improvements + +* Calls to `String.matches` are now treated as sanitizers for the `java/ssrf` query. + +## 1.8.2 + +No user-facing changes. + +## 1.8.1 + +No user-facing changes. + +## 1.8.0 + +### Major Analysis Improvements + +* The implementation of `java/dereferenced-value-may-be-null` has been completely replaced with a new general control-flow reachability library. This improves precision by reducing false positives. However, since the entire calculation has been reworked, there can be small corner cases where precision regressions might occur and new false positives may occur, but these cases should be rare. + +### Bug Fixes + +* The message for `java/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. + +## 1.7.0 + +### New Queries + +* The query `java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as `java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query [by @luchua-bc](https://github.com/github/codeql/pull/5384). + +### Query Metadata Changes + +* The tag `maintainability` has been removed from `java/run-finalizers-on-exit` and the tags `quality`, `correctness`, and `performance` have been added. +* The tag `maintainability` has been removed from `java/garbage-collection` and the tags `quality` and `correctness` have been added. + +### Minor Analysis Improvements + +* Fixed a bug that was causing false negatives in rare cases in the query `java/dereferenced-value-may-be-null`. +* Removed the `java/empty-statement` query that was subsumed by the `java/empty-block` query. + +## 1.6.3 + +No user-facing changes. + ## 1.6.2 No user-facing changes. diff --git a/java/ql/src/DeadCode/DeadClass.ql b/java/ql/src/DeadCode/DeadClass.ql index 23f08fec3b8..22ffad4f835 100644 --- a/java/ql/src/DeadCode/DeadClass.ql +++ b/java/ql/src/DeadCode/DeadClass.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-class - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadEnumConstant.ql b/java/ql/src/DeadCode/DeadEnumConstant.ql index 19044994348..791c2b2a751 100644 --- a/java/ql/src/DeadCode/DeadEnumConstant.ql +++ b/java/ql/src/DeadCode/DeadEnumConstant.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-enum-constant - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadField.ql b/java/ql/src/DeadCode/DeadField.ql index 7a8bca7ac7b..4dd0864bd15 100644 --- a/java/ql/src/DeadCode/DeadField.ql +++ b/java/ql/src/DeadCode/DeadField.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-field - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/DeadCode/DeadMethod.ql b/java/ql/src/DeadCode/DeadMethod.ql index 77401341b6c..ea01cbf4db9 100644 --- a/java/ql/src/DeadCode/DeadMethod.ql +++ b/java/ql/src/DeadCode/DeadMethod.ql @@ -5,7 +5,8 @@ * @problem.severity recommendation * @precision medium * @id java/dead-function - * @tags maintainability + * @tags quality + * maintainability * useless-code * external/cwe/cwe-561 */ diff --git a/java/ql/src/Language Abuse/EmptyStatement.java b/java/ql/src/Language Abuse/EmptyStatement.java deleted file mode 100644 index 4f9b462a38f..00000000000 --- a/java/ql/src/Language Abuse/EmptyStatement.java +++ /dev/null @@ -1,8 +0,0 @@ -public class Cart { - // AVOID: Empty statement - List items = new ArrayList();; - public void applyDiscount(float discount) { - // AVOID: Empty statement as loop body - for (int i = 0; i < items.size(); items.get(i++).applyDiscount(discount)); - } -} \ No newline at end of file diff --git a/java/ql/src/Language Abuse/EmptyStatement.qhelp b/java/ql/src/Language Abuse/EmptyStatement.qhelp deleted file mode 100644 index 700bd488dfc..00000000000 --- a/java/ql/src/Language Abuse/EmptyStatement.qhelp +++ /dev/null @@ -1,39 +0,0 @@ - - - - - -

    An empty statement is a single semicolon ; that does not -terminate another statement. Such a statement hinders readability and has no effect on its own.

    - -
    - - -

    Avoid empty statements. If a loop is intended to have an empty body, it is better -to mark that fact explicitly by using a pair of braces {} containing an explanatory comment -for the body, rather than a single semicolon.

    - -
    - - -

    In the following example, there is an empty statement on line 3, where an additional semicolon is -used. On line 6, the for statement has an empty body because the condition is -immediately followed by a semicolon. In this case, it is better to include a pair of braces {} containing -an explanatory comment for the body instead. - -

    - -
    - - - -
  • -Help - Eclipse Platform: -Java Compiler Errors/Warnings Preferences. -
  • - - -
    -
    diff --git a/java/ql/src/Language Abuse/EmptyStatement.ql b/java/ql/src/Language Abuse/EmptyStatement.ql deleted file mode 100644 index 36f61b862ac..00000000000 --- a/java/ql/src/Language Abuse/EmptyStatement.ql +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @name Empty statement - * @description An empty statement hinders readability. - * @kind problem - * @problem.severity recommendation - * @precision low - * @id java/empty-statement - * @tags maintainability - * useless-code - */ - -import java - -from EmptyStmt empty, string action -where - if exists(LoopStmt l | l.getBody() = empty) - then action = "turned into '{}'" - else action = "deleted" -select empty, "This empty statement should be " + action + "." diff --git a/java/ql/src/Language Abuse/OverridePackagePrivate.ql b/java/ql/src/Language Abuse/OverridePackagePrivate.ql index d2866c76abc..66663e18c4b 100644 --- a/java/ql/src/Language Abuse/OverridePackagePrivate.ql +++ b/java/ql/src/Language Abuse/OverridePackagePrivate.ql @@ -6,8 +6,10 @@ * @problem.severity warning * @precision medium * @id java/non-overriding-package-private - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness */ import java diff --git a/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql b/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql index 77c318bcb9e..13b77d10d06 100644 --- a/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql +++ b/java/ql/src/Language Abuse/TypeVarExtendsFinalType.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/type-bound-extends-final - * @tags maintainability + * @tags quality + * maintainability * readability - * types */ import java diff --git a/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql b/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql index 26353891f41..2af66f5cfba 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/BadAbsOfRandom.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/abs-of-random - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql b/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql index 50f50862631..4bbeefaee6e 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql @@ -53,6 +53,7 @@ predicate isConstantExp(Expr e) { from Expr e where isConstantExp(e) and + not e.(TypeAccess).getType() instanceof ErrorType and exists(Expr child | e.getAChildExpr() = child | not isConstantExp(child) and not child instanceof Annotation diff --git a/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql b/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql index 8992d1753d9..ee1e1ca3fed 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/MultiplyRemainder.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @precision medium * @id java/multiplication-of-remainder - * @tags maintainability + * @tags quality + * maintainability + * readability * correctness */ diff --git a/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql b/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql index a18df356899..7a81d366a6e 100644 --- a/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql +++ b/java/ql/src/Likely Bugs/Arithmetic/RandomUsedOnce.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/random-used-once - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-335 */ diff --git a/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql b/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql index 8c2f7b1d6f8..afc7c54bbad 100644 --- a/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql +++ b/java/ql/src/Likely Bugs/Cloning/MissingCallToSuperClone.ql @@ -7,8 +7,9 @@ * @problem.severity error * @precision medium * @id java/missing-call-to-super-clone - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-580 */ diff --git a/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql b/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql index 6d48a118e29..2542637b745 100644 --- a/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql +++ b/java/ql/src/Likely Bugs/Cloning/MissingMethodClone.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/missing-clone-method - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql b/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql index 497aa10cb4d..92b257bbfc1 100644 --- a/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql +++ b/java/ql/src/Likely Bugs/Collections/ContainsTypeMismatch.ql @@ -99,14 +99,14 @@ predicate containerAccess(string package, string type, int p, string signature, class MismatchedContainerAccess extends MethodCall { MismatchedContainerAccess() { exists(string package, string type, int i | - containerAccess(package, type, _, this.getCallee().getSignature(), i) + containerAccess(package, type, _, this.getCallee().getSignature(), pragma[only_bind_into](i)) | this.getCallee() .getDeclaringType() .getSourceDeclaration() .getASourceSupertype*() .hasQualifiedName(package, type) and - this.getCallee().getParameter(i).getType() instanceof TypeObject + this.getCallee().getParameter(pragma[only_bind_into](i)).getType() instanceof TypeObject ) } diff --git a/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql b/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql index 0308f68f231..09d686947e0 100644 --- a/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql +++ b/java/ql/src/Likely Bugs/Collections/IteratorRemoveMayFail.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/iterator-remove-failure - * @tags reliability + * @tags quality + * reliability * correctness - * logic */ import java diff --git a/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql b/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql index 54548b122e4..8d45a93e3dd 100644 --- a/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql +++ b/java/ql/src/Likely Bugs/Collections/RemoveTypeMismatch.ql @@ -69,14 +69,15 @@ predicate containerModification(string package, string type, int p, string signa class MismatchedContainerModification extends MethodCall { MismatchedContainerModification() { exists(string package, string type, int i | - containerModification(package, type, _, this.getCallee().getSignature(), i) + containerModification(package, type, _, this.getCallee().getSignature(), + pragma[only_bind_into](i)) | this.getCallee() .getDeclaringType() .getASourceSupertype*() .getSourceDeclaration() .hasQualifiedName(package, type) and - this.getCallee().getParameter(i).getType() instanceof TypeObject + this.getCallee().getParameter(pragma[only_bind_into](i)).getType() instanceof TypeObject ) } diff --git a/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql b/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql index de1e27073f6..6d55bfc6488 100644 --- a/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql +++ b/java/ql/src/Likely Bugs/Comparison/CovariantCompareTo.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wrong-compareto-signature - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql b/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql index 13f63f15a72..84018a513a5 100644 --- a/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql +++ b/java/ql/src/Likely Bugs/Comparison/CovariantEquals.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wrong-equals-signature - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql b/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql index f8b1cd85552..bb370bead3b 100644 --- a/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql +++ b/java/ql/src/Likely Bugs/Comparison/HashedButNoHash.ql @@ -14,7 +14,7 @@ import java import Equality -/** A class that defines an `equals` method but no `hashCode` method. */ +/** Holds if `c` defines an `equals` method but no `hashCode` method. */ predicate eqNoHash(Class c) { exists(Method m | m = c.getAMethod() | m instanceof EqualsMethod and diff --git a/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql b/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql index 8c5a7133e14..7592fe38266 100644 --- a/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql +++ b/java/ql/src/Likely Bugs/Comparison/InconsistentCompareTo.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/inconsistent-compareto-and-equals - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/Likely Bugs/Comparison/StringComparison.ql b/java/ql/src/Likely Bugs/Comparison/StringComparison.ql index 63d09e0f791..cfca2c8d7dd 100644 --- a/java/ql/src/Likely Bugs/Comparison/StringComparison.ql +++ b/java/ql/src/Likely Bugs/Comparison/StringComparison.ql @@ -6,7 +6,9 @@ * @problem.severity warning * @precision medium * @id java/reference-equality-on-strings - * @tags reliability + * @tags quality + * reliability + * correctness * external/cwe/cwe-597 */ diff --git a/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql b/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql index bf163936115..b89d619fada 100644 --- a/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql +++ b/java/ql/src/Likely Bugs/Concurrency/CallsToConditionWait.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/wait-on-condition-interface - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * external/cwe/cwe-662 diff --git a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql index 18683ac690f..0d87ca49bb2 100644 --- a/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql +++ b/java/ql/src/Likely Bugs/Concurrency/DateFormatThreadUnsafe.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/thread-unsafe-dateformat - * @tags reliability + * @tags quality + * reliability * correctness * concurrency */ diff --git a/java/ql/src/Likely Bugs/Concurrency/Escaping.qhelp b/java/ql/src/Likely Bugs/Concurrency/Escaping.qhelp new file mode 100644 index 00000000000..a8a614dbe36 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/Escaping.qhelp @@ -0,0 +1,34 @@ + + + + + +

    +In a thread-safe class, non-final fields should generally be private (or possibly volatile) to ensure that they cannot be accessed by other threads in an unsafe manner. +

    + +
    + + +

    +If the field does not change, mark it as final. If the field is mutable, mark it as private and provide properly synchronized accessors.

    + +
    + + + + +
  • + Java Language Specification, chapter 17: + Threads and Locks. +
  • +
  • + Java concurrency package: + java.util.concurrent. +
  • + + +
    +
    diff --git a/java/ql/src/Likely Bugs/Concurrency/Escaping.ql b/java/ql/src/Likely Bugs/Concurrency/Escaping.ql new file mode 100644 index 00000000000..a2f3e0f7b46 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/Escaping.ql @@ -0,0 +1,26 @@ +/** + * @name Escaping + * @description In a thread-safe class, care should be taken to avoid exposing mutable state. + * @kind problem + * @problem.severity warning + * @precision high + * @id java/escaping + * @tags quality + * reliability + * concurrency + */ + +import java +import semmle.code.java.ConflictingAccess + +from Field f, ClassAnnotatedAsThreadSafe c +where + f = c.getAField() and + not f.isFinal() and // final fields do not change + not f.isPrivate() and + // We believe that protected fields are also dangerous + // Volatile fields cannot cause data races, but it is dubious to allow changes. + // For now, we ignore volatile fields, but there are likely bugs to be caught here. + not f.isVolatile() +select f, "The class $@ is marked as thread-safe, but this field is potentially escaping.", c, + c.getName() diff --git a/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql b/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql index 7c1875dfe3e..5d816ad8cf9 100644 --- a/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql +++ b/java/ql/src/Likely Bugs/Concurrency/FutileSynchOnField.ql @@ -6,7 +6,8 @@ * @problem.severity error * @precision medium * @id java/unsafe-sync-on-field - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * language-features diff --git a/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql b/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql index 047e6853011..e21b816f168 100644 --- a/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql +++ b/java/ql/src/Likely Bugs/Concurrency/NotifyNotNotifyAll.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/notify-instead-of-notify-all - * @tags reliability + * @tags quality + * reliability * correctness * concurrency * external/cwe/cwe-662 diff --git a/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql b/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql index 89dbedd0253..48f547575ee 100644 --- a/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql +++ b/java/ql/src/Likely Bugs/Concurrency/NotifyWithoutSynch.ql @@ -78,7 +78,7 @@ private predicate synchronizedThisAccess(MethodCall ma, Type thisType) { /** * Auxiliary predicate for `unsynchronizedVarAccess`. Holds if - * there is an enclosing `synchronized` statement on the variable. + * there is an enclosing `synchronized` statement on the variable access `x`. */ predicate synchronizedVarAccess(VarAccess x) { exists(SynchronizedStmt s, VarAccess y | diff --git a/java/ql/src/Likely Bugs/Concurrency/SafePublication.java b/java/ql/src/Likely Bugs/Concurrency/SafePublication.java new file mode 100644 index 00000000000..76980412e8c --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/SafePublication.java @@ -0,0 +1,17 @@ +public class SafePublication { + private volatile Object value; + private final int server_id; + + public SafePublication() { + value = new Object(); // Safely published as volatile + server_id = 1; // Safely published as final + } + + public synchronized Object getValue() { + return value; + } + + public int getServerId() { + return server_id; + } +} \ No newline at end of file diff --git a/java/ql/src/Likely Bugs/Concurrency/SafePublication.qhelp b/java/ql/src/Likely Bugs/Concurrency/SafePublication.qhelp new file mode 100644 index 00000000000..4b422530411 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/SafePublication.qhelp @@ -0,0 +1,57 @@ + + + + + +

    +In a thread-safe class, values must be published safely to avoid inconsistent or unexpected behavior caused by visibility issues between threads. If a value is not safely published, one thread may see a stale or partially constructed value written by another thread, leading to subtle concurrency bugs. +

    +

    +In particular, values of primitive types should not be initialised to anything but their default values (which for Object is null) unless this happens in a static context. +

    +

    +Techniques for safe publication include: +

    +
      +
    • Using synchronized blocks or methods to ensure that a value is fully constructed before it is published.
    • +
    • Using volatile fields to ensure visibility of changes across threads.
    • +
    • Using thread-safe collections or classes that provide built-in synchronization, such as are found in java.util.concurrent.
    • +
    • Using the final keyword to ensure that a reference to an object is safely published when the object is constructed.
    • +
    + +
    + + +

    +Choose a safe publication technique that fits your use case. If the value only needs to be written once, say for a singleton, consider using the final keyword. If the value is mutable and needs to be shared across threads, consider using synchronized blocks or methods, or using a thread-safe collection from java.util.concurrent. +

    + +
    + + +

    In the following example, the values of value and server_id are not safely published. The constructor creates a new object and assigns it to the field value. However, the field is not declared as volatile or final, and there are no synchronization mechanisms in place to ensure that the value is fully constructed before it is published. A different thread may see the default value null. Similarly, the field server_id may be observed to be 0.

    + + + +

    To fix this example, we declare the field value as volatile. This will ensure that all changes to the field are visible to all threads. The field server_id is only meant to be written once, so we only need the write inside the constructor to be visible to other threads; declaring it final guarantees this:

    + + + +
    + + + +
  • + Java Language Specification, chapter 17: + Threads and Locks. +
  • +
  • + Java concurrency package: + java.util.concurrent. +
  • + + +
    +
    diff --git a/java/ql/src/Likely Bugs/Concurrency/SafePublication.ql b/java/ql/src/Likely Bugs/Concurrency/SafePublication.ql new file mode 100644 index 00000000000..5e2a89ce372 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/SafePublication.ql @@ -0,0 +1,93 @@ +/** + * @name Safe publication + * @description A field of a thread-safe class is not safely published. + * @kind problem + * @problem.severity warning + * @precision high + * @id java/safe-publication + * @tags quality + * reliability + * concurrency + */ + +import java +import semmle.code.java.ConflictingAccess + +/** + * Holds if `v` should be the default value for the field `f`. + * That is, `v` is an initial (or constructor) assignment of `f`. + */ +predicate shouldBeDefaultValueFor(Field f, Expr v) { + v = f.getAnAssignedValue() and + ( + v = f.getInitializer() + or + v.getEnclosingCallable() = f.getDeclaringType().getAConstructor() + ) +} + +/** + * Gets the default value for the field `f`. + * See https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html + * for the default values of the primitive types. + * The default value for non-primitive types is null. + */ +bindingset[result] +Expr getDefaultValue(Field f) { + f.getType().hasName("byte") and result.(IntegerLiteral).getIntValue() = 0 + or + f.getType().hasName("short") and result.(IntegerLiteral).getIntValue() = 0 + or + f.getType().hasName("int") and result.(IntegerLiteral).getIntValue() = 0 + or + f.getType().hasName("long") and + ( + result.(LongLiteral).getValue() = "0" or + result.(IntegerLiteral).getValue() = "0" + ) + or + f.getType().hasName("float") and result.(FloatLiteral).getValue() = "0.0" + or + f.getType().hasName("double") and result.(DoubleLiteral).getValue() = "0.0" + or + f.getType().hasName("char") and result.(CharacterLiteral).getCodePointValue() = 0 + or + f.getType().hasName("boolean") and result.(BooleanLiteral).getBooleanValue() = false + or + not f.getType().getName() in [ + "byte", "short", "int", "long", "float", "double", "char", "boolean" + ] and + result instanceof NullLiteral +} + +/** + * Holds if all constructor or initial assignments (if any) are to the default value. + * That is, assignments by the declaration: + * int x = 0; OK + * int x = 3; not OK + * or inside a constructor: + * public c(a) { + * x = 0; OK + * x = 3; not OK + * x = a; not OK + * } + */ +predicate isAssignedDefaultValue(Field f) { + forall(Expr v | shouldBeDefaultValueFor(f, v) | v = getDefaultValue(f)) +} + +predicate isSafelyPublished(Field f) { + f.isFinal() or // NOTE: For non-primitive types, 'final' alone does not guarantee safe publication unless the object is immutable or safely constructed. Consider reviewing the handling of non-primitive fields for safe publication. + f.isStatic() or + f.isVolatile() or + isThreadSafeType(f.getType()) or + isThreadSafeType(f.getInitializer().getType()) or + isAssignedDefaultValue(f) +} + +from Field f, ClassAnnotatedAsThreadSafe c +where + f = c.getAField() and + not isSafelyPublished(f) +select f, "The class $@ is marked as thread-safe, but this field is not safely published.", c, + c.getName() diff --git a/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql b/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql index 417e426b786..70a3a901ade 100644 --- a/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql +++ b/java/ql/src/Likely Bugs/Concurrency/SleepWithLock.ql @@ -6,9 +6,11 @@ * @problem.severity error * @precision medium * @id java/sleep-with-lock-held - * @tags reliability + * @tags quality + * reliability * correctness * concurrency + * performance * external/cwe/cwe-833 */ diff --git a/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql b/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql index cb971a5f109..700b1fab896 100644 --- a/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql +++ b/java/ql/src/Likely Bugs/Concurrency/StartInConstructor.ql @@ -7,13 +7,18 @@ * @problem.severity warning * @precision medium * @id java/thread-start-in-constructor - * @tags reliability + * @tags quality + * reliability * correctness * concurrency */ import java +private predicate hasASubclass(RefType t) { + exists(RefType sub | sub != t | sub.getAnAncestor() = t) +} + /** * Holds if this type is either `final` or * `private` and without subtypes. @@ -23,7 +28,11 @@ private predicate cannotBeExtended(RefType t) { or // If the class is private, all possible subclasses are known. t.isPrivate() and - not exists(RefType sub | sub != t | sub.getAnAncestor() = t) + not hasASubclass(t) + or + // If the class only has private constructors, all possible subclasses are known. + forex(Constructor c | c.getDeclaringType() = t | c.isPrivate()) and + not hasASubclass(t) } from MethodCall m, Constructor c, Class clazz diff --git a/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql b/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql index 3eaa6743699..1842076a71b 100644 --- a/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql +++ b/java/ql/src/Likely Bugs/Concurrency/SynchWriteObject.ql @@ -6,10 +6,10 @@ * @problem.severity warning * @precision medium * @id java/inconsistent-sync-writeobject - * @tags reliability + * @tags quality + * reliability * correctness * concurrency - * language-features * external/cwe/cwe-662 */ diff --git a/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.qhelp b/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.qhelp new file mode 100644 index 00000000000..cafcb3cdd79 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.qhelp @@ -0,0 +1,33 @@ + + + + + +

    +In a thread-safe class, all field accesses that can be caused by calls to public methods must be properly synchronized.

    + +
    + + +

    +Protect the field access with a lock. Alternatively mark the field as volatile if the write operation is atomic. You can also choose to use a data type that guarantees atomic access. If the field is immutable, mark it as final.

    + +
    + + + + +
  • + Java Language Specification, chapter 17: + Threads and Locks. +
  • +
  • + Java concurrency package: + java.util.concurrent. +
  • + + +
    +
    diff --git a/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.ql b/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.ql new file mode 100644 index 00000000000..fafa4701ed2 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/ThreadSafe.ql @@ -0,0 +1,51 @@ +/** + * @name Not thread-safe + * @description This class is not thread-safe. It is annotated as `@ThreadSafe`, but it has a + * conflicting access to a field that is not synchronized with the same monitor. + * @kind problem + * @problem.severity warning + * @precision high + * @id java/not-threadsafe + * @tags quality + * reliability + * concurrency + */ + +import java +import semmle.code.java.ConflictingAccess + +predicate unmonitoredAccess(ExposedFieldAccess a, string msg, Expr entry, string entry_desc) { + exists(ClassAnnotatedAsThreadSafe cls, ExposedField f | + cls.unlockedPublicAccess(f, entry, _, a, true) + or + cls.unlockedPublicAccess(f, entry, _, a, false) and + cls.hasPublicWriteAccess(f) + ) and + msg = + "This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe." and + entry_desc = "this expression" +} + +predicate notFullyMonitoredField( + ExposedField f, string msg, ClassAnnotatedAsThreadSafe cls, string cls_name +) { + ( + // Technically there has to be a write access for a conflict to exist. + // But if you are locking your reads with different locks, you likely made a typo, + // so in this case we alert without requiring `cls.has_public_write_access(f)` + cls.singleMonitorMismatch(f) + or + cls.notFullyMonitored(f) and + cls.hasPublicWriteAccess(f) + ) and + msg = + "This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe." and + cls_name = cls.getName() +} + +from Top alert_element, Top alert_context, string alert_msg, string context_desc +where + unmonitoredAccess(alert_element, alert_msg, alert_context, context_desc) + or + notFullyMonitoredField(alert_element, alert_msg, alert_context, context_desc) +select alert_element, alert_msg, alert_context, context_desc diff --git a/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql b/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql index 118593e31fe..c7d33eff4a9 100644 --- a/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql +++ b/java/ql/src/Likely Bugs/Concurrency/UnreleasedLock.ql @@ -16,47 +16,7 @@ import java import semmle.code.java.controlflow.Guards import semmle.code.java.dataflow.SSA -import semmle.code.java.frameworks.Mockito - -class LockType extends RefType { - LockType() { - this.getAMethod().hasName("lock") and - this.getAMethod().hasName("unlock") - } - - Method getLockMethod() { - result.getDeclaringType() = this and - (result.hasName("lock") or result.hasName("tryLock")) - } - - Method getUnlockMethod() { - result.getDeclaringType() = this and - result.hasName("unlock") - } - - Method getIsHeldByCurrentThreadMethod() { - result.getDeclaringType() = this and - result.hasName("isHeldByCurrentThread") - } - - MethodCall getLockAccess() { - result.getMethod() = this.getLockMethod() and - // Not part of a Mockito verification call - not result instanceof MockitoVerifiedMethodCall - } - - MethodCall getUnlockAccess() { - result.getMethod() = this.getUnlockMethod() and - // Not part of a Mockito verification call - not result instanceof MockitoVerifiedMethodCall - } - - MethodCall getIsHeldByCurrentThreadAccess() { - result.getMethod() = this.getIsHeldByCurrentThreadMethod() and - // Not part of a Mockito verification call - not result instanceof MockitoVerifiedMethodCall - } -} +import semmle.code.java.Concurrency predicate lockBlock(LockType t, BasicBlock b, int locks) { locks = strictcount(int i | b.getNode(i).asExpr() = t.getLockAccess()) diff --git a/java/ql/src/Likely Bugs/Concurrency/UnsafePublication.java b/java/ql/src/Likely Bugs/Concurrency/UnsafePublication.java new file mode 100644 index 00000000000..0b7ea330981 --- /dev/null +++ b/java/ql/src/Likely Bugs/Concurrency/UnsafePublication.java @@ -0,0 +1,17 @@ +public class UnsafePublication { + private Object value; + private int server_id; + + public UnsafePublication() { + value = new Object(); // Not safely published, other threads may see the default value null + server_id = 1; // Not safely published, other threads may see the default value 0 + } + + public Object getValue() { + return value; + } + + public int getServerId() { + return server_id; + } +} \ No newline at end of file diff --git a/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql b/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql index 19bac66e028..07fb27d5a53 100644 --- a/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql +++ b/java/ql/src/Likely Bugs/Finalization/NullifiedSuperFinalize.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/missing-super-finalize - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-568 */ diff --git a/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql b/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql index 2b6ae1125dd..fb82f330c22 100644 --- a/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql +++ b/java/ql/src/Likely Bugs/Frameworks/JUnit/BadSuiteMethod.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-junit-suite-signature - * @tags testability - * maintainability - * frameworks/junit + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql index 3d4f6270734..6a2db4b695f 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-swing-event-adapter-signature - * @tags reliability - * maintainability - * frameworks/swing + * @tags quality + * reliability + * correctness */ import java @@ -24,14 +24,20 @@ class Adapter extends Class { } } -from Class c, Adapter adapter, Method m -where +pragma[nomagic] +predicate candidate(Class c, Adapter adapter, Method m, string name) { adapter = c.getASupertype() and c = m.getDeclaringType() and - exists(Method original | adapter = original.getDeclaringType() | m.getName() = original.getName()) and - not exists(Method overridden | adapter = overridden.getDeclaringType() | m.overrides(overridden)) and + name = m.getName() and // The method is not used for any other purpose. not exists(MethodCall ma | ma.getMethod() = m) +} + +from Class c, Adapter adapter, Method m, string name +where + candidate(c, adapter, m, name) and + exists(Method original | adapter = original.getDeclaringType() | name = original.getName()) and + not exists(Method overridden | adapter = overridden.getDeclaringType() | m.overrides(overridden)) select m, "Method " + m.getName() + " attempts to override a method in " + adapter.getName() + ", but does not have the same argument types. " + m.getName() + diff --git a/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql b/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql index 8d9409059f8..c93e5fe91a1 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/DangerousNonCircuitLogic.ql @@ -7,7 +7,9 @@ * @problem.severity warning * @precision medium * @id java/non-short-circuit-evaluation - * @tags reliability + * @tags quality + * reliability + * correctness * readability * external/cwe/cwe-691 */ diff --git a/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql index 585306be958..d5a117fc2da 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/EqualsTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/equals-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql index 7a69f9f7953..e75f9f337fd 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/HashCodeTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/hashcode-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql b/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql index 8116a906910..fe2286aad1d 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/SelfAssignment.ql @@ -13,6 +13,7 @@ import java +pragma[nomagic] predicate toCompare(VarAccess left, VarAccess right) { exists(AssignExpr assign | assign.getDest() = left and assign.getSource() = right) or @@ -29,9 +30,10 @@ predicate local(RefType enclosingType, VarAccess v) { not exists(v.getQualifier()) and enclosingType = v.getEnclosingCallable().getDeclaringType() } +pragma[nomagic] predicate sameVariable(VarAccess left, VarAccess right) { toCompare(left, right) and - left.getVariable() = right.getVariable() and + pragma[only_bind_out](left.getVariable()) = pragma[only_bind_out](right.getVariable()) and ( exists(Expr q1, Expr q2 | q1 = left.getQualifier() and @@ -39,7 +41,10 @@ predicate sameVariable(VarAccess left, VarAccess right) { q2 = right.getQualifier() ) or - exists(RefType enclosingType | local(enclosingType, left) and local(enclosingType, right)) + exists(RefType enclosingType | + local(enclosingType, pragma[only_bind_out](left)) and + local(enclosingType, pragma[only_bind_out](right)) + ) ) } diff --git a/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql b/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql index 928d9f5a7cc..a4d46ec69e0 100644 --- a/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql +++ b/java/ql/src/Likely Bugs/Likely Typos/ToStringTypo.ql @@ -5,9 +5,10 @@ * @problem.severity warning * @precision medium * @id java/tostring-typo - * @tags maintainability + * @tags quality + * reliability + * correctness * readability - * naming */ import java diff --git a/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql b/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql index 0bfb4b45a5a..8b75b8c9786 100644 --- a/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql +++ b/java/ql/src/Likely Bugs/Reflection/AnnotationPresentCheck.ql @@ -6,8 +6,9 @@ * @problem.severity error * @precision medium * @id java/ineffective-annotation-present-check - * @tags correctness - * logic + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql b/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql index af86d90d690..813db75526e 100644 --- a/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql +++ b/java/ql/src/Likely Bugs/Serialization/IncorrectSerialVersionUID.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/incorrect-serial-version-uid - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql b/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql index 815245d1a7d..0fbf52d207e 100644 --- a/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql +++ b/java/ql/src/Likely Bugs/Serialization/IncorrectSerializableMethods.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-object-serialization-signature - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql index 44c92634fe0..47bb0640b5e 100644 --- a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql +++ b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorOnExternalizable.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/missing-no-arg-constructor-on-externalizable - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql index 651908b0b86..c38a074529d 100644 --- a/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql +++ b/java/ql/src/Likely Bugs/Serialization/MissingVoidConstructorsOnSerializable.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/missing-no-arg-constructor-on-serializable - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql b/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql index 8081c551eed..520dba86c41 100644 --- a/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql +++ b/java/ql/src/Likely Bugs/Serialization/NonSerializableInnerClass.ql @@ -6,9 +6,9 @@ * @problem.severity warning * @precision medium * @id java/non-serializable-inner-class - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql b/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql index 64e5a483362..629e601f469 100644 --- a/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql +++ b/java/ql/src/Likely Bugs/Serialization/ReadResolveObject.ql @@ -7,9 +7,9 @@ * @problem.severity warning * @precision medium * @id java/wrong-readresolve-signature - * @tags reliability - * maintainability - * language-features + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql index d1cdb8bdfbb..0e6584bb4e5 100644 --- a/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql +++ b/java/ql/src/Likely Bugs/Statements/MissingEnumInSwitch.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/missing-case-in-switch - * @tags reliability - * readability + * @tags quality + * reliability + * correctness * external/cwe/cwe-478 */ diff --git a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql index 8675bbd418b..7cfb2308c96 100644 --- a/java/ql/src/Likely Bugs/Termination/SpinOnField.ql +++ b/java/ql/src/Likely Bugs/Termination/SpinOnField.ql @@ -6,9 +6,11 @@ * @problem.severity warning * @precision medium * @id java/spin-on-field - * @tags efficiency + * @tags quality + * reliability * correctness * concurrency + * performance */ import java @@ -33,8 +35,8 @@ class Empty extends Stmt { class EmptyLoop extends Stmt { EmptyLoop() { exists(ForStmt stmt | stmt = this | - count(stmt.getAnInit()) = 0 and - count(stmt.getAnUpdate()) = 0 and + not exists(stmt.getAnInit()) and + not exists(stmt.getAnUpdate()) and stmt.getStmt() instanceof Empty ) or diff --git a/java/ql/src/Security/CWE/CWE-020/OverlyLargeRange.ql b/java/ql/src/Security/CWE/CWE-020/OverlyLargeRange.ql index b8ea3e52dbd..5762785949e 100644 --- a/java/ql/src/Security/CWE/CWE-020/OverlyLargeRange.ql +++ b/java/ql/src/Security/CWE/CWE-020/OverlyLargeRange.ql @@ -4,7 +4,7 @@ * This may allow an attacker to bypass a filter or sanitizer. * @kind problem * @problem.severity warning - * @security-severity 5.0 + * @security-severity 4.0 * @precision high * @id java/overly-large-range * @tags correctness diff --git a/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.java b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.java similarity index 100% rename from java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.java rename to java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp similarity index 58% rename from java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp rename to java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp index ee3e8a4181a..71e016510e2 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp +++ b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.qhelp @@ -2,11 +2,13 @@ -

    Cross-Site Scripting (XSS) is categorized as one of the OWASP Top 10 Security Vulnerabilities. The HttpOnly flag directs compatible browsers to prevent client-side script from accessing cookies. Including the HttpOnly flag in the Set-Cookie HTTP response header for a sensitive cookie helps mitigate the risk associated with XSS where an attacker's script code attempts to read the contents of a cookie and exfiltrate information obtained.

    +

    Cookies without the HttpOnly flag set are accessible to client-side scripts (such as JavaScript) running in the same origin. +In case of a Cross-Site Scripting (XSS) vulnerability, the cookie can be stolen by a malicious script. +If a sensitive cookie does not need to be accessed directly by client-side scripts, the HttpOnly flag should be set.

    -

    Use the HttpOnly flag when generating a cookie containing sensitive information to help mitigate the risk of client side script accessing the protected cookie.

    +

    Use the HttpOnly flag when generating a cookie containing sensitive information to help mitigate the risk of client-side scripts accessing the protected cookie.

    @@ -23,5 +25,6 @@ OWASP: HttpOnly +
  • MDN: Set-Cookie HttpOnly.
  • diff --git a/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql similarity index 67% rename from java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql rename to java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql index fa5237d32bb..494e851a533 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql +++ b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql @@ -1,13 +1,13 @@ /** * @name Sensitive cookies without the HttpOnly response header set - * @description Sensitive cookies without the 'HttpOnly' flag set leaves session cookies vulnerable to + * @description A sensitive cookie without the 'HttpOnly' flag set may be vulnerable to * an XSS attack. * @kind path-problem * @problem.severity warning - * @precision medium + * @precision high + * @security-severity 5.0 * @id java/sensitive-cookie-not-httponly * @tags security - * experimental * external/cwe/cwe-1004 */ @@ -15,16 +15,15 @@ * Sketch of the structure of this query: we track cookie names that appear to be sensitive * (e.g. `session` or `token`) to a `ServletResponse.addHeader(...)` or `.addCookie(...)` * method that does not set the `httpOnly` flag. Subsidiary configurations - * `MatchesHttpOnlyConfiguration` and `SetHttpOnlyInCookieConfiguration` are used to establish + * `MatchesHttpOnlyToRawHeaderConfig` and `SetHttpOnlyInCookieConfig` are used to establish * when the `httpOnly` flag is likely to have been set, before configuration - * `MissingHttpOnlyConfiguration` establishes that a non-`httpOnly` cookie has a sensitive-seeming name. + * `MissingHttpOnlyConfig` establishes that a non-`httpOnly` cookie has a sensitive-seeming name. */ import java import semmle.code.java.dataflow.FlowSteps import semmle.code.java.frameworks.Servlets import semmle.code.java.dataflow.TaintTracking -import MissingHttpOnlyFlow::PathGraph /** Gets a regular expression for matching common names of sensitive cookies. */ string getSensitiveCookieNameRegex() { result = "(?i).*(auth|session|token|key|credential).*" } @@ -50,8 +49,8 @@ class SensitiveCookieNameExpr extends Expr { } /** A method call that sets a `Set-Cookie` header. */ -class SetCookieMethodCall extends MethodCall { - SetCookieMethodCall() { +class SetCookieRawHeaderMethodCall extends MethodCall { + SetCookieRawHeaderMethodCall() { ( this.getMethod() instanceof ResponseAddHeaderMethod or this.getMethod() instanceof ResponseSetHeaderMethod @@ -62,19 +61,19 @@ class SetCookieMethodCall extends MethodCall { /** * A taint configuration tracking flow from the text `httponly` to argument 1 of - * `SetCookieMethodCall`. + * `SetCookieRawHeaderMethodCall`. */ -module MatchesHttpOnlyConfig implements DataFlow::ConfigSig { +module MatchesHttpOnlyToRawHeaderConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr().(CompileTimeConstantExpr).getStringValue().toLowerCase().matches("%httponly%") } predicate isSink(DataFlow::Node sink) { - sink.asExpr() = any(SetCookieMethodCall ma).getArgument(1) + sink.asExpr() = any(SetCookieRawHeaderMethodCall ma).getArgument(1) } } -module MatchesHttpOnlyFlow = TaintTracking::Global; +module MatchesHttpOnlyToRawHeaderFlow = TaintTracking::Global; /** A class descended from `javax.servlet.http.Cookie`. */ class CookieClass extends RefType { @@ -103,29 +102,11 @@ predicate removesCookie(MethodCall ma) { } /** - * Holds if the MethodCall `ma` is a test method call indicated by: - * a) in a test directory such as `src/test/java` - * b) in a test package whose name has the word `test` - * c) in a test class whose name has the word `test` - * d) in a test class implementing a test framework such as JUnit or TestNG + * A taint configuration tracking the flow of a cookie that has had the + * `HttpOnly` flag set, or has been removed, to a `ServletResponse.addCookie` + * call. */ -predicate isTestMethod(MethodCall ma) { - exists(Method m | - m = ma.getEnclosingCallable() and - ( - m.getDeclaringType().getName().toLowerCase().matches("%test%") or // Simple check to exclude test classes to reduce FPs - m.getDeclaringType().getPackage().getName().toLowerCase().matches("%test%") or // Simple check to exclude classes in test packages to reduce FPs - exists(m.getLocation().getFile().getAbsolutePath().indexOf("/src/test/java")) or // Match test directory structure of build tools like maven - m instanceof TestMethod // Test method of a test case implementing a test framework such as JUnit or TestNG - ) - ) -} - -/** - * A taint configuration tracking flow of a method that sets the `HttpOnly` flag, - * or one that removes a cookie, to a `ServletResponse.addCookie` call. - */ -module SetHttpOnlyOrRemovesCookieConfig implements DataFlow::ConfigSig { +module SetHttpOnlyOrRemovesCookieToAddCookieConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr() = any(MethodCall ma | setsCookieHttpOnly(ma) or removesCookie(ma)).getQualifier() @@ -137,25 +118,25 @@ module SetHttpOnlyOrRemovesCookieConfig implements DataFlow::ConfigSig { } } -module SetHttpOnlyOrRemovesCookieFlow = TaintTracking::Global; +module SetHttpOnlyOrRemovesCookieToAddCookieFlow = + TaintTracking::Global; /** - * A cookie that is added to an HTTP response and which doesn't have `httpOnly` set, used as a sink - * in `MissingHttpOnlyConfiguration`. + * A cookie that is added to an HTTP response and which doesn't have `HttpOnly` set, used as a sink + * in `MissingHttpOnlyConfig`. */ -class CookieResponseSink extends DataFlow::ExprNode { - CookieResponseSink() { +class CookieResponseWithoutHttpOnlySink extends DataFlow::ExprNode { + CookieResponseWithoutHttpOnlySink() { exists(MethodCall ma | ( ma.getMethod() instanceof ResponseAddCookieMethod and this.getExpr() = ma.getArgument(0) and - not SetHttpOnlyOrRemovesCookieFlow::flowTo(this) + not SetHttpOnlyOrRemovesCookieToAddCookieFlow::flowTo(this) or - ma instanceof SetCookieMethodCall and + ma instanceof SetCookieRawHeaderMethodCall and this.getExpr() = ma.getArgument(1) and - not MatchesHttpOnlyFlow::flowTo(this) // response.addHeader("Set-Cookie", "token=" +authId + ";HttpOnly;Secure") - ) and - not isTestMethod(ma) // Test class or method + not MatchesHttpOnlyToRawHeaderFlow::flowTo(this) // response.addHeader("Set-Cookie", "token=" +authId + ";HttpOnly;Secure") + ) ) } } @@ -178,15 +159,21 @@ predicate setsHttpOnlyInNewCookie(ClassInstanceExpr cie) { /** * A taint configuration tracking flow from a sensitive cookie without the `HttpOnly` flag - * set to its HTTP response. + * set to an HTTP response. + * + * Tracks string literals containing sensitive names (`SensitiveCookieNameExpr`), to an `addCookie` call (as a `Cookie` object) + * or an `addHeader` call (as a string) (`CookieResponseWithoutHttpOnlySink`). + * + * Passes through `Cookie` constructors and `toString` calls. */ module MissingHttpOnlyConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr() instanceof SensitiveCookieNameExpr } - predicate isSink(DataFlow::Node sink) { sink instanceof CookieResponseSink } + predicate isSink(DataFlow::Node sink) { sink instanceof CookieResponseWithoutHttpOnlySink } predicate isBarrier(DataFlow::Node node) { // JAX-RS's `new NewCookie("session-access-key", accessKey, "/", null, null, 0, true, true)` and similar + // Cookie constructors that set the `HttpOnly` flag are considered barriers to the flow of sensitive names. setsHttpOnlyInNewCookie(node.asExpr()) } @@ -212,13 +199,8 @@ module MissingHttpOnlyConfig implements DataFlow::ConfigSig { module MissingHttpOnlyFlow = TaintTracking::Global; -deprecated query predicate problems( - DataFlow::Node sinkNode, MissingHttpOnlyFlow::PathNode source, MissingHttpOnlyFlow::PathNode sink, - string message1, DataFlow::Node sourceNode, string message2 -) { - MissingHttpOnlyFlow::flowPath(source, sink) and - sinkNode = sink.getNode() and - message1 = "$@ doesn't have the HttpOnly flag set." and - sourceNode = source.getNode() and - message2 = "This sensitive cookie" -} +import MissingHttpOnlyFlow::PathGraph + +from MissingHttpOnlyFlow::PathNode source, MissingHttpOnlyFlow::PathNode sink +where MissingHttpOnlyFlow::flowPath(source, sink) +select sink, source, sink, "$@ doesn't have the HttpOnly flag set.", source, "This sensitive cookie" diff --git a/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qhelp b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qhelp new file mode 100644 index 00000000000..d3e79e88ed7 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qhelp @@ -0,0 +1,39 @@ + + + +

    Spring Boot includes features called actuators that let you monitor and interact with your web + application. Exposing unprotected actuator endpoints through configuration files can lead to + information disclosure or even to remote code execution.

    +
    + + +

    Since actuator endpoints may contain sensitive information, carefully consider when to expose them, + and secure them as you would any sensitive URL. If you need to expose actuator endpoints, use Spring + Security, which secures actuators by default, or define a custom security configuration. +

    +
    + + +

    The following examples show application.properties configurations that expose sensitive + actuator endpoints.

    + + +

    The below configurations ensure that sensitive actuator endpoints are not exposed.

    + + +

    To use Spring Security, which secures actuators by default, add the spring-boot-starter-security + dependency in your Maven pom.xml file.

    + +
    + + +
  • + Spring Boot Reference Documentation: + Endpoints. +
  • +
  • + HackerOne Report: + Spring Actuator endpoints publicly available, leading to account takeover +
  • +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql new file mode 100644 index 00000000000..562298257a7 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql @@ -0,0 +1,20 @@ +/** + * @name Exposed Spring Boot actuators in configuration file + * @description Exposing Spring Boot actuators through configuration files may lead to information leak from + * the internal application, or even to remote code execution. + * @kind problem + * @problem.severity error + * @security-severity 6.5 + * @precision high + * @id java/spring-boot-exposed-actuators-config + * @tags security + * external/cwe/cwe-200 + */ + +import java +import semmle.code.xml.MavenPom +import semmle.code.java.security.SpringBootActuatorsConfigQuery + +from SpringBootStarterActuatorDependency d, JavaPropertyOption jpOption +where exposesSensitiveEndpoint(d, jpOption) +select d, "Insecure Spring Boot actuator $@ exposes sensitive endpoints.", jpOption, "configuration" diff --git a/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_bad.properties b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_bad.properties new file mode 100644 index 00000000000..ccf1cb67881 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_bad.properties @@ -0,0 +1,10 @@ +# vulnerable configuration (Spring Boot 1.0 - 1.4): exposes endpoints by default + +# vulnerable configuration (Spring Boot 1.5): false value exposes endpoints +management.security.enabled=false + +# vulnerable configuration (Spring Boot 2.x): exposes all endpoints +management.endpoints.web.exposure.include=* + +# vulnerable configuration (Spring Boot 3.x): exposes all endpoints +management.endpoints.web.exposure.include=* diff --git a/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_good.properties b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_good.properties new file mode 100644 index 00000000000..1af2b7b0228 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/application_good.properties @@ -0,0 +1,11 @@ +# safe configuration (Spring Boot 1.0 - 1.4) +management.security.enabled=true + +# safe configuration (Spring Boot 1.5+) +management.security.enabled=true + +# safe configuration (Spring Boot 2.x): exposes health and info only by default +management.endpoints.web.exposure.include=health,info + +# safe configuration (Spring Boot 3.x): exposes health only by default +management.endpoints.web.exposure.include=health diff --git a/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/pom_good.xml b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/pom_good.xml new file mode 100644 index 00000000000..32fad44591e --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/pom_good.xml @@ -0,0 +1,12 @@ +... + + org.springframework.boot + spring-boot-starter-actuator + + + + + org.springframework.boot + spring-boot-starter-security + +... diff --git a/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp b/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp index 1d8e8db6798..35b37b9f814 100644 --- a/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp +++ b/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.qhelp @@ -3,11 +3,15 @@ "qhelp.dtd"> -

    Using broken or weak cryptographic algorithms can leave data vulnerable to being decrypted.

    +

    Using broken or weak cryptographic algorithms may compromise security guarantees such as confidentiality, integrity, and authenticity.

    -

    Many cryptographic algorithms provided by cryptography libraries are known to be weak, or -flawed. Using such an algorithm means that an attacker may be able to easily decrypt the encrypted -data.

    +

    Many cryptographic algorithms are known to be weak or flawed. The security guarantees of a system often rely on the underlying cryptography, so using a weak algorithm can have severe consequences. For example: +

    +
      +
    • If a weak encryption algorithm is used, an attacker may be able to decrypt sensitive data.
    • +
    • If a weak hashing algorithm is used to protect data integrity, an attacker may be able to craft a malicious input that has the same hash as a benign one.
    • +
    • If a weak algorithm is used for digital signatures, an attacker may be able to forge signatures and impersonate legitimate users.
    • +
    diff --git a/java/ql/src/Security/CWE/CWE-614/InsecureCookie.ql b/java/ql/src/Security/CWE/CWE-614/InsecureCookie.ql index b8d64d22e29..44107281feb 100644 --- a/java/ql/src/Security/CWE/CWE-614/InsecureCookie.ql +++ b/java/ql/src/Security/CWE/CWE-614/InsecureCookie.ql @@ -4,7 +4,7 @@ * interception. * @kind problem * @problem.severity error - * @security-severity 5.0 + * @security-severity 4.0 * @precision high * @id java/insecure-cookie * @tags security diff --git a/java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql b/java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql index 6bbe1d11ee1..ad58b90bc95 100644 --- a/java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql +++ b/java/ql/src/Telemetry/DatabaseQualityDiagnostics.ql @@ -8,26 +8,39 @@ import java import DatabaseQuality +private predicate diagnostic(string msg, float value, float threshold) { + CallTargetStatsReport::percentageOfOk(msg, value) and + threshold = 85 + or + ExprTypeStatsReport::percentageOfOk(msg, value) and + threshold = 85 +} + private newtype TDbQualityDiagnostic = TTheDbQualityDiagnostic() { - exists(float percentageGood | - CallTargetStatsReport::percentageOfOk(_, percentageGood) - or - ExprTypeStatsReport::percentageOfOk(_, percentageGood) - | - percentageGood < 95 + exists(float percentageGood, float threshold | + diagnostic(_, percentageGood, threshold) and + percentageGood < threshold ) } +private string getDbHealth() { + result = + strictconcat(string msg, float value, float threshold | + diagnostic(msg, value, threshold) + | + msg + ": " + value.floor() + " % (threshold " + threshold.floor() + " %)", ". " + ) +} + class DbQualityDiagnostic extends TDbQualityDiagnostic { string toString() { result = "Scanning Java code completed successfully, but the scan encountered issues. " + - "This may be caused by problems identifying dependencies or use of generated source code, among other reasons -- " - + - "see other CodeQL diagnostics reported on the CodeQL status page for more details of possible causes. " - + - "Addressing these warnings is advisable to avoid false-positive or missing results. If they cannot be addressed, consider scanning Java " + "This may be caused by problems identifying dependencies or use of generated source code. " + + "Some metrics of the database quality are: " + getDbHealth() + ". " + + "Ideally these metrics should be above their thresholds. " + + "Addressing these issues is advisable to avoid false-positives or missing results. If they cannot be addressed, consider scanning Java " + "using either the `autobuild` or `manual` [build modes](https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#comparison-of-the-build-modes)." } diff --git a/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql b/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql index a2b6afbbeee..beea4bba5d5 100644 --- a/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql +++ b/java/ql/src/Violations of Best Practice/Dead Code/CreatesEmptyZip.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/empty-zip-file-entry - * @tags reliability - * readability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll b/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll index 26c5ed66a86..5afab52c37e 100644 --- a/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll +++ b/java/ql/src/Violations of Best Practice/Dead Code/DeadLocals.qll @@ -4,7 +4,7 @@ import java import semmle.code.java.dataflow.SSA -private import semmle.code.java.frameworks.Assertions +private import semmle.code.java.controlflow.internal.Preconditions private predicate emptyDecl(LocalVariableDeclExpr decl) { not exists(decl.getInit()) and @@ -22,7 +22,19 @@ predicate deadLocal(VariableUpdate upd) { /** * A dead variable update that is expected to be dead as indicated by an assertion. */ -predicate expectedDead(VariableUpdate upd) { assertFail(upd.getBasicBlock(), _) } +predicate expectedDead(VariableUpdate upd) { + exists(BasicBlock bb, ControlFlowNode n | + bb = upd.getBasicBlock() and + bb = n.getBasicBlock() + | + methodCallUnconditionallyThrows(n.asExpr()) + or + exists(AssertStmt a | + n.asExpr() = a.getExpr() and + a.getExpr().(BooleanLiteral).getBooleanValue() = false + ) + ) +} /** * A dead update that is overwritten by a live update. diff --git a/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql b/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql index 7f52c495835..61e928b8c70 100644 --- a/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql +++ b/java/ql/src/Violations of Best Practice/Implementation Hiding/GetClassGetResource.ql @@ -6,8 +6,9 @@ * @problem.severity warning * @precision medium * @id java/unsafe-get-resource - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.md b/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.md new file mode 100644 index 00000000000..bcf10901549 --- /dev/null +++ b/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.md @@ -0,0 +1,36 @@ +## Overview + +Accessing class members annotated with `@VisibleForTesting` from production code goes against the intention of the annotation and may indicate programmer error. + +The `@VisibleForTesting` annotation serves to increase visibility of methods, fields or classes for the purposes of testing. Accessing these annotated elements in production code (not test code) abuses the intention of the annotation. + +## Recommendation + +Only access methods, fields or classes annotated with `@VisibleForTesting` from test code. If the visibility of the methods, fields or classes should generally be relaxed, use Java language access modifiers. + +## Example + +```java +public class Annotated { + @VisibleForTesting static int f() { return 42; } +} + +/* src/test/java/Test.java */ +int i = Annotated.f(); // COMPLIANT + +/* src/main/Source.java */ +int i = Annotated.f(); // NON_COMPLIANT +``` + +## Implementation notes + +This rule alerts on any implementation of the annotation `VisibleForTesting`, regardless of where it is provided from. + +The rule also uses the following logic to determine what an abuse of the annotation is: + + 1. If a public or protected member/type is annotated with `@VisibleForTesting`, it's assumed that package-private access is enough for production code. Therefore the rule alerts when a public or protected member/type annotated with `@VisibleForTesting` is used outside of its declaring package. + 2. If a package-private member/type is annotated with `@VisibleForTesting`, it's assumed that private access is enough for production code. Therefore the rule alerts when a package-private member/type annotated with `@VisibleForTesting` is used outside its declaring class. + +## References +- Javadoc: [AssertJ VisibleForTesting](https://javadoc.io/doc/org.assertj/assertj-core/latest/org.assertj.core/org/assertj/core/util/VisibleForTesting.html). +- Javadoc: [JetBrains VisibleForTesting](https://javadoc.io/doc/org.jetbrains/annotations/22.0.0/org/jetbrains/annotations/VisibleForTesting.html). diff --git a/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql b/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql new file mode 100644 index 00000000000..c882d3f629b --- /dev/null +++ b/java/ql/src/Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql @@ -0,0 +1,112 @@ +/** + * @id java/visible-for-testing-abuse + * @name Use of VisibleForTesting in production code + * @description Accessing methods, fields or classes annotated with `@VisibleForTesting` from + * production code goes against the intention of the annotation and may indicate + * programmer error. + * @kind problem + * @precision high + * @problem.severity warning + * @tags quality + * maintainability + * readability + */ + +import java + +/** + * Holds if a `Callable` is within the same type hierarchy as `RefType` + * (including through lambdas, inner classes, and outer classes). + */ +predicate isWithinType(Callable c, RefType t) { + // Either the callable is in the target type, or they share a common enclosing type + c.getDeclaringType().getEnclosingType*() = t.getEnclosingType*() +} + +/** + * Holds if `e` is within the same package as `t`. + */ +predicate isWithinPackage(Expr e, RefType t) { + e.getCompilationUnit().getPackage() = t.getPackage() +} + +/** + * Holds if a callable or any of its enclosing callables is annotated with @VisibleForTesting. + */ +predicate isWithinVisibleForTestingContext(Callable c) { + c.getAnAnnotation().getType().hasName("VisibleForTesting") + or + isWithinVisibleForTestingContext(c.getEnclosingCallable()) +} + +/** + * Holds if `e` is within a test method context, including lambda expressions + * within test methods and nested lambdas. + */ +private predicate isWithinTest(Expr e) { + e.getEnclosingCallable() instanceof LikelyTestMethod + or + exists(Method lambda, LambdaExpr lambdaExpr | + lambda = lambdaExpr.asMethod() and + lambda.getEnclosingCallable*() instanceof LikelyTestMethod and + e.getEnclosingCallable() = lambda + ) +} + +from Annotatable annotated, Expr e +where + annotated.getAnAnnotation().getType().hasName("VisibleForTesting") and + ( + // field access + e = + any(FieldAccess v | + v.getField() = annotated and + // depending on the visibility of the field, using the annotation to abuse the visibility may/may not be occurring + ( + // if its package protected report when its used outside its class because it should have been private (class only permitted) + v.getField().isPackageProtected() and + not isWithinType(v.getEnclosingCallable(), v.getField().getDeclaringType()) + or + // if public or protected report when its used outside its package because package protected should have been enough (package only permitted) + (v.getField().isPublic() or v.getField().isProtected()) and + not isWithinPackage(v, v.getField().getDeclaringType()) + ) + ) + or + // method access + e = + any(MethodCall c | + c.getMethod() = annotated and + // depending on the visibility of the method, using the annotation to abuse the visibility may/may not be occurring + ( + // if its package protected report when its used outside its class because it should have been private (class only permitted) + c.getMethod().isPackageProtected() and + not isWithinType(c.getEnclosingCallable(), c.getMethod().getDeclaringType()) + or + // if public or protected report when its used outside its package because package protected should have been enough (package only permitted) + (c.getMethod().isPublic() or c.getMethod().isProtected()) and + not isWithinPackage(c, c.getMethod().getDeclaringType()) + ) + ) + or + // Class instantiation - report if used outside appropriate scope + e = + any(ClassInstanceExpr c | + c.getConstructedType() = annotated and + ( + c.getConstructedType().isPublic() and not isWithinPackage(c, c.getConstructedType()) + or + c.getConstructedType().hasNoModifier() and + c.getConstructedType() instanceof NestedClass and + not isWithinType(c.getEnclosingCallable(), c.getConstructedType()) + ) + ) + ) and + // not in a test where use is appropriate + not isWithinTest(e) and + // not when the accessing method or any enclosing method is @VisibleForTesting (test-to-test communication) + not isWithinVisibleForTestingContext(e.getEnclosingCallable()) and + // not when used in annotation contexts + not e.getParent*() instanceof Annotation +select e, "Access of $@ annotated with VisibleForTesting found in production code.", annotated, + "element" diff --git a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll index dc5b4eada8d..c94a4fb58bf 100644 --- a/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll +++ b/java/ql/src/Violations of Best Practice/Magic Constants/MagicConstants.qll @@ -105,7 +105,7 @@ private predicate valueOccurrenceCount(string value, int n, string context) { n > 20 } -private predicate occurenceCount(Literal lit, string value, int n, string context) { +private predicate occurrenceCount(Literal lit, string value, int n, string context) { valueOccurrenceCount(value, n, context) and value = lit.getValue() and nonTrivialValue(_, lit, context) @@ -119,7 +119,7 @@ private predicate check(Literal lit, string value, int n, string context, Compil // Check that the literal is nontrivial not trivial(lit) and // Check that it is repeated a number of times - occurenceCount(lit, value, n, context) and + occurrenceCount(lit, value, n, context) and n > 20 and f = lit.getCompilationUnit() } diff --git a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql index ca002fc654a..0a1e8785b4e 100644 --- a/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql +++ b/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverloading.ql @@ -48,7 +48,7 @@ private predicate overloadedMethodsMostSpecific(Method n, Method m) { private predicate whitelist(string name) { name = "visit" } /** - * Method `m` has name `name`, number of parameters `numParams` + * Method `m` has name `name`, number of parameters `numParam` * and is declared in `t` or inherited from a supertype of `t`. */ pragma[nomagic] @@ -66,8 +66,8 @@ private predicate candidateMethod(RefType t, Method m, string name, int numParam predicate paramTypePair(Type t1, Type t2) { exists(Method n, Method m, int i | overloadedMethodsMostSpecific(n, m) and - t1 = n.getParameterType(i) and - t2 = m.getParameterType(i) + t1 = n.getParameterType(pragma[only_bind_into](i)) and + t2 = m.getParameterType(pragma[only_bind_into](i)) ) } @@ -93,6 +93,7 @@ predicate potentiallyConfusingTypesRefTypes(RefType t1, RefType t2) { } // then check hasSubtypeOrInstantiation +pragma[nomagic] predicate potentiallyConfusingTypes(Type t1, Type t2) { potentiallyConfusingTypesSimple(t1, t2) or diff --git a/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql b/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql index faf64b0ae5e..e45ba34b5e5 100644 --- a/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql +++ b/java/ql/src/Violations of Best Practice/Naming Conventions/FieldMasksSuperField.ql @@ -7,8 +7,10 @@ * @problem.severity warning * @precision medium * @id java/field-masks-super-field - * @tags maintainability + * @tags quality + * maintainability * readability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.md b/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.md new file mode 100644 index 00000000000..d932df25116 --- /dev/null +++ b/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.md @@ -0,0 +1,52 @@ +## Overview + +Mocking methods of a class is necessary for unit tests to run without overhead caused by expensive I/O operations. However, when a unit test ends up mocking all public methods of a class, it may indicate that the test is too complicated, possibly because it is trying to test multiple things at once. Such extensive mocking is likely a signal that the scope of the unit test is reaching beyond a single unit of functionality. + +## Recommendation + +It is best to contain the scope of a single unit test to a single unit of functionality. For example, a unit test may aim to test a series of data-transforming functions that depend on an ORM class. Even though the functions may be semantically related with one another, it is better to create a unit test for each function. + +## Example + +The following example mocks all methods of an ORM class named `EmployeeRecord`, and tests four functions against them. Since the scope of the unit test harbors all four of them, all of the methods provided by the class are mocked. + +```java +public class EmployeeRecord { + public int add(Employee employee) { ... } + + public Employee get(String name) { ... } + + public int update(Employee employee, String newName) { ... } + + public int delete(Employee employee) { ... } +} + +public class TestORM { + @Test + public void nonCompliant() { + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // NON_COMPLIANT: Mocked class has all of its public methods used in the test + when(employeeRecordMock.add(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.add + when(employeeRecordMock.get("John Doe")).thenReturn(sampleEmployee); // Mocked EmployeeRecord.get + when(employeeRecordMock.update(sampleEmployee, "Jane Doe")).thenReturn(0); // Mocked EmployeeRecord.update + when(employeeRecordMock.delete(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.delete + } + + @Test + public void compliant() { + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // COMPLIANT: Only some of the public methods belonging to the mocked object are used + when(employeeRecordMock.add(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.add + when(employeeRecordMock.update(sampleEmployee, "Jane Doe")).thenReturn(0); // Mocked EmployeeRecord.update + } + +} +``` + +## Implementation Notes + +JUnit provides two different ways of mocking a method call: `when(mockedObject.methodToMock(...)).thenReturn(...)` and `doReturn(...).when(mockedObject).methodToMock(...)`. Both forms are taken into account by the query. + +## References + +- Baeldung: [Best Practices for Unit Testing in Java](https://www.baeldung.com/java-unit-testing-best-practices). diff --git a/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql b/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql new file mode 100644 index 00000000000..a566d6162d2 --- /dev/null +++ b/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql @@ -0,0 +1,80 @@ +/** + * @id java/excessive-public-method-mocking + * @previous-id java/mocking-all-non-private-methods-means-unit-test-is-too-big + * @name Mocking all public methods of a class may indicate the unit test is testing too much + * @description Mocking all public methods provided by a class might indicate the unit test + * aims to test too many things. + * @kind problem + * @precision high + * @problem.severity recommendation + * @tags quality + * maintainability + * readability + */ + +import java + +/** + * A call to Mockito's `mock` method. + */ +class MockitoMockCall extends MethodCall { + MockitoMockCall() { this.getMethod().hasQualifiedName("org.mockito", "Mockito", "mock") } + + /** + * Gets the type that this call intends to mock. For example: + * ```java + * EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); + * ``` + * This predicate gets the class `EmployeeRecord` in the above example. + */ + Type getMockedType() { result = this.getAnArgument().(TypeLiteral).getReferencedType() } +} + +/** + * A method call that mocks a target method in a JUnit test. For example: + * ```java + * EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); + * when(employeeRecordMock.add(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.add + * doReturn(0).when(employeeRecordMock).add(sampleEmployee); // Mocked EmployeeRecord.add + * ``` + * This class captures the call to `add` which mocks the equivalent method of the class `EmployeeRecord`. + */ +class MockitoMockingMethodCall extends MethodCall { + MockitoMockCall mockCall; + + MockitoMockingMethodCall() { + /* 1. The qualifier originates from the mock call. */ + this.getQualifier().getControlFlowNode().getAPredecessor+() = mockCall.getControlFlowNode() and + /* 2. The mocked method can be found in the class being mocked with the mock call. */ + mockCall.getMockedType().(ClassOrInterface).getAMethod() = this.getMethod() + } + + /** + * Gets the call to Mockito's `mock` from which the qualifier, the mocked object, originates. + */ + MockitoMockCall getMockitoMockCall() { result = mockCall } +} + +/* + * The following from-where-select embodies this pseudocode: + * - Find a JUnit4TestMethod which: + * - for a class that it mocks with a call to `mock`, + * - for all methods that the class has, there is a method that this test method mocks. + */ + +from JUnit4TestMethod testMethod, ClassOrInterface mockedClassOrInterface +where + exists(MockitoMockCall mockCall | + mockCall.getEnclosingCallable() = testMethod and + mockedClassOrInterface = mockCall.getMockedType() and + // Only flag classes with multiple public methods (2 or more) + strictcount(Method m | m = mockedClassOrInterface.getAMethod() and m.isPublic()) > 1 and + forex(Method method | method = mockedClassOrInterface.getAMethod() and method.isPublic() | + exists(MockitoMockingMethodCall mockedMethod | + mockedMethod.getMockitoMockCall() = mockCall and + mockedMethod.getMethod() = method + ) + ) + ) +select testMethod, "This test method mocks all public methods of a $@.", mockedClassOrInterface, + "class or an interface" diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql index c2ffe45b520..568be1805e6 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql @@ -7,8 +7,11 @@ * @problem.severity error * @precision medium * @id java/run-finalizers-on-exit - * @tags reliability - * maintainability + * @previous-id java/do-not-use-finalizers + * @tags quality + * reliability + * correctness + * performance */ import java diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.java b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.java index da7277aa25c..50e0fb1cbda 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.java +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.java @@ -4,7 +4,7 @@ class FileOutput { try { output.write(s.getBytes()); } catch (IOException e) { - System.exit(1); + System.exit(1); // BAD: Should handle or propagate error instead of exiting } return true; } @@ -16,9 +16,30 @@ class Action { // ... // Perform tasks ... // ... - System.exit(0); + System.exit(0); // BAD: Should return status or throw exception } public static void main(String[] args) { - new Action(args).run(); + new Action().run(); } -} \ No newline at end of file +} + +// Good example: Proper error handling +class BetterAction { + public int run() throws Exception { + // ... + // Perform tasks ... + // ... + return 0; // Return status instead of calling System.exit + } + + public static void main(String[] args) { + try { + BetterAction action = new BetterAction(); + int exitCode = action.run(); + System.exit(exitCode); // GOOD: Exit from main method + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + System.exit(1); // GOOD: Exit from main method on error + } + } +} diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.qhelp b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.qhelp index e4d4fa7a7f0..6992a734607 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.qhelp +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.qhelp @@ -13,17 +13,20 @@ program state from being written to disk consistently.

    It is sometimes considered acceptable to call System.exit from a program's main method in order to indicate the overall exit status -of the program. Such calls are an exception to this rule.

    +of the program. The main method should be the primary place +where exit conditions are handled, as it represents the natural termination point +of the application. Such calls are an exception to this rule.

    -

    It is usually preferable to use a different mechanism for reporting -failure conditions. Consider returning a special value (perhaps -null) that users of the current method check for and -recover from appropriately. Alternatively, throw a suitable exception, which -unwinds the stack and allows properly written code to clean up after itself, -while leaving other threads undisturbed.

    +

    Instead of calling System.exit from non-main methods, prefer to propagate +errors upward to the main method where they can be handled appropriately. +Consider returning a special value (perhaps null) that users of the current +method check for and recover from appropriately. Alternatively, throw a suitable exception, +which unwinds the stack and allows properly written code to clean up after itself, +while leaving other threads undisturbed. The main method can then catch +these exceptions and decide whether to exit the program and with what exit code.

    @@ -38,12 +41,14 @@ upwards and be handled by a method that knows how to recover.

    Problem 2 is more subtle. In this example, there is just one entry point to the program (the main method), which constructs an Action and performs it. Action.run calls -System.exit to indicate successful completion. Consider, -however, how this code might be integrated in an application server that -constructs Action instances and calls +System.exit to indicate successful completion. Instead, the +run method should return a status code or throw an exception +on failure, allowing the main method to decide whether to exit +and with what exit code. Consider how this code might be integrated in an +application server that constructs Action instances and calls run on them without going through main. The fact that run terminates the JVM instead of returning its -exit code as an integer makes that use-case impossible.

    +exit code makes that use-case impossible.

    diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql index 93d7911694c..52f82218c33 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql @@ -4,26 +4,80 @@ * reuse and prevent important cleanup steps from running. * @kind problem * @problem.severity warning - * @precision low + * @precision medium * @id java/jvm-exit - * @tags reliability - * maintainability + * @previous-id java/jvm-exit-prevents-cleanup-and-reuse + * @tags quality + * reliability + * correctness * external/cwe/cwe-382 */ import java -from Method m, MethodCall sysexitCall, Method sysexit, Class system -where - sysexitCall = m.getACallSite(sysexit) and - (sysexit.hasName("exit") or sysexit.hasName("halt")) and - sysexit.getDeclaringType() = system and - ( - system.hasQualifiedName("java.lang", "System") or - system.hasQualifiedName("java.lang", "Runtime") - ) and - m.fromSource() and - not m instanceof MainMethod -select sysexitCall, - "Avoid calls to " + sysexit.getDeclaringType().getName() + "." + sysexit.getName() + - "() as this makes code harder to reuse." +/** + * A `Method` which, when called, causes the JVM to exit or halt. + * + * Explicitly includes these methods from the java standard library: + * - `java.lang.System.exit` + * - `java.lang.Runtime.halt` + * - `java.lang.Runtime.exit` + */ +class ExitOrHaltMethod extends Method { + ExitOrHaltMethod() { + exists(Class system | this.getDeclaringType() = system | + this.hasName("exit") and + system.hasQualifiedName("java.lang", ["System", "Runtime"]) + or + this.hasName("halt") and + system.hasQualifiedName("java.lang", "Runtime") + ) + } +} + +/** A `MethodCall` to an `ExitOrHaltMethod`, which causes the JVM to exit abruptly. */ +class ExitOrHaltMethodCall extends MethodCall { + ExitOrHaltMethodCall() { + exists(ExitOrHaltMethod exitMethod | this.getMethod() = exitMethod | + exists(SourceMethodNotMainOrTest srcMethod | this = srcMethod.getACallSite(exitMethod)) + ) + } +} + +/** + * An intentional `MethodCall` to a system or runtime "exit" method, such as for + * functions which exist for the purpose of exiting the program. Assumes that an exit method + * call within a method is intentional if the exit code is passed from a parameter of the + * enclosing method. + */ +class IntentionalExitMethodCall extends ExitOrHaltMethodCall { + IntentionalExitMethodCall() { + this.getMethod().hasName("exit") and + this.getAnArgument() = this.getEnclosingCallable().getAParameter().getAnAccess() + } +} + +/** + * A `Method` that is defined in source code and is not a `MainMethod` or a `LikelyTestMethod`. + */ +class SourceMethodNotMainOrTest extends Method { + SourceMethodNotMainOrTest() { + this.fromSource() and + not this instanceof MainMethod and + not ( + this.getEnclosingCallable*() instanceof LikelyTestMethod + or + this.getDeclaringType() + .getEnclosingType*() + .(LocalClassOrInterface) + .getLocalTypeDeclStmt() + .getEnclosingCallable() instanceof LikelyTestMethod + ) + } +} + +from ExitOrHaltMethodCall mc +where not mc instanceof IntentionalExitMethodCall +select mc, + "Avoid calls to " + mc.getMethod().getDeclaringType().getName() + "." + mc.getMethod().getName() + + "() as this prevents runtime cleanup and makes code harder to reuse." diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql b/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql index 1067bdcb6dc..620177cc58c 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql @@ -6,8 +6,10 @@ * @problem.severity recommendation * @precision low * @id java/garbage-collection - * @tags reliability - * maintainability + * @previous-id java/do-not-use-finalizers + * @tags quality + * reliability + * correctness */ import java diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql b/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql index ebdf5576198..31c0d0821e2 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/NextFromIterator.ql @@ -6,7 +6,8 @@ * @problem.severity warning * @precision medium * @id java/iterator-hasnext-calls-next - * @tags reliability + * @tags quality + * reliability * correctness */ diff --git a/java/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/java/ql/src/change-notes/2025-10-22-adjust-query-severity.md new file mode 100644 index 00000000000..61cc9402a78 --- /dev/null +++ b/java/ql/src/change-notes/2025-10-22-adjust-query-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* Reduced the `security-severity` score of the `java/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. +* Reduced the `security-severity` score of the `java/insecure-cookie` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file diff --git a/java/ql/src/change-notes/2025-11-13-maven-default-java-17 b/java/ql/src/change-notes/2025-11-13-maven-default-java-17 new file mode 100644 index 00000000000..26425b103ab --- /dev/null +++ b/java/ql/src/change-notes/2025-11-13-maven-default-java-17 @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Java analysis now selects the Java version to use informed by Maven POM files across all project modules. It also tries to use Java 17 or higher for all Maven projects if possible, for improved build compatibility. \ No newline at end of file diff --git a/java/ql/src/change-notes/released/1.6.3.md b/java/ql/src/change-notes/released/1.6.3.md new file mode 100644 index 00000000000..a000ecf7025 --- /dev/null +++ b/java/ql/src/change-notes/released/1.6.3.md @@ -0,0 +1,3 @@ +## 1.6.3 + +No user-facing changes. diff --git a/java/ql/src/change-notes/released/1.7.0.md b/java/ql/src/change-notes/released/1.7.0.md new file mode 100644 index 00000000000..f0485614fc3 --- /dev/null +++ b/java/ql/src/change-notes/released/1.7.0.md @@ -0,0 +1,15 @@ +## 1.7.0 + +### New Queries + +* The query `java/insecure-spring-actuator-config` has been promoted from experimental to the main query pack as `java/spring-boot-exposed-actuators-config`. Its results will now appear by default. This query detects exposure of Spring Boot actuators through configuration files. It was originally submitted as an experimental query [by @luchua-bc](https://github.com/github/codeql/pull/5384). + +### Query Metadata Changes + +* The tag `maintainability` has been removed from `java/run-finalizers-on-exit` and the tags `quality`, `correctness`, and `performance` have been added. +* The tag `maintainability` has been removed from `java/garbage-collection` and the tags `quality` and `correctness` have been added. + +### Minor Analysis Improvements + +* Fixed a bug that was causing false negatives in rare cases in the query `java/dereferenced-value-may-be-null`. +* Removed the `java/empty-statement` query that was subsumed by the `java/empty-block` query. diff --git a/java/ql/src/change-notes/released/1.8.0.md b/java/ql/src/change-notes/released/1.8.0.md new file mode 100644 index 00000000000..f8da72566e2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.8.0.md @@ -0,0 +1,9 @@ +## 1.8.0 + +### Major Analysis Improvements + +* The implementation of `java/dereferenced-value-may-be-null` has been completely replaced with a new general control-flow reachability library. This improves precision by reducing false positives. However, since the entire calculation has been reworked, there can be small corner cases where precision regressions might occur and new false positives may occur, but these cases should be rare. + +### Bug Fixes + +* The message for `java/diagnostic/database-quality` has been updated to include detailed database health metrics. Additionally, the threshold for reporting database health issues has been lowered from 95% to 85% (if any metric falls below this percentage). These changes are visible on the tool status page. diff --git a/java/ql/src/change-notes/released/1.8.1.md b/java/ql/src/change-notes/released/1.8.1.md new file mode 100644 index 00000000000..0b1a7cdad10 --- /dev/null +++ b/java/ql/src/change-notes/released/1.8.1.md @@ -0,0 +1,3 @@ +## 1.8.1 + +No user-facing changes. diff --git a/java/ql/src/change-notes/released/1.8.2.md b/java/ql/src/change-notes/released/1.8.2.md new file mode 100644 index 00000000000..12e641fd720 --- /dev/null +++ b/java/ql/src/change-notes/released/1.8.2.md @@ -0,0 +1,3 @@ +## 1.8.2 + +No user-facing changes. diff --git a/java/ql/src/change-notes/released/1.9.0.md b/java/ql/src/change-notes/released/1.9.0.md new file mode 100644 index 00000000000..82977276fe2 --- /dev/null +++ b/java/ql/src/change-notes/released/1.9.0.md @@ -0,0 +1,12 @@ +## 1.9.0 + +### New Queries + +* The `java/sensitive-cookie-not-httponly` query has been promoted from experimental to the main query pack. +* Added a new query, `java/escaping`, to detect values escaping from classes marked as `@ThreadSafe`. +* Added a new query, `java/not-threadsafe`, to detect data races in classes marked as `@ThreadSafe`. +* Added a new query, `java/safe-publication`, to detect unsafe publication in classes marked as `@ThreadSafe`. + +### Minor Analysis Improvements + +* Calls to `String.matches` are now treated as sanitizers for the `java/ssrf` query. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 5f5beb68311..df17dc3a366 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.6.2 +lastReleaseVersion: 1.9.0 diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.qhelp b/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.qhelp deleted file mode 100644 index e201156728a..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.qhelp +++ /dev/null @@ -1,47 +0,0 @@ - - - -

    Spring Boot is a popular framework that facilitates the development of stand-alone applications -and micro services. Spring Boot Actuator helps to expose production-ready support features against -Spring Boot applications.

    - -

    Endpoints of Spring Boot Actuator allow to monitor and interact with a Spring Boot application. -Exposing unprotected actuator endpoints through configuration files can lead to information disclosure -or even remote code execution vulnerability.

    - -

    Rather than programmatically permitting endpoint requests or enforcing access control, frequently -developers simply leave management endpoints publicly accessible in the application configuration file -application.properties without enforcing access control through Spring Security.

    -
    - - -

    Declare the Spring Boot Starter Security module in XML configuration or programmatically enforce -security checks on management endpoints using Spring Security. Otherwise accessing management endpoints -on a different HTTP port other than the port that the web application is listening on also helps to -improve the security.

    -
    - - -

    The following examples show both 'BAD' and 'GOOD' configurations. In the 'BAD' configuration, -no security module is declared and sensitive management endpoints are exposed. In the 'GOOD' configuration, -security is enforced and only endpoints requiring exposure are exposed.

    - - - -
    - - -
  • - Spring Boot documentation: - Spring Boot Actuator: Production-ready Features -
  • -
  • - VERACODE Blog: - Exploiting Spring Boot Actuators -
  • -
  • - HackerOne Report: - Spring Actuator endpoints publicly available, leading to account takeover -
  • -
    -
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql b/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql deleted file mode 100644 index b21aa82e8ba..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @name Insecure Spring Boot Actuator Configuration - * @description Exposed Spring Boot Actuator through configuration files without declarative or procedural - * security enforcement leads to information leak or even remote code execution. - * @kind problem - * @problem.severity error - * @precision high - * @id java/insecure-spring-actuator-config - * @tags security - * experimental - * external/cwe/cwe-016 - */ - -/* - * Note this query requires properties files to be indexed before it can produce results. - * If creating your own database with the CodeQL CLI, you should run - * `codeql database index-files --language=properties ...` - * If using lgtm.com, you should add `properties_files: true` to the index block of your - * lgtm.yml file (see https://lgtm.com/help/lgtm/java-extraction) - */ - -import java -import semmle.code.configfiles.ConfigFiles -import semmle.code.xml.MavenPom - -/** The parent node of the `org.springframework.boot` group. */ -class SpringBootParent extends Parent { - SpringBootParent() { this.getGroup().getValue() = "org.springframework.boot" } -} - -/** Class of Spring Boot dependencies. */ -class SpringBootPom extends Pom { - SpringBootPom() { this.getParentElement() instanceof SpringBootParent } - - /** Holds if the Spring Boot Actuator module `spring-boot-starter-actuator` is used in the project. */ - predicate isSpringBootActuatorUsed() { - this.getADependency().getArtifact().getValue() = "spring-boot-starter-actuator" - } - - /** - * Holds if the Spring Boot Security module is used in the project, which brings in other security - * related libraries. - */ - predicate isSpringBootSecurityUsed() { - this.getADependency().getArtifact().getValue() = "spring-boot-starter-security" - } -} - -/** The properties file `application.properties`. */ -class ApplicationProperties extends ConfigPair { - ApplicationProperties() { this.getFile().getBaseName() = "application.properties" } -} - -/** The configuration property `management.security.enabled`. */ -class ManagementSecurityConfig extends ApplicationProperties { - ManagementSecurityConfig() { this.getNameElement().getName() = "management.security.enabled" } - - /** Gets the whitespace-trimmed value of this property. */ - string getValue() { result = this.getValueElement().getValue().trim() } - - /** Holds if `management.security.enabled` is set to `false`. */ - predicate hasSecurityDisabled() { this.getValue() = "false" } - - /** Holds if `management.security.enabled` is set to `true`. */ - predicate hasSecurityEnabled() { this.getValue() = "true" } -} - -/** The configuration property `management.endpoints.web.exposure.include`. */ -class ManagementEndPointInclude extends ApplicationProperties { - ManagementEndPointInclude() { - this.getNameElement().getName() = "management.endpoints.web.exposure.include" - } - - /** Gets the whitespace-trimmed value of this property. */ - string getValue() { result = this.getValueElement().getValue().trim() } -} - -/** - * Holds if `ApplicationProperties` ap of a repository managed by `SpringBootPom` pom - * has a vulnerable configuration of Spring Boot Actuator management endpoints. - */ -predicate hasConfidentialEndPointExposed(SpringBootPom pom, ApplicationProperties ap) { - pom.isSpringBootActuatorUsed() and - not pom.isSpringBootSecurityUsed() and - ap.getFile() - .getParentContainer() - .getAbsolutePath() - .matches(pom.getFile().getParentContainer().getAbsolutePath() + "%") and // in the same sub-directory - exists(string springBootVersion | springBootVersion = pom.getParentElement().getVersionString() | - springBootVersion.regexpMatch("1\\.[0-4].*") and // version 1.0, 1.1, ..., 1.4 - not exists(ManagementSecurityConfig me | - me.hasSecurityEnabled() and me.getFile() = ap.getFile() - ) - or - springBootVersion.matches("1.5%") and // version 1.5 - exists(ManagementSecurityConfig me | me.hasSecurityDisabled() and me.getFile() = ap.getFile()) - or - springBootVersion.matches("2.%") and //version 2.x - exists(ManagementEndPointInclude mi | - mi.getFile() = ap.getFile() and - ( - mi.getValue() = "*" // all endpoints are enabled - or - mi.getValue() - .matches([ - "%dump%", "%trace%", "%logfile%", "%shutdown%", "%startup%", "%mappings%", "%env%", - "%beans%", "%sessions%" - ]) // confidential endpoints to check although all endpoints apart from '/health' and '/info' are considered sensitive by Spring - ) - ) - ) -} - -deprecated query predicate problems(Dependency d, string message) { - exists(SpringBootPom pom | - hasConfidentialEndPointExposed(pom, _) and - d = pom.getADependency() and - d.getArtifact().getValue() = "spring-boot-starter-actuator" - ) and - message = "Insecure configuration of Spring Boot Actuator exposes sensitive endpoints." -} diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/application.properties b/java/ql/src/experimental/Security/CWE/CWE-016/application.properties deleted file mode 100644 index 4f5defdd948..00000000000 --- a/java/ql/src/experimental/Security/CWE/CWE-016/application.properties +++ /dev/null @@ -1,22 +0,0 @@ -#management.endpoints.web.base-path=/admin - - -#### BAD: All management endpoints are accessible #### -# vulnerable configuration (spring boot 1.0 - 1.4): exposes actuators by default - -# vulnerable configuration (spring boot 1.5+): requires value false to expose sensitive actuators -management.security.enabled=false - -# vulnerable configuration (spring boot 2+): exposes health and info only by default, here overridden to expose everything -management.endpoints.web.exposure.include=* - - -#### GOOD: All management endpoints have access control #### -# safe configuration (spring boot 1.0 - 1.4): exposes actuators by default -management.security.enabled=true - -# safe configuration (spring boot 1.5+): requires value false to expose sensitive actuators -management.security.enabled=true - -# safe configuration (spring boot 2+): exposes health and info only by default, here overridden to expose one additional endpoint which we assume is intentional and safe. -management.endpoints.web.exposure.include=beans,info,health diff --git a/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll b/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll deleted file mode 100644 index 88598e61589..00000000000 --- a/java/ql/src/experimental/quantum/Analysis/ArtifactReuse.qll +++ /dev/null @@ -1,70 +0,0 @@ -import java -import semmle.code.java.dataflow.DataFlow -import experimental.quantum.Language - -/** - * Flow from any function that appears to return a value - * to an artifact node. - * NOTE: TODO: need to handle call by refernece for now. Need to re-evaluate (see notes below) - * Such functions may be 'wrappers' for some derived value. - */ -private module WrapperConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(Call c | - c = source.asExpr() - // not handling references yet, I think we want to flat say references are only ok - // if I know the source, otherwise, it has to be through an additional flow step, which - // we filter as a source, i.e., references are only allowed as sources only, - // no inferrece? Not sure if that would work - //or - // source.(DataFlow::PostUpdateNode).getPreUpdateNode().asExpr() = c.getAnArgument() - ) and - // Filter out sources that are known additional flow steps, as these are likely not the - // kind of wrapper source we are looking for. - not exists(AdditionalFlowInputStep s | s.getOutput() = source) - } - - // Flow through additional flow steps - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - node1.(AdditionalFlowInputStep).getOutput() = node2 - } - - predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(Crypto::ArtifactNode i).asElement() } -} - -module WrapperFlow = DataFlow::Global; - -/** - * Using a set approach to determine if reuse of an artifact exists. - * This predicate produces a set of 'wrappers' that flow to the artifact node. - * This set can be compared with the set to another artifact node to determine if they are the same. - */ -private DataFlow::Node getWrapperSet(Crypto::NonceArtifactNode a) { - WrapperFlow::flow(result, DataFlow::exprNode(a.asElement())) - or - result.asExpr() = a.getSourceElement() -} - -/** - * Two different artifact nodes are considered reuse if any of the following conditions are met: - * 1. The source for artifact `a` and artifact `b` are the same and the source is a literal. - * 2. The source for artifact `a` and artifact `b` are not the same and the source is a literal of the same value. - * 3. For all 'wrappers' that return the source of artifact `a`, and that wrapper also exists for artifact `b`. - * 4. For all 'wrappers' that return the source of artifact `b`, and that wrapper also exists for artifact `a`. - */ -predicate isArtifactReuse(Crypto::ArtifactNode a, Crypto::ArtifactNode b) { - a != b and - ( - a.getSourceElement() = b.getSourceElement() and a.getSourceElement() instanceof Literal - or - a.getSourceElement().(Literal).getValue() = b.getSourceElement().(Literal).getValue() - or - forex(DataFlow::Node e | e = getWrapperSet(a) | - exists(DataFlow::Node e2 | e2 = getWrapperSet(b) | e = e2) - ) - or - forex(DataFlow::Node e | e = getWrapperSet(b) | - exists(DataFlow::Node e2 | e2 = getWrapperSet(a) | e = e2) - ) - ) -} diff --git a/java/ql/src/experimental/quantum/Analysis/InsecureNonceSource.ql b/java/ql/src/experimental/quantum/Analysis/InsecureNonceSource.ql deleted file mode 100644 index f00621d4d2b..00000000000 --- a/java/ql/src/experimental/quantum/Analysis/InsecureNonceSource.ql +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @name Insecure nonce at a cipher operation - * @id java/quantum/insecure-nonce - * @description A nonce is generated from a source that is not secure. This can lead to - * vulnerabilities such as replay attacks or key recovery. - * @kind problem - * @problem.severity error - * @precision high - * @tags quantum - * experimental - */ - -import experimental.quantum.Language - -predicate isInsecureNonceSource(Crypto::NonceArtifactNode n, Crypto::NodeBase src) { - src = n.getSourceNode() and - not src.asElement() instanceof SecureRandomnessInstance -} - -from Crypto::KeyOperationNode op, Crypto::NodeBase src -where isInsecureNonceSource(op.getANonce(), src) -select op, "Operation uses insecure nonce source $@", src, src.toString() diff --git a/java/ql/src/experimental/quantum/Analysis/KnownWeakKDFIterationCount.ql b/java/ql/src/experimental/quantum/Analysis/KnownWeakKDFIterationCount.ql deleted file mode 100644 index 2dd5b0b006b..00000000000 --- a/java/ql/src/experimental/quantum/Analysis/KnownWeakKDFIterationCount.ql +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @name Weak known key derivation function iteration count - * @description Detects key derivation operations with a known weak iteration count. - * @id java/quantum/weak-kdf-iteration-count - * @kind problem - * @problem.severity error - * @precision high - * @tags quantum - * experimental - */ - -import java -import experimental.quantum.Language - -from Crypto::KeyDerivationOperationNode op, Literal l -where - op.getIterationCount().asElement() = l and - l.getValue().toInt() < 100000 -select op, "Key derivation operation configures iteration count below 100k: $@", l, - l.getValue().toString() diff --git a/java/ql/src/experimental/quantum/Analysis/ReusedNonce.ql b/java/ql/src/experimental/quantum/Analysis/ReusedNonce.ql deleted file mode 100644 index ed2872bb67e..00000000000 --- a/java/ql/src/experimental/quantum/Analysis/ReusedNonce.ql +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @name Reuse of cryptographic nonce - * @description Reuse of nonce in cryptographic operations can lead to vulnerabilities. - * @id java/quantum/reused-nonce - * @kind problem - * @problem.severity error - * @precision medium - * @tags quantum - * experimental - */ - -import java -import ArtifactReuse - -from Crypto::NonceArtifactNode nonce1, Crypto::NonceArtifactNode nonce2 -where isArtifactReuse(nonce1, nonce2) -select nonce1, "Reuse with nonce $@", nonce2, nonce2.toString() diff --git a/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll b/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll new file mode 100644 index 00000000000..776510b52ad --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll @@ -0,0 +1,102 @@ +import java +import semmle.code.java.dataflow.DataFlow +import experimental.quantum.Language + +/** + * Flow from any function that appears to return a value + * to an artifact node. + * NOTE: TODO: need to handle call by refernece for now. Need to re-evaluate (see notes below) + * Such functions may be 'wrappers' for some derived value. + */ +private module ArtifactGeneratingWrapperConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asExpr() instanceof Call and + // not handling references yet, I think we want to flat say references are only ok + // if I know the source, otherwise, it has to be through an additional flow step, which + // we filter as a source, i.e., references are only allowed as sources only, + // no inferrece? Not sure if that would work + // Filter out sources that are known additional flow steps, as these are likely not the + // kind of wrapper source we are looking for. + not exists(AdditionalFlowInputStep s | s.getOutput() = source) + } + + // Flow through additional flow steps + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + } + + predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(Crypto::ArtifactNode i).asElement() } +} + +module ArtifactGeneratingWrapperFlow = TaintTracking::Global; + +/** + * Using a set approach to determine if reuse of an artifact exists. + * This predicate produces a set of 'wrappers' that flow to the artifact node. + * This set can be compared with the set to another artifact node to determine if they are the same. + */ +private DataFlow::Node getGeneratingWrapperSet(Crypto::NonceArtifactNode a) { + ArtifactGeneratingWrapperFlow::flow(result, DataFlow::exprNode(a.asElement())) + or + result.asExpr() = a.getSourceElement() +} + +private predicate ancestorOfArtifact( + Crypto::ArtifactNode a, Callable enclosingCallable, ControlFlow::Node midOrTarget +) { + a.asElement().(Expr).getEnclosingCallable() = enclosingCallable and + ( + midOrTarget.asExpr() = a.asElement() or + midOrTarget.asExpr().(Call).getCallee().calls*(a.asElement().(Expr).getEnclosingCallable()) + ) +} + +/** + * Two different artifact nodes are considered reuse if any of the following conditions are met: + * 1. The source for artifact `a` and artifact `b` are the same and the source is a literal. + * 2. The source for artifact `a` and artifact `b` are not the same and the source is a literal of the same value. + * 3. For all 'wrappers' that return the source of artifact `a`, and each wrapper also exists for artifact `b`. + * 4. For all 'wrappers' that return the source of artifact `b`, and each wrapper also exists for artifact `a`. + * + * The above conditions determine that the use of the IV is from the same source, but the use may + * be on separate code paths that do not occur sequentially. We must therefore also find a common callable ancestor + * for both uses, and in that ancestor, there must be control flow from the call or use of one to the call or use of the other. + * Note that if no shared ancestor callable exists, it means the flow is more nuanced and ignore the shared ancestor + * use flow. + */ +predicate isArtifactReuse(Crypto::ArtifactNode a, Crypto::ArtifactNode b) { + a != b and + ( + a.getSourceElement() = b.getSourceElement() and a.getSourceElement() instanceof Literal + or + a.getSourceElement().(Literal).getValue() = b.getSourceElement().(Literal).getValue() + or + forex(DataFlow::Node e | e = getGeneratingWrapperSet(a) | + exists(DataFlow::Node e2 | e2 = getGeneratingWrapperSet(b) | e = e2) + ) + or + forex(DataFlow::Node e | e = getGeneratingWrapperSet(b) | + exists(DataFlow::Node e2 | e2 = getGeneratingWrapperSet(a) | e = e2) + ) + ) and + // If there is a common parent, there is control flow between the two uses in the parent + // TODO: this logic needs to be examined/revisited to ensure it is correct + ( + exists(Callable commonParent | + ancestorOfArtifact(a, commonParent, _) and + ancestorOfArtifact(b, commonParent, _) + ) + implies + exists(Callable commonParent, ControlFlow::Node aMid, ControlFlow::Node bMid | + ancestorOfArtifact(a, commonParent, aMid) and + ancestorOfArtifact(b, commonParent, bMid) and + a instanceof Crypto::NonceArtifactNode and + b instanceof Crypto::NonceArtifactNode and + ( + aMid.getASuccessor*() = bMid + or + bMid.getASuccessor*() = aMid + ) + ) + ) +} diff --git a/java/ql/src/experimental/quantum/Examples/BadMacOrder.qll b/java/ql/src/experimental/quantum/Examples/BadMacOrder.qll new file mode 100644 index 00000000000..6d944661621 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/BadMacOrder.qll @@ -0,0 +1,336 @@ +import java +import experimental.quantum.Language +import codeql.util.Option + +/** + * Holds when the src node is the output artifact of a decrypt operation + * that flows to the input artifact of a mac operation. + */ +predicate isDecryptToMacFlow(ArtifactFlow::PathNode src, ArtifactFlow::PathNode sink) { + // Simply flow from decrypt output to a mac input + ArtifactFlow::flowPath(src, sink) and + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TDecryptMode() and + cipherOp.getAnOutputArtifact().asElement() = src.getNode().asExpr() + ) and + exists(Crypto::MacOperationNode macOp | + macOp.getAnInputArtifact().asElement() = sink.getNode().asExpr() + ) +} + +/** + * Experimental interface for graph generation, supply the + * node to determine if a issue exists, and if so + * the graph can add a property on the node. + */ +predicate isDecryptToMacNode(Crypto::ArtifactNode node) { + exists(ArtifactFlow::PathNode src | + isDecryptToMacFlow(src, _) and + node.asElement() = src.getNode().asExpr() + ) +} + +predicate isDecryptThenMacFlow(DecryptThenMacFlow::PathNode src, DecryptThenMacFlow::PathNode sink) { + DecryptThenMacFlow::flowPath(src, sink) +} + +/** + * Holds when the src node is used as plaintext input to both + * an encryption operation and a mac operation, via the + * argument represented by InterimArg. + */ +predicate isPlaintextInEncryptionAndMac( + PlaintextUseAsMacAndCipherInputFlow::PathNode src, + PlaintextUseAsMacAndCipherInputFlow::PathNode sink, EncryptOrMacCallArg arg +) { + PlaintextUseAsMacAndCipherInputFlow::flowPath(src, sink) and + arg = sink.getState().asSome() and + // the above pathing adds flow steps that may not have consideration for the calling context + // TODO: this is something we want to look into to improving, but for now + // we can filter bad flows with one additional flow check, that the source goes to both + // src and sink through a generic flow + // note that the flow path above ensures src gets to the interim arg, so we just need to + // verify the source to sink. + // TODO: having to copy the generic data flow config into a use-use variant + // should we fix this at the language level to allow use use more intuitively? + // Seems to be a common issue. + GenericDataSourceFlowUseUseFlow::flow(src.getNode(), sink.getNode()) +} + +/** + * A copy of GenericDataSourceFlow but with use-use flows enabled by removing the barrier out + */ +module GenericDataSourceFlowUseUseConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + sink = any(Crypto::FlowAwareElement other).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module GenericDataSourceFlowUseUseFlow = TaintTracking::Global; + +module WrapperArgFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + // Start from a parameter and not a call to avoid flow going out of + // the call. We want to flow down a call, so start from a parameter + // and barrier flows through returns + exists(Method m | m.getParameter(_) = source.asParameter()) + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getAnInputArtifact().asElement() = sink.asExpr() + ) + or + exists(Crypto::MacOperationNode macOp | macOp.getAnInputArtifact().asElement() = sink.asExpr()) + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isBarrierOut(DataFlow::Node node) { + // stop all flow out of a call return + // TODO: this might be too strict and remove taint flow, need to reassess + node.asExpr() instanceof Call or + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module WrapperArgFlow = TaintTracking::Global; + +predicate encryptWrapperArg(DataFlow::Node n, DataFlow::Node sink) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TEncryptMode() and + cipherOp.getAnInputArtifact().asElement() = sink.asExpr() + ) and + ( + exists(Parameter p, DataFlow::Node src | + p = src.asParameter() and + WrapperArgFlow::flow(src, sink) and + n.asExpr() = p.getAnArgument() + ) + or + n = sink // the call the target operation is considered a wrapper arg to itself + ) +} + +predicate decryptWrapperArg(DataFlow::Node n, DataFlow::Node sink) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TDecryptMode() and + cipherOp.getAnInputArtifact().asElement() = sink.asExpr() + ) and + ( + exists(Parameter p, DataFlow::Node src | + p = src.asParameter() and + WrapperArgFlow::flow(src, sink) and + n.asExpr() = p.getAnArgument() + ) + or + n = sink // the call the target operation is considered a wrapper arg to itself + ) +} + +predicate macWrapperArg(DataFlow::Node n, DataFlow::Node sink) { + exists(Crypto::MacOperationNode macOp | macOp.getAnInputArtifact().asElement() = sink.asExpr()) and + ( + exists(Parameter p, DataFlow::Node src | + p = src.asParameter() and + WrapperArgFlow::flow(src, sink) and + n.asExpr() = p.getAnArgument() + ) + or + n = sink // the call the target operation is considered a wrapper arg to itself + ) +} + +module ArgToEncryptOrMacConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { exists(Call c | c.getAnArgument() = source.asExpr()) } + + predicate isSink(DataFlow::Node sink) { encryptOrMacSink(sink) } + + // Don't go in to a known out node, this will prevent the plaintext + // from tracing out of cipher operations for example, we just want to trace + // the plaintext to uses. + // NOTE: we are not using a barrier out on input nodes, because + // that would remove 'use-use' flows, which we need + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module ArgToEncryptOrMacFlow = TaintTracking::Global; + +/** + * Target sinks for this query are either encryption operations or mac operation message inputs + */ +predicate encryptOrMacSink(DataFlow::Node n) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TEncryptMode() and + cipherOp.getAnInputArtifact().asElement() = n.asExpr() + ) + or + exists(Crypto::MacOperationNode macOp | macOp.getAnInputArtifact().asElement() = n.asExpr()) +} + +/** + * Target sinks for decryption operations + */ +predicate decryptSink(DataFlow::Node n) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TDecryptMode() and + cipherOp.getAnInputArtifact().asElement() = n.asExpr() + ) +} + +class EncryptOrMacCallArg extends DataFlow::Node { + boolean isEncryption; + + EncryptOrMacCallArg() { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TEncryptMode() and + cipherOp.getAnInputArtifact().asElement() = this.asExpr() + ) and + isEncryption = true + or + exists(Crypto::MacOperationNode macOp | macOp.getAnInputArtifact().asElement() = this.asExpr()) and + isEncryption = false + } + + predicate isEncryption() { isEncryption = true } + + predicate isMac() { isEncryption = false } +} + +module PlaintextUseAsMacAndCipherInputConfig implements DataFlow::StateConfigSig { + class FlowState = Option::Option; + + // TODO: can we approximate a message source better? + predicate isSource(DataFlow::Node source, FlowState state) { + // TODO: can we find the 'closest' parameter to the sinks? + // i.e., use a generic source if we have it, but also isolate the + // lowest level in the flow to the closest parameter node in the call graph? + exists(Crypto::GenericSourceNode other | + other.asElement() = CryptoInput::dfn_to_element(source) + ) and + state.isNone() + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + sink.(EncryptOrMacCallArg).isMac() and state.asSome().isEncryption() + or + sink.(EncryptOrMacCallArg).isEncryption() and state.asSome().isMac() + } + + predicate isBarrierOut(DataFlow::Node node, FlowState state) { + // Stop at the first sink for now + isSink(node, state) + } + + // Don't go in to a known out node, this will prevent the plaintext + // from tracing out of cipher operations for example, we just want to trace + // the plaintext to uses. + // NOTE: we are not using a barrier out on input nodes, because + // that would remove 'use-use' flows, which we need + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 + ) { + // TODO: should we consider isSome cases? + state1.isNone() and + ( + encryptWrapperArg(node2, node1) + or + macWrapperArg(node2, node1) + ) and + state2.asSome() = node1 + } +} + +module PlaintextUseAsMacAndCipherInputFlow = + TaintTracking::GlobalWithState; + +module DecryptThenMacConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + exists(Crypto::CipherOperationNode cipherOp | + cipherOp.getKeyOperationSubtype() = Crypto::TDecryptMode() and + cipherOp.getAnInputArtifact().asElement() = source.asExpr() + ) + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::MacOperationNode macOp | macOp.getAnInputArtifact().asElement() = sink.asExpr()) + } + + // Don't go in to a known out node, prevents + // from tracing out of an operation + // NOTE: we are not using a barrier out on input nodes, because + // that would remove 'use-use' flows, which we need + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + or + decryptWrapperArg(node2, node1) + } +} + +module DecryptThenMacFlow = TaintTracking::Global; diff --git a/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptThenMac.ql b/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptThenMac.ql new file mode 100644 index 00000000000..21b0be29ed5 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptThenMac.ql @@ -0,0 +1,19 @@ +/** + * @name Bad MAC order: decrypt then mac + * @description Decryption on cipher text, then MAC on cipher text, is incorrect order + * @id java/quantum/examples/bad-mac-order-decrypt-then-mac + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import BadMacOrder +import DecryptThenMacFlow::PathGraph + +from DecryptThenMacFlow::PathNode src, DecryptThenMacFlow::PathNode sink +where isDecryptThenMacFlow(src, sink) +select sink, src, sink, + "Incorrect decryption and MAC order: " + + "Decryption of cipher text occurs before validation of MAC on cipher text." diff --git a/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptToMac.ql b/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptToMac.ql new file mode 100644 index 00000000000..fb9d8795b4d --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/BadMacOrderDecryptToMac.ql @@ -0,0 +1,18 @@ +/** + * @name Bad MAC order: decrypt to mac + * @description MAC should be on a cipher, not a raw message + * @id java/quantum/examples/bad-mac-order-decrypt-to-mac + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import ArtifactFlow::PathGraph +import BadMacOrder + +from ArtifactFlow::PathNode src, ArtifactFlow::PathNode sink +where isDecryptToMacFlow(src, sink) +select sink, src, sink, + "Incorrect decryption and MAC order: decryption output plaintext flows to MAC message input." diff --git a/java/ql/src/experimental/quantum/Examples/BadMacOrderMacOnEncryptPlaintext.ql b/java/ql/src/experimental/quantum/Examples/BadMacOrderMacOnEncryptPlaintext.ql new file mode 100644 index 00000000000..7644167c589 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/BadMacOrderMacOnEncryptPlaintext.ql @@ -0,0 +1,21 @@ +/** + * @name Bad MAC order: Mac and Encryption share the same plaintext + * @description MAC should be on a cipher, not a raw message + * @id java/quantum/examples/bad-mac-order-encrypt-plaintext-also-in-mac + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import BadMacOrder +import PlaintextUseAsMacAndCipherInputFlow::PathGraph + +from + PlaintextUseAsMacAndCipherInputFlow::PathNode src, + PlaintextUseAsMacAndCipherInputFlow::PathNode sink, EncryptOrMacCallArg arg +where isPlaintextInEncryptionAndMac(src, sink, arg) +select sink, src, sink, + "Incorrect MAC usage: Encryption plaintext also used for MAC. Flow shows plaintext to final use through intermediate mac or encryption operation here $@", + arg.asExpr(), arg.asExpr().toString() diff --git a/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql b/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql index 7291ea554a5..b449f118bc3 100644 --- a/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql +++ b/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql @@ -4,7 +4,6 @@ * @kind problem * @problem.severity warning * @security-severity 7.5 - * @precision high * @id java/weak-cryptographic-algorithm-new-model * @tags security * external/cwe/cwe-327 @@ -12,7 +11,7 @@ */ //THIS QUERY IS A REPLICA OF: https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql -//but uses the **NEW MODELLING** +//but uses the **NEW MODELING** import experimental.quantum.Language /** diff --git a/java/ql/src/experimental/quantum/Examples/InsecureIVorNonceSource.ql b/java/ql/src/experimental/quantum/Examples/InsecureIVorNonceSource.ql new file mode 100644 index 00000000000..1c35d50a2d9 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/InsecureIVorNonceSource.ql @@ -0,0 +1,88 @@ +/** + * @name Insecure nonce/iv (static value or weak random source) + * @id java/quantum/examples/insecure-iv-or-nonce + * @description A nonce/iv is generated from a source that is not secure. This can lead to + * vulnerabilities such as replay attacks or key recovery. Insecure generation + * is any static nonce, or any known insecure source for a nonce/iv if + * the value is used for an encryption operation (decryption operations are ignored + * as the nonce/iv would be provided alongside the ciphertext). + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import experimental.quantum.Language + +module NonceSrcFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() or + source = any(Crypto::ArtifactInstance artifact).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::NonceArtifactNode nonce | sink.asExpr() = nonce.asElement()) + } + + predicate isBarrierOut(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module NonceSrcFlow = TaintTracking::Global; + +import NonceSrcFlow::PathGraph + +from + Crypto::NonceArtifactNode nonce, Crypto::NodeBase src, Crypto::NodeBase op, string msg, + NonceSrcFlow::PathNode srcNode, NonceSrcFlow::PathNode sinkNode +where + nonce.getSourceNode() = src and + // NOTE: null nonces should be handled seaparately, often used for default values prior to initialization + // failure to initialize should, in practice, lead to a NullPointerException, which is a separate concern + // however there may be APIs where NULL uses a default nonce or action. + not src.asElement() instanceof NullLiteral and + ( + // Case 1: Any constant nonce/iv is bad, regardless of how it is used + src.asElement() instanceof Crypto::GenericConstantSourceInstance and + op = nonce and // binding op but not using it + msg = "Nonce or IV uses constant source $@" + or + // Case 2: The nonce has a non-random source and there is no known operation for the nonce + // assume it is used for encryption + not src.asElement() instanceof SecureRandomnessInstance and + not src.asElement() instanceof Crypto::GenericConstantSourceInstance and + not exists(Crypto::CipherOperationNode o | o.getANonce() = nonce) and + op = nonce and // binding op, but not using it + msg = + "Nonce or IV uses insecure source $@ with no observed nonce usage (assuming could be for encryption)." + or + // Case 3: The nonce has a non-random source and is used in an encryption operation + not src.asElement() instanceof SecureRandomnessInstance and + not src.asElement() instanceof Crypto::GenericConstantSourceInstance and + op.(Crypto::CipherOperationNode).getANonce() = nonce and + ( + op.(Crypto::CipherOperationNode).getKeyOperationSubtype() instanceof Crypto::TEncryptMode + or + op.(Crypto::CipherOperationNode).getKeyOperationSubtype() instanceof Crypto::TWrapMode + ) and + msg = "Nonce or IV uses insecure source $@ at encryption operation $@" + ) and + srcNode.getNode().asExpr() = src.asElement() and + sinkNode.getNode().asExpr() = nonce.asElement() and + NonceSrcFlow::flowPath(srcNode, sinkNode) +select sinkNode, srcNode, sinkNode, msg, src, src.toString(), op, op.toString() diff --git a/java/ql/src/experimental/quantum/Examples/NonAESGCMCipher.ql b/java/ql/src/experimental/quantum/Examples/NonAESGCMCipher.ql new file mode 100644 index 00000000000..affe7917cf2 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/NonAESGCMCipher.ql @@ -0,0 +1,24 @@ +/** + * @name Cipher not AES-GCM mode + * @id java/quantum/examples/non-aes-gcm + * @description An AES cipher is in use without GCM + * @kind problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import experimental.quantum.Language + +class NonAESGCMAlgorithmNode extends Crypto::KeyOperationAlgorithmNode { + NonAESGCMAlgorithmNode() { + this.getAlgorithmType() = Crypto::KeyOpAlg::TSymmetricCipher(Crypto::KeyOpAlg::AES()) and + this.getModeOfOperation().getModeType() != Crypto::KeyOpAlg::GCM() + } +} + +from Crypto::KeyOperationNode op, Crypto::KeyOperationOutputNode codeNode +where + op.getAKnownAlgorithm() instanceof NonAESGCMAlgorithmNode and + codeNode = op.getAnOutputArtifact() +select op, "Non-AES-GCM instance." diff --git a/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql b/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql new file mode 100644 index 00000000000..54eddd8fc06 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql @@ -0,0 +1,88 @@ +/** + * @name Reuse of cryptographic nonce + * @description Reuse of nonce in cryptographic operations can lead to vulnerabilities. + * @id java/quantum/examples/reused-nonce + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import ArtifactReuse + +module NonceSrcFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() or + source = any(Crypto::ArtifactInstance artifact).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::NonceArtifactNode nonce | sink.asExpr() = nonce.asElement()) + } + + predicate isBarrierOut(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module NonceSrcFlow = TaintTracking::Global; + +import NonceSrcFlow::PathGraph + +from + Crypto::NonceArtifactNode nonce1, Crypto::NonceArtifactNode nonce2, Crypto::NodeBase src, + NonceSrcFlow::PathNode srcNode, NonceSrcFlow::PathNode sinkNode +where + isArtifactReuse(nonce1, nonce2) and + // NOTE: in general we may not know a source, but see possible reuse, + // we are not detecting these cases here (only where the source is the same). + src = nonce1.getSourceNode() and + src = nonce2.getSourceNode() and + // Null literals are typically used for initialization, and if two 'nulls' + // are reused, it is likely an uninitialization path that would result in a NullPointerException. + not src.asElement() instanceof NullLiteral and + // if the nonce is used in an encryption and decryption, ignore that reuse + not exists(Crypto::CipherOperationNode op1, Crypto::CipherOperationNode op2 | + op1 != op2 and + op1.getANonce() = nonce1 and + op2.getANonce() = nonce2 and + ( + ( + op1.getKeyOperationSubtype() instanceof Crypto::TEncryptMode or + op1.getKeyOperationSubtype() instanceof Crypto::TWrapMode + ) and + ( + op2.getKeyOperationSubtype() instanceof Crypto::TDecryptMode or + op2.getKeyOperationSubtype() instanceof Crypto::TUnwrapMode + ) + or + ( + op2.getKeyOperationSubtype() instanceof Crypto::TEncryptMode or + op2.getKeyOperationSubtype() instanceof Crypto::TWrapMode + ) and + ( + op1.getKeyOperationSubtype() instanceof Crypto::TDecryptMode or + op1.getKeyOperationSubtype() instanceof Crypto::TUnwrapMode + ) + ) + ) and + srcNode.getNode().asExpr() = src.asElement() and + sinkNode.getNode().asExpr() = nonce1.asElement() and + NonceSrcFlow::flowPath(srcNode, sinkNode) +select sinkNode, srcNode, sinkNode, "Nonce source is reused, see alternate sink $@", nonce2, + nonce2.toString() diff --git a/java/ql/src/experimental/quantum/Examples/UnknownHash.ql b/java/ql/src/experimental/quantum/Examples/UnknownHash.ql new file mode 100644 index 00000000000..32d8fa3b753 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/UnknownHash.ql @@ -0,0 +1,19 @@ +/** + * @name Unknown hashes + * @description Finds uses of cryptographic hashing algorithms of unknown type. + * @id java/quantum/examples/unknown-hash + * @kind problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import experimental.quantum.Language + +from Crypto::HashAlgorithmNode alg +where + not exists(alg.getHashType()) + or + alg.getHashType() = Crypto::OtherHashType() +select alg, "Use of unknown hash algorithm." diff --git a/java/ql/src/experimental/quantum/Examples/UnknownIVorNonceSource.ql b/java/ql/src/experimental/quantum/Examples/UnknownIVorNonceSource.ql new file mode 100644 index 00000000000..3537fca594a --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/UnknownIVorNonceSource.ql @@ -0,0 +1,35 @@ +/** + * @name Unknown nonce/iv source + * @id java/quantum/examples/unknown-iv-or-nonce-source + * @description A nonce/iv is generated from a source that is not secure. Failure to initialize + * an IV or nonce properly can lead to vulnerabilities such as replay attacks or key recovery. + * IV may be unknown at a decryption operation (IV would be provided alongside the ciphertext). + * These cases are ignored. + * @kind problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import experimental.quantum.Language + +from Crypto::NonceArtifactNode nonce, Crypto::NodeBase op, string msg +where + not exists(nonce.getSourceNode()) and + ( + // Nonce not associated with any known cipher operation, assume unknown as insecure + not exists(Crypto::CipherOperationNode o | o.getANonce() = nonce) and + op = nonce and + msg = + "Unknown IV/Nonce initialization source with no observed nonce usage (assuming could be for encryption)." + or + // Nonce associated cipher operation where the mode is not explicitly encryption + op.(Crypto::CipherOperationNode).getANonce() = nonce and + ( + op.(Crypto::CipherOperationNode).getKeyOperationSubtype() instanceof Crypto::TEncryptMode + or + op.(Crypto::CipherOperationNode).getKeyOperationSubtype() instanceof Crypto::TWrapMode + ) and + msg = "Unknown IV/Nonce initialization source at encryption operation $@" + ) +select nonce, msg, op, op.toString() diff --git a/java/ql/src/experimental/quantum/Analysis/UnknownKDFIterationCount.ql b/java/ql/src/experimental/quantum/Examples/UnknownKDFIterationCount.ql similarity index 87% rename from java/ql/src/experimental/quantum/Analysis/UnknownKDFIterationCount.ql rename to java/ql/src/experimental/quantum/Examples/UnknownKDFIterationCount.ql index 21bca11cc1a..3f8f1306a1d 100644 --- a/java/ql/src/experimental/quantum/Analysis/UnknownKDFIterationCount.ql +++ b/java/ql/src/experimental/quantum/Examples/UnknownKDFIterationCount.ql @@ -1,10 +1,9 @@ /** * @name Unknown key derivation function iteration count * @description Detects key derivation operations with an unknown iteration count. - * @id java/quantum/unknown-kdf-iteration-count + * @id java/quantum/examples/unknown-kdf-iteration-count * @kind problem - * @precision medium - * @severity warning + * @problem.severity error * @tags quantum * experimental */ diff --git a/java/ql/src/experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql b/java/ql/src/experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql new file mode 100644 index 00000000000..ee81e7bd6d0 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql @@ -0,0 +1,69 @@ +/** + * @name Weak Asymmetric Key Size + * @id java/quantum/examples/weak-asymmetric-key-gen-size + * @description An asymmetric key of known size is less than 2048 bits for any non-elliptic curve key operation. + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import experimental.quantum.Language + +module KeySizeFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() or + source = any(Crypto::ArtifactInstance artifact).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::KeyCreationOperationNode kgen | + sink = kgen.getKeySizeConsumer().getConsumer().getInputNode() + ) + } + + predicate isBarrierOut(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module KeySizeFlow = TaintTracking::Global; + +import KeySizeFlow::PathGraph + +from + Crypto::KeyCreationOperationNode keygen, int keySize, Crypto::AlgorithmNode alg, + KeySizeFlow::PathNode srcNode, KeySizeFlow::PathNode sinkNode +where + // ASSUMPTION/NOTE: if the key size is set on a key creation, but the key creation itself is not observed + // (i.e., the size is initialized but the operation not observed) currently we will not + // detect the size. A key creation operation currently must be observed. + keygen.getAKeySizeSource().asElement().(Literal).getValue().toInt() = keySize and + // NOTE: if algorithm is not known (doesn't bind) we need a separate query + // Also note the algorithm may also be re-specified at a use of the key + alg = keygen.getAKnownAlgorithm() and + not alg instanceof Crypto::EllipticCurveNode and // Elliptic curve sizes are handled separately and are more tied directly to the algorithm + not alg.(Crypto::KeyAgreementAlgorithmNode).getKeyAgreementType() = Crypto::ECDH() and // ECDH key sizes should be handled with elliptic curves + alg instanceof Crypto::AsymmetricAlgorithmNode and + keySize < 2048 and + srcNode.getNode().asExpr() = keygen.getAKeySizeSource().asElement() and + sinkNode.getNode() = keygen.getKeySizeConsumer().getConsumer().getInputNode() and + KeySizeFlow::flowPath(srcNode, sinkNode) +select sinkNode, srcNode, sinkNode, + "Use of weak asymmetric key size (" + keySize.toString() + " bits) for algorithm $@", alg, + alg.getAlgorithmName() diff --git a/java/ql/src/experimental/quantum/Examples/WeakBlockModes.ql b/java/ql/src/experimental/quantum/Examples/WeakBlockModes.ql new file mode 100644 index 00000000000..c5fb224ea1f --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakBlockModes.ql @@ -0,0 +1,32 @@ +/** + * @name Weak AES Block mode + * @id java/quantum/examples/weak-block-modes + * @description An AES cipher is in use with an insecure block mode + * @kind problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import experimental.quantum.Language + +class WeakAESBlockModeAlgNode extends Crypto::KeyOperationAlgorithmNode { + Crypto::ModeOfOperationAlgorithmNode mode; + + WeakAESBlockModeAlgNode() { + this.getAlgorithmType() = Crypto::KeyOpAlg::TSymmetricCipher(Crypto::KeyOpAlg::AES()) and + mode = super.getModeOfOperation() and + ( + mode.getModeType() = Crypto::KeyOpAlg::ECB() or + mode.getModeType() = Crypto::KeyOpAlg::CFB() or + mode.getModeType() = Crypto::KeyOpAlg::OFB() or + mode.getModeType() = Crypto::KeyOpAlg::CTR() + ) + } + + Crypto::ModeOfOperationAlgorithmNode getMode() { result = mode } +} + +from WeakAESBlockModeAlgNode alg +select alg, "Weak AES block mode instance $@.", alg.getMode(), alg.getMode().toString() diff --git a/java/ql/src/experimental/quantum/Examples/WeakHash.ql b/java/ql/src/experimental/quantum/Examples/WeakHash.ql new file mode 100644 index 00000000000..cb61c2f860a --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakHash.ql @@ -0,0 +1,16 @@ +/** + * @name Weak hashes + * @description Finds uses of cryptographic hashing algorithms that are unapproved or otherwise weak. + * @id java/quantum/examples/weak-hash + * @kind problem + * @problem.severity error + * @tags external/cwe/cwe-327 + * quantum + * experimental + */ + +import WeakHash + +from Crypto::HashAlgorithmNode alg, Crypto::HashType htype, string msg +where isUnapprovedHash(alg, htype, msg) +select alg, msg diff --git a/java/ql/src/experimental/quantum/Examples/WeakHash.qll b/java/ql/src/experimental/quantum/Examples/WeakHash.qll new file mode 100644 index 00000000000..add6cc870ae --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakHash.qll @@ -0,0 +1,23 @@ +import experimental.quantum.Language + +predicate isUnapprovedHash(Crypto::HashAlgorithmNode alg, Crypto::HashType htype, string msg) { + htype = alg.getHashType() and + ( + (htype != Crypto::SHA2() and htype != Crypto::SHA3()) and + msg = "Use of unapproved hash algorithm or API: " + htype.toString() + "." + or + (htype = Crypto::SHA2() or htype = Crypto::SHA3()) and + not exists(alg.getDigestLength()) and + msg = + "Use of approved hash algorithm or API type " + htype.toString() + " but unknown digest size." + or + exists(int digestLength | + digestLength = alg.getDigestLength() and + (htype = Crypto::SHA2() or htype = Crypto::SHA3()) and + digestLength < 256 and + msg = + "Use of approved hash algorithm or API type " + htype.toString() + " but weak digest size (" + + digestLength + ")." + ) + ) +} diff --git a/java/ql/src/experimental/quantum/Examples/WeakKDFIterationCount.ql b/java/ql/src/experimental/quantum/Examples/WeakKDFIterationCount.ql new file mode 100644 index 00000000000..98f97335eae --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakKDFIterationCount.ql @@ -0,0 +1,59 @@ +/** + * @name Weak known key derivation function iteration count + * @description Detects key derivation operations with a known weak iteration count. + * @id java/quantum/examples/weak-kdf-iteration-count + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import experimental.quantum.Language + +module IterationCountConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() or + source = any(Crypto::ArtifactInstance artifact).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::KeyDerivationOperationInstance kdev | + sink = kdev.getIterationCountConsumer().getConsumer().getInputNode() + ) + } + + predicate isBarrierOut(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module IterationCountFlow = TaintTracking::Global; + +import IterationCountFlow::PathGraph + +from + Crypto::KeyDerivationOperationNode op, Literal l, IterationCountFlow::PathNode srcNode, + IterationCountFlow::PathNode sinkNode +where + op.getIterationCount().asElement() = l and + l.getValue().toInt() < 100000 and + srcNode.getNode().asExpr() = l and + sinkNode.getNode() = op.getIterationCountConsumer().getConsumer().getInputNode() and + IterationCountFlow::flowPath(srcNode, sinkNode) +select sinkNode, srcNode, sinkNode, + "Key derivation operation configures iteration count below 100k: $@", l, l.getValue().toString() diff --git a/java/ql/src/experimental/quantum/Examples/WeakKDFKeySize.ql b/java/ql/src/experimental/quantum/Examples/WeakKDFKeySize.ql new file mode 100644 index 00000000000..3d0be43392f --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakKDFKeySize.ql @@ -0,0 +1,59 @@ +/** + * @name Weak known key derivation function output length + * @description Detects key derivation operations with a known weak output length + * @id java/quantum/examples/weak-kdf-key-size + * @kind path-problem + * @problem.severity error + * @tags quantum + * experimental + */ + +import java +import experimental.quantum.Language + +module KeySizeConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source = any(Crypto::GenericSourceInstance i).getOutputNode() or + source = any(Crypto::ArtifactInstance artifact).getOutputNode() + } + + predicate isSink(DataFlow::Node sink) { + exists(Crypto::KeyDerivationOperationInstance kdev | + sink = kdev.getKeySizeConsumer().getConsumer().getInputNode() + ) + } + + predicate isBarrierOut(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getInputNode() + } + + predicate isBarrierIn(DataFlow::Node node) { + node = any(Crypto::FlowAwareElement element).getOutputNode() + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1.(AdditionalFlowInputStep).getOutput() = node2 + or + exists(MethodCall m | + m.getMethod().hasQualifiedName("java.lang", "String", "getBytes") and + node1.asExpr() = m.getQualifier() and + node2.asExpr() = m + ) + } +} + +module KeySizeFlow = TaintTracking::Global; + +import KeySizeFlow::PathGraph + +from + Crypto::KeyDerivationOperationNode op, Literal l, KeySizeFlow::PathNode srcNode, + KeySizeFlow::PathNode sinkNode +where + op.getOutputKeySize().asElement() = l and + l.getValue().toInt() < 256 and + srcNode.getNode().asExpr() = l and + sinkNode.getNode() = op.getKeySizeConsumer().getConsumer().getInputNode() and + KeySizeFlow::flowPath(srcNode, sinkNode) +select sinkNode, srcNode, sinkNode, + "Key derivation operation configures output key length below 256: $@", l, l.getValue().toString() diff --git a/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.ql b/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.ql new file mode 100644 index 00000000000..fe08599b660 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.ql @@ -0,0 +1,16 @@ +/** + * @name Weak symmetric ciphers + * @description Finds uses of cryptographic symmetric cipher algorithms that are unapproved or otherwise weak. + * @id java/quantum/examples/weak-ciphers + * @kind problem + * @problem.severity error + * @tags external/cwe/cwe-327 + * quantum + * experimental + */ + +import WeakSymmetricCipher + +from Crypto::KeyOperationAlgorithmNode alg, string msg +where isUnapprovedSymmetricCipher(alg, msg) +select alg, msg diff --git a/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.qll b/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.qll new file mode 100644 index 00000000000..29493b24071 --- /dev/null +++ b/java/ql/src/experimental/quantum/Examples/WeakSymmetricCipher.qll @@ -0,0 +1,25 @@ +import experimental.quantum.Language +import Crypto::KeyOpAlg as KeyOpAlg + +/** + * Holds when the given symmetric cipher algorithm is unapproved or weak. + */ +predicate isUnapprovedSymmetricCipher(Crypto::KeyOperationAlgorithmNode alg, string msg) { + exists(KeyOpAlg::AlgorithmType algType | + algType = alg.getAlgorithmType() and + msg = "Use of unapproved symmetric cipher algorithm or API: " + algType.toString() + "." and + algType != KeyOpAlg::TSymmetricCipher(KeyOpAlg::AES()) and + algType instanceof KeyOpAlg::TSymmetricCipher + ) + // NOTE: an org could decide to disallow very specific algorithms as well, shown below + // ( + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DES()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::TRIPLE_DES()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DOUBLE_DES()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::RC2()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::RC4()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::IDEA()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::BLOWFISH()) or + // algType = KeyOpAlg::TSymmetricCipher(KeyOpAlg::SKIPJACK()) + // ) +} diff --git a/java/ql/src/meta/ssa/AmbiguousToString.ql b/java/ql/src/meta/ssa/AmbiguousToString.ql deleted file mode 100644 index 817685cf609..00000000000 --- a/java/ql/src/meta/ssa/AmbiguousToString.ql +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @name An SSA variable without a unique 'toString()' - * @description An ambiguous 'toString()' indicates overlap in the defining - * sub-classes of 'SsaVariable'. - * @kind problem - * @problem.severity error - * @id java/consistency/non-unique-ssa-tostring - * @tags consistency - */ - -import java -import semmle.code.java.dataflow.SSA - -predicate noToString(SsaVariable v) { not exists(v.toString()) } - -predicate multipleToString(SsaVariable v) { 1 < count(v.toString()) } - -from SsaVariable ssa, ControlFlowNode n, Variable v, string problem -where - ( - noToString(ssa) and problem = "SSA variable without 'toString()' for " - or - multipleToString(ssa) and problem = "SSA variable with multiple 'toString()' results for " - ) and - n = ssa.getCfgNode() and - v = ssa.getSourceVariable().getVariable() -select n, problem + v diff --git a/java/ql/src/meta/ssa/TooFewPhiInputs.ql b/java/ql/src/meta/ssa/TooFewPhiInputs.ql deleted file mode 100644 index 3bf75a91856..00000000000 --- a/java/ql/src/meta/ssa/TooFewPhiInputs.ql +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @name A phi node without two or more inputs - * @description A phi node should have at least two inputs. - * @kind problem - * @problem.severity error - * @id java/consistency/too-few-phi-inputs - * @tags consistency - */ - -import java -import semmle.code.java.dataflow.SSA - -from SsaPhiNode phi, int inputs -where - inputs = count(SsaVariable v | v = phi.getAPhiInput()) and - inputs < 2 -select phi, "Phi node for " + phi.getSourceVariable() + " has only " + inputs + " inputs." diff --git a/java/ql/src/meta/ssa/UncertainDefWithoutPrior.ql b/java/ql/src/meta/ssa/UncertainDefWithoutPrior.ql deleted file mode 100644 index 1979c218ac2..00000000000 --- a/java/ql/src/meta/ssa/UncertainDefWithoutPrior.ql +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @name An uncertain SSA update without a prior definition - * @description An uncertain SSA update may retain its previous value - * and should therefore have a prior definition. - * @kind problem - * @problem.severity error - * @id java/consistency/uncertain-ssa-update-without-prior-def - * @tags consistency - */ - -import java -import semmle.code.java.dataflow.SSA - -predicate live(SsaVariable v) { - exists(v.getAUse()) - or - exists(SsaPhiNode phi | live(phi) and phi.getAPhiInput() = v) - or - exists(SsaUncertainImplicitUpdate upd | live(upd) and upd.getPriorDef() = v) -} - -from SsaUncertainImplicitUpdate upd -where - live(upd) and - not exists(upd.getPriorDef()) -select upd, "No prior definition of " + upd diff --git a/java/ql/src/meta/ssa/UseWithoutUniqueSsaVariable.ql b/java/ql/src/meta/ssa/UseWithoutUniqueSsaVariable.ql deleted file mode 100644 index 76f6ee37fb1..00000000000 --- a/java/ql/src/meta/ssa/UseWithoutUniqueSsaVariable.ql +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @name A variable use without a unique SSA variable - * @description Every variable use that is sufficiently trackable - * should have a unique associated SSA variable. - * @kind problem - * @problem.severity error - * @id java/consistency/use-without-unique-ssa-variable - * @tags consistency - */ - -import java -import semmle.code.java.dataflow.SSA - -class SsaConvertibleReadAccess extends VarRead { - SsaConvertibleReadAccess() { - this.getEnclosingCallable().getBody().getBasicBlock().getASuccessor*() = this.getBasicBlock() and - ( - not exists(this.getQualifier()) - or - this.getVariable() instanceof LocalScopeVariable - or - this.getVariable().(Field).isStatic() - or - exists(Expr q | q = this.getQualifier() | - q instanceof ThisAccess or - q instanceof SuperAccess or - q instanceof SsaConvertibleReadAccess - ) - ) - } -} - -predicate accessWithoutSourceVariable(SsaConvertibleReadAccess va) { - not exists(SsaSourceVariable v | v.getAnAccess() = va) -} - -predicate readAccessWithoutSsaVariable(SsaConvertibleReadAccess va) { - not exists(SsaVariable v | v.getAUse() = va) -} - -predicate readAccessWithAmbiguousSsaVariable(SsaConvertibleReadAccess va) { - 1 < strictcount(SsaVariable v | v.getAUse() = va) -} - -from SsaConvertibleReadAccess va, string problem -where - accessWithoutSourceVariable(va) and problem = "No source variable" - or - readAccessWithoutSsaVariable(va) and problem = "No SSA variable" - or - readAccessWithAmbiguousSsaVariable(va) and problem = "Multiple SSA variables" -select va, problem diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index aa899419ad9..98f0bdd5710 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.6.3-dev +version: 1.9.1-dev groups: - java - queries diff --git a/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll b/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll index af0f501621a..5ab1584f866 100644 --- a/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll +++ b/java/ql/src/utils/flowtestcasegenerator/FlowTestCase.qll @@ -253,7 +253,7 @@ class TestCase extends TTestCase { /** * Returns a call to `source()` wrapped in `newWith` methods as needed according to `input`. - * For example, if the input specification is `ArrayElement of MapValue of Argument[0]`, this + * For example, if the `stack` is `Argument[0].MapValue.ArrayElement`, this * will return `newWithMapValue(newWithArrayElement(source()))`. */ string getInput(SummaryComponentStack stack) { @@ -269,7 +269,7 @@ class TestCase extends TTestCase { /** * Returns `out` wrapped in `get` methods as needed according to `output`. - * For example, if the output specification is `ArrayElement of MapValue of Argument[0]`, this + * For example, if the `componentStack` is `Argument[0].MapValue.ArrayElement`, this * will return `getArrayElement(getMapValue(out))`. */ string getOutput(SummaryComponentStack componentStack) { diff --git a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected index b901340b964..a56980d10ac 100644 --- a/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin1/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -16,30 +16,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection> | add | Entry | -| AbstractCollection> | addAll | Collection> | -| AbstractCollection> | contains | Object | -| AbstractCollection> | containsAll | Collection | -| AbstractCollection> | remove | Object | -| AbstractCollection> | removeAll | Collection | -| AbstractCollection> | retainAll | Collection | -| AbstractCollection> | toArray | T[] | -| AbstractCollection | add | K | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | -| AbstractCollection | add | Runnable | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractCollection | add | String | | AbstractCollection | addAll | Collection | | AbstractCollection | contains | Object | @@ -56,14 +32,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection | add | V | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -103,14 +71,14 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap> | containsKey | Object | -| AbstractMap> | containsValue | Object | -| AbstractMap> | equals | Object | -| AbstractMap> | get | Object | -| AbstractMap> | put | Entry | -| AbstractMap> | put | Identity | -| AbstractMap> | putAll | Map> | -| AbstractMap> | remove | Object | +| AbstractMap | containsKey | Object | +| AbstractMap | containsValue | Object | +| AbstractMap | equals | Object | +| AbstractMap | get | Object | +| AbstractMap | put | Identity | +| AbstractMap | put | Object | +| AbstractMap | putAll | Map | +| AbstractMap | remove | Object | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -179,17 +147,6 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | -| Collection | add | Runnable | -| Collection | addAll | Collection | -| Collection | contains | Object | -| Collection | containsAll | Collection | -| Collection | equals | Object | -| Collection | remove | Object | -| Collection | removeAll | Collection | -| Collection | removeIf | Predicate | -| Collection | retainAll | Collection | -| Collection | toArray | IntFunction | -| Collection | toArray | T[] | | Collection | add | String | | Collection | addAll | Collection | | Collection | contains | Object | @@ -332,37 +289,36 @@ methodWithDuplicate | Map | replace | K | | Map | replace | V | | Map | replaceAll | BiFunction | -| Map> | compute | BiFunction,? extends Entry> | -| Map> | compute | Identity | -| Map> | computeIfAbsent | Function> | -| Map> | computeIfAbsent | Identity | -| Map> | computeIfPresent | BiFunction,? extends Entry> | -| Map> | computeIfPresent | Identity | -| Map> | containsKey | Object | -| Map> | containsValue | Object | -| Map> | copyOf | Map | -| Map> | entry | K | -| Map> | entry | V | -| Map> | equals | Object | -| Map> | forEach | BiConsumer> | -| Map> | get | Object | -| Map> | getOrDefault | Entry | -| Map> | getOrDefault | Object | -| Map> | merge | BiFunction,? super Entry,? extends Entry> | -| Map> | merge | Entry | -| Map> | merge | Identity | -| Map> | of | K | -| Map> | of | V | -| Map> | ofEntries | Entry[] | -| Map> | put | Entry | -| Map> | put | Identity | -| Map> | putAll | Map> | -| Map> | putIfAbsent | Entry | -| Map> | putIfAbsent | Identity | -| Map> | remove | Object | -| Map> | replace | Entry | -| Map> | replace | Identity | -| Map> | replaceAll | BiFunction,? extends Entry> | +| Map | compute | BiFunction | +| Map | compute | Identity | +| Map | computeIfAbsent | Function | +| Map | computeIfAbsent | Identity | +| Map | computeIfPresent | BiFunction | +| Map | computeIfPresent | Identity | +| Map | containsKey | Object | +| Map | containsValue | Object | +| Map | copyOf | Map | +| Map | entry | K | +| Map | entry | V | +| Map | equals | Object | +| Map | forEach | BiConsumer | +| Map | get | Object | +| Map | getOrDefault | Object | +| Map | merge | BiFunction | +| Map | merge | Identity | +| Map | merge | Object | +| Map | of | K | +| Map | of | V | +| Map | ofEntries | Entry[] | +| Map | put | Identity | +| Map | put | Object | +| Map | putAll | Map | +| Map | putIfAbsent | Identity | +| Map | putIfAbsent | Object | +| Map | remove | Object | +| Map | replace | Identity | +| Map | replace | Object | +| Map | replaceAll | BiFunction | | Map | compute | BiFunction | | Map | compute | K | | Map | computeIfAbsent | Function | diff --git a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected index 7ce456cdcbb..3bc2f9ce67d 100644 --- a/java/ql/test-kotlin1/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin1/library-tests/reflection/reflection.expected @@ -289,6 +289,7 @@ compGenerated | file:///LongProgression.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | | file:///LongRange.class:0:0:0:0 | forEach | Forwarder for a Kotlin class inheriting an interface default method | | file:///LongRange.class:0:0:0:0 | spliterator | Forwarder for a Kotlin class inheriting an interface default method | +| file:///String.class:0:0:0:0 | getChars | Forwarder for a Kotlin class inheriting an interface default method | | file:///String.class:0:0:0:0 | isEmpty | Forwarder for a Kotlin class inheriting an interface default method | | reflection.kt:7:49:7:54 | new Function2(...) { ... } | The class around a local function, a lambda, or a function reference | | reflection.kt:10:38:10:42 | new KProperty1(...) { ... } | The class around a local function, a lambda, or a function reference | diff --git a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected index 03e86e2d2a1..2495c1fc157 100644 --- a/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected +++ b/java/ql/test-kotlin2/library-tests/java-kotlin-collection-type-generic-methods/test.expected @@ -16,30 +16,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection> | add | Entry | -| AbstractCollection> | addAll | Collection> | -| AbstractCollection> | contains | Object | -| AbstractCollection> | containsAll | Collection | -| AbstractCollection> | remove | Object | -| AbstractCollection> | removeAll | Collection | -| AbstractCollection> | retainAll | Collection | -| AbstractCollection> | toArray | T[] | -| AbstractCollection | add | K | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | -| AbstractCollection | add | Runnable | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractCollection | add | String | | AbstractCollection | addAll | Collection | | AbstractCollection | contains | Object | @@ -56,14 +32,6 @@ methodWithDuplicate | AbstractCollection | removeAll | Collection | | AbstractCollection | retainAll | Collection | | AbstractCollection | toArray | T[] | -| AbstractCollection | add | V | -| AbstractCollection | addAll | Collection | -| AbstractCollection | contains | Object | -| AbstractCollection | containsAll | Collection | -| AbstractCollection | remove | Object | -| AbstractCollection | removeAll | Collection | -| AbstractCollection | retainAll | Collection | -| AbstractCollection | toArray | T[] | | AbstractList | add | E | | AbstractList | add | int | | AbstractList | addAll | Collection | @@ -103,14 +71,14 @@ methodWithDuplicate | AbstractMap | put | V | | AbstractMap | putAll | Map | | AbstractMap | remove | Object | -| AbstractMap> | containsKey | Object | -| AbstractMap> | containsValue | Object | -| AbstractMap> | equals | Object | -| AbstractMap> | get | Object | -| AbstractMap> | put | Entry | -| AbstractMap> | put | Identity | -| AbstractMap> | putAll | Map> | -| AbstractMap> | remove | Object | +| AbstractMap | containsKey | Object | +| AbstractMap | containsValue | Object | +| AbstractMap | equals | Object | +| AbstractMap | get | Object | +| AbstractMap | put | Identity | +| AbstractMap | put | Object | +| AbstractMap | putAll | Map | +| AbstractMap | remove | Object | | AbstractMap | containsKey | Object | | AbstractMap | containsValue | Object | | AbstractMap | equals | Object | @@ -176,16 +144,6 @@ methodWithDuplicate | Collection | retainAll | Collection | | Collection | toArray | IntFunction | | Collection | toArray | T[] | -| Collection | add | Runnable | -| Collection | addAll | Collection | -| Collection | contains | Object | -| Collection | containsAll | Collection | -| Collection | remove | Object | -| Collection | removeAll | Collection | -| Collection | removeIf | Predicate | -| Collection | retainAll | Collection | -| Collection | toArray | IntFunction | -| Collection | toArray | T[] | | Collection | add | String | | Collection | addAll | Collection | | Collection | contains | Object | @@ -325,36 +283,35 @@ methodWithDuplicate | Map | replace | K | | Map | replace | V | | Map | replaceAll | BiFunction | -| Map> | compute | BiFunction,? extends Entry> | -| Map> | compute | Identity | -| Map> | computeIfAbsent | Function> | -| Map> | computeIfAbsent | Identity | -| Map> | computeIfPresent | BiFunction,? extends Entry> | -| Map> | computeIfPresent | Identity | -| Map> | containsKey | Object | -| Map> | containsValue | Object | -| Map> | copyOf | Map | -| Map> | entry | K | -| Map> | entry | V | -| Map> | forEach | BiConsumer> | -| Map> | get | Object | -| Map> | getOrDefault | Entry | -| Map> | getOrDefault | Object | -| Map> | merge | BiFunction,? super Entry,? extends Entry> | -| Map> | merge | Entry | -| Map> | merge | Identity | -| Map> | of | K | -| Map> | of | V | -| Map> | ofEntries | Entry[] | -| Map> | put | Entry | -| Map> | put | Identity | -| Map> | putAll | Map> | -| Map> | putIfAbsent | Entry | -| Map> | putIfAbsent | Identity | -| Map> | remove | Object | -| Map> | replace | Entry | -| Map> | replace | Identity | -| Map> | replaceAll | BiFunction,? extends Entry> | +| Map | compute | BiFunction | +| Map | compute | Identity | +| Map | computeIfAbsent | Function | +| Map | computeIfAbsent | Identity | +| Map | computeIfPresent | BiFunction | +| Map | computeIfPresent | Identity | +| Map | containsKey | Object | +| Map | containsValue | Object | +| Map | copyOf | Map | +| Map | entry | K | +| Map | entry | V | +| Map | forEach | BiConsumer | +| Map | get | Object | +| Map | getOrDefault | Object | +| Map | merge | BiFunction | +| Map | merge | Identity | +| Map | merge | Object | +| Map | of | K | +| Map | of | V | +| Map | ofEntries | Entry[] | +| Map | put | Identity | +| Map | put | Object | +| Map | putAll | Map | +| Map | putIfAbsent | Identity | +| Map | putIfAbsent | Object | +| Map | remove | Object | +| Map | replace | Identity | +| Map | replace | Object | +| Map | replaceAll | BiFunction | | Map | compute | BiFunction | | Map | compute | K | | Map | computeIfAbsent | Function | diff --git a/java/ql/test-kotlin2/library-tests/nested_types/test.kt b/java/ql/test-kotlin2/library-tests/nested_types/test.kt new file mode 100644 index 00000000000..7d5e2280b92 --- /dev/null +++ b/java/ql/test-kotlin2/library-tests/nested_types/test.kt @@ -0,0 +1,16 @@ + +import java.util.Stack; + +// Diagnostic Matches: %Making use of Stack a raw type to avoid infinite recursion% + +class MyType + +fun foo1(x: List>>>) { } + +fun foo2(x: Stack>>>) { } + +class MkT { } + +fun foo3(x: MkT>>>) { } + + diff --git a/java/ql/test-kotlin2/library-tests/nested_types/types.expected b/java/ql/test-kotlin2/library-tests/nested_types/types.expected new file mode 100644 index 00000000000..ec2e407b8b7 --- /dev/null +++ b/java/ql/test-kotlin2/library-tests/nested_types/types.expected @@ -0,0 +1,13 @@ +| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT>>> | +| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT>> | +| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT> | +| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT | +| file:///modules/java.base/java/util/List.class:0:0:0:0 | List>>> | +| file:///modules/java.base/java/util/List.class:0:0:0:0 | List>> | +| file:///modules/java.base/java/util/List.class:0:0:0:0 | List> | +| file:///modules/java.base/java/util/List.class:0:0:0:0 | List | +| file:///modules/java.base/java/util/List.class:0:0:0:0 | List> | +| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack | +| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack> | +| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack>> | +| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack>>> | diff --git a/java/ql/test-kotlin2/library-tests/nested_types/types.ql b/java/ql/test-kotlin2/library-tests/nested_types/types.ql new file mode 100644 index 00000000000..3499ae037c7 --- /dev/null +++ b/java/ql/test-kotlin2/library-tests/nested_types/types.ql @@ -0,0 +1,7 @@ +import java + +from Type t +where + t.getName().matches("%MyType%") and + t.getName().matches(["List<%", "Stack<%", "MkT<%"]) +select t diff --git a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected index 4074866da65..b5de2b1adea 100644 --- a/java/ql/test-kotlin2/library-tests/reflection/reflection.expected +++ b/java/ql/test-kotlin2/library-tests/reflection/reflection.expected @@ -329,6 +329,7 @@ compGenerated | file:///SignStyle.class:0:0:0:0 | getEntries | Default property accessor | | file:///StackWalker$ExtendedOption.class:0:0:0:0 | getEntries | Default property accessor | | file:///StackWalker$Option.class:0:0:0:0 | getEntries | Default property accessor | +| file:///String.class:0:0:0:0 | getChars | Forwarder for a Kotlin class inheriting an interface default method | | file:///String.class:0:0:0:0 | isEmpty | Forwarder for a Kotlin class inheriting an interface default method | | file:///TextStyle.class:0:0:0:0 | getEntries | Default property accessor | | file:///Thread$State.class:0:0:0:0 | getEntries | Default property accessor | diff --git a/java/ql/test/experimental/library-tests/quantum/jca/AesWrapAndPBEWith.java b/java/ql/test/experimental/library-tests/quantum/jca/AesWrapAndPBEWith.java new file mode 100644 index 00000000000..775f02280b5 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/AesWrapAndPBEWith.java @@ -0,0 +1,226 @@ +package com.example.crypto.algorithms; + +//import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Base64; + +/** + * AesWrapAndPBEWithTest demonstrates key wrapping and password-based encryption + * using various transformations. + * + * This file includes: + * + * 1. AESWrap Examples: - secureAESWrap(): Uses a randomly generated wrapping + * key. - insecureAESWrap(): Uses a fixed, hard-coded wrapping key. + * + * 2. PBEWith Examples: - insecurePBEExample(): Uses the legacy + * PBEWithMD5AndDES. - securePBEExample(): Uses PBKDF2WithHmacSHA256. - + * additionalPBEExample(): Uses PBEWithSHA256And128BitAES-CBC-BC. - + * additionalPBEExample2(): Uses PBEWithSHA1And128BitAES-CBC-BC. + * + * 3. Dynamic PBE Encryption: - dynamicPBEEncryption(): Chooses the PBE + * transformation based on a configuration string. + * + * Best Practices: - Use secure random keys and salts. - Avoid legacy algorithms + * like PBEWithMD5AndDES. - Prefer modern KDFs (PBKDF2WithHmacSHA256) and secure + * provider-specific PBE transformations. + * + * SAST/CBOM Notes: - Insecure examples (PBEWithMD5AndDES, fixed keys) should be + * flagged. - Secure examples use random salt, high iteration counts, and strong + * algorithms. + */ +public class AesWrapAndPBEWith { + + // static { + // // Register BouncyCastle as a provider. + // Security.addProvider(new BouncyCastleProvider()); + // } + // =========================== + // 1. AESWrap Examples + // =========================== + /** + * Secure AES key wrapping. Generates a random 256-bit wrapping key to wrap + * a target AES key. + * + * @return The wrapped key (Base64-encoded). + * @throws Exception if an error occurs. + */ + public String secureAESWrap() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + SecretKey wrappingKey = kg.generateKey(); + + kg.init(128, new SecureRandom()); + SecretKey targetKey = kg.generateKey(); + + Cipher cipher = Cipher.getInstance("AESWrap"); + cipher.init(Cipher.WRAP_MODE, wrappingKey); + byte[] wrappedKey = cipher.wrap(targetKey); + + return Base64.getEncoder().encodeToString(wrappedKey); + } + + /** + * Insecure AES key wrapping. Uses a fixed (hard-coded) wrapping key. + * + * @return The wrapped key (Base64-encoded). + * @throws Exception if an error occurs. + */ + public String insecureAESWrap() throws Exception { + byte[] fixedKeyBytes = new byte[32]; + Arrays.fill(fixedKeyBytes, (byte) 0x01); + SecretKey wrappingKey = new SecretKeySpec(fixedKeyBytes, "AES"); + + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(128, new SecureRandom()); + SecretKey targetKey = kg.generateKey(); + + Cipher cipher = Cipher.getInstance("AESWrap"); + cipher.init(Cipher.WRAP_MODE, wrappingKey); + byte[] wrappedKey = cipher.wrap(targetKey); + + return Base64.getEncoder().encodeToString(wrappedKey); + } + + // =========================== + // 2. PBEWith Examples + // =========================== + /** + * Insecure PBE example using PBEWithMD5AndDES. + * + * @param password The input password. + * @return The derived key (Base64-encoded). + * @throws Exception if key derivation fails. + */ + public String insecurePBEExample(String password) throws Exception { + byte[] salt = new byte[8]; + Arrays.fill(salt, (byte) 0x00); // Fixed salt (insecure) + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 1000, 64); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); + byte[] keyBytes = factory.generateSecret(spec).getEncoded(); + return Base64.getEncoder().encodeToString(keyBytes); + } + + /** + * Secure PBE example using PBKDF2WithHmacSHA256. + * + * @param password The input password. + * @return The derived 256-bit AES key (Base64-encoded). + * @throws Exception if key derivation fails. + */ + public String securePBEExample(String password) throws Exception { + byte[] salt = new byte[16]; + new SecureRandom().nextBytes(salt); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] keyBytes = factory.generateSecret(spec).getEncoded(); + SecretKey aesKey = new SecretKeySpec(keyBytes, "AES"); + return Base64.getEncoder().encodeToString(aesKey.getEncoded()); + } + + /** + * Additional PBE example using PBEWithSHA256And128BitAES-CBC-BC. + * + * @param password The input password. + * @param plaintext The plaintext to encrypt. + * @return The IV concatenated with ciphertext (Base64-encoded). + * @throws Exception if key derivation or encryption fails. + */ + public String additionalPBEExample(String password, String plaintext) throws Exception { + byte[] salt = new byte[16]; + new SecureRandom().nextBytes(salt); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 128); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithSHA256And128BitAES-CBC-BC"); + SecretKey pbeKey = factory.generateSecret(spec); + SecretKey aesKey = new SecretKeySpec(pbeKey.getEncoded(), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes()); + byte[] output = concatenate(iv, ciphertext); + return Base64.getEncoder().encodeToString(output); + } + + /** + * Additional PBE example using PBEWithSHA1And128BitAES-CBC-BC. This is less + * preferred than PBKDF2WithHmacSHA256 but demonstrates another variant. + * + * @param password The input password. + * @param plaintext The plaintext to encrypt. + * @return The IV concatenated with ciphertext (Base64-encoded). + * @throws Exception if key derivation or encryption fails. + */ + public String additionalPBEExample2(String password, String plaintext) throws Exception { + byte[] salt = new byte[16]; + new SecureRandom().nextBytes(salt); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 128); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithSHA1And128BitAES-CBC-BC"); + SecretKey pbeKey = factory.generateSecret(spec); + SecretKey aesKey = new SecretKeySpec(pbeKey.getEncoded(), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext.getBytes()); + byte[] output = concatenate(iv, ciphertext); + return Base64.getEncoder().encodeToString(output); + } + + // =========================== + // 3. Dynamic PBE Encryption + // =========================== + /** + * Dynamically selects a PBE transformation based on a configuration string. + * + * Acceptable values: - "PBKDF2": Uses PBKDF2WithHmacSHA256. - "SHA256AES": + * Uses PBEWithSHA256And128BitAES-CBC-BC. - "SHA1AES": Uses + * PBEWithSHA1And128BitAES-CBC-BC. - Otherwise, falls back to insecure + * PBEWithMD5AndDES. + * + * @param config The configuration string. + * @param password The input password. + * @param plaintext The plaintext to encrypt. + * @return The Base64-encoded encrypted output. + * @throws Exception if an error occurs. + */ + public String dynamicPBEEncryption(String config, String password, String plaintext) throws Exception { + if ("PBKDF2".equalsIgnoreCase(config)) { + return securePBEExample(password); + } else if ("SHA256AES".equalsIgnoreCase(config)) { + return additionalPBEExample(password, plaintext); + } else if ("SHA1AES".equalsIgnoreCase(config)) { + return additionalPBEExample2(password, plaintext); + } else { + // Fallback insecure option. + return insecurePBEExample(password); + } + } + + // =========================== + // Helper Methods + // =========================== + /** + * Concatenates two byte arrays. + */ + private byte[] concatenate(byte[] a, byte[] b) { + byte[] result = new byte[a.length + b.length]; + System.arraycopy(a, 0, result, 0, a.length); + System.arraycopy(b, 0, result, a.length, b.length); + return result; + } + +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/AsymmetricEncryptionMacHybridCryptosystem.java b/java/ql/test/experimental/library-tests/quantum/jca/AsymmetricEncryptionMacHybridCryptosystem.java new file mode 100644 index 00000000000..8f844ba8620 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/AsymmetricEncryptionMacHybridCryptosystem.java @@ -0,0 +1,324 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +// import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyAgreement; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * AsymmetricEncryptionMacHybridCryptosystem demonstrates hybrid cryptosystems + * that combine asymmetric encryption with a MAC. + * + * Flows: 1. RSA-OAEP + HMAC: - Secure Flow: Uses 2048-bit RSA-OAEP (with + * SHA256andMGF1Padding) to encapsulate a freshly generated AES key; then + * encrypts using AES-GCM with a random nonce and computes HMAC-SHA256 over the + * ciphertext. - Insecure Flow: Uses 1024-bit RSA (RSA/ECB/PKCS1Padding), + * AES-GCM with a fixed IV, and HMAC-SHA1. + * + * 2. ECIES + HMAC: - Secure Flow: Uses ephemeral ECDH key pairs (secp256r1); + * derives a shared secret and applies a simple KDF (SHA-256) to derive a + * 128-bit AES key; then uses AES-GCM with a random nonce and computes + * HMAC-SHA256. - Insecure Flow: Reuses a static EC key pair, directly truncates + * the shared secret without a proper KDF, uses a fixed IV, and computes + * HMAC-SHA1. + * + * 3. Dynamic Hybrid Selection: - Chooses between flows based on a configuration + * string. + * + * SAST/CBOM Notes: - Secure flows use proper ephemeral key generation, secure + * key sizes, KDF usage, and random nonces/IVs. - Insecure flows (static key + * reuse, fixed nonces, weak key sizes, raw shared secret truncation, and + * deprecated algorithms) should be flagged. + */ +public class AsymmetricEncryptionMacHybridCryptosystem { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // Security.addProvider(new BouncyCastlePQCProvider()); + // } + // ---------- Result Class ---------- + public static class HybridResult { + + private final byte[] encapsulatedKey; + private final byte[] ciphertext; + private final byte[] mac; + + public HybridResult(byte[] encapsulatedKey, byte[] ciphertext, byte[] mac) { + this.encapsulatedKey = encapsulatedKey; + this.ciphertext = ciphertext; + this.mac = mac; + } + + public byte[] getEncapsulatedKey() { + return encapsulatedKey; + } + + public byte[] getCiphertext() { + return ciphertext; + } + + public byte[] getMac() { + return mac; + } + + public String toBase64String() { + return "EncapsulatedKey: " + Base64.getEncoder().encodeToString(encapsulatedKey) + + "\nCiphertext: " + Base64.getEncoder().encodeToString(ciphertext) + + "\nMAC: " + Base64.getEncoder().encodeToString(mac); + } + } + + // ---------- Helper Methods ---------- + /** + * Generates an ephemeral ECDH key pair on secp256r1. + */ + public KeyPair generateECDHKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + kpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Generates an ephemeral X25519 key pair. + */ + public KeyPair generateX25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X25519", "BC"); + kpg.initialize(255, new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Derives a shared secret using the provided key agreement algorithm. + * + * @param privateKey The private key. + * @param publicKey The corresponding public key. + * @param algorithm The key agreement algorithm (e.g., "ECDH" or "X25519"). + * @return The shared secret. + */ + public byte[] deriveSharedSecret(PrivateKey privateKey, PublicKey publicKey, String algorithm) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance(algorithm, "BC"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + /** + * A simple KDF that hashes the input with SHA-256 and returns the first + * numBytes. + * + * @param input The input byte array. + * @param numBytes The desired number of output bytes. + * @return The derived key material. + */ + public byte[] simpleKDF(byte[] input, int numBytes) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(input); + return Arrays.copyOf(hash, numBytes); + } + + /** + * Concatenates two byte arrays. + */ + public byte[] concatenate(byte[] a, byte[] b) { + byte[] result = new byte[a.length + b.length]; + System.arraycopy(a, 0, result, 0, a.length); + System.arraycopy(b, 0, result, a.length, b.length); + return result; + } + + // ===================================================== + // 1. RSA-OAEP + HMAC Hybrid Cryptosystem + // ===================================================== + /** + * Generates a secure 2048-bit RSA key pair. + */ + public KeyPair generateRSAKeyPairGood() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(2048); + return kpg.generateKeyPair(); + } + + /** + * Generates an insecure 1024-bit RSA key pair. + */ + public KeyPair generateRSAKeyPairBad() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(1024); + return kpg.generateKeyPair(); + } + + /** + * Secure hybrid encryption using RSA-OAEP + HMAC-SHA256. + */ + public HybridResult secureRSAHybridEncryption(byte[] plaintext) throws Exception { + KeyPair rsaKP = generateRSAKeyPairGood(); + SecretKey aesKey = generateAESKey(); + + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + rsaCipher.init(Cipher.WRAP_MODE, rsaKP.getPublic()); + byte[] encapsulatedKey = rsaCipher.wrap(aesKey); + + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, new GCMParameterSpec(128, iv)); + byte[] ciphertext = aesCipher.doFinal(plaintext); + byte[] fullCiphertext = concatenate(iv, ciphertext); + + byte[] macKey = generateAESKey().getEncoded(); + byte[] mac = secureHMACSHA256(new String(fullCiphertext), macKey); + + return new HybridResult(encapsulatedKey, fullCiphertext, mac); + } + + /** + * Insecure hybrid encryption using RSA/ECB/PKCS1Padding + HMAC-SHA1. + */ + public HybridResult insecureRSAHybridEncryption(byte[] plaintext) throws Exception { + KeyPair rsaKP = generateRSAKeyPairBad(); + SecretKey aesKey = generateAESKey(); + + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); + rsaCipher.init(Cipher.WRAP_MODE, rsaKP.getPublic()); + byte[] encapsulatedKey = rsaCipher.wrap(aesKey); + + byte[] fixedIV = new byte[12]; // All zeros + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, new GCMParameterSpec(128, fixedIV)); + byte[] ciphertext = aesCipher.doFinal(plaintext); + byte[] fullCiphertext = concatenate(fixedIV, ciphertext); + + byte[] macKey = generateAESKey().getEncoded(); + byte[] mac = insecureHMACSHA1(new String(fullCiphertext), macKey); + + return new HybridResult(encapsulatedKey, fullCiphertext, mac); + } + + // ===================================================== + // 2. ECIES + HMAC Hybrid Cryptosystem + // ===================================================== + /** + * Secure hybrid encryption using ECIES (via ECDH) + HMAC-SHA256. + */ + public HybridResult secureECIESHybridEncryption(byte[] plaintext) throws Exception { + KeyPair aliceKP = generateECDHKeyPair(); + KeyPair bobKP = generateECDHKeyPair(); + byte[] sharedSecret = deriveSharedSecret(aliceKP.getPrivate(), bobKP.getPublic(), "ECDH"); + byte[] aesKeyBytes = simpleKDF(sharedSecret, 16); + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, "AES"); + + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, new GCMParameterSpec(128, iv)); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] fullCiphertext = concatenate(iv, ciphertext); + + byte[] macKey = generateAESKey().getEncoded(); + byte[] mac = secureHMACSHA256(new String(fullCiphertext), macKey); + + byte[] ephemeralPubKey = aliceKP.getPublic().getEncoded(); + + return new HybridResult(ephemeralPubKey, fullCiphertext, mac); + } + + /** + * Insecure hybrid encryption using ECIES (via ECDH) + HMAC-SHA1. + */ + public HybridResult insecureECIESHybridEncryption(byte[] plaintext) throws Exception { + KeyPair staticKP = generateECDHKeyPair(); + byte[] sharedSecret = deriveSharedSecret(staticKP.getPrivate(), staticKP.getPublic(), "ECDH"); + byte[] aesKeyBytes = Arrays.copyOf(sharedSecret, 16); + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, "AES"); + + byte[] fixedIV = new byte[12]; // Fixed IV + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, new GCMParameterSpec(128, fixedIV)); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] fullCiphertext = concatenate(fixedIV, ciphertext); + + byte[] macKey = generateAESKey().getEncoded(); + byte[] mac = insecureHMACSHA1(new String(fullCiphertext), macKey); + + byte[] staticPubKey = staticKP.getPublic().getEncoded(); + + return new HybridResult(staticPubKey, fullCiphertext, mac); + } + + // ===================================================== + // 3. Dynamic Hybrid Selection + // ===================================================== + /** + * Dynamically selects a hybrid encryption flow based on configuration. + * SAST: Dynamic selection introduces risk if insecure defaults are chosen. + * + * @param config The configuration string ("secureRSA", "insecureRSA", + * "secureECIES", "insecureECIES"). + * @param plaintext The plaintext to encrypt. + * @return A Base64-encoded string representation of the hybrid encryption + * result. + * @throws Exception if an error occurs. + */ + public String dynamicHybridEncryption(String config, byte[] plaintext) throws Exception { + HybridResult result; + if ("secureRSA".equalsIgnoreCase(config)) { + result = secureRSAHybridEncryption(plaintext); + } else if ("insecureRSA".equalsIgnoreCase(config)) { + result = insecureRSAHybridEncryption(plaintext); + } else if ("secureECIES".equalsIgnoreCase(config)) { + result = secureECIESHybridEncryption(plaintext); + } else if ("insecureECIES".equalsIgnoreCase(config)) { + result = insecureECIESHybridEncryption(plaintext); + } else { + // Fallback to insecure RSA hybrid encryption. + result = insecureRSAHybridEncryption(plaintext); + } + return result.toBase64String(); + } + + // ===================================================== + // 4. Helper Methods for HMAC and Symmetric Encryption + // ===================================================== + /** + * Secure HMAC using HMAC-SHA256. SAST: HMAC-SHA256 is secure. + */ + public byte[] secureHMACSHA256(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA256"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Insecure HMAC using HMAC-SHA1. SAST: HMAC-SHA1 is deprecated and + * insecure. + */ + public byte[] insecureHMACSHA1(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA1", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA1"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + // ===================================================== + // 5. Helper Methods for Key/Nonce Generation + // ===================================================== + /** + * Generates a secure 256-bit AES key. SAST: Uses SecureRandom for key + * generation. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + return kg.generateKey(); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/ChainedEncryptionTest.java b/java/ql/test/experimental/library-tests/quantum/jca/ChainedEncryptionTest.java new file mode 100644 index 00000000000..2190921937e --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/ChainedEncryptionTest.java @@ -0,0 +1,146 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.util.Arrays; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; + +public class ChainedEncryptionTest { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + // Encrypts using AES-GCM. Returns IV concatenated with ciphertext. + public static byte[] encryptAESGCM(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte nonce for AES-GCM + new SecureRandom().nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + return concat(iv, ciphertext); + } + + // Decrypts AES-GCM ciphertext where IV is prepended. + public static byte[] decryptAESGCM(SecretKey key, byte[] ivCiphertext) throws Exception { + byte[] iv = Arrays.copyOfRange(ivCiphertext, 0, 12); + byte[] ciphertext = Arrays.copyOfRange(ivCiphertext, 12, ivCiphertext.length); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.DECRYPT_MODE, key, spec); + return cipher.doFinal(ciphertext); + } + + // Encrypts using ChaCha20-Poly1305. Returns nonce concatenated with ciphertext. + public static byte[] encryptChaCha20Poly1305(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + byte[] nonce = new byte[12]; // 12-byte nonce for ChaCha20-Poly1305 + new SecureRandom().nextBytes(nonce); + cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(nonce)); + byte[] ciphertext = cipher.doFinal(plaintext); + return concat(nonce, ciphertext); + } + + // Decrypts ChaCha20-Poly1305 ciphertext where nonce is prepended. + public static byte[] decryptChaCha20Poly1305(SecretKey key, byte[] nonceCiphertext) throws Exception { + byte[] nonce = Arrays.copyOfRange(nonceCiphertext, 0, 12); + byte[] ciphertext = Arrays.copyOfRange(nonceCiphertext, 12, nonceCiphertext.length); + Cipher cipher = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(nonce)); + return cipher.doFinal(ciphertext); + } + + // Helper method to concatenate two byte arrays. + private static byte[] concat(byte[] a, byte[] b) { + byte[] result = new byte[a.length + b.length]; + System.arraycopy(a, 0, result, 0, a.length); + System.arraycopy(b, 0, result, a.length, b.length); + return result; + } + + /** + * Performs chained encryption and decryption in one function. First, + * plaintext is encrypted with AES-GCM (inner layer), then that ciphertext + * is encrypted with ChaCha20-Poly1305 (outer layer). The decryption process + * reverses these steps. + * + * @param plaintext The input plaintext. + * @return The decrypted plaintext as a String. + * @throws Exception if any cryptographic operation fails. + */ + public static String chainEncryptDecrypt(String plaintext) throws Exception { + byte[] plainBytes = plaintext.getBytes("UTF-8"); + + // Generate keys for inner and outer encryption. + KeyGenerator aesGen = KeyGenerator.getInstance("AES"); + aesGen.init(256, new SecureRandom()); + SecretKey innerKey = aesGen.generateKey(); + + KeyGenerator chachaGen = KeyGenerator.getInstance("ChaCha20", "BC"); + chachaGen.init(256, new SecureRandom()); + SecretKey outerKey = chachaGen.generateKey(); + + // Inner Encryption with AES-GCM. + byte[] aesIV = new byte[12]; // Random 12-byte IV. + new SecureRandom().nextBytes(aesIV); + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, aesIV); + aesCipher.init(Cipher.ENCRYPT_MODE, innerKey, gcmSpec); + byte[] innerCiphertext = aesCipher.doFinal(plainBytes); + + // Outer Encryption with ChaCha20-Poly1305. + byte[] chachaNonce = new byte[12]; // Random 12-byte nonce. + new SecureRandom().nextBytes(chachaNonce); + Cipher chachaCipher = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + chachaCipher.init(Cipher.ENCRYPT_MODE, outerKey, new IvParameterSpec(chachaNonce)); + byte[] outerCiphertext = chachaCipher.doFinal(innerCiphertext); + + // Outer Decryption. + Cipher chachaDec = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + chachaDec.init(Cipher.DECRYPT_MODE, outerKey, new IvParameterSpec(chachaNonce)); + byte[] decryptedInnerCiphertext = chachaDec.doFinal(outerCiphertext); + + // Inner Decryption. + Cipher aesDec = Cipher.getInstance("AES/GCM/NoPadding"); + aesDec.init(Cipher.DECRYPT_MODE, innerKey, new GCMParameterSpec(128, aesIV)); + byte[] decryptedPlaintext = aesDec.doFinal(decryptedInnerCiphertext); + + return new String(decryptedPlaintext, "UTF-8"); + } + + public static void main(String[] args) throws Exception { + // Generate a 256-bit AES key for the first (inner) encryption. + KeyGenerator aesGen = KeyGenerator.getInstance("AES"); + aesGen.init(256, new SecureRandom()); + SecretKey aesKey = aesGen.generateKey(); + + // Generate a 256-bit key for ChaCha20-Poly1305 (outer encryption). + KeyGenerator chaChaGen = KeyGenerator.getInstance("ChaCha20"); + chaChaGen.init(256, new SecureRandom()); + SecretKey chaChaKey = chaChaGen.generateKey(); + + String originalText = "This is a secret message."; + byte[] plaintext = originalText.getBytes(); + + // Step 1: Encrypt plaintext with AES-GCM. + byte[] innerCiphertext = encryptAESGCM(aesKey, plaintext); + + // Step 2: Encrypt the AES-GCM ciphertext with ChaCha20-Poly1305. + byte[] outerCiphertext = encryptChaCha20Poly1305(chaChaKey, innerCiphertext); + + // Now, decrypt in reverse order. + // Step 3: Decrypt the outer layer (ChaCha20-Poly1305). + byte[] decryptedInnerCiphertext = decryptChaCha20Poly1305(chaChaKey, outerCiphertext); + + // Step 4: Decrypt the inner layer (AES-GCM). + byte[] decryptedPlaintext = decryptAESGCM(aesKey, decryptedInnerCiphertext); + + System.out.println("Original: " + originalText); + System.out.println("Decrypted: " + new String(decryptedPlaintext)); + } + +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/Digest.java b/java/ql/test/experimental/library-tests/quantum/jca/Digest.java new file mode 100644 index 00000000000..412bf578ac1 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/Digest.java @@ -0,0 +1,256 @@ +package com.example.crypto.artifacts; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * DigestTestCase demonstrates the further use of cryptographic digests + * as inputs to more complex cryptosystems. In real-world applications, + * digest outputs are often used as keys, key material for key derivation, + * or as identifiers. This file shows several flows: + * + * 1. Basic digest generation using SHA-256 (secure) and MD5/SHA-1 (insecure). + * 2. Unsalted versus salted digest for password input. + * 3. PBKDF2 for secure key derivation. + * 4. Using a digest as direct key material for AES encryption (processDigest). + * 5. Using a digest as an identifier (alternativeDigestFlow). + * 6. **Further Use**: Deriving two separate keys (one for encryption and one + * for MAC) + * from a digest via PBKDF2 and using them in an authenticated encryption flow. + * + * SAST/CBOM notes: + * - Secure algorithms (e.g. SHA-256, HMAC-SHA256, PBKDF2WithHmacSHA256) are + * acceptable. + * - Insecure functions (e.g. MD5, SHA-1) and unsalted password digests are + * flagged. + * - Using a raw digest directly as key material is ambiguous unless produced by + * a proper KDF. + */ +public class Digest { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + + // ---------- Digest Generation Flows ---------- + + /** + * Secure digest generation using SHA-256. + * SAST: SHA-256 is secure. + */ + public void simpleHashing() throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest("Simple Test Data".getBytes()); + processDigest(hash); + } + + /** + * Insecure digest generation using MD5. + * SAST: MD5 is deprecated and insecure. + */ + public void insecureMD5Hashing() throws Exception { + MessageDigest md5Digest = MessageDigest.getInstance("MD5"); + byte[] hash = md5Digest.digest("Weak Hash Example".getBytes()); + processDigest(hash); + } + + /** + * Insecure unsalted password hashing using SHA-256. + * SAST: Unsalted password hashing is vulnerable to rainbow table attacks. + */ + public void insecureUnsaltedPasswordHashing(String password) throws Exception { + MessageDigest sha256Digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = sha256Digest.digest(password.getBytes()); + processDigest(hash); + } + + /** + * Secure salted hashing using SHA-256. + * SAST: Salting the input improves security. + */ + public void secureSaltedHashing(String password) throws Exception { + byte[] salt = generateSalt(16); + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + digest.update(salt); + byte[] hash = digest.digest(password.getBytes()); + processDigest(hash); + } + + /** + * Secure key derivation using PBKDF2 with HMAC-SHA256. + * SAST: PBKDF2 with sufficient iterations is recommended. + */ + public void securePBKDF2Hashing(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] hash = factory.generateSecret(spec).getEncoded(); + processDigest(hash); + } + + /** + * Insecure digest generation using SHA-1. + * SAST: SHA-1 is deprecated due to collision vulnerabilities. + */ + public void insecureRawSHA1Hashing(String input) throws Exception { + MessageDigest sha1Digest = MessageDigest.getInstance("SHA-1"); + byte[] hash = sha1Digest.digest(input.getBytes()); + processDigest(hash); + } + + /** + * Secure MAC computation using HMAC-SHA256. + * SAST: HMAC-SHA256 is considered secure. + */ + public void secureHMACHashing(String input, byte[] key) throws Exception { + Mac hmac = Mac.getInstance("HmacSHA256"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA256"); + hmac.init(secretKey); + byte[] hash = hmac.doFinal(input.getBytes()); + processDigest(hash); + } + + // ---------- Further Use of Digest Outputs ---------- + + /** + * Processes the digest by using it directly as key material for AES encryption. + * SAST: Using a raw digest as key material is acceptable only if the digest is + * produced + * via a secure KDF. This method is ambiguous if the digest is from an insecure + * function. + * + * @param digest The computed digest. + * @throws Exception if encryption fails. + */ + public void processDigest(byte[] digest) throws Exception { + // Derive a 128-bit AES key from the digest. + SecretKey key = new SecretKeySpec(digest, 0, 16, "AES"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom()); + byte[] encryptedData = cipher.doFinal("Sensitive Data".getBytes()); + storeEncryptedDigest(encryptedData); + } + + /** + * Alternative flow: Uses the digest as an identifier (e.g., checksum) and + * encrypts it. + * SAST: Using a digest as an identifier is common; encryption must use secure + * primitives. + * + * @param digest The computed digest. + * @throws Exception if encryption fails. + */ + public void alternativeDigestFlow(byte[] digest) throws Exception { + byte[] identifier = Base64.getEncoder().encode(digest); + encryptAndSend(identifier); + } + + /** + * Further use: Derives two separate keys from a digest using PBKDF2, + * then uses one key for encryption and the other for computing a MAC over the + * ciphertext. + * + * SAST: This approach of key derivation and splitting is acceptable if PBKDF2 + * is used securely. + * + * @param digest The input digest (must be generated from a secure source). + * @throws Exception if key derivation or encryption fails. + */ + public void furtherUseDigestForKeyDerivation(byte[] digest) throws Exception { + // Treat the digest (in Base64) as a password input to PBKDF2. + String digestAsPassword = Base64.getEncoder().encodeToString(digest); + byte[] salt = generateSalt(16); + // Derive 256 bits (32 bytes) of key material. + PBEKeySpec spec = new PBEKeySpec(digestAsPassword.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] keyMaterial = factory.generateSecret(spec).getEncoded(); + // Split into two 128-bit keys. + byte[] encryptionKeyBytes = Arrays.copyOfRange(keyMaterial, 0, 16); + byte[] macKeyBytes = Arrays.copyOfRange(keyMaterial, 16, 32); + SecretKey encryptionKey = new SecretKeySpec(encryptionKeyBytes, "AES"); + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + // Encrypt sample data using the derived encryption key. + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new SecureRandom()); + byte[] ciphertext = cipher.doFinal("Further Use Test Data".getBytes()); + + // Compute HMAC over the ciphertext using the derived MAC key. + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(ciphertext); + + // In production, these outputs would be securely stored or transmitted. + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + storeEncryptedDigest(output); + } + + /** + * Encrypts data using AES-GCM and simulates secure transmission or storage. + * SAST: Uses a securely generated AES key. + * + * @param data The data to encrypt. + * @throws Exception if encryption fails. + */ + public void encryptAndSend(byte[] data) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom()); + byte[] encryptedData = cipher.doFinal(data); + storeEncryptedDigest(encryptedData); + } + + /** + * Simulates secure storage or transmission of an encrypted digest. + * SAST: In production, this method would implement secure storage/transmission. + * + * @param encryptedDigest The encrypted digest. + */ + public void storeEncryptedDigest(byte[] encryptedDigest) { + // For static analysis purposes, this method represents a secure output + // mechanism. + String stored = Base64.getEncoder().encodeToString(encryptedDigest); + } + + // ---------- Helper Methods ---------- + + /** + * Generates a secure 256-bit AES key. + * SAST: Key generation uses a strong RNG. + * + * @return A SecretKey for AES. + * @throws NoSuchAlgorithmException if AES is unsupported. + */ + private SecretKey generateAESKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + return keyGen.generateKey(); + } + + /** + * Generates a random salt of the specified length using SecureRandom. + * SAST: Salting is essential for secure digest computations. + * + * @param length The salt length. + * @return A byte array representing the salt. + */ + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve1.java b/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve1.java new file mode 100644 index 00000000000..71481b7e7a9 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve1.java @@ -0,0 +1,155 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.util.Base64; + +/** + * EllipticCurve1 demonstrates generating EC key pairs for various curve + * categories. + * + * Curve categories covered: + * - NIST: e.g., secp256r1, secp384r1, secp521r1. + * - SEC: e.g., secp256k1 (from the Standards for Efficient Cryptography, SEC2). + * - BRAINPOOL: e.g., brainpoolP256r1. + * - CURVE25519: for key agreement (X25519) or signatures (Ed25519). + * - CURVE448: for key agreement (X448). + * - C2: Binary curves; for example, sect163r2 (if available). + * - SM2: Chinese SM2 curve, often named sm2p256v1. + * - ES: Elliptic curve signature based on EdDSA, here using Ed25519. + * - OtherEllipticCurveType: A fallback (using secp256r1). + * + * Best practices: + * - Use ephemeral key generation with a strong RNG. + * - Select curves from secure families (e.g., NIST, Brainpool, Curve25519/448, + * SM2). + * - Use a crypto provider (e.g., BouncyCastle) that supports the desired + * curves. + * + * In a production environment, the curve type may be externally configured. + */ +public class EllipticCurve1 { + + // static { + // // Register the BouncyCastle provider to access a wide range of curves. + // Security.addProvider(new BouncyCastleProvider()); + // } + + /** + * Generates a key pair using a NIST curve (e.g., secp256r1). + */ + public KeyPair generateNISTKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + // secp256r1 is widely used (also known as P-256) + kpg.initialize(new java.security.spec.ECGenParameterSpec("secp256r1")); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair using a SEC curve (e.g., secp256k1). + */ + public KeyPair generateSECCurveKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + // secp256k1 is commonly used in Bitcoin and other blockchain applications. + kpg.initialize(new java.security.spec.ECGenParameterSpec("secp256k1")); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair using a Brainpool curve (e.g., brainpoolP256r1). + */ + public KeyPair generateBrainpoolKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + // "brainpoolP256r1" is a commonly recommended Brainpool curve. + kpg.initialize(new java.security.spec.ECGenParameterSpec("brainpoolP256r1")); + return kpg.generateKeyPair(); + } + + /** + * Generates an X25519 key pair (for key agreement). + */ + public KeyPair generateCurve25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X25519", "BC"); + // No further parameters are needed for X25519. + return kpg.generateKeyPair(); + } + + /** + * Generates an X448 key pair (for key agreement). + */ + public KeyPair generateCurve448KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X448", "BC"); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair for a binary (C2) curve. + * Example: sect163r2 is a binary field curve. + */ + public KeyPair generateC2CurveKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + // "sect163r2" is one of the binary field curves supported by BouncyCastle. + kpg.initialize(new java.security.spec.ECGenParameterSpec("sect163r2")); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair for the SM2 curve. + * SM2 is a Chinese cryptographic standard. + */ + public KeyPair generateSM2KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + // "sm2p256v1" is the standard SM2 curve. + kpg.initialize(new java.security.spec.ECGenParameterSpec("sm2p256v1")); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair for ES (Elliptic curve signature using EdDSA). + * This example uses Ed25519. + */ + public KeyPair generateESKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519", "BC"); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair for an "Other" elliptic curve type. + * This serves as a fallback example (using secp256r1). + */ + public KeyPair generateOtherEllipticCurveKeyPair() throws Exception { + return generateNISTKeyPair(); // Fallback to secp256r1 + } + + /** + * Main method demonstrating key pair generation for various curve types. + */ + public static void main(String[] args) { + try { + EllipticCurve1 examples = new EllipticCurve1(); + System.out.println("NIST (secp256r1): " + + Base64.getEncoder().encodeToString(examples.generateNISTKeyPair().getPublic().getEncoded())); + System.out.println("SEC (secp256k1): " + + Base64.getEncoder().encodeToString(examples.generateSECCurveKeyPair().getPublic().getEncoded())); + System.out.println("Brainpool (brainpoolP256r1): " + + Base64.getEncoder().encodeToString(examples.generateBrainpoolKeyPair().getPublic().getEncoded())); + System.out.println("Curve25519 (X25519): " + + Base64.getEncoder().encodeToString(examples.generateCurve25519KeyPair().getPublic().getEncoded())); + System.out.println("Curve448 (X448): " + + Base64.getEncoder().encodeToString(examples.generateCurve448KeyPair().getPublic().getEncoded())); + System.out.println("C2 (sect163r2): " + + Base64.getEncoder().encodeToString(examples.generateC2CurveKeyPair().getPublic().getEncoded())); + System.out.println("SM2 (sm2p256v1): " + + Base64.getEncoder().encodeToString(examples.generateSM2KeyPair().getPublic().getEncoded())); + System.out.println("ES (Ed25519): " + + Base64.getEncoder().encodeToString(examples.generateESKeyPair().getPublic().getEncoded())); + System.out.println("Other (Fallback, secp256r1): " + + Base64.getEncoder() + .encodeToString(examples.generateOtherEllipticCurveKeyPair().getPublic().getEncoded())); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve2.java b/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve2.java new file mode 100644 index 00000000000..41def510f18 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/EllipticCurve2.java @@ -0,0 +1,272 @@ +package com.example.crypto.algorithms; + +//import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyAgreement; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * EllipticCurve2 demonstrates real-world uses of elliptic curve algorithms, + * including key pair generation, key agreement (ECDH), digital signatures + * (ECDSA, EdDSA), and a simple simulation of ECIES (using ECDH + AES-GCM). + * + * Curve types shown include: - NIST (e.g., secp256r1) - SEC (e.g., secp256k1) - + * Brainpool (e.g., brainpoolP256r1) - CURVE25519 (for X25519 key agreement) - + * ES (e.g., Ed25519 for signatures) - Other fallback (e.g., secp256r1 for + * "OtherEllipticCurveType") + * + * Best practices: - Use ephemeral keys and a strong RNG. - Use proper key + * agreement (with a KDF if needed) and digital signature schemes. - Avoid + * static key reuse or using weak curves. + * + * SAST/CBOM considerations: - Secure implementations use ephemeral keys and + * modern curves. - Insecure practices (e.g., static keys or reusing keys) must + * be flagged. + */ +public class EllipticCurve2 { + + // static { + // // Register BouncyCastle provider for additional curves and algorithms. + // Security.addProvider(new BouncyCastleProvider()); + // } + // ---------------------------- + // 1. Key Pair Generation Examples + // ---------------------------- + /** + * Generates a key pair using a NIST curve (secp256r1). + */ + public KeyPair generateNISTKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + kpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair using a SEC curve (secp256k1). + */ + public KeyPair generateSECCurveKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + kpg.initialize(new ECGenParameterSpec("secp256k1"), new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair using a Brainpool curve (brainpoolP256r1). + */ + public KeyPair generateBrainpoolKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + kpg.initialize(new ECGenParameterSpec("brainpoolP256r1"), new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Generates an X25519 key pair. + */ + public KeyPair generateX25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X25519", "BC"); + return kpg.generateKeyPair(); + } + + /** + * Generates an Ed25519 key pair (used for signatures). + */ + public KeyPair generateEd25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519", "BC"); + return kpg.generateKeyPair(); + } + + /** + * Generates a key pair for "OtherEllipticCurveType" as a fallback (using + * secp256r1). + */ + public KeyPair generateOtherEllipticCurveKeyPair() throws Exception { + return generateNISTKeyPair(); + } + + // ---------------------------- + // 2. Key Agreement (ECDH) Examples + // ---------------------------- + /** + * Performs ECDH key agreement using two ephemeral NIST key pairs. Secure + * Example: Uses ephemeral keys and a strong RNG. + * + * @return The shared secret. + */ + public byte[] performECDHKeyAgreement() throws Exception { + KeyPair aliceKP = generateNISTKeyPair(); + KeyPair bobKP = generateNISTKeyPair(); + + KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC"); + ka.init(aliceKP.getPrivate()); + ka.doPhase(bobKP.getPublic(), true); + return ka.generateSecret(); + } + + /** + * Insecure ECDH Example: Uses a static key pair for both parties. SAST: + * Reusing the same key pair eliminates forward secrecy and is insecure. + * + * @return The (insecure) shared secret. + */ + public byte[] insecureECDHKeyAgreement() throws Exception { + KeyPair staticKP = generateNISTKeyPair(); + KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC"); + ka.init(staticKP.getPrivate()); + ka.doPhase(staticKP.getPublic(), true); + return ka.generateSecret(); + } + + // ---------------------------- + // 3. Digital Signature Examples + // ---------------------------- + /** + * Generates an ECDSA signature using a NIST key pair. Secure Example. + * + * @param message The message to sign. + * @return The signature. + */ + public byte[] generateECDSASignature(byte[] message) throws Exception { + KeyPair kp = generateNISTKeyPair(); + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initSign(kp.getPrivate()); + signature.update(message); + return signature.sign(); + } + + /** + * Verifies an ECDSA signature using the corresponding NIST key pair. + * + * @param message The original message. + * @param signatureBytes The signature to verify. + * @param kp The key pair used for signing. + * @return True if the signature is valid. + */ + public boolean verifyECDSASignature(byte[] message, byte[] signatureBytes, KeyPair kp) throws Exception { + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initVerify(kp.getPublic()); + signature.update(message); + return signature.verify(signatureBytes); + } + + /** + * Generates an Ed25519 signature. Secure Example: Ed25519 is a modern, + * high-performance signature scheme. + * + * @param message The message to sign. + * @return The signature. + */ + public byte[] generateEd25519Signature(byte[] message) throws Exception { + KeyPair kp = generateEd25519KeyPair(); + Signature signature = Signature.getInstance("Ed25519", "BC"); + signature.initSign(kp.getPrivate()); + signature.update(message); + return signature.sign(); + } + + /** + * Verifies an Ed25519 signature. + * + * @param message The original message. + * @param signatureBytes The signature to verify. + * @param kp The key pair used for signing. + * @return True if the signature is valid. + */ + public boolean verifyEd25519Signature(byte[] message, byte[] signatureBytes, KeyPair kp) throws Exception { + Signature signature = Signature.getInstance("Ed25519", "BC"); + signature.initVerify(kp.getPublic()); + signature.update(message); + return signature.verify(signatureBytes); + } + + // ---------------------------- + // 4. ECIES-like Encryption (ECDH + AES-GCM) + // ---------------------------- + /** + * A simple simulation of ECIES using ECDH for key agreement and AES-GCM for + * encryption. Secure Example: Uses ephemeral ECDH key pairs, a KDF to + * derive a symmetric key, and AES-GCM with a random nonce. + * + * @param plaintext The plaintext to encrypt. + * @return The concatenation of the ephemeral public key, IV, and ciphertext + * (Base64-encoded). + * @throws Exception if encryption fails. + */ + public String eciesEncryptionExample(byte[] plaintext) throws Exception { + // Generate ephemeral key pairs for two parties. + KeyPair senderKP = generateNISTKeyPair(); + KeyPair receiverKP = generateNISTKeyPair(); + + // Perform ECDH key agreement. + KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC"); + ka.init(senderKP.getPrivate()); + ka.doPhase(receiverKP.getPublic(), true); + byte[] sharedSecret = ka.generateSecret(); + + // Derive a symmetric key from the shared secret using SHA-256 (first 16 bytes + // for AES-128). + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] derivedKey = digest.digest(sharedSecret); + derivedKey = Arrays.copyOf(derivedKey, 16); + SecretKey aesKey = new SecretKeySpec(derivedKey, "AES"); + + // Encrypt plaintext using AES-GCM with a random nonce. + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + + // For ECIES, include the sender's ephemeral public key with the output. + byte[] senderPub = senderKP.getPublic().getEncoded(); + byte[] output = concatenate(senderPub, concatenate(iv, ciphertext)); + + return Base64.getEncoder().encodeToString(output); + } + + // ---------------------------- + // 5. Main Method for Demonstration + // ---------------------------- + public static void main(String[] args) { + try { + EllipticCurve2 test = new EllipticCurve2(); + + // Key Agreement Example: + byte[] sharedSecret = test.performECDHKeyAgreement(); + System.out.println("ECDH Shared Secret (Base64): " + Base64.getEncoder().encodeToString(sharedSecret)); + + // ECDSA Signature Example: + byte[] message = "Test message for ECDSA".getBytes(); + KeyPair nistKP = test.generateNISTKeyPair(); + byte[] ecdsaSig = test.generateECDSASignature(message); + boolean validSig = test.verifyECDSASignature(message, ecdsaSig, nistKP); + System.out.println("ECDSA Signature valid? " + validSig); + + // Ed25519 Signature Example: + byte[] edSig = test.generateEd25519Signature(message); + KeyPair edKP = test.generateEd25519KeyPair(); + boolean validEdSig = test.verifyEd25519Signature(message, edSig, edKP); + System.out.println("Ed25519 Signature valid? " + validEdSig); + + // ECIES-like Encryption Example: + String eciesOutput = test.eciesEncryptionExample("Secret ECIES Message".getBytes()); + System.out.println("ECIES-like Encrypted Output (Base64): " + eciesOutput); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private byte[] concatenate(byte[] a, byte[] b) { + byte[] result = new byte[a.length + b.length]; + System.arraycopy(a, 0, result, 0, a.length); + System.arraycopy(b, 0, result, a.length, b.length); + return result; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/Encryption1.java b/java/ql/test/experimental/library-tests/quantum/jca/Encryption1.java new file mode 100644 index 00000000000..74b2070d13e --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/Encryption1.java @@ -0,0 +1,182 @@ +package com.example.crypto.algorithms; + +//import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; + +/** + * This class demonstrates several encryption schemes along with SAST/CBOM + * classification notes. + * + * Methods include: + * + * 1. simpleAESEncryption: Uses AES in GCM mode. + * - CBOM: AES-GCM is classified as secure (Parent: AEAD). + * - SAST: Secure symmetric encryption pattern; safe when used properly. + * + * 2. insecureAESWithECB: Uses AES in ECB mode. + * - CBOM: AES-ECB is classified as insecure (Parent: SymmetricEncryption). + * - SAST: Insecure encryption pattern; flagged as vulnerable due to lack of IV + * and predictable structure. + * + * 3. rsaOaepEncryption / rsaOaepDecryption: Use RSA with OAEP padding. + * - CBOM: RSA-OAEP is classified as secure for public-key encryption (Parent: + * Hybrid Cryptosystem). + * - SAST: Secure for small payloads/key encapsulation; must only encrypt small + * data blocks. + * + * 4. rsaKemEncryption: Demonstrates a key encapsulation mechanism (KEM) using + * RSA-OAEP. + * - CBOM: RSA-KEM is recognized as secure (Parent: RSA-OAEP based KEM). + * - SAST: Secure when used to encapsulate symmetric keys in a hybrid system. + * + * 5. hybridEncryption: Combines RSA-OAEP for key encapsulation with AES-GCM for + * data encryption. + * - CBOM: Hybrid encryption (Parent: RSA-OAEP + AES-GCM) is classified as + * secure. + * - SAST: Secure hybrid encryption pattern; recommended for large data + * encryption. + */ +public class Encryption1 { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + + /** + * Simple AES-GCM encryption. + * + * SAST/CBOM Notes: + * - Algorithm: AES/GCM/NoPadding with a 256-bit key. + * - Parent Classification: AEAD (Authenticated Encryption with Associated + * Data). + * - SAST: Considered safe when properly implemented (uses IV and tag). + */ + public void simpleAESEncryption() throws Exception { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // 256-bit AES key. + SecretKey key = keyGen.generateKey(); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); // 128-bit authentication tag. + cipher.init(Cipher.ENCRYPT_MODE, key, gcmSpec); + byte[] encryptedData = cipher.doFinal("Sensitive Data".getBytes()); + System.out.println("AES-GCM Encrypted Data: " + Base64.getEncoder().encodeToString(encryptedData)); + } + + /** + * Insecure AES encryption using ECB mode. + * + * SAST/CBOM Notes: + * - Algorithm: AES/ECB/NoPadding with a 256-bit key. + * - Parent Classification: SymmetricEncryption (ECB mode is inherently + * insecure). + * - SAST: Flagged as vulnerable; ECB mode does not use an IV and reveals data + * patterns. + */ + public void insecureAESWithECB() throws Exception { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // 256-bit AES key. + SecretKey key = keyGen.generateKey(); + // AES/ECB mode is insecure due to the deterministic nature of the block cipher + // without an IV. + Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, key); + byte[] encryptedData = cipher.doFinal("Sensitive Data".getBytes()); + System.out.println("AES-ECB Encrypted Data (Insecure): " + Base64.getEncoder().encodeToString(encryptedData)); + } + + /** + * RSA encryption using OAEP with SHA-256 and MGF1 padding. + * + * SAST/CBOM Notes: + * - Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding. + * - Parent Classification: Hybrid Cryptosystem. RSA-OAEP is commonly used in + * hybrid schemes. + * - SAST: Secure for encrypting small payloads or for key encapsulation; + * caution when encrypting large data. + */ + public void rsaOaepEncryption(PublicKey publicKey, String data) throws Exception { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] encryptedData = cipher.doFinal(data.getBytes()); + System.out.println("RSA-OAEP Encrypted Data: " + Base64.getEncoder().encodeToString(encryptedData)); + } + + /** + * RSA decryption using OAEP with SHA-256 and MGF1 padding. + * + * SAST/CBOM Notes: + * - Algorithm: RSA/ECB/OAEPWithSHA-256AndMGF1Padding. + * - Parent Classification: Hybrid Cryptosystem. + * - SAST: Secure when used with the correct corresponding private key. + */ + public void rsaOaepDecryption(PrivateKey privateKey, byte[] encryptedData) throws Exception { + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] decryptedData = cipher.doFinal(encryptedData); + System.out.println("Decrypted RSA-OAEP Data: " + new String(decryptedData)); + } + + /** + * RSA-KEM encryption: encapsulates an AES key using RSA-OAEP. + * + * SAST/CBOM Notes: + * - Algorithm: RSA-OAEP used as a Key Encapsulation Mechanism (KEM) for an AES + * key. + * - Parent Classification: RSA-OAEP based KEM. + * - SAST: Recognized as a secure key encapsulation pattern; used as part of + * hybrid encryption schemes. + */ + public void rsaKemEncryption(PublicKey rsaPublicKey) throws Exception { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // 256-bit AES key. + SecretKey aesKey = keyGen.generateKey(); + + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + rsaCipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey); + byte[] encryptedAesKey = rsaCipher.doFinal(aesKey.getEncoded()); + + System.out.println("RSA-KEM Encrypted AES Key: " + Base64.getEncoder().encodeToString(encryptedAesKey)); + } + + /** + * Hybrid encryption: combines RSA-OAEP for key encapsulation with AES-GCM for + * data encryption. + * + * SAST/CBOM Notes: + * - Algorithms: RSA-OAEP (for encrypting the AES key) and AES-GCM (for + * encrypting the data). + * - Parent Classification: Hybrid Cryptosystem (RSA-OAEP + AES-GCM). + * - SAST: This pattern is considered secure when implemented correctly; + * recommended for large data encryption. + */ + public void hybridEncryption(PublicKey rsaPublicKey, String data) throws Exception { + // Generate a 256-bit AES key for symmetric encryption. + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + SecretKey aesKey = keyGen.generateKey(); + + // Encrypt the AES key using RSA-OAEP. + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + rsaCipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey); + byte[] encryptedAesKey = rsaCipher.doFinal(aesKey.getEncoded()); + + // Encrypt the actual data using AES-GCM. + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + byte[] encryptedData = aesCipher.doFinal(data.getBytes()); + + System.out.println( + "Hybrid Encryption - Encrypted AES Key: " + Base64.getEncoder().encodeToString(encryptedAesKey)); + System.out.println("Hybrid Encryption - Encrypted Data: " + Base64.getEncoder().encodeToString(encryptedData)); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/Encryption2.java b/java/ql/test/experimental/library-tests/quantum/jca/Encryption2.java new file mode 100644 index 00000000000..edcfa030204 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/Encryption2.java @@ -0,0 +1,179 @@ +package com.example.crypto.algorithms; + +//import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyAgreement; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * This class demonstrates encryption schemes using elliptic-curve + * Diffie-Hellman (ECDH) and hybrid encryption methods, including a post-quantum + * hybrid scheme. + * + * SAST/CBOM Classification: + * + * 1. EC Key Generation & ECDH Key Agreement: - Parent Classification: + * Asymmetric Key Generation / Key Agreement. - SAST: Secure when using + * established curves (secp256r1) and reputable providers (BouncyCastle). + * + * 2. ECDH Hybrid Encryption: - Parent Classification: Hybrid Cryptosystem (ECDH + * + AEAD). - SAST: Uses ECDH for key agreement and AES/GCM for encryption. + * However, the derivation of an AES key by applying a single SHA-256 hash to + * the shared secret may be flagged as a weak key derivation method. A dedicated + * KDF (e.g., HKDF) is recommended. + * + * 3. Post-Quantum Hybrid Encryption: - Parent Classification: Hybrid + * Cryptosystem (Classical ECDH + Post-Quantum Secret + KDF + AEAD). - SAST: + * Combining classical and post-quantum components is advanced and secure if + * implemented properly. The custom HKDF expand function provided here is + * simplistic and may be flagged in a CBOM analysis; a standard HKDF library + * should be used in production. + */ +public class Encryption2 { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + /** + * Generates an Elliptic Curve (EC) key pair using the secp256r1 curve. + * + * SAST/CBOM Notes: - Algorithm: EC key pair generation. - Parent + * Classification: Asymmetric Key Generation. - SAST: Considered secure when + * using strong randomness and a reputable provider. + * + * @return an EC KeyPair. + */ + public KeyPair generateECKeyPair() throws Exception { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC", "BC"); + keyPairGenerator.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return keyPairGenerator.generateKeyPair(); + } + + /** + * Derives a shared secret using Elliptic Curve Diffie-Hellman (ECDH). + * + * SAST/CBOM Notes: - Algorithm: ECDH key agreement. - Parent + * Classification: Asymmetric Key Agreement. - SAST: Secure when both + * parties use strong EC keys and proper randomness. + * + * @param privateKey the private key of one party. + * @param publicKey the public key of the other party. + * @return the derived shared secret as a byte array. + */ + public byte[] deriveSharedSecret(PrivateKey privateKey, PublicKey publicKey) throws Exception { + KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "BC"); + keyAgreement.init(privateKey); + keyAgreement.doPhase(publicKey, true); + return keyAgreement.generateSecret(); + } + + /** + * Performs hybrid encryption using ECDH to derive a shared secret, then + * derives an AES key by hashing the shared secret with SHA-256, and finally + * encrypts the data with AES-GCM. + * + * SAST/CBOM Notes: - Parent Classification: Hybrid Cryptosystem (ECDH + + * AES-GCM). - SAST: While ECDH and AES-GCM are secure, the key derivation + * method here (a single SHA-256 hash) is not as robust as using a dedicated + * KDF. This approach may be flagged and is recommended for improvement. + * + * @param recipientPublicKey the recipient's public EC key. + * @param data the plaintext data to encrypt. + */ + public void ecdhHybridEncryption(PublicKey recipientPublicKey, String data) throws Exception { + // Generate an ephemeral EC key pair for the sender. + KeyPair senderKeyPair = generateECKeyPair(); + // Derive the shared secret using ECDH. + byte[] sharedSecret = deriveSharedSecret(senderKeyPair.getPrivate(), recipientPublicKey); + + // Derive an AES key by hashing the shared secret with SHA-256. + // SAST Note: Using a direct hash for key derivation is simplistic and may be + // flagged. + MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); + byte[] aesKeyBytes = sha256.digest(sharedSecret); + // Use the first 16 bytes (128 bits) as the AES key. + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, 0, 16, "AES"); + + // Encrypt the data using AES-GCM. + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); // 128-bit authentication tag. + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + byte[] encryptedData = aesCipher.doFinal(data.getBytes()); + + System.out.println( + "ECDH Hybrid Encryption - Encrypted Data: " + Base64.getEncoder().encodeToString(encryptedData)); + } + + /** + * Performs post-quantum hybrid encryption by combining a classical + * ECDH-derived secret with a post-quantum shared secret. The two secrets + * are combined using a custom HKDF expansion, and the derived key is used + * to encrypt data with AES-GCM. + * + * SAST/CBOM Notes: - Parent Classification: Hybrid Cryptosystem (Classical + * ECDH + Post-Quantum Secret + KDF + AES-GCM). - SAST: The combination of + * classical and post-quantum secrets is a modern approach. However, the + * custom HKDF expand function is simplistic and may be flagged as insecure. + * Use a standard HKDF implementation in production. + * + * @param ecPublicKey the recipient's EC public key. + * @param pqSharedSecret the post-quantum shared secret from a separate + * algorithm. + */ + public void postQuantumHybridEncryption(PublicKey ecPublicKey, byte[] pqSharedSecret) throws Exception { + // Step 1: Perform classical ECDH key agreement to derive a shared secret. + byte[] ecdhSharedSecret = deriveSharedSecret(generateECKeyPair().getPrivate(), ecPublicKey); + + // Step 2: Combine the ECDH secret and the post-quantum secret using a + // simplified HKDF expansion. + // SAST Note: This custom HKDF implementation is minimal and does not follow the + // full HKDF spec. + byte[] combinedSecret = hkdfExpand(ecdhSharedSecret, pqSharedSecret, 32); + // Use the first 16 bytes as the AES key (128-bit key). + SecretKey aesKey = new SecretKeySpec(combinedSecret, 0, 16, "AES"); + + // Step 3: Encrypt the data using AES-GCM. + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + byte[] encryptedData = aesCipher.doFinal("Post-Quantum Hybrid Encryption Data".getBytes()); + + System.out.println("Post-Quantum Hybrid Encryption - Encrypted Data: " + + Base64.getEncoder().encodeToString(encryptedData)); + } + + /** + * A simplified HKDF expansion function that uses HMAC-SHA256 to derive a + * key of a desired length. + * + * SAST/CBOM Notes: - Parent Classification: Key Derivation Function (KDF). + * - SAST: Custom KDF implementations are risky if not thoroughly vetted. + * This simple HKDF expand function lacks the full HKDF mechanism (e.g., + * multiple iterations, info, and context parameters) and may be flagged. It + * is recommended to use a standardized HKDF library. + * + * @param inputKey the input key material. + * @param salt a salt value (here, the post-quantum shared secret is used as + * the salt). + * @param length the desired length of the derived key. + * @return a derived key of the specified length. + */ + private byte[] hkdfExpand(byte[] inputKey, byte[] salt, int length) throws Exception { + Mac hmac = Mac.getInstance("HmacSHA256"); + SecretKey secretKey = new SecretKeySpec(salt, "HmacSHA256"); + hmac.init(secretKey); + byte[] extractedKey = hmac.doFinal(inputKey); + return Arrays.copyOf(extractedKey, length); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/Hash.java b/java/ql/test/experimental/library-tests/quantum/jca/Hash.java new file mode 100644 index 00000000000..d4e6985eac6 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/Hash.java @@ -0,0 +1,313 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.crypto.digests.SHA3Digest; +// import org.bouncycastle.crypto.digests.Blake2bDigest; +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.*; +import java.util.Base64; +import java.util.Properties; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.SecretKeySpec; +import javax.crypto.spec.PBEKeySpec; + +/** + * This class demonstrates various hashing, HMAC, and password hashing + * techniques. + * + * SAST/CBOM Classification Notes: + * + * 1. simpleSHA256Hash: - Parent Classification: Cryptographic Hash Function. - + * SAST: Uses SHA-256, which is widely regarded as secure. + * + * 2. insecureMD5Hash: - Parent Classification: Cryptographic Hash Function. - + * SAST: MD5 is cryptographically broken and should be flagged as insecure. + * + * 3. hashWithBouncyCastleSHA3: - Parent Classification: Cryptographic Hash + * Function (SHA3). - SAST: Uses SHA3-256 from BouncyCastle; considered secure. + * + * 4. hashWithBouncyCastleBlake2b: - Parent Classification: Cryptographic Hash + * Function (BLAKE2). - SAST: Uses BLAKE2b-512; considered secure if used + * correctly. + * + * 5. hashAndSign & verifyHashSignature: - Parent Classification: Digital + * Signature (RSA-based). - SAST: Uses SHA256withRSA for signing and + * verification; secure if key management is proper. + * + * 6. hashForDataIntegrityCheck: - Parent Classification: Data Integrity Check. + * - SAST: Uses SHA-256 to verify integrity; considered secure. + * + * 7. hashWithVariousAlgorithms: - Parent Classification: Cryptographic Hash + * Function. - SAST: Iterates through multiple algorithms; insecure algorithms + * (MD5, SHA-1) may be flagged. + * + * 8. hmacWithVariousAlgorithms: - Parent Classification: Message Authentication + * Code (MAC). - SAST: Iterates through various HMAC algorithms; HmacSHA1 is + * considered weaker than SHA256 and above. + * + * 9. hashForPasswordStorage: - Parent Classification: Password-Based Key + * Derivation Function (PBKDF). - SAST: Uses PBKDF2WithHmacSHA256 with salt and + * iteration count; considered secure, though iteration counts should be + * reviewed against current standards. + * + * 10. hashFromUnknownConfig: - Parent Classification: Dynamic Cryptographic + * Hash Function. - SAST: Loading the hash algorithm from an external + * configuration introduces risk of misconfiguration. + * + * 11. insecureHashBasedRNG: - Parent Classification: Pseudo-Random Number + * Generator (PRNG) using hash. - SAST: Uses a fixed seed with various hash + * algorithms; flagged as insecure due to predictability. + */ +public class Hash { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + /** + * Computes a SHA-256 hash of static test data. + * + * CBOM/SAST Classification: - Uses SHA-256: Classified as secure. + */ + public void simpleSHA256Hash() throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest("Simple Test Data".getBytes()); + System.out.println("SHA-256 Hash: " + Base64.getEncoder().encodeToString(hash)); + } + + /** + * Computes an MD5 hash of static data. + * + * CBOM/SAST Classification: - Uses MD5: Classified as insecure. - SAST: MD5 + * is deprecated for cryptographic purposes due to collision + * vulnerabilities. + */ + public void insecureMD5Hash() throws Exception { + MessageDigest md5Digest = MessageDigest.getInstance("MD5"); + byte[] hash = md5Digest.digest("Weak Hash Example".getBytes()); + System.out.println("MD5 Hash (Insecure): " + Base64.getEncoder().encodeToString(hash)); + } + + // /** + // * Computes a SHA3-256 hash using BouncyCastle's SHA3Digest. + // * + // * CBOM/SAST Classification: + // * - Uses SHA3-256: Classified as secure. + // * - SAST: BouncyCastle's implementation is considered reliable. + // */ + // public void hashWithBouncyCastleSHA3(String input) { + // SHA3Digest digest = new SHA3Digest(256); + // byte[] inputBytes = input.getBytes(); + // digest.update(inputBytes, 0, inputBytes.length); + // byte[] hash = new byte[digest.getDigestSize()]; + // digest.doFinal(hash, 0); + // System.out.println("SHA3-256 (BC) Hash: " + Base64.getEncoder().encodeToString(hash)); + // } + // /** + // * Computes a BLAKE2b-512 hash using BouncyCastle's Blake2bDigest. + // * + // * CBOM/SAST Classification: + // * - Uses BLAKE2b-512: Classified as secure. + // * - SAST: BLAKE2b is modern and fast, considered secure when used correctly. + // */ + // public void hashWithBouncyCastleBlake2b(String input) { + // Blake2bDigest digest = new Blake2bDigest(512); + // byte[] inputBytes = input.getBytes(); + // digest.update(inputBytes, 0, inputBytes.length); + // byte[] hash = new byte[digest.getDigestSize()]; + // digest.doFinal(hash, 0); + // System.out.println("BLAKE2b-512 (BC) Hash: " + Base64.getEncoder().encodeToString(hash)); + // } + /** + * Signs the hash of the input using SHA256withRSA. + * + * CBOM/SAST Classification: - Digital Signature (RSA): Classified as secure + * if keys are managed correctly. - SAST: The combination of SHA256 and RSA + * is a standard and secure pattern. + * + * @param input The input data to be signed. + * @param privateKey The RSA private key used for signing. + */ + public void hashAndSign(String input, PrivateKey privateKey) throws Exception { + Signature signature = Signature.getInstance("SHA256withRSA"); + signature.initSign(privateKey); + signature.update(input.getBytes()); + byte[] signedData = signature.sign(); + System.out.println("Signed Hash: " + Base64.getEncoder().encodeToString(signedData)); + } + + /** + * Verifies the signature of the input data. + * + * CBOM/SAST Classification: - Digital Signature Verification: Classified as + * secure when using SHA256withRSA. - SAST: Should correctly verify that the + * signed hash matches the input. + * + * @param input The original input data. + * @param signedHash The signed hash to verify. + * @param publicKey The RSA public key corresponding to the private key that + * signed the data. + * @return true if the signature is valid, false otherwise. + */ + public boolean verifyHashSignature(String input, byte[] signedHash, PublicKey publicKey) throws Exception { + Signature signature = Signature.getInstance("SHA256withRSA"); + signature.initVerify(publicKey); + signature.update(input.getBytes()); + return signature.verify(signedHash); + } + + /** + * Computes a SHA-256 hash for data integrity checking and compares it with + * an expected hash. + * + * CBOM/SAST Classification: - Data Integrity: Uses SHA-256 for integrity + * checks, which is secure. - SAST: A correct implementation for verifying + * data has not been tampered with. + * + * @param data The input data. + * @param expectedHash The expected Base64-encoded hash. + */ + public void hashForDataIntegrityCheck(String data, String expectedHash) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(data.getBytes()); + String computedHash = Base64.getEncoder().encodeToString(hash); + System.out.println("Computed Hash: " + computedHash); + System.out.println("Validation: " + (computedHash.equals(expectedHash) ? "Pass" : "Fail")); + } + + /** + * Computes hashes of the input data using various algorithms. + * + * CBOM/SAST Classification: - Cryptographic Hash Functions: Iterates + * through multiple hash functions. - SAST: While many are secure (e.g., + * SHA-256, SHA-512, SHA3), MD5 and SHA-1 are insecure and should be flagged + * if used in security-critical contexts. + * + * @param input The input data to hash. + */ + public void hashWithVariousAlgorithms(String input) throws Exception { + String[] algorithms = {"SHA-1", "SHA-224", "SHA-256", "SHA-384", "SHA-512", "SHA3-256", "SHA3-512", + "BLAKE2B-512", "BLAKE2S-256", "MD5"}; + for (String algorithm : algorithms) { + MessageDigest digest = MessageDigest.getInstance(algorithm); + byte[] hash = digest.digest(input.getBytes()); + System.out.println(algorithm + " Hash: " + Base64.getEncoder().encodeToString(hash)); + } + } + + /** + * Computes HMACs of the input data using various algorithms. + * + * CBOM/SAST Classification: - Message Authentication Code (MAC): Iterates + * through different HMAC algorithms. - SAST: HmacSHA256, HmacSHA384, + * HmacSHA512, HmacSHA3-256, and HmacSHA3-512 are secure; HmacSHA1 is + * considered less secure and may be flagged. + * + * @param input The input data. + * @param key The secret key used for HMAC computation. + */ + public void hmacWithVariousAlgorithms(String input, byte[] key) throws Exception { + String[] algorithms = {"HmacSHA1", "HmacSHA256", "HmacSHA384", "HmacSHA512", "HmacSHA3-256", "HmacSHA3-512"}; + for (String algorithm : algorithms) { + Mac mac = Mac.getInstance(algorithm); + SecretKey secretKey = new SecretKeySpec(key, algorithm); + mac.init(secretKey); + byte[] hmac = mac.doFinal(input.getBytes()); + System.out.println(algorithm + " HMAC: " + Base64.getEncoder().encodeToString(hmac)); + } + } + + /** + * Computes a PBKDF2 hash for password storage. + * + * CBOM/SAST Classification: - Password-Based Key Derivation Function + * (PBKDF): Uses PBKDF2WithHmacSHA256. - SAST: Considered secure when using + * a strong salt and an appropriate iteration count. Note: The iteration + * count (10000) should be reviewed against current security standards. + * + * @param password The password to hash. + */ + public void hashForPasswordStorage(String password) throws Exception { + byte[] salt = generateSecureSalt(16); + // 10,000 iterations and a 256-bit derived key. + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] hash = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 Hash: " + Base64.getEncoder().encodeToString(hash)); + } + + /** + * Dynamically loads a hash algorithm from configuration and computes a + * hash. + * + * CBOM/SAST Classification: - Dynamic Cryptographic Hash Selection: + * Algorithm is loaded from a config file. - SAST: May be flagged as risky + * because an insecure or unintended algorithm might be chosen. + */ + public void hashFromUnknownConfig() throws Exception { + String algorithm = loadHashAlgorithmFromConfig("config.properties"); + MessageDigest digest = MessageDigest.getInstance(algorithm); + byte[] hash = digest.digest("Config-based Hashing".getBytes()); + System.out.println("Dynamically Loaded Hash Algorithm (" + algorithm + "): " + + Base64.getEncoder().encodeToString(hash)); + } + + /** + * Demonstrates an insecure method for generating pseudo-random bytes by + * using a fixed seed with hash algorithms. + * + * CBOM/SAST Classification: - Insecure RNG: Uses a fixed seed with various + * hash algorithms. - SAST: This approach is insecure because it produces + * predictable output and should be flagged. + */ + public void insecureHashBasedRNG() throws Exception { + String[] algorithms = {"SHA-256", "SHA-512", "SHA3-256", "SHA3-512"}; + for (String algorithm : algorithms) { + MessageDigest digest = MessageDigest.getInstance(algorithm); + byte[] seed = "fixed-seed".getBytes(); // Fixed seed: insecure and predictable. + digest.update(seed); + byte[] pseudoRandomBytes = digest.digest(); + System.out.println("Insecure RNG using " + algorithm + ": " + + Base64.getEncoder().encodeToString(pseudoRandomBytes)); + } + } + + /** + * Loads the hash algorithm from an external configuration file. + * + * CBOM/SAST Classification: - Dynamic Configuration: External config + * loading. - SAST: The use of external configuration may introduce risks if + * the config file is compromised. + * + * @param configPath Path to the configuration file. + * @return The hash algorithm to be used (default is SHA-256). + */ + private String loadHashAlgorithmFromConfig(String configPath) { + Properties properties = new Properties(); + try (FileInputStream fis = new FileInputStream(configPath)) { + properties.load(fis); + } catch (IOException e) { + e.printStackTrace(); + } + return properties.getProperty("hash.algorithm", "SHA-256"); + } + + /** + * Generates a secure salt using a cryptographically strong random number + * generator. + * + * CBOM/SAST Classification: - Secure Salt Generation: Uses SecureRandom. - + * SAST: This is a best-practice approach for generating salts for password + * hashing. + * + * @param length The desired salt length. + * @return A byte array representing the salt. + */ + private byte[] generateSecureSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/IVArtifact.java b/java/ql/test/experimental/library-tests/quantum/jca/IVArtifact.java new file mode 100644 index 00000000000..dfd94d82358 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/IVArtifact.java @@ -0,0 +1,285 @@ +package com.example.crypto.artifacts; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.GCMParameterSpec; +import java.security.*; +import java.util.Base64; +import java.util.random.*; +import java.util.Properties; +import java.util.Random; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Arrays; + +public class IVArtifact { + + // static { + // Security.addProvider(new BouncyCastleProvider()); // Ensure BouncyCastle is available + // } + /** + * Simple Case: Generates a secure IV and encrypts with + * AES/CBC/PKCS5Padding. + */ + public void simpleIVEncryption() throws Exception { + SecretKey key = generateAESKey(); + IvParameterSpec ivSpec = new IvParameterSpec(secureIV(16)); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + + public void encryptWithIV(byte[] plaintext, SecretKey key, IvParameterSpec ivSpec, String cipherAlgorithm) + throws Exception { + Cipher cipher = Cipher.getInstance(cipherAlgorithm); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + } + + public void complexIVFlow() { + IvParameterSpec ivSpec = new IvParameterSpec(useSecureMethod() ? secureIV(16) : insecureIV(16)); + processIV(ivSpec); + + // Example dynamic cipher selection with IV usage + String cipherAlgorithm = loadCipherAlgorithm(); + try { + encryptWithIV("Sensitive Data".getBytes(), generateAESKey(), ivSpec, cipherAlgorithm); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private boolean useSecureMethod() { + return System.currentTimeMillis() % 2 == 0; + } + + private void processIV(IvParameterSpec ivSpec) { + String ivBase64 = Base64.getEncoder().encodeToString(ivSpec.getIV()); + } + + private String loadCipherAlgorithm() { + Properties properties = new Properties(); + try { + properties.load(new FileInputStream("crypto-config.properties")); + } catch (IOException e) { + e.printStackTrace(); + } + return properties.getProperty("cipher.algorithm", "AES/CBC/PKCS5Padding"); + } + + private SecretKey generateAESKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + return keyGen.generateKey(); + } + + private byte[] secureIV(int length) { + byte[] iv = new byte[length]; + new SecureRandom().nextBytes(iv); + return iv; + } + + private byte[] insecureIV(int length) { + byte[] iv = new byte[length]; + new Random().nextBytes(iv); + return iv; + } + + // ------------------------------- + // 1. Direct Fixed IV Usage + // ------------------------------- + /** + * Encrypts plaintext using AES-GCM with a fixed IV (all zeros). This is an + * insecure practice as IV reuse in AES-GCM undermines confidentiality and + * integrity. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] encryptWithFixedIV(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] fixedIV = new byte[12]; // 12-byte fixed IV (all zeros) + GCMParameterSpec spec = new GCMParameterSpec(128, fixedIV); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + return cipher.doFinal(plaintext); + } + + // ------------------------------- + // 2. Cached IV Usage + // ------------------------------- + // Cache an IV for reuse in multiple encryptions (insecure) + private byte[] cachedIV = null; + + /** + * Encrypts plaintext using AES-GCM with an IV cached from the first call. + * Reusing the same IV across multiple encryptions is insecure. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] encryptWithCachedIV(SecretKey key, byte[] plaintext) throws Exception { + if (cachedIV == null) { + cachedIV = new byte[12]; + new SecureRandom().nextBytes(cachedIV); + } + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec spec = new GCMParameterSpec(128, cachedIV); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + return cipher.doFinal(plaintext); + } + + // ------------------------------- + // 3. Indirect IV Reuse via Deterministic Derivation + // ------------------------------- + /** + * Encrypts plaintext using AES-GCM with an IV derived deterministically + * from a constant. This method computes a SHA-256 hash of a constant string + * and uses the first 12 bytes as the IV. Such derived IVs are fixed and + * must not be reused. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] encryptWithDerivedIV(SecretKey key, byte[] plaintext) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] constantHash = digest.digest("fixedConstant".getBytes("UTF-8")); + byte[] derivedIV = Arrays.copyOf(constantHash, 12); // Deterministically derived IV + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec spec = new GCMParameterSpec(128, derivedIV); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + return cipher.doFinal(plaintext); + } + + // ------------------------------- + // 4. Reusing a Single IV Across Multiple Messages + // ------------------------------- + /** + * Encrypts an array of plaintext messages using AES-GCM with the same IV + * for every message. Reusing an IV across messages is insecure in + * authenticated encryption schemes. + * + * @param key The AES key. + * @param plaintexts An array of plaintext messages. + * @return An array of ciphertexts. + * @throws Exception if encryption fails. + */ + public byte[][] encryptMultipleMessagesWithSameIV(SecretKey key, byte[][] plaintexts) throws Exception { + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); // Generate once and reuse + byte[][] ciphertexts = new byte[plaintexts.length][]; + for (int i = 0; i < plaintexts.length; i++) { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + ciphertexts[i] = cipher.doFinal(plaintexts[i]); + } + return ciphertexts; + } + + /** + * Encrypts the given plaintext using AES-GCM with the provided key and IV. + * + * @param key The AES key. + * @param ivSpec The IV specification. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext (IV is not prepended here for clarity). + * @throws Exception if encryption fails. + */ + public byte[] encrypt(SecretKey key, IvParameterSpec ivSpec, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + // Use 128-bit authentication tag length. + GCMParameterSpec spec = new GCMParameterSpec(128, ivSpec.getIV()); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + return cipher.doFinal(plaintext); + } + + /** + * Example 1: Reuses the same IvParameterSpec object across two encryption + * calls. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return An array containing two ciphertexts generated with the same + * IvParameterSpec. + * @throws Exception if encryption fails. + */ + public byte[][] encryptUsingSameIvParameterSpec(SecretKey key, byte[] plaintext) throws Exception { + // Fixed IV (all zeros for demonstration purposes; insecure in production) + byte[] fixedIV = new byte[12]; + IvParameterSpec fixedIvSpec = new IvParameterSpec(fixedIV); + // Encrypt the plaintext twice using the same IvParameterSpec. + byte[] ciphertext1 = encrypt(key, fixedIvSpec, plaintext); + byte[] ciphertext2 = encrypt(key, fixedIvSpec, plaintext); + return new byte[][]{ciphertext1, ciphertext2}; + } + + /** + * Example 2: Creates two different IvParameterSpec objects that share the + * same underlying IV array. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return An array containing two ciphertexts generated with two + * IvParameterSpec objects constructed from the same IV array. + * @throws Exception if encryption fails. + */ + public byte[][] encryptUsingDifferentIvSpecSameIVArray(SecretKey key, byte[] plaintext) throws Exception { + // Create a fixed IV array (all zeros for demonstration; insecure in production) + byte[] fixedIV = new byte[12]; + // Create two distinct IvParameterSpec objects from the same IV array reference. + IvParameterSpec ivSpec1 = new IvParameterSpec(fixedIV); + IvParameterSpec ivSpec2 = new IvParameterSpec(fixedIV); + // Encrypt the plaintext twice. + byte[] ciphertext1 = encrypt(key, ivSpec1, plaintext); + byte[] ciphertext2 = encrypt(key, ivSpec2, plaintext); + return new byte[][]{ciphertext1, ciphertext2}; + } + + // ------------------------------- + // Main Method for Demonstration + // ------------------------------- + public static void main(String[] args) { + try { + IVArtifact test = new IVArtifact(); + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + SecretKey key = kg.generateKey(); + byte[] plaintext = "Sensitive Data".getBytes(); + + // Example 1: Fixed IV usage + byte[] fixedIVCipher1 = test.encryptWithFixedIV(key, plaintext); + byte[] fixedIVCipher2 = test.encryptWithFixedIV(key, plaintext); + System.out.println("Fixed IV Encryption 1: " + Base64.getEncoder().encodeToString(fixedIVCipher1)); + System.out.println("Fixed IV Encryption 2: " + Base64.getEncoder().encodeToString(fixedIVCipher2)); + + // Example 2: Cached IV usage + byte[] cachedIVCipher1 = test.encryptWithCachedIV(key, plaintext); + byte[] cachedIVCipher2 = test.encryptWithCachedIV(key, plaintext); + System.out.println("Cached IV Encryption 1: " + Base64.getEncoder().encodeToString(cachedIVCipher1)); + System.out.println("Cached IV Encryption 2: " + Base64.getEncoder().encodeToString(cachedIVCipher2)); + + // Example 3: Indirect IV (derived) + byte[] derivedIVCipher = test.encryptWithDerivedIV(key, plaintext); + System.out.println("Derived IV Encryption: " + Base64.getEncoder().encodeToString(derivedIVCipher)); + + // Example 4: Reusing the same IV across multiple messages + byte[][] messages = {"Message One".getBytes(), "Message Two".getBytes(), "Message Three".getBytes()}; + byte[][] multiCiphers = test.encryptMultipleMessagesWithSameIV(key, messages); + for (int i = 0; i < multiCiphers.length; i++) { + System.out.println("Multi-message Encryption " + (i + 1) + ": " + + Base64.getEncoder().encodeToString(multiCiphers[i])); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/KeyAgreementHybridCryptosystem.java b/java/ql/test/experimental/library-tests/quantum/jca/KeyAgreementHybridCryptosystem.java new file mode 100644 index 00000000000..6f9bd06b4e7 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/KeyAgreementHybridCryptosystem.java @@ -0,0 +1,272 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +// import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyAgreement; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * KeyAgreementHybridCryptosystem demonstrates two hybrid cryptosystems: + * + * 1. ECDH + AES-GCM: - Secure Flow: Uses ephemeral ECDH key pairs on secp256r1, + * applies a simple KDF (SHA-256) to derive a 128-bit AES key, and uses AES-GCM + * with a random 12-byte nonce. - Insecure Flow: Reuses a static key pair, uses + * raw shared secret truncation, and employs a fixed (zero) IV. + * + * 2. X25519 + ChaCha20-Poly1305: - Secure Flow: Uses ephemeral X25519 key + * pairs, applies a KDF (SHA-256) to derive a 256-bit key, and uses + * ChaCha20-Poly1305 with a random nonce. - Insecure Flow: Reuses a static key + * pair, directly truncates the shared secret without a proper KDF, and uses a + * fixed nonce. + * + * SAST/CBOM Notes: - Secure flows use proper ephemeral key generation, a simple + * KDF, and random nonces. - Insecure flows use static keys, fixed nonces, and + * raw shared secret truncation. + */ +public class KeyAgreementHybridCryptosystem { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // Security.addProvider(new BouncyCastlePQCProvider()); + // } + // ---------- Helper Methods ---------- + /** + * Generates an ephemeral ECDH key pair on secp256r1. + */ + public KeyPair generateECDHKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", "BC"); + kpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Generates an ephemeral X25519 key pair. + */ + public KeyPair generateX25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X25519", "BC"); + kpg.initialize(255, new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Derives a shared secret using the provided key agreement algorithm. + */ + public byte[] deriveSharedSecret(PrivateKey privateKey, PublicKey publicKey, String algorithm) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance(algorithm, "BC"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + /** + * A simple KDF that hashes the input with SHA-256 and returns the first + * numBytes. + */ + public byte[] simpleKDF(byte[] input, int numBytes) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] hash = digest.digest(input); + return Arrays.copyOf(hash, numBytes); + } + + /** + * Concatenates two byte arrays. + */ + public byte[] concatenate(byte[] a, byte[] b) { + byte[] result = new byte[a.length + b.length]; + System.arraycopy(a, 0, result, 0, a.length); + System.arraycopy(b, 0, result, a.length, b.length); + return result; + } + + // =============================================== + // 1. ECDH + AES-GCM Flows + // =============================================== + /** + * Secure hybrid encryption using ECDH and AES-GCM. Uses ephemeral key + * pairs, applies a simple KDF to derive a 128-bit AES key, and uses AES-GCM + * with a random 12-byte nonce. + */ + public byte[] secureECDH_AESGCMEncryption(byte[] plaintext) throws Exception { + KeyPair aliceKP = generateECDHKeyPair(); + KeyPair bobKP = generateECDHKeyPair(); + byte[] aliceSecret = deriveSharedSecret(aliceKP.getPrivate(), bobKP.getPublic(), "ECDH"); + byte[] aesKeyBytes = simpleKDF(aliceSecret, 16); + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + + return concatenate(iv, ciphertext); + } + + /** + * Insecure hybrid encryption using ECDH and AES-GCM. Reuses a static key + * pair, uses raw shared secret truncation without a proper KDF, and employs + * a fixed IV (all zeros). + */ + public byte[] insecureECDH_AESGCMEncryption(byte[] plaintext) throws Exception { + KeyPair staticKP = generateECDHKeyPair(); + byte[] sharedSecret = deriveSharedSecret(staticKP.getPrivate(), staticKP.getPublic(), "ECDH"); + byte[] aesKeyBytes = Arrays.copyOf(sharedSecret, 16); + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, "AES"); + + byte[] fixedIV = new byte[12]; // fixed IV (all zeros) + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + GCMParameterSpec spec = new GCMParameterSpec(128, fixedIV); + cipher.init(Cipher.ENCRYPT_MODE, aesKey, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + + return concatenate(fixedIV, ciphertext); + } + + // =============================================== + // 2. X25519 + ChaCha20-Poly1305 Flows + // =============================================== + /** + * Secure hybrid encryption using X25519 and ChaCha20-Poly1305. Uses + * ephemeral key pairs, applies a KDF (SHA-256) to derive a 256-bit key, and + * uses ChaCha20-Poly1305 with a random 12-byte nonce. + */ + public byte[] secureX25519_Chacha20Poly1305Encryption(byte[] plaintext) throws Exception { + KeyPair aliceKP = generateX25519KeyPair(); + KeyPair bobKP = generateX25519KeyPair(); + byte[] sharedSecret = deriveSharedSecret(aliceKP.getPrivate(), bobKP.getPublic(), "X25519"); + byte[] chachaKeyBytes = MessageDigest.getInstance("SHA-256").digest(sharedSecret); + SecretKey chachaKey = new SecretKeySpec(chachaKeyBytes, "ChaCha20"); + + Cipher cipher = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + byte[] nonce = new byte[12]; + new SecureRandom().nextBytes(nonce); + cipher.init(Cipher.ENCRYPT_MODE, chachaKey, new IvParameterSpec(nonce)); + byte[] ciphertext = cipher.doFinal(plaintext); + + return concatenate(nonce, ciphertext); + } + + /** + * Insecure hybrid encryption using X25519 and ChaCha20-Poly1305. Reuses a + * static key pair, directly truncates the shared secret without a proper + * KDF, and employs a fixed nonce. + */ + public byte[] insecureX25519_Chacha20Poly1305Encryption(byte[] plaintext) throws Exception { + KeyPair staticKP = generateX25519KeyPair(); + byte[] sharedSecret = deriveSharedSecret(staticKP.getPrivate(), staticKP.getPublic(), "X25519"); + byte[] chachaKeyBytes = Arrays.copyOf(sharedSecret, 32); + SecretKey chachaKey = new SecretKeySpec(chachaKeyBytes, "ChaCha20"); + + byte[] fixedNonce = new byte[12]; // fixed nonce (all zeros) + Cipher cipher = Cipher.getInstance("ChaCha20-Poly1305", "BC"); + cipher.init(Cipher.ENCRYPT_MODE, chachaKey, new IvParameterSpec(fixedNonce)); + byte[] ciphertext = cipher.doFinal(plaintext); + + return concatenate(fixedNonce, ciphertext); + } + + // =============================================== + // 3. Dynamic Hybrid Selection + // =============================================== + /** + * Dynamically selects a hybrid encryption flow based on a configuration + * property. If the config is unknown, defaults to an insecure flow. + */ + public String dynamicHybridEncryption(String config, byte[] plaintext) throws Exception { + byte[] result; + if ("secureECDH".equalsIgnoreCase(config)) { + result = secureECDH_AESGCMEncryption(plaintext); + } else if ("insecureECDH".equalsIgnoreCase(config)) { + result = insecureECDH_AESGCMEncryption(plaintext); + } else if ("secureX25519".equalsIgnoreCase(config)) { + result = secureX25519_Chacha20Poly1305Encryption(plaintext); + } else if ("insecureX25519".equalsIgnoreCase(config)) { + result = insecureX25519_Chacha20Poly1305Encryption(plaintext); + } else { + // Fallback to insecure ECDH flow. + result = insecureECDH_AESGCMEncryption(plaintext); + } + return Base64.getEncoder().encodeToString(result); + } + + // =============================================== + // 4. Further Key Derivation from Symmetric Keys + // =============================================== + /** + * Derives two keys from a symmetric key using PBKDF2, then uses one key for + * AES-GCM encryption and the other for computing a MAC over the ciphertext. + */ + public byte[] furtherUseSymmetricKeyForKeyDerivation(SecretKey key, byte[] plaintext) throws Exception { + String keyAsString = Base64.getEncoder().encodeToString(key.getEncoded()); + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(keyAsString.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] derived = factory.generateSecret(spec).getEncoded(); + byte[] encKeyBytes = Arrays.copyOfRange(derived, 0, 16); + byte[] macKeyBytes = Arrays.copyOfRange(derived, 16, 32); + SecretKey encryptionKey = new SecretKeySpec(encKeyBytes, "AES"); + SecretKey derivedMacKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec specGcm = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, specGcm); + byte[] ciphertext = cipher.doFinal(plaintext); + + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(derivedMacKey); + byte[] computedMac = mac.doFinal(ciphertext); + + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + storeOutput(output); + return output; + } + + // =============================================== + // 5. Output/Storage Methods + // =============================================== + /** + * Stores the output securely. + */ + public void storeOutput(byte[] output) { + String stored = Base64.getEncoder().encodeToString(output); + // In production, this value would be stored or transmitted securely. + } + + // =============================================== + // 6. Helper Methods for Key/Nonce Generation + // =============================================== + /** + * Generates a secure 256-bit AES key. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + return kg.generateKey(); + } + + /** + * Generates a random salt. + */ + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/KeyArtifact.java b/java/ql/test/experimental/library-tests/quantum/jca/KeyArtifact.java new file mode 100644 index 00000000000..4c80246050a --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/KeyArtifact.java @@ -0,0 +1,85 @@ +package com.example.crypto.artifacts; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.io.FileInputStream; +import java.security.*; +import java.security.spec.*; +import java.util.Properties; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; + +public class KeyArtifact { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + public void generateSymmetricKeys() throws NoSuchAlgorithmException { + // AES Key Generation (Default Provider) + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + SecretKey aesKeyJDK = keyGen.generateKey(); + + // AES Key Generation (BouncyCastle) + keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + SecretKey aesKeyBC = keyGen.generateKey(); + } + + public void generateAsymmetricKeys() throws NoSuchAlgorithmException { + // RSA Key Generation (JDK Default) + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(2048); + KeyPair rsaPairJDK = keyPairGen.generateKeyPair(); + + // RSA Key Generation (BouncyCastle) + keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(2048); + KeyPair rsaPairBC = keyPairGen.generateKeyPair(); + + // EC Key Generation + keyPairGen = KeyPairGenerator.getInstance("EC"); + keyPairGen.initialize(256); + KeyPair ecPair = keyPairGen.generateKeyPair(); + } + + public void importExportRSAKeys(KeyPair keyPair) throws NoSuchAlgorithmException, InvalidKeySpecException { + // Export Public Key + byte[] pubKeyBytes = keyPair.getPublic().getEncoded(); + X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pubKeyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey importedPubKey = keyFactory.generatePublic(pubKeySpec); + + // Export Private Key + byte[] privKeyBytes = keyPair.getPrivate().getEncoded(); + PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(privKeyBytes); + PrivateKey importedPrivKey = keyFactory.generatePrivate(privKeySpec); + } + + public void dynamicAlgorithmSelection() throws Exception { + // Load algorithm from configuration + Properties properties = new Properties(); + properties.load(new FileInputStream("crypto-config.properties")); + String algorithm = properties.getProperty("key.algorithm", "AES"); + + KeyGenerator keyGen = KeyGenerator.getInstance(algorithm); + keyGen.init(256); + SecretKey dynamicKey = keyGen.generateKey(); + } + + public KeyPair generateKeyPair(String algorithm) throws NoSuchAlgorithmException { + // Wrapper for Key Generation + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(algorithm); + keyPairGen.initialize(2048); + return keyPairGen.generateKeyPair(); + } + + public void keySelectionFromArray() throws NoSuchAlgorithmException { + // Selecting Algorithm Dynamically from an Array + String[] algorithms = {"RSA", "EC", "Ed25519"}; + KeyPair[] keyPairs = new KeyPair[algorithms.length]; + + for (int i = 0; i < algorithms.length; i++) { + keyPairs[i] = generateKeyPair(algorithms[i]); + } + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/KeyDerivation1.java b/java/ql/test/experimental/library-tests/quantum/jca/KeyDerivation1.java new file mode 100644 index 00000000000..a97f02f18c1 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/KeyDerivation1.java @@ -0,0 +1,368 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.crypto.generators.Argon2BytesGenerator; +// import org.bouncycastle.crypto.params.Argon2Parameters; +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Base64; +import java.util.Properties; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * This class demonstrates multiple key derivation functions (KDFs) including + * PBKDF2, scrypt, Argon2, raw hash derivation, HKDF, and dynamic algorithm + * selection. + * + * SAST/CBOM Classification Notes: + * + * 1. PBKDF2 Examples: - Parent Classification: Password-Based Key Derivation + * Function (PBKDF). - SAST: * pbkdf2DerivationBasic: Uses PBKDF2WithHmacSHA256 + * with 10,000 iterations - acceptable if parameters meet current standards. * + * pbkdf2LowIteration: Uses only 10 iterations, flagged as insecure due to + * insufficient iteration count. * pbkdf2HighIteration: Uses 1,000,000 + * iterations - secure (though performance may be impacted). * pbkdf2HmacSHA1: + * Uses PBKDF2WithHmacSHA1 - flagged as weaker compared to SHA-256, though + * sometimes seen in legacy systems. * pbkdf2HmacSHA512: Uses + * PBKDF2WithHmacSHA512 - classified as secure. + * + * 2. Scrypt Examples: - Parent Classification: Memory-Hard Key Derivation + * Function. - SAST: * scryptWeak: Uses weak parameters (n=1024, r=1, p=1) - + * flagged as insecure. * scryptStrong: Uses stronger parameters (n=16384, r=8, + * p=1) - considered secure. + * + * 3. Argon2 Examples: - Parent Classification: Memory-Hard Key Derivation + * Function (Argon2id). - SAST: * argon2Derivation: Uses moderate memory and + * iterations - considered secure. * argon2HighMemory: Uses high memory (128MB) + * and more iterations - secure, though resource intensive. + * + * 4. Insecure Raw Hash Derivation: - Parent Classification: Raw Hash Usage for + * Key Derivation. - SAST: Using a single SHA-256 hash as a key and then using + * it with insecure AES/ECB mode is highly discouraged. + * + * 5. HKDF Examples: - Parent Classification: Key Derivation Function (HKDF). - + * SAST: The provided HKDF implementation is simplistic (single-block expansion) + * and may be flagged. + * + * 6. Multi-Step Hybrid Derivation: - Parent Classification: Composite KDF + * (PBKDF2 followed by HKDF). - SAST: Combining two KDFs is acceptable if done + * carefully; however, custom implementations should be reviewed. + * + * 7. Dynamic KDF Selection: - Parent Classification: Dynamic/Configurable Key + * Derivation. - SAST: Loading KDF parameters from configuration introduces + * ambiguity and risk if misconfigured. + */ +public class KeyDerivation1 { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + ////////////////////////////////////// + // 1. PBKDF2 EXAMPLES + ////////////////////////////////////// + + /** + * Basic PBKDF2 derivation using PBKDF2WithHmacSHA256. + * + * SAST/CBOM: + * - Parent: PBKDF2. + * - Uses 10,000 iterations with a 256-bit key; generally acceptable. + */ + public void pbkdf2DerivationBasic(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 (Basic) Key: " + Base64.getEncoder().encodeToString(key)); + } + + /** + * PBKDF2 derivation with a very low iteration count. + * + * SAST/CBOM: - Parent: PBKDF2. - Iteration count is only 10, which is far + * below acceptable security standards. - Flagged as insecure. + */ + public void pbkdf2LowIteration(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10, 256); // Very low iteration count. + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 (Low Iteration) Key (Insecure): " + Base64.getEncoder().encodeToString(key)); + } + + /** + * PBKDF2 derivation with a high iteration count. + * + * SAST/CBOM: - Parent: PBKDF2. - Uses 1,000,000 iterations; this is secure + * but may impact performance. + */ + public void pbkdf2HighIteration(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 1_000_000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 (High Iteration) Key: " + Base64.getEncoder().encodeToString(key)); + } + + /** + * PBKDF2 derivation using HmacSHA1. + * + * SAST/CBOM: - Parent: PBKDF2. - Uses HMAC-SHA1, which is considered weaker + * than SHA-256; may be acceptable only for legacy systems. + */ + public void pbkdf2HmacSHA1(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 80000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 (HmacSHA1) Key: " + Base64.getEncoder().encodeToString(key)); + } + + /** + * PBKDF2 derivation using HmacSHA512. + * + * SAST/CBOM: - Parent: PBKDF2. - Uses HMAC-SHA512 with 160,000 iterations; + * classified as secure. + */ + public void pbkdf2HmacSHA512(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 160000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("PBKDF2 (HmacSHA512) Key: " + Base64.getEncoder().encodeToString(key)); + } + + ////////////////////////////////////// + // 2. SCRYPT EXAMPLES + ////////////////////////////////////// + + /** + * Scrypt derivation with weak parameters. + * + * SAST/CBOM: + * - Parent: Scrypt. + * - Parameters (n=1024, r=1, p=1) are too weak and should be flagged as + * insecure. + */ + public void scryptWeak(String password) throws Exception { + byte[] salt = generateSalt(16); + // Weak parameters: low work factor. + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 1024, 128); + SecretKeyFactory factory = SecretKeyFactory.getInstance("SCRYPT"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("scrypt (Weak) Key: " + Base64.getEncoder().encodeToString(key)); + } + + /** + * Scrypt derivation with stronger parameters. + * + * SAST/CBOM: - Parent: Scrypt. - Parameters (n=16384, r=8, p=1) provide a + * secure work factor. + */ + public void scryptStrong(String password) throws Exception { + byte[] salt = generateSalt(16); + // Strong parameters for scrypt. + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 16384, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("SCRYPT"); + byte[] key = factory.generateSecret(spec).getEncoded(); + System.out.println("scrypt (Strong) Key: " + Base64.getEncoder().encodeToString(key)); + } + + ////////////////////////////////////// + // 3. ARGON2 EXAMPLES + ////////////////////////////////////// + + // /** + // * Argon2 derivation using Argon2id with moderate memory and iterations. + // * + // * SAST/CBOM: + // * - Parent: Argon2 (Memory-Hard KDF). + // * - Parameters: memory=65536 KB, iterations=2, parallelism=2; considered + // * secure. + // */ + // public void argon2Derivation(String password) throws Exception { + // byte[] salt = generateSalt(16); + // Argon2Parameters.Builder builder = new Argon2Parameters.Builder(Argon2Parameters.ARGON2_id) + // .withSalt(salt) + // .withParallelism(2) + // .withMemoryAsKB(65536) + // .withIterations(2); + + // Argon2BytesGenerator gen = new Argon2BytesGenerator(); + // gen.init(builder.build()); + // byte[] hash = new byte[32]; + // gen.generateBytes(password.getBytes(), hash, 0, hash.length); + // System.out.println("Argon2 Key: " + Base64.getEncoder().encodeToString(hash)); + // } + + // /** + // * Argon2 derivation with high memory and more iterations. + // * + // * SAST/CBOM: + // * - Parent: Argon2. + // * - Uses high memory (131072 KB = 128MB) and 5 iterations; secure but resource + // * intensive. + // */ + // public void argon2HighMemory(String password) throws Exception { + // byte[] salt = generateSalt(16); + // Argon2Parameters.Builder builder = new Argon2Parameters.Builder(Argon2Parameters.ARGON2_id) + // .withSalt(salt) + // .withParallelism(4) + // .withMemoryAsKB(131072) // 128MB of memory. + // .withIterations(5); + + // Argon2BytesGenerator gen = new Argon2BytesGenerator(); + // gen.init(builder.build()); + // byte[] hash = new byte[64]; + // gen.generateBytes(password.getBytes(), hash, 0, hash.length); + // System.out.println("Argon2 (High Memory) Key: " + Base64.getEncoder().encodeToString(hash)); + // } + + ////////////////////////////////////// + // 4. INSECURE RAW HASH EXAMPLES + ////////////////////////////////////// + + /** + * Derives a key by directly hashing input with SHA-256 and uses it for + * encryption. + * + * SAST/CBOM: + * - Parent: Raw Hash-Based Key Derivation. + * - This approach is insecure since it uses a raw hash as a key and then uses + * AES in ECB mode, + * which is vulnerable to pattern analysis. + */ + public void insecureRawSHA256Derivation(String input) throws Exception { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + byte[] derivedKey = digest.digest(input.getBytes()); + System.out.println("Insecure Raw SHA-256 Key: " + Base64.getEncoder().encodeToString(derivedKey)); + + // Insecure usage: AES/ECB mode is used with a key derived from a raw hash. + SecretKey key = new SecretKeySpec(derivedKey, 0, 16, "AES"); + javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/ECB/NoPadding"); + cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key); + byte[] ciphertext = cipher.doFinal("SampleData16Bytes".getBytes()); + System.out.println("Insecurely Encrypted Data with Raw-SHA256 Key: " + + Base64.getEncoder().encodeToString(ciphertext)); + } + + ////////////////////////////////////// + // 5. HKDF EXAMPLES + ////////////////////////////////////// + + /** + * Derives a key using a simple HKDF expansion based on HMAC-SHA256. + * + * SAST/CBOM: + * - Parent: HKDF. + * - The implementation uses a single-block (simplistic) expansion and may be + * flagged. + * A full, standard HKDF implementation is recommended. + */ + public void hkdfDerivation(byte[] ikm) throws Exception { + byte[] salt = generateSalt(32); + byte[] derivedKey = hkdfExpand(ikm, salt, 32); + System.out.println("HKDF Derived Key: " + Base64.getEncoder().encodeToString(derivedKey)); + } + + /** + * Multi-step hybrid derivation: first using PBKDF2, then applying HKDF + * expansion. + * + * SAST/CBOM: - Parent: Composite KDF. - Combining PBKDF2 and HKDF is a + * non-standard approach and may be flagged; ensure that each step meets + * security requirements. + */ + public void multiStepHybridDerivation(String password, byte[] sharedSecret) throws Exception { + byte[] pbkdf2Key = derivePBKDF2Key(password); + byte[] finalKey = hkdfExpand(sharedSecret, pbkdf2Key, 32); + System.out.println("Multi-Step Hybrid Key: " + Base64.getEncoder().encodeToString(finalKey)); + } + + ////////////////////////////////////// + // 6. DYNAMIC ALGORITHM SELECTION (AMBIGUOUS CASE) + ////////////////////////////////////// + + /** + * Dynamically selects a KDF algorithm based on external configuration. + * + * SAST/CBOM: + * - Parent: Dynamic/Configurable Key Derivation. + * - Loading the algorithm and parameters from a config file introduces risk if + * the configuration is compromised + * or misconfigured. + */ + public void dynamicKDFSelection(String password, String configPath) throws Exception { + Properties props = new Properties(); + try (FileInputStream fis = new FileInputStream(configPath)) { + props.load(fis); + } catch (IOException e) { + e.printStackTrace(); + } + String kdfAlg = props.getProperty("kdf.alg", "PBKDF2WithHmacSHA256"); + int iterations = Integer.parseInt(props.getProperty("kdf.iterations", "10000")); + int keySize = Integer.parseInt(props.getProperty("kdf.keySize", "256")); + + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, keySize); + SecretKeyFactory factory = SecretKeyFactory.getInstance(kdfAlg); + byte[] derived = factory.generateSecret(spec).getEncoded(); + System.out.println("Dynamically Selected KDF (" + kdfAlg + ") Key: " + + Base64.getEncoder().encodeToString(derived)); + } + + ////////////////////////////////////// + // HELPER METHODS + ////////////////////////////////////// + + /** + * Helper method to derive a PBKDF2 key with PBKDF2WithHmacSHA256. + * + * SAST/CBOM: + * - Parent: PBKDF2 helper. + */ + private byte[] derivePBKDF2Key(String password) throws Exception { + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + return factory.generateSecret(spec).getEncoded(); + } + + /** + * A simplistic HKDF expansion function using HMAC-SHA256. + * + * SAST/CBOM: - Parent: HKDF. - Uses a single-block expansion + * ("hkdf-expansion") which is non-standard and may be flagged. + */ + private byte[] hkdfExpand(byte[] ikm, byte[] salt, int length) throws Exception { + Mac hmac = Mac.getInstance("HmacSHA256"); + SecretKey secretKey = new SecretKeySpec(salt, "HmacSHA256"); + hmac.init(secretKey); + byte[] prk = hmac.doFinal(ikm); // Extraction step. + + // Single-block expansion (non-standard; for full HKDF, multiple iterations may + // be necessary) + hmac.init(new SecretKeySpec(prk, "HmacSHA256")); + byte[] okm = hmac.doFinal("hkdf-expansion".getBytes()); + return Arrays.copyOf(okm, length); + } + + /** + * Generates a secure random salt of the specified length. + * + * SAST/CBOM: - Parent: Secure Random Salt Generation. - Uses SecureRandom; + * considered best practice. + */ + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/KeyEncapsulation.java b/java/ql/test/experimental/library-tests/quantum/jca/KeyEncapsulation.java new file mode 100644 index 00000000000..df787496d77 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/KeyEncapsulation.java @@ -0,0 +1,229 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +// import org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider; +// import org.bouncycastle.pqc.jcajce.spec.KyberParameterSpec; +// import org.bouncycastle.util.Strings; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyAgreement; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * Demonstrates various Key Encapsulation Mechanisms (KEMs), including: + * + * 1) RSA-KEM (emulated using RSA-OAEP for ephemeral key wrapping) - CBOM/SAST: + * Classified as a Hybrid Cryptosystem (public-key based key encapsulation). + * While RSA-OAEP is secure, using it to emulate KEM (without a standard scheme) + * may be flagged. + * + * 2) ECIES (Elliptic Curve Integrated Encryption Scheme) - CBOM/SAST: + * Classified as a Hybrid Cryptosystem (KEM+DEM) based on ECDH and AES. Note: + * Directly using the raw ECDH shared secret as key material is insecure in + * production. + * + * 3) Kyber (Post-Quantum KEM using BouncyCastle PQC) - CBOM/SAST: Classified as + * a Post-Quantum Key Encapsulation mechanism. This is modern and secure when + * using standardized parameters. + * + * 4) Basic ephemeral flows that mimic KEM logic using ephemeral ECDH. - + * CBOM/SAST: Classified as a simple KEM mimic based on ephemeral ECDH. + */ +public class KeyEncapsulation { + + // static { + // // Adding both classical and PQC providers. + // Security.addProvider(new BouncyCastleProvider()); + // Security.addProvider(new BouncyCastlePQCProvider()); + // } + ////////////////////////////////////// + // 1. RSA-KEM-Like Flow + ////////////////////////////////////// + + /** + * Emulates RSA-KEM by using RSA-OAEP to wrap a random AES key. + * + * SAST/CBOM Classification: + * - Parent: Hybrid Cryptosystem (RSA-OAEP based key encapsulation). + * - Note: Although RSA-OAEP is secure, using it to "wrap" an ephemeral key is a + * non-standard KEM pattern. + * + * @param rsaPub The RSA public key of the recipient. + */ + public void rsaKEMEncapsulation(PublicKey rsaPub) throws Exception { + // 1) Generate an ephemeral AES key (symmetric key for data encryption) + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); // 256-bit AES key. + SecretKey aesKey = keyGen.generateKey(); + System.out.println("Ephemeral AES Key: " + Base64.getEncoder().encodeToString(aesKey.getEncoded())); + + // 2) Encrypt (wrap) the ephemeral AES key with RSA-OAEP. + // SAST Note: This RSA-OAEP wrapping is used to encapsulate the AES key. + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + rsaCipher.init(Cipher.ENCRYPT_MODE, rsaPub); + byte[] wrappedKey = rsaCipher.doFinal(aesKey.getEncoded()); + System.out.println("RSA-KEM Encapsulated AES Key: " + Base64.getEncoder().encodeToString(wrappedKey)); + + // 3) Example usage: Encrypt data with the ephemeral AES key using AES-GCM. + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // Standard IV length for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, gcmSpec); + byte[] ciphertext = aesCipher.doFinal("KEM-based encryption".getBytes()); + System.out.println("AES-GCM ciphertext: " + Base64.getEncoder().encodeToString(ciphertext)); + } + + /** + * Performs RSA decapsulation by decrypting the wrapped AES key. + * + * SAST/CBOM Classification: - Parent: Hybrid Cryptosystem (RSA-OAEP based + * key decapsulation). - Note: Secure when used with matching RSA key pairs. + * + * @param rsaPriv The RSA private key corresponding to the public key used. + * @param wrappedKey The RSA-wrapped ephemeral AES key. + */ + public void rsaKEMDecapsulation(PrivateKey rsaPriv, byte[] wrappedKey) throws Exception { + Cipher rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding"); + rsaCipher.init(Cipher.DECRYPT_MODE, rsaPriv); + byte[] aesKeyBytes = rsaCipher.doFinal(wrappedKey); + SecretKey aesKey = new SecretKeySpec(aesKeyBytes, "AES"); + System.out.println("RSA-KEM Decapsulated AES Key: " + Base64.getEncoder().encodeToString(aesKey.getEncoded())); + } + + ////////////////////////////////////// + // 2. ECIES Example + ////////////////////////////////////// + + /** + * Implements a simplified ECIES flow using ephemeral ECDH and AES-GCM. + * + * SAST/CBOM Classification: + * - Parent: Hybrid Cryptosystem (ECIES: ECDH-based key encapsulation + DEM). + * - Note: Directly using the raw ECDH shared secret as key material is + * insecure. + * In practice, a proper KDF must be applied. + * + * @param ecPub The recipient's EC public key. + */ + public void eciesEncapsulation(PublicKey ecPub) throws Exception { + // Generate an ephemeral EC key pair. + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); + kpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + KeyPair ephemeralEC = kpg.generateKeyPair(); + + // Perform ECDH key agreement to derive the shared secret. + KeyAgreement ka = KeyAgreement.getInstance("ECDH"); + ka.init(ephemeralEC.getPrivate()); + ka.doPhase(ecPub, true); + byte[] sharedSecret = ka.generateSecret(); + System.out.println("ECIES ephemeral ECDH Secret: " + Base64.getEncoder().encodeToString(sharedSecret)); + + // For demonstration only: directly use part of the shared secret as an AES key. + // SAST Note: This is insecure; a proper key derivation function (KDF) must be + // used. + SecretKey aesKey = new SecretKeySpec(sharedSecret, 0, 16, "AES"); + + // Encrypt the message using AES-GCM. + Cipher aesCipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey, new GCMParameterSpec(128, iv)); + byte[] ciphertext = aesCipher.doFinal("ECIES message".getBytes()); + + // The ephemeral public key (ephemeralEC.getPublic()) is transmitted as part of + // the output. + System.out.println( + "ECIES ephemeral public: " + Base64.getEncoder().encodeToString(ephemeralEC.getPublic().getEncoded())); + System.out.println("ECIES ciphertext: " + Base64.getEncoder().encodeToString(ciphertext)); + } + + ////////////////////////////////////// + // 3. Kyber Example (Post-Quantum KEM) + ////////////////////////////////////// + + // /** + // * Demonstrates a Kyber-based encapsulation using BouncyCastle's PQC provider. + // * + // * SAST/CBOM Classification: + // * - Parent: Post-Quantum KEM. + // * - Note: Kyber is a modern, post-quantum secure KEM. This example uses + // * Kyber-512. + // * + // * @param kyberRecipientKP The recipient's Kyber key pair. + // */ + // public void kyberEncapsulate(KeyPair kyberRecipientKP) throws Exception { + // // Use an ephemeral label for demonstration. + // byte[] ephemeralLabel = Strings.toByteArray("Kyber-KEM-Label"); + // Cipher kemCipher = Cipher.getInstance("Kyber", "BCPQC"); + // kemCipher.init(Cipher.ENCRYPT_MODE, kyberRecipientKP.getPublic(), new SecureRandom()); + // byte[] ciphertext = kemCipher.doFinal(ephemeralLabel); + // System.out.println("Kyber ciphertext: " + Base64.getEncoder().encodeToString(ciphertext)); + // } + + ////////////////////////////////////// + // 4. Basic Ephemeral Flows That Mimic KEM + ////////////////////////////////////// + + /** + * Uses ephemeral ECDH to derive a shared secret that mimics a KEM. + * + * SAST/CBOM Classification: + * - Parent: Ephemeral Key Agreement (mimicking KEM). + * - Note: This simple approach demonstrates the concept of using ephemeral keys + * to derive a secret. + * In a full scheme, the ephemeral public key would also be transmitted. + * + * @param recipientPubKey The recipient's public key. + */ + public void ephemeralECDHMimicKEM(PublicKey recipientPubKey) throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC"); + kpg.initialize(new ECGenParameterSpec("secp256r1")); + KeyPair ephemeralKP = kpg.generateKeyPair(); + KeyAgreement ka = KeyAgreement.getInstance("ECDH"); + ka.init(ephemeralKP.getPrivate()); + ka.doPhase(recipientPubKey, true); + byte[] sharedSecret = ka.generateSecret(); + System.out.println( + "Ephemeral ECDH shared secret (mimics KEM): " + Base64.getEncoder().encodeToString(sharedSecret)); + // In a full implementation, the ephemeral public key and the shared secret are + // used together. + } + + ////////////////////////////////////// + // Test / Demo Method + ////////////////////////////////////// + + /** + * Demonstrates each of the key encapsulation flows. + */ + public void runKeyEncapsulationDemos() throws Exception { + // 1) RSA-KEM-like Flow: + KeyPairGenerator rsaKpg = KeyPairGenerator.getInstance("RSA"); + rsaKpg.initialize(2048); + KeyPair rsaKP = rsaKpg.generateKeyPair(); + rsaKEMEncapsulation(rsaKP.getPublic()); + + // 2) ECIES Example: + KeyPairGenerator ecKpg = KeyPairGenerator.getInstance("EC"); + ecKpg.initialize(new ECGenParameterSpec("secp256r1")); + KeyPair ecKP = ecKpg.generateKeyPair(); + eciesEncapsulation(ecKP.getPublic()); + + // // 3) Kyber Example (Post-Quantum KEM): + // KeyPairGenerator kyberKpg = KeyPairGenerator.getInstance("Kyber", "BCPQC"); + // kyberKpg.initialize(KyberParameterSpec.kyber512); + // KeyPair kyberKP = kyberKpg.generateKeyPair(); + // kyberEncapsulate(kyberKP); + // 4) Ephemeral ECDH Mimic KEM: + // For demonstration, we use an EC key pair and mimic KEM by deriving a shared + // secret. + KeyPair ephemeralEC = ecKpg.generateKeyPair(); + ephemeralECDHMimicKEM(ephemeralEC.getPublic()); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/KeyExchange.java b/java/ql/test/experimental/library-tests/quantum/jca/KeyExchange.java new file mode 100644 index 00000000000..ef4d5b94c86 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/KeyExchange.java @@ -0,0 +1,330 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.KeyAgreement; + +/** + * Demonstrates various Key Exchange mechanisms using standard Java and + * BouncyCastle: + * + * 1) Classic DH (Diffie-Hellman) with multiple key sizes: - 512-bit: + * Insecure/deprecated (flagged as unsafe by SAST). - 2048-bit: Standard secure + * level. - 4096-bit: High-security (but can be slow). + * + * 2) ECDH (using secp256r1): - Classified as a secure elliptic-curve key + * exchange. + * + * 3) X25519: - A modern and efficient elliptic-curve key exchange protocol. + * + * 4) X448: - Provides a higher security level for key exchange. + * + * In addition, the class now includes a nuanced insecure example that + * demonstrates: - Reusing static key pairs instead of generating fresh + * ephemeral keys. - Using weak parameters (512-bit DH) in a key exchange. + * + * The runAllExchanges() method demonstrates generating keys for each algorithm, + * deriving shared secrets, and comparing safe vs. insecure practices. + */ +public class KeyExchange { + + // static { + // // Add the BouncyCastle provider to support additional algorithms. + // Security.addProvider(new BouncyCastleProvider()); + // } + ////////////////////////////////////////// + // 1. Classic DH (Diffie-Hellman) + ////////////////////////////////////////// + + /** + * Generates a standard Diffie-Hellman key pair using a 2048-bit modulus. + * + * CBOM/SAST Classification: + * - Parent: Classic Diffie-Hellman Key Exchange. + * - 2048-bit is considered secure and is widely accepted. + * + * @return A 2048-bit DH KeyPair. + */ + public KeyPair generateDHKeyPair() throws Exception { + KeyPairGenerator dhKpg = KeyPairGenerator.getInstance("DH"); + dhKpg.initialize(2048); + return dhKpg.generateKeyPair(); + } + + /** + * Generates a deprecated/unsafe Diffie-Hellman key pair using a 512-bit + * modulus. + * + * CBOM/SAST Classification: - Parent: Classic Diffie-Hellman Key Exchange. + * - 512-bit DH is considered insecure and should be flagged by SAST tools. + * + * @return A 512-bit (insecure) DH KeyPair. + */ + public KeyPair generateDHDeprecated() throws Exception { + KeyPairGenerator dhKpg = KeyPairGenerator.getInstance("DH"); + // 512 bits is considered insecure/deprecated. + dhKpg.initialize(512); + return dhKpg.generateKeyPair(); + } + + /** + * Generates a high-security Diffie-Hellman key pair using a 4096-bit + * modulus. + * + * CBOM/SAST Classification: - Parent: Classic Diffie-Hellman Key Exchange. + * - 4096-bit DH offers high security, though it may be slower in practice. + * + * @return A 4096-bit DH KeyPair. + */ + public KeyPair generateDHHighSecurity() throws Exception { + KeyPairGenerator dhKpg = KeyPairGenerator.getInstance("DH"); + dhKpg.initialize(4096); + return dhKpg.generateKeyPair(); + } + + /** + * Derives a shared secret from a DH key pair. + * + * CBOM/SAST Classification: - Parent: Classic Diffie-Hellman Key Exchange. + * - Properly deriving the shared secret is secure if using a safe key size. + * + * @param privateKey The private key of one party. + * @param publicKey The public key of the other party. + * @return The derived shared secret as a byte array. + */ + public byte[] deriveDHSecret(PrivateKey privateKey, PublicKey publicKey) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance("DH"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + ////////////////////////////////////////// + // 2. ECDH (secp256r1) + ////////////////////////////////////////// + + /** + * Generates an Elliptic Curve Diffie-Hellman key pair using the secp256r1 + * curve. + * + * CBOM/SAST Classification: + * - Parent: Elliptic Curve Diffie-Hellman (ECDH). + * - secp256r1 is widely regarded as secure and efficient. + * + * @return An ECDH KeyPair on secp256r1. + */ + public KeyPair generateECDHKeyPair() throws Exception { + KeyPairGenerator ecKpg = KeyPairGenerator.getInstance("EC", "BC"); + ecKpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return ecKpg.generateKeyPair(); + } + + /** + * Derives a shared secret using ECDH. + * + * CBOM/SAST Classification: - Parent: Elliptic Curve Diffie-Hellman (ECDH). + * - Secure when using appropriate curves and proper randomness. + * + * @param privateKey The ECDH private key. + * @param publicKey The corresponding public key. + * @return The derived ECDH shared secret. + */ + public byte[] deriveECDHSecret(PrivateKey privateKey, PublicKey publicKey) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance("ECDH", "BC"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + ////////////////////////////////////////// + // 3. X25519 + ////////////////////////////////////////// + + /** + * Generates an ephemeral X25519 key pair. + * + * CBOM/SAST Classification: + * - Parent: Modern Elliptic-Curve Key Exchange. + * - X25519 is considered secure and efficient. + * + * @return An X25519 KeyPair. + */ + public KeyPair generateX25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X25519", "BC"); + // X25519 key size is fixed; the parameter (255) is a reference value. + kpg.initialize(255, new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Derives a shared secret using the X25519 key agreement. + * + * CBOM/SAST Classification: - Parent: Modern Elliptic-Curve Key Exchange. - + * X25519 is highly recommended for its security and efficiency. + * + * @param privateKey The X25519 private key. + * @param publicKey The corresponding public key. + * @return The derived X25519 shared secret. + */ + public byte[] deriveX25519Secret(PrivateKey privateKey, PublicKey publicKey) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance("X25519", "BC"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + ////////////////////////////////////////// + // 4. X448 + ////////////////////////////////////////// + + /** + * Generates an ephemeral X448 key pair. + * + * CBOM/SAST Classification: + * - Parent: Modern Elliptic-Curve Key Exchange. + * - X448 provides a higher security margin than X25519. + * + * @return An X448 KeyPair. + */ + public KeyPair generateX448KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("X448", "BC"); + // X448 key size is fixed; the parameter (448) is the curve parameter. + kpg.initialize(448, new SecureRandom()); + return kpg.generateKeyPair(); + } + + /** + * Derives a shared secret using the X448 key agreement. + * + * CBOM/SAST Classification: - Parent: Modern Elliptic-Curve Key Exchange. - + * X448 is considered secure and suitable for high-security applications. + * + * @param privateKey The X448 private key. + * @param publicKey The corresponding public key. + * @return The derived X448 shared secret. + */ + public byte[] deriveX448Secret(PrivateKey privateKey, PublicKey publicKey) throws Exception { + KeyAgreement ka = KeyAgreement.getInstance("X448", "BC"); + ka.init(privateKey); + ka.doPhase(publicKey, true); + return ka.generateSecret(); + } + + ////////////////////////////////////////// + // 5. Nuanced Insecure Key Exchange Example + ////////////////////////////////////////// + + /** + * Demonstrates a nuanced example of insecure key exchange by: + * - Using deprecated DH parameters (512-bit). + * - Reusing static (non-ephemeral) keys. + * + * SAST/CBOM Classification: + * - Parent: Insecure Key Exchange Patterns. + * - Issues: + * * 512-bit DH is weak and vulnerable to attacks. + * * Reusing a static key pair across sessions eliminates forward secrecy. + * * Reusing an ECDH key pair for both sides results in predictable shared + * secrets. + */ + public void insecureKeyExchangeExample() throws Exception { + System.out.println("\n--- Insecure Key Exchange Example ---"); + + // Example 1: Using weak 512-bit DH with static key reuse. + KeyPair staticDHKeyPair = generateDHDeprecated(); + // Reusing the same static DH key pair for both parties. + byte[] staticDHSecret = deriveDHSecret(staticDHKeyPair.getPrivate(), staticDHKeyPair.getPublic()); + System.out.println("Static DH (512-bit) shared secret (reused): " + + Base64.getEncoder().encodeToString(staticDHSecret)); + // SAST Note: 512-bit DH is considered insecure and static key reuse prevents + // forward secrecy. + + // Example 2: Reusing an ECDH key pair instead of generating fresh ephemeral + // keys. + KeyPair reusedECDHKeyPair = generateECDHKeyPair(); + // Using the same key pair for both sides leads to a shared secret that is + // easily derived. + byte[] reusedECDHSecret = deriveECDHSecret(reusedECDHKeyPair.getPrivate(), reusedECDHKeyPair.getPublic()); + System.out.println("Reused ECDH shared secret: " + + Base64.getEncoder().encodeToString(reusedECDHSecret)); + // SAST Note: Proper key exchange requires fresh ephemeral keys for each session + // to ensure forward secrecy. + } + + ////////////////////////////////////////// + // 6. runAllExchanges() Demo Method + ////////////////////////////////////////// + + /** + * Demonstrates key exchange flows for various algorithms, including both secure + * and insecure examples. + * + * CBOM/SAST Classification: + * - Exercises both safe configurations (e.g., DH with 2048/4096-bit, ECDH, + * X25519, X448) + * and insecure configurations (e.g., DH with 512-bit, static key reuse). + */ + public void runAllExchanges() throws Exception { + System.out.println("--- Running Secure Key Exchanges ---"); + + // ============ DEPRECATED / UNSAFE DH (512 bits) ============ + KeyPair dhDep1 = generateDHDeprecated(); + KeyPair dhDep2 = generateDHDeprecated(); + byte[] dhDepSecret1 = deriveDHSecret(dhDep1.getPrivate(), dhDep2.getPublic()); + byte[] dhDepSecret2 = deriveDHSecret(dhDep2.getPrivate(), dhDep1.getPublic()); + System.out.println("DH(512) K1->K2: " + Base64.getEncoder().encodeToString(dhDepSecret1)); + System.out.println("DH(512) K2->K1: " + Base64.getEncoder().encodeToString(dhDepSecret2)); + System.out.println("DH(512) match? " + Arrays.equals(dhDepSecret1, dhDepSecret2)); + + // ============ DH (2048 bits) Standard ============ + KeyPair dhKP1 = generateDHKeyPair(); + KeyPair dhKP2 = generateDHKeyPair(); + byte[] dhSecret1 = deriveDHSecret(dhKP1.getPrivate(), dhKP2.getPublic()); + byte[] dhSecret2 = deriveDHSecret(dhKP2.getPrivate(), dhKP1.getPublic()); + System.out.println("DH(2048) K1->K2: " + Base64.getEncoder().encodeToString(dhSecret1)); + System.out.println("DH(2048) K2->K1: " + Base64.getEncoder().encodeToString(dhSecret2)); + System.out.println("DH(2048) match? " + Arrays.equals(dhSecret1, dhSecret2)); + + // ============ DH (4096 bits) High-Security ============ + KeyPair dhHigh1 = generateDHHighSecurity(); + KeyPair dhHigh2 = generateDHHighSecurity(); + byte[] dhHighSecret1 = deriveDHSecret(dhHigh1.getPrivate(), dhHigh2.getPublic()); + byte[] dhHighSecret2 = deriveDHSecret(dhHigh2.getPrivate(), dhHigh1.getPublic()); + System.out.println("DH(4096) K1->K2: " + Base64.getEncoder().encodeToString(dhHighSecret1)); + System.out.println("DH(4096) K2->K1: " + Base64.getEncoder().encodeToString(dhHighSecret2)); + System.out.println("DH(4096) match? " + Arrays.equals(dhHighSecret1, dhHighSecret2)); + + // ============ ECDH (secp256r1) ============ + KeyPair ecKP1 = generateECDHKeyPair(); + KeyPair ecKP2 = generateECDHKeyPair(); + byte[] ecdhSecret1 = deriveECDHSecret(ecKP1.getPrivate(), ecKP2.getPublic()); + byte[] ecdhSecret2 = deriveECDHSecret(ecKP2.getPrivate(), ecKP1.getPublic()); + System.out.println("ECDH K1->K2: " + Base64.getEncoder().encodeToString(ecdhSecret1)); + System.out.println("ECDH K2->K1: " + Base64.getEncoder().encodeToString(ecdhSecret2)); + System.out.println("ECDH match? " + Arrays.equals(ecdhSecret1, ecdhSecret2)); + + // ============ X25519 ============ + KeyPair x25519KP1 = generateX25519KeyPair(); + KeyPair x25519KP2 = generateX25519KeyPair(); + byte[] x25519Secret1 = deriveX25519Secret(x25519KP1.getPrivate(), x25519KP2.getPublic()); + byte[] x25519Secret2 = deriveX25519Secret(x25519KP2.getPrivate(), x25519KP1.getPublic()); + System.out.println("X25519 K1->K2: " + Base64.getEncoder().encodeToString(x25519Secret1)); + System.out.println("X25519 K2->K1: " + Base64.getEncoder().encodeToString(x25519Secret2)); + System.out.println("X25519 match? " + Arrays.equals(x25519Secret1, x25519Secret2)); + + // ============ X448 ============ + KeyPair x448KP1 = generateX448KeyPair(); + KeyPair x448KP2 = generateX448KeyPair(); + byte[] x448Secret1 = deriveX448Secret(x448KP1.getPrivate(), x448KP2.getPublic()); + byte[] x448Secret2 = deriveX448Secret(x448KP2.getPrivate(), x448KP1.getPublic()); + System.out.println("X448 K1->K2: " + Base64.getEncoder().encodeToString(x448Secret1)); + System.out.println("X448 K2->K1: " + Base64.getEncoder().encodeToString(x448Secret2)); + System.out.println("X448 match? " + Arrays.equals(x448Secret1, x448Secret2)); + + // ============ Insecure Key Exchange Example ============ + insecureKeyExchangeExample(); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/MACOperation.java b/java/ql/test/experimental/library-tests/quantum/jca/MACOperation.java new file mode 100644 index 00000000000..ae55b52bcfc --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/MACOperation.java @@ -0,0 +1,249 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.util.Arrays; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * MACOperation demonstrates various Message Authentication Code (MAC) + * operations and further use of MAC outputs as inputs into higher-level + * cryptosystems. + * + * Flows include: + * + * 1. Secure HMAC-SHA2 (HMAC-SHA256) - a widely accepted MAC. 2. Secure + * HMAC-SHA3 (HMAC-SHA3-256) - an alternative using the SHA-3 family. 3. Secure + * Poly1305 MAC - using BouncyCastle's implementation. 4. Secure GMAC - using + * AES-GCM's authentication tag in a dedicated MAC mode. 5. Secure KMAC - using + * KMAC128 (from the SHA-3 family). + * + * Insecure examples include: + * + * 6. Insecure HMAC-SHA1 - which is deprecated. + * + * Further flows: + * + * A. processMACOutput: Uses the MAC output directly as key material for AES + * encryption. (Note: This is acceptable only if the MAC is produced by a secure + * function.) + * + * B. alternativeMACFlow: Uses the MAC output as an identifier that is then + * encrypted. + * + * C. furtherUseMACForKeyDerivation: Uses PBKDF2 to split a MAC output into two + * keys, one for encryption and one for MACing ciphertext. + * + * SAST/CBOM Notes: - Secure MAC algorithms (HMAC-SHA256, HMAC-SHA3-256, + * Poly1305, GMAC, KMAC128) are acceptable if used correctly. - HMAC-SHA1 is + * flagged as insecure. - Using a raw MAC output directly as key material is + * ambiguous unless the MAC is produced by a secure KDF. + */ +public class MACOperation { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + // ---------- MAC Operations ---------- + /** + * Secure MAC using HMAC-SHA256. SAST: HMAC-SHA256 is widely considered + * secure. + */ + public byte[] secureHMACSHA256(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA256"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Secure MAC using HMAC-SHA3-256. SAST: HMAC-SHA3 is a modern alternative + * from the SHA-3 family. + */ + public byte[] secureHMACSHA3(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA3-256", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA3-256"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Secure MAC using Poly1305. SAST: Poly1305 is secure when used with a + * one-time key from a cipher (e.g. ChaCha20). + */ + public byte[] securePoly1305(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("Poly1305", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "Poly1305"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Secure MAC using GMAC. SAST: GMAC (the MAC part of AES-GCM) is secure + * when used correctly. + */ + public byte[] secureGMAC(String message, byte[] key) throws Exception { + // For GMAC, we use the GMac algorithm as provided by BC. + Mac mac = Mac.getInstance("GMac", "BC"); + // Initialize the key for GMAC; key should be appropriate for the underlying + // block cipher. + SecretKey secretKey = new SecretKeySpec(key, "AES"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Secure MAC using KMAC128. SAST: KMAC128 is part of the SHA-3 family and + * is secure when used properly. + */ + public byte[] secureKMAC(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("KMAC128", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "KMAC128"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + /** + * Insecure MAC using HMAC-SHA1. SAST: HMAC-SHA1 is considered deprecated + * and weak. + */ + public byte[] insecureHMACSHA1(String message, byte[] key) throws Exception { + Mac mac = Mac.getInstance("HmacSHA1", "BC"); + SecretKey secretKey = new SecretKeySpec(key, "HmacSHA1"); + mac.init(secretKey); + return mac.doFinal(message.getBytes()); + } + + // ---------- Further Use of MAC Outputs ---------- + /** + * Processes the MAC output by using it as key material for AES encryption. + * SAST: Using a raw MAC output as key material is acceptable only if the + * MAC was produced by a secure function; otherwise, this is ambiguous. + * + * @param macOutput The computed MAC output. + * @throws Exception if encryption fails. + */ + public void processMACOutput(byte[] macOutput) throws Exception { + // Derive a 128-bit AES key from the MAC output. + SecretKey key = new SecretKeySpec(macOutput, 0, 16, "AES"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom()); + byte[] encryptedData = cipher.doFinal("Sensitive Data".getBytes()); + storeEncryptedMAC(encryptedData); + } + + /** + * Alternative flow: Uses the MAC output as an identifier and then encrypts + * it. SAST: Using a MAC as an identifier is common; subsequent encryption + * must be secure. + * + * @param macOutput The computed MAC output. + * @throws Exception if encryption fails. + */ + public void alternativeMACFlow(byte[] macOutput) throws Exception { + byte[] identifier = Base64.getEncoder().encode(macOutput); + encryptAndSend(identifier); + } + + /** + * Further use: Derives two separate keys from the MAC output using PBKDF2, + * then uses one key for encryption and one for computing an additional MAC + * over the ciphertext. + * + * SAST: This key-splitting technique is acceptable if PBKDF2 is used + * securely. + * + * @param macOutput The MAC output to derive keys from. + * @throws Exception if key derivation or encryption fails. + */ + public void furtherUseMACForKeyDerivation(byte[] macOutput) throws Exception { + // Use the Base64 representation of the MAC as the password input to PBKDF2. + String macAsPassword = Base64.getEncoder().encodeToString(macOutput); + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(macAsPassword.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] keyMaterial = factory.generateSecret(spec).getEncoded(); + // Split into two 128-bit keys. + byte[] encryptionKeyBytes = Arrays.copyOfRange(keyMaterial, 0, 16); + byte[] macKeyBytes = Arrays.copyOfRange(keyMaterial, 16, 32); + SecretKey encryptionKey = new SecretKeySpec(encryptionKeyBytes, "AES"); + SecretKey derivedMacKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + // Encrypt some sample data using the derived encryption key. + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new SecureRandom()); + byte[] ciphertext = cipher.doFinal("Further Use Test Data".getBytes()); + + // Compute HMAC over the ciphertext using the derived MAC key. + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(derivedMacKey); + byte[] computedMac = mac.doFinal(ciphertext); + + // Concatenate the ciphertext and MAC for further use. + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + storeEncryptedMAC(output); + } + + // ---------- Output/Storage Methods ---------- + /** + * Simulates secure storage or transmission of an encrypted MAC output. + * SAST: In production, storage and transmission must be protected. + * + * @param encryptedMAC The encrypted MAC output. + */ + public void storeEncryptedMAC(byte[] encryptedMAC) { + String stored = Base64.getEncoder().encodeToString(encryptedMAC); + // In production, this string would be securely stored or transmitted. + } + + /** + * Encrypts data using AES-GCM and simulates secure transmission. SAST: Uses + * a securely generated AES key. + * + * @param data The data to encrypt. + * @throws Exception if encryption fails. + */ + public void encryptAndSend(byte[] data) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, new SecureRandom()); + byte[] encryptedData = cipher.doFinal(data); + storeEncryptedMAC(encryptedData); + } + + // ---------- Helper Methods ---------- + /** + * Generates a secure 256-bit AES key. SAST: Uses a strong RNG for key + * generation. + * + * @return A SecretKey for AES. + * @throws NoSuchAlgorithmException if AES is unsupported. + */ + private SecretKey generateAESKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + return keyGen.generateKey(); + } + + /** + * Generates a random salt of the specified length using SecureRandom. SAST: + * Salting is essential for secure key derivation. + * + * @param length The salt length. + * @return A byte array representing the salt. + */ + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/Nonce.java b/java/ql/test/experimental/library-tests/quantum/jca/Nonce.java new file mode 100644 index 00000000000..c99113d7a01 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/Nonce.java @@ -0,0 +1,114 @@ +package com.example.crypto.artifacts; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.Cipher; +import java.security.*; +import java.util.Base64; +import java.util.Random; + +public class Nonce { + + // static { + // Security.addProvider(new BouncyCastleProvider()); // Ensure BouncyCastle is available + // } + /** + * Simple Case: Generates a secure nonce and uses it in HMAC. + */ + public void simpleNonceUsage() throws Exception { + byte[] nonce = secureNonce(16); + SecretKey key = generateHmacKey(); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(key); + mac.update(nonce); + byte[] macResult = mac.doFinal("Simple Test Data".getBytes()); + } + + /** + * Incorrect: Hardcoded, reused nonce in encryption, leading to predictable + * output. + */ + public void hardcodedNonceReuse() throws Exception { + byte[] nonce = "BADNONCEBADNONCE".getBytes(); // HARDCODED NONCE REUSED! + SecretKey key = generateHmacKey(); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(key); + mac.update(nonce); + byte[] macResult = mac.doFinal("Sensitive Data".getBytes()); + } + + /** + * Incorrect: Reusing a nonce with AES-GCM, which can lead to catastrophic + * security failures. + */ + public void insecureNonceReuseGCM(SecretKey key, byte[] plaintext) throws Exception { + byte[] nonce = getReusedNonce(12); // SAME NONCE REUSED! + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, nonce); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, key, gcmSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + } + + /** + * Secure Case: Proper unique nonce usage in AES-GCM. + */ + public void secureNonceUsageGCM(SecretKey key, byte[] plaintext) throws Exception { + byte[] nonce = secureNonce(12); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, nonce); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, key, gcmSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + } + + public void complexNonceFlow() { + byte[] nonce = useSecureMethod() ? secureNonce(16) : insecureNonce(16); + processNonce(nonce); + try { + useNonceInMac(nonce, generateHmacKey(), "HmacSHA256"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void useNonceInMac(byte[] nonce, SecretKey key, String macAlgorithm) throws Exception { + Mac mac = Mac.getInstance(macAlgorithm); + mac.init(key); + mac.update(nonce); + byte[] macResult = mac.doFinal("Sensitive Data".getBytes()); + } + + private boolean useSecureMethod() { + return System.currentTimeMillis() % 2 == 0; + } + + private void processNonce(byte[] nonce) { + String nonceBase64 = Base64.getEncoder().encodeToString(nonce); + } + + private SecretKey generateHmacKey() throws NoSuchAlgorithmException { + KeyGenerator keyGen = KeyGenerator.getInstance("HmacSHA256"); + return keyGen.generateKey(); + } + + private byte[] secureNonce(int length) { + byte[] nonce = new byte[length]; + new SecureRandom().nextBytes(nonce); + return nonce; + } + + private byte[] insecureNonce(int length) { + byte[] nonce = new byte[length]; + new Random().nextBytes(nonce); + return nonce; + } + + /** + * Incorrect: A nonce that is stored and reused across multiple encryptions. + */ + private byte[] getReusedNonce(int length) { + return "BADNONCEBADNONCE".getBytes(); // Fixed nonce reuse across calls + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/PrngTest.java b/java/ql/test/experimental/library-tests/quantum/jca/PrngTest.java new file mode 100644 index 00000000000..313c4fd4e87 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/PrngTest.java @@ -0,0 +1,156 @@ +package com.example.crypto.algorithms; + +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import javax.crypto.SecretKey; +import javax.crypto.KeyGenerator; + +/** + * PrngTest demonstrates various approaches for generating random data using + * PRNG/RNG APIs. + * + * It covers: 1) Secure random generation using SecureRandom (default and + * getInstanceStrong). 2) Insecure random generation using java.util.Random. 3) + * Flawed PRNG usage by setting a fixed seed. 4) Dynamic PRNG selection based on + * configuration. 5) Usage of random data as nonces/IVs in symmetric encryption. + * + * SAST/CBOM Notes: - SecureRandom (and SecureRandom.getInstanceStrong) are + * recommended. - java.util.Random is not suitable for cryptographic purposes. - + * Re-seeding or using a fixed seed with SecureRandom makes it predictable. - + * IVs and nonces must be unique for each operation; reusing fixed values is + * insecure. + */ +public class PrngTest { + + // ---------- Secure Random Generation ---------- + /** + * Generates random bytes using the default SecureRandom. SAST: SecureRandom + * is recommended for cryptographically secure random data. + * + * @param numBytes Number of bytes to generate. + * @return A byte array of random data. + */ + public byte[] generateSecureRandomBytes(int numBytes) { + SecureRandom secureRandom = new SecureRandom(); + byte[] bytes = new byte[numBytes]; + secureRandom.nextBytes(bytes); + return bytes; + } + + /** + * Generates random bytes using SecureRandom.getInstanceStrong(). SAST: + * getInstanceStrong() returns a strong RNG (may block in some + * environments). + * + * @param numBytes Number of bytes to generate. + * @return A byte array of random data. + * @throws NoSuchAlgorithmException if a strong RNG is not available. + */ + public byte[] generateSecureRandomBytesStrong(int numBytes) throws NoSuchAlgorithmException { + SecureRandom secureRandom = SecureRandom.getInstanceStrong(); + byte[] bytes = new byte[numBytes]; + secureRandom.nextBytes(bytes); + return bytes; + } + + // ---------- Insecure Random Generation ---------- + /** + * Generates random bytes using java.util.Random. SAST: java.util.Random is + * predictable and insecure for cryptographic purposes. + * + * @param numBytes Number of bytes to generate. + * @return A byte array of random data. + */ + public byte[] generateInsecureRandomBytes(int numBytes) { + Random random = new Random(); + byte[] bytes = new byte[numBytes]; + random.nextBytes(bytes); + return bytes; + } + + /** + * Generates random bytes using SecureRandom with a fixed seed. SAST: Fixed + * seeding makes SecureRandom predictable and insecure. + * + * @param numBytes Number of bytes to generate. + * @return A byte array of predictable random data. + */ + public byte[] generatePredictableRandomBytes(int numBytes) { + SecureRandom secureRandom = new SecureRandom(); + // Fixed seed (predictable and insecure) + secureRandom.setSeed(0xDEADBEEF); + byte[] bytes = new byte[numBytes]; + secureRandom.nextBytes(bytes); + return bytes; + } + + // ---------- Dynamic PRNG Selection ---------- + /** + * Dynamically selects a PRNG algorithm based on a configuration property. + * If the algorithm is unknown, falls back to java.util.Random (insecure). + * SAST: Dynamic selection may introduce risk if an insecure RNG is chosen. + * + * @param algorithmName The PRNG algorithm name (e.g. "SHA1PRNG", + * "NativePRNGNonBlocking", "getInstanceStrong"). + * @param numBytes Number of bytes to generate. + * @return A byte array of random data. + * @throws NoSuchAlgorithmException if the algorithm is not available. + */ + public byte[] dynamicRandomGeneration(String algorithmName, int numBytes) throws NoSuchAlgorithmException { + SecureRandom secureRandom; + if ("SHA1PRNG".equalsIgnoreCase(algorithmName)) { + // SHA1PRNG is older and less preferred. + secureRandom = SecureRandom.getInstance("SHA1PRNG"); + } else if ("NativePRNGNonBlocking".equalsIgnoreCase(algorithmName)) { + secureRandom = SecureRandom.getInstance("NativePRNGNonBlocking"); + } else if ("getInstanceStrong".equalsIgnoreCase(algorithmName)) { + secureRandom = SecureRandom.getInstanceStrong(); + } else { + // Fallback to insecure java.util.Random. + Random random = new Random(); + byte[] bytes = new byte[numBytes]; + random.nextBytes(bytes); + return bytes; + } + byte[] bytes = new byte[numBytes]; + secureRandom.nextBytes(bytes); + return bytes; + } + + // ---------- Usage Examples: Nonce/IV Generation for Symmetric Encryption + // ---------- + /** + * Demonstrates secure generation of an IV for AES-GCM encryption. SAST: A + * unique, random IV is required for each encryption operation. + * + * @return A 12-byte IV. + */ + public byte[] generateRandomIVForGCM() { + return generateSecureRandomBytes(12); + } + + /** + * Demonstrates insecure use of a fixed IV for AES-GCM encryption. SAST: + * Reusing a fixed IV in AES-GCM compromises security. + * + * @return A fixed 12-byte IV (all zeros). + */ + public byte[] generateFixedIVForGCM() { + return new byte[12]; // 12 bytes of zeros. + } + + // ---------- Example: Using PRNG for Key Generation ---------- + /** + * Generates a secure 256-bit AES key using SecureRandom. SAST: Strong key + * generation is critical for symmetric cryptography. + * + * @return A new AES SecretKey. + * @throws Exception if key generation fails. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256, new SecureRandom()); + return keyGen.generateKey(); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/SignEncryptCombinations.java b/java/ql/test/experimental/library-tests/quantum/jca/SignEncryptCombinations.java new file mode 100644 index 00000000000..d238aab173c --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/SignEncryptCombinations.java @@ -0,0 +1,359 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Arrays; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; + +/** + * This class demonstrates cryptographic flows combining signing, encryption, + * and MAC. + * + * It intentionally includes both safe and unsafe patterns so that a SAST tool + * can detect: + * + * 1. **Sign then Encrypt (Unsafe)** - Signs the plaintext and encrypts only the + * signature, leaving the plaintext in cleartext. - *Issue:* The message is + * exposed, which could lead to replay or modification attacks. + * + * 2. **Encrypt then Sign (Safe with caveats)** - Encrypts the plaintext and + * then signs the ciphertext. - *Caveat:* The signature is in the clear; + * metadata (e.g. ciphertext length) may be exposed. + * + * 3. **MAC then Encrypt (Unsafe)** - Computes a MAC on the plaintext and + * appends it before encryption. - *Issue:* Operating on plaintext for MAC + * generation can leak information and is discouraged. + * + * 4. **Encrypt then MAC (Safe)** - Encrypts the plaintext and computes a MAC + * over the ciphertext. - *Benefit:* Provides a robust authenticated encryption + * construction when not using an AEAD cipher. + * + * Note: AES/GCM already provides authentication, so adding an external MAC is + * redundant. + */ +public class SignEncryptCombinations { + + private static final SecureRandom RANDOM = new SecureRandom(); + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + /////////////////////////////////////////////// + // Key Generation for ECDSA on secp256r1 + /////////////////////////////////////////////// + + public KeyPair generateECDSAKeyPair() throws Exception { + KeyPairGenerator ecKpg = KeyPairGenerator.getInstance("EC", "BC"); + ecKpg.initialize(new ECGenParameterSpec("secp256r1"), RANDOM); + return ecKpg.generateKeyPair(); + } + + /////////////////////////////////////////////// + // Signing with ECDSA (SHA256withECDSA) + /////////////////////////////////////////////// + + public byte[] signECDSA(PrivateKey privKey, byte[] data) throws Exception { + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initSign(privKey, RANDOM); + signature.update(data); + return signature.sign(); + } + + public boolean verifyECDSA(PublicKey pubKey, byte[] data, byte[] signatureBytes) throws Exception { + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initVerify(pubKey); + signature.update(data); + return signature.verify(signatureBytes); + } + + /////////////////////////////////////////////// + // Symmetric Encryption with AES-GCM + /////////////////////////////////////////////// + + /** + * Generates a 256-bit AES key. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256); + return kg.generateKey(); + } + + /** + * Encrypts data using AES-GCM with a 12-byte IV and a 128-bit tag. Returns + * the concatenation of IV and ciphertext. + */ + public byte[] encryptAESGCM(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM + RANDOM.nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + + byte[] result = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, result, 0, iv.length); + System.arraycopy(ciphertext, 0, result, iv.length, ciphertext.length); + return result; + } + + /** + * Decrypts data that was encrypted using encryptAESGCM. + */ + public byte[] decryptAESGCM(SecretKey key, byte[] ivCiphertext) throws Exception { + byte[] iv = Arrays.copyOfRange(ivCiphertext, 0, 12); + byte[] ciphertext = Arrays.copyOfRange(ivCiphertext, 12, ivCiphertext.length); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, key, new GCMParameterSpec(128, iv)); + return cipher.doFinal(ciphertext); + } + + /////////////////////////////////////////////// + // HMAC Usage with HMAC-SHA256 + /////////////////////////////////////////////// + + public byte[] computeHmacSHA256(SecretKey key, byte[] data) throws Exception { + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(key); + return mac.doFinal(data); + } + + public boolean verifyHmacSHA256(SecretKey key, byte[] data, byte[] givenMac) throws Exception { + byte[] computed = computeHmacSHA256(key, data); + return Arrays.equals(computed, givenMac); + } + + /////////////////////////////////////////////// + // 1) SIGN THEN ENCRYPT vs. ENCRYPT THEN SIGN + /////////////////////////////////////////////// + + /** + * UNSAFE FLOW: Signs the plaintext and encrypts only the signature. + * + *

    + * **Issue:** The plaintext message is not encrypted, only the signature is. + * This exposes the original message to eavesdroppers and negates the purpose of + * encryption. + *

    + * + * @param signingKey ECDSA private key for signing. + * @param encryptionKey AES key for encryption. + * @param data The plaintext message. + * @return The encrypted signature only. + */ + public byte[] signThenEncrypt(PrivateKey signingKey, SecretKey encryptionKey, byte[] data) throws Exception { + // Sign the plaintext message. + byte[] signature = signECDSA(signingKey, data); + // **** UNSAFE: Only the signature is encrypted. The plaintext remains in the + // clear. **** + return encryptAESGCM(encryptionKey, signature); + } + + /** + * Decrypts the signature and verifies it against the original plaintext. + */ + public boolean decryptThenVerify(SecretKey encryptionKey, PublicKey verifyingKey, byte[] encryptedSig, + byte[] originalData) throws Exception { + byte[] decryptedSig = decryptAESGCM(encryptionKey, encryptedSig); + return verifyECDSA(verifyingKey, originalData, decryptedSig); + } + + /** + * SAFE FLOW (with caveats): Encrypts the plaintext and then signs the + * ciphertext. + * + *

    + * **Benefit:** The plaintext is fully encrypted and remains confidential. + * **Caveat:** The signature is transmitted in the clear. Although this does + * not compromise the message, it might reveal metadata (like ciphertext + * length). + *

    + * + * @param encryptionKey AES key for encryption. + * @param signingKey ECDSA private key for signing. + * @param data The plaintext message. + * @return The concatenation of the ciphertext and its signature. + */ + public byte[] encryptThenSign(SecretKey encryptionKey, PrivateKey signingKey, byte[] data) throws Exception { + // Encrypt the plaintext. + byte[] ivCiphertext = encryptAESGCM(encryptionKey, data); + // Sign the ciphertext. + byte[] signature = signECDSA(signingKey, ivCiphertext); + + // Combine ciphertext and signature. + byte[] combined = new byte[ivCiphertext.length + signature.length]; + System.arraycopy(ivCiphertext, 0, combined, 0, ivCiphertext.length); + System.arraycopy(signature, 0, combined, ivCiphertext.length, signature.length); + return combined; + } + + /** + * Extracts and verifies the signature from the combined + * ciphertext-signature bundle, then decrypts the ciphertext. + * + *

    + * **Issue:** Here we assume a fixed signature length (70 bytes). In + * production, the signature length should be explicitly stored. Hard-coding + * a length is an unsafe pattern and may trigger SAST warnings. + *

    + * + * @param verifyingKey ECDSA public key for signature verification. + * @param encryptionKey AES key for decryption. + * @param combined The combined ciphertext and signature. + * @return The decrypted plaintext message. + */ + public byte[] verifyThenDecrypt(PublicKey verifyingKey, SecretKey encryptionKey, byte[] combined) throws Exception { + int assumedSignatureLength = 70; // UNSAFE: Hard-coded signature length. + if (combined.length < assumedSignatureLength) { + throw new IllegalArgumentException("Combined data too short."); + } + int ctLen = combined.length - assumedSignatureLength; + byte[] ivCiphertext = Arrays.copyOfRange(combined, 0, ctLen); + byte[] signature = Arrays.copyOfRange(combined, ctLen, combined.length); + + if (!verifyECDSA(verifyingKey, ivCiphertext, signature)) { + throw new SecurityException("Signature verification failed."); + } + return decryptAESGCM(encryptionKey, ivCiphertext); + } + + /////////////////////////////////////////////// + // 2) MAC THEN ENCRYPT vs. ENCRYPT THEN MAC + /////////////////////////////////////////////// + + /** + * UNSAFE FLOW: Computes a MAC on the plaintext, appends it to the plaintext, + * and then encrypts the combined data. + * + *

    + * **Issue:** Operating on unencrypted plaintext to compute the MAC can leak + * structural + * information. Additionally, if the encryption scheme does not provide + * integrity, + * this construction is vulnerable. + *

    + * + * @param macKey AES key used as the HMAC key (should be separate from the + * encryption key). + * @param encKey AES key for encryption. + * @param data The plaintext message. + * @return The encrypted (plaintext + MAC) bundle. + */ + public byte[] macThenEncrypt(SecretKey macKey, SecretKey encKey, byte[] data) throws Exception { + // Compute MAC over the plaintext. + byte[] mac = computeHmacSHA256(macKey, data); + // Combine plaintext and MAC. + byte[] combined = new byte[data.length + mac.length]; + System.arraycopy(data, 0, combined, 0, data.length); + System.arraycopy(mac, 0, combined, data.length, mac.length); + // **** UNSAFE: The MAC is computed on plaintext, which can leak information. + // **** + return encryptAESGCM(encKey, combined); + } + + /** + * Decrypts the combined data and verifies the MAC. + * + * @param macKey AES key used as the HMAC key. + * @param encKey AES key for decryption. + * @param ciphertext The encrypted bundle containing plaintext and MAC. + * @return true if the MAC is valid; false otherwise. + */ + public boolean decryptThenVerifyMac(SecretKey macKey, SecretKey encKey, byte[] ciphertext) throws Exception { + byte[] combined = decryptAESGCM(encKey, ciphertext); + if (combined.length < 32) { // HMAC-SHA256 produces a 32-byte MAC. + throw new IllegalArgumentException("Combined data too short for MAC verification."); + } + int dataLen = combined.length - 32; + byte[] originalData = Arrays.copyOfRange(combined, 0, dataLen); + byte[] extractedMac = Arrays.copyOfRange(combined, dataLen, combined.length); + return verifyHmacSHA256(macKey, originalData, extractedMac); + } + + /** + * SAFE FLOW: Encrypts the plaintext and then computes a MAC over the + * ciphertext. + * + *

    + * **Benefit:** This "encrypt-then-MAC" construction ensures that the + * ciphertext is both confidential and tamper-evident. + *

    + * + * @param encKey AES key for encryption. + * @param macKey AES key used as the HMAC key. + * @param data The plaintext message. + * @return The concatenation of ciphertext and MAC. + */ + public byte[] encryptThenMac(SecretKey encKey, SecretKey macKey, byte[] data) throws Exception { + // Encrypt the plaintext. + byte[] ivCiphertext = encryptAESGCM(encKey, data); + // Compute MAC over the ciphertext. + byte[] mac = computeHmacSHA256(macKey, ivCiphertext); + // Combine ciphertext and MAC. + byte[] combined = new byte[ivCiphertext.length + mac.length]; + System.arraycopy(ivCiphertext, 0, combined, 0, ivCiphertext.length); + System.arraycopy(mac, 0, combined, ivCiphertext.length, mac.length); + return combined; + } + + /** + * Verifies the MAC and then decrypts the ciphertext. + * + * @param encKey AES key for decryption. + * @param macKey AES key used as the HMAC key. + * @param combined The combined ciphertext and MAC. + * @return The decrypted plaintext message. + */ + public byte[] verifyMacThenDecrypt(SecretKey encKey, SecretKey macKey, byte[] combined) throws Exception { + if (combined.length < 32) { + throw new IllegalArgumentException("Combined data too short for MAC verification."); + } + int macOffset = combined.length - 32; + byte[] ivCiphertext = Arrays.copyOfRange(combined, 0, macOffset); + byte[] extractedMac = Arrays.copyOfRange(combined, macOffset, combined.length); + if (!verifyHmacSHA256(macKey, ivCiphertext, extractedMac)) { + throw new SecurityException("MAC verification failed."); + } + return decryptAESGCM(encKey, ivCiphertext); + } + + /////////////////////////////////////////////// + // Demo: runAllCombinations + /////////////////////////////////////////////// + + public void runAllCombinations() throws Exception { + // Generate keys for signing and for encryption/MAC. + KeyPair signingKeys = generateECDSAKeyPair(); + SecretKey encKey = generateAESKey(); + SecretKey macKey = generateAESKey(); // Ensure a separate key for MAC operations. + + byte[] message = "Hello, combinations!".getBytes(); + + // 1) Sign then Encrypt (Unsafe) vs. Encrypt then Sign (Safe with caveats) + System.out.println("--Sign Then Encrypt (UNSAFE)"); + byte[] encryptedSig = signThenEncrypt(signingKeys.getPrivate(), encKey, message); + boolean steVerified = decryptThenVerify(encKey, signingKeys.getPublic(), encryptedSig, message); + System.out.println("signThenEncrypt -> signature verified? " + steVerified); + + System.out.println("--Encrypt Then Sign (SAFE with caveats)"); + byte[] combinedETS = encryptThenSign(encKey, signingKeys.getPrivate(), message); + byte[] finalPlain = verifyThenDecrypt(signingKeys.getPublic(), encKey, combinedETS); + System.out.println("encryptThenSign -> decrypted message: " + new String(finalPlain)); + + // 2) MAC then Encrypt (Unsafe) vs. Encrypt then MAC (Safe) + System.out.println("--MAC Then Encrypt (UNSAFE)"); + byte[] mteCipher = macThenEncrypt(macKey, encKey, message); + boolean mteVerified = decryptThenVerifyMac(macKey, encKey, mteCipher); + System.out.println("macThenEncrypt -> MAC verified? " + mteVerified); + + System.out.println("--Encrypt Then MAC (SAFE)"); + byte[] etmCombined = encryptThenMac(encKey, macKey, message); + byte[] etmPlain = verifyMacThenDecrypt(encKey, macKey, etmCombined); + System.out.println("encryptThenMac -> decrypted message: " + new String(etmPlain)); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/SignatureOperation.java b/java/ql/test/experimental/library-tests/quantum/jca/SignatureOperation.java new file mode 100644 index 00000000000..2efba7c5c77 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/SignatureOperation.java @@ -0,0 +1,346 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; +import java.security.spec.ECGenParameterSpec; +import java.util.Base64; +import java.util.Properties; + +/** + * Demonstrates various digital signature operations: + * + * 1) RSA-PSS (modern, safer) - CBOM/SAST: Classified as a Modern Digital + * Signature scheme using RSA-PSS. RSA-PSS with SHA-256 is recommended. + * + * 2) ECDSA with secp256r1 - CBOM/SAST: Classified as an Elliptic Curve Digital + * Signature Algorithm. Secure when used with a strong curve and proper + * randomness. + * + * 3) Ed25519 (RFC 8032) - CBOM/SAST: Classified as a modern, high-performance + * signature scheme. + * + * 4) SHA1withRSA (deprecated/unsafe example) - CBOM/SAST: Classified as a + * legacy digital signature scheme. SHA-1 and 1024-bit RSA are deprecated. + * + * Additional nuanced examples: + * + * - Signing and verifying an empty message. - Signing data with non-ASCII + * characters. - Demonstrating signature tampering and its detection. - A + * dynamic (runtime-selected) signature algorithm scenario ("known unknown"). + * + * Requirements: - BouncyCastle for ECDSA, Ed25519, and RSA-PSS (if needed). - + * Java 11+ for native Ed25519 support or using BC for older versions. + */ +public class SignatureOperation { + + // static { + // // Register the BouncyCastle provider. + // Security.addProvider(new BouncyCastleProvider()); + // } + /////////////////////////////////////// + // 1. RSA-PSS (Recommended) + /////////////////////////////////////// + + /** + * Generate an RSA key pair for RSA-PSS. + * Uses a 2048-bit key. + * + * CBOM/SAST Notes: + * - Parent: Modern Digital Signature (RSA-PSS). + */ + public KeyPair generateRSAPSSKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(2048); + return kpg.generateKeyPair(); + } + + /** + * Sign data using RSA-PSS with SHA-256. + * + * CBOM/SAST Notes: - Parent: Modern Digital Signature (RSA-PSS). + */ + public byte[] signRSAPSS(PrivateKey privateKey, byte[] data) throws Exception { + Signature signature = Signature.getInstance("SHA256withRSAandMGF1"); + signature.initSign(privateKey); + signature.update(data); + return signature.sign(); + } + + /** + * Verify data using RSA-PSS with SHA-256. + * + * CBOM/SAST Notes: - Parent: Modern Digital Signature (RSA-PSS). + */ + public boolean verifyRSAPSS(PublicKey publicKey, byte[] data, byte[] sigBytes) throws Exception { + Signature signature = Signature.getInstance("SHA256withRSAandMGF1"); + signature.initVerify(publicKey); + signature.update(data); + return signature.verify(sigBytes); + } + + /////////////////////////////////////// + // 2. ECDSA (secp256r1) + /////////////////////////////////////// + + /** + * Generate an ECDSA key pair on secp256r1. + * + * CBOM/SAST Notes: + * - Parent: Elliptic Curve Digital Signature. + */ + public KeyPair generateECDSAKeyPair() throws Exception { + KeyPairGenerator ecKpg = KeyPairGenerator.getInstance("EC", "BC"); + ecKpg.initialize(new ECGenParameterSpec("secp256r1"), new SecureRandom()); + return ecKpg.generateKeyPair(); + } + + /** + * Sign data using ECDSA with SHA-256. + * + * CBOM/SAST Notes: - Parent: Elliptic Curve Digital Signature. + */ + public byte[] signECDSA(PrivateKey privateKey, byte[] data) throws Exception { + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initSign(privateKey); + signature.update(data); + return signature.sign(); + } + + /** + * Verify data using ECDSA with SHA-256. + * + * CBOM/SAST Notes: - Parent: Elliptic Curve Digital Signature. + */ + public boolean verifyECDSA(PublicKey publicKey, byte[] data, byte[] sigBytes) throws Exception { + Signature signature = Signature.getInstance("SHA256withECDSA", "BC"); + signature.initVerify(publicKey); + signature.update(data); + return signature.verify(sigBytes); + } + + /////////////////////////////////////// + // 3. Ed25519 (RFC 8032) + /////////////////////////////////////// + + /** + * Generate an Ed25519 key pair. + * + * CBOM/SAST Notes: + * - Parent: Modern Digital Signature (EdDSA). + */ + public KeyPair generateEd25519KeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519", "BC"); + return kpg.generateKeyPair(); + } + + /** + * Sign data using Ed25519. + * + * CBOM/SAST Notes: - Parent: Modern Digital Signature (EdDSA). + */ + public byte[] signEd25519(PrivateKey privateKey, byte[] data) throws Exception { + Signature signature = Signature.getInstance("Ed25519", "BC"); + signature.initSign(privateKey); + signature.update(data); + return signature.sign(); + } + + /** + * Verify data using Ed25519. + * + * CBOM/SAST Notes: - Parent: Modern Digital Signature (EdDSA). + */ + public boolean verifyEd25519(PublicKey publicKey, byte[] data, byte[] sigBytes) throws Exception { + Signature signature = Signature.getInstance("Ed25519", "BC"); + signature.initVerify(publicKey); + signature.update(data); + return signature.verify(sigBytes); + } + + /////////////////////////////////////// + // 4. SHA1withRSA (Deprecated/Unsafe) + /////////////////////////////////////// + + /** + * Generate an RSA key pair for the deprecated/unsafe example. + * Uses a 1024-bit key. + * + * CBOM/SAST Notes: + * - Parent: Legacy Digital Signature. + * - RSA with SHA-1 and 1024-bit keys is deprecated and should be avoided. + */ + public KeyPair generateRSAUnsafeKeyPair() throws Exception { + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + kpg.initialize(1024); + return kpg.generateKeyPair(); + } + + /** + * Sign data using SHA1withRSA. + * + * CBOM/SAST Notes: - Parent: Legacy Digital Signature. - SHA-1 is + * deprecated and RSA with 1024 bits is considered weak. + */ + public byte[] signSHA1withRSA(PrivateKey privateKey, byte[] data) throws Exception { + Signature signature = Signature.getInstance("SHA1withRSA"); + signature.initSign(privateKey); + signature.update(data); + return signature.sign(); + } + + /** + * Verify data using SHA1withRSA. + * + * CBOM/SAST Notes: - Parent: Legacy Digital Signature. - Verification of + * SHA1withRSA is insecure. + */ + public boolean verifySHA1withRSA(PublicKey publicKey, byte[] data, byte[] sigBytes) throws Exception { + Signature signature = Signature.getInstance("SHA1withRSA"); + signature.initVerify(publicKey); + signature.update(data); + return signature.verify(sigBytes); + } + + /////////////////////////////////////// + // Nuanced Edge-Case Examples + /////////////////////////////////////// + + /** + * Demonstrates signing and verifying an empty message. + * + * CBOM/SAST Notes: + * - Edge Case: Signing empty input should be handled correctly but might be + * unexpected. + */ + public void signAndVerifyEmptyMessage() throws Exception { + byte[] emptyMessage = new byte[0]; + KeyPair kp = generateRSAPSSKeyPair(); + byte[] sig = signRSAPSS(kp.getPrivate(), emptyMessage); + boolean verified = verifyRSAPSS(kp.getPublic(), emptyMessage, sig); + System.out.println("Empty message signature verified? " + verified); + } + + /** + * Demonstrates that even a slight tampering with the signature will cause + * verification to fail. + * + * CBOM/SAST Notes: - Edge Case: Signature integrity is critical. Any + * change-even a single byte-should invalidate the signature. + */ + public void tamperSignatureEdgeCase() throws Exception { + byte[] message = "Important Message".getBytes(); + KeyPair kp = generateECDSAKeyPair(); + byte[] originalSig = signECDSA(kp.getPrivate(), message); + // Tamper with the signature by flipping one bit. + byte[] tamperedSig = originalSig.clone(); + tamperedSig[0] ^= 0x01; + boolean verifiedOriginal = verifyECDSA(kp.getPublic(), message, originalSig); + boolean verifiedTampered = verifyECDSA(kp.getPublic(), message, tamperedSig); + System.out.println("Original ECDSA signature verified? " + verifiedOriginal); + System.out.println("Tampered ECDSA signature verified? " + verifiedTampered); + } + + /** + * Demonstrates dynamic signature algorithm selection. This is a "known + * unknown" scenario where the algorithm is chosen at runtime based on + * configuration. If the configuration is compromised or misconfigured, an + * insecure algorithm might be selected. + * + * CBOM/SAST Notes: - Known Unknown: Dynamic configuration introduces + * ambiguity and risk. - Ensure that fallback defaults are secure. + */ + public void dynamicSignatureSelectionDemo() throws Exception { + // Simulate loading a configuration. + Properties config = new Properties(); + // For demonstration, let's assume the config might specify an algorithm. + // Possible values: "SHA256withRSAandMGF1", "SHA256withECDSA", "Ed25519", + // "SHA1withRSA" + // Here we simulate an unknown or insecure algorithm being selected. + config.setProperty("signature.algorithm", "SHA1withRSA"); // Insecure choice! + String algorithm = config.getProperty("signature.algorithm", "SHA256withRSAandMGF1"); + + KeyPair kp; + Signature signature; + if ("SHA256withRSAandMGF1".equalsIgnoreCase(algorithm)) { + kp = generateRSAPSSKeyPair(); + signature = Signature.getInstance("SHA256withRSAandMGF1"); + } else if ("SHA256withECDSA".equalsIgnoreCase(algorithm)) { + kp = generateECDSAKeyPair(); + signature = Signature.getInstance("SHA256withECDSA", "BC"); + } else if ("Ed25519".equalsIgnoreCase(algorithm)) { + kp = generateEd25519KeyPair(); + signature = Signature.getInstance("Ed25519", "BC"); + } else if ("SHA1withRSA".equalsIgnoreCase(algorithm)) { + kp = generateRSAUnsafeKeyPair(); + signature = Signature.getInstance("SHA1withRSA"); + } else { + // Fallback to a secure default. + kp = generateRSAPSSKeyPair(); + signature = Signature.getInstance("SHA256withRSAandMGF1"); + } + + byte[] message = "Dynamic Signature Demo".getBytes(); + signature.initSign(kp.getPrivate()); + signature.update(message); + byte[] sigBytes = signature.sign(); + // Verify using the same algorithm. + signature.initVerify(kp.getPublic()); + signature.update(message); + boolean verified = signature.verify(sigBytes); + System.out.println("Dynamic algorithm (" + algorithm + ") signature verified? " + verified); + } + + /////////////////////////////////////// + // Demo Method: runSignatureDemos + /////////////////////////////////////// + + /** + * Demonstrates digital signature operations for various algorithms. + * It generates key pairs, signs a message, and verifies the signature for: + * - RSA-PSS + * - ECDSA (secp256r1) + * - Ed25519 + * - SHA1withRSA (deprecated/unsafe) + * Additionally, it runs several edge-case demos. + * + * CBOM/SAST Classification: + * - Shows both modern, secure signature schemes and a deprecated example. + * - Also demonstrates handling of edge cases and dynamic selection risks. + */ + public void runSignatureDemos() throws Exception { + byte[] message = "Hello Signature World!".getBytes(); + + // ============ RSA-PSS ============ + KeyPair rsaPssKP = generateRSAPSSKeyPair(); + byte[] rsaPssSig = signRSAPSS(rsaPssKP.getPrivate(), message); + System.out.println("RSA-PSS Signature: " + Base64.getEncoder().encodeToString(rsaPssSig)); + boolean rsaPssVerified = verifyRSAPSS(rsaPssKP.getPublic(), message, rsaPssSig); + System.out.println("RSA-PSS Verified? " + rsaPssVerified); + + // ============ ECDSA (secp256r1) ============ + KeyPair ecdsaKP = generateECDSAKeyPair(); + byte[] ecdsaSig = signECDSA(ecdsaKP.getPrivate(), message); + System.out.println("ECDSA Signature: " + Base64.getEncoder().encodeToString(ecdsaSig)); + boolean ecdsaVerified = verifyECDSA(ecdsaKP.getPublic(), message, ecdsaSig); + System.out.println("ECDSA Verified? " + ecdsaVerified); + + // ============ Ed25519 ============ + KeyPair ed25519KP = generateEd25519KeyPair(); + byte[] ed25519Sig = signEd25519(ed25519KP.getPrivate(), message); + System.out.println("Ed25519 Signature: " + Base64.getEncoder().encodeToString(ed25519Sig)); + boolean ed25519Verified = verifyEd25519(ed25519KP.getPublic(), message, ed25519Sig); + System.out.println("Ed25519 Verified? " + ed25519Verified); + + // ============ SHA1withRSA (Deprecated/Unsafe) ============ + KeyPair rsaUnsafeKP = generateRSAUnsafeKeyPair(); + byte[] rsaUnsafeSig = signSHA1withRSA(rsaUnsafeKP.getPrivate(), message); + System.out.println("SHA1withRSA Signature (Insecure): " + Base64.getEncoder().encodeToString(rsaUnsafeSig)); + boolean rsaUnsafeVerified = verifySHA1withRSA(rsaUnsafeKP.getPublic(), message, rsaUnsafeSig); + System.out.println("SHA1withRSA Verified? " + rsaUnsafeVerified); + + // ============ Edge Cases ============ + signAndVerifyEmptyMessage(); + tamperSignatureEdgeCase(); + dynamicSignatureSelectionDemo(); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/SymmetricAlgorithm.java b/java/ql/test/experimental/library-tests/quantum/jca/SymmetricAlgorithm.java new file mode 100644 index 00000000000..ce07eab5b59 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/SymmetricAlgorithm.java @@ -0,0 +1,348 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.*; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Base64; + +/** + * SymmetricAlgorithmTest demonstrates various symmetric encryption flows and + * key derivation scenarios that can be analyzed by SAST tools. + * + * It includes: 1) AES-GCM encryption with random nonce (secure). 2) AES-GCM + * encryption with fixed nonce (insecure). 3) AES-CBC encryption with random IV + * (secure). 4) AES-ECB encryption (insecure). 5) RC4 encryption (insecure). 6) + * DES and TripleDES encryption (insecure/weak). 7) ChaCha20 encryption (secure, + * if available). 8) KMAC-based key derivation used to derive a key for AES + * encryption. 9) Dynamic symmetric encryption selection based on configuration. + * 10) Further use: deriving two keys from symmetric key material via PBKDF2. + * + * SAST/CBOM notes: - Nonce/IV reuse (e.g., fixed nonce) must be flagged. - + * Insecure algorithms (RC4, DES, TripleDES, AES/ECB) are marked as unsafe. - + * Dynamic selection may lead to insecure fallback if misconfigured. + */ +public class SymmetricAlgorithm { + + // static { + // Security.addProvider(new BouncyCastleProvider()); + // } + // ---------- Secure Symmetric Encryption Flows ---------- + /** + * AES-GCM encryption using a 12-byte random nonce. SAST: AES-GCM is secure + * when a unique nonce is used per encryption. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The IV prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] aesGcmEncryptSafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // Recommended 12-byte nonce for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + /** + * AES-GCM encryption using a fixed (constant) nonce. SAST: Fixed nonce + * reuse in AES-GCM is insecure as it destroys confidentiality. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The fixed IV prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] aesGcmEncryptUnsafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; // Fixed IV (all zeros by default) - insecure. + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, key, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + /** + * AES-CBC encryption using a random IV. SAST: AES-CBC is secure if IVs are + * random and not reused. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The IV prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] aesCbcEncryptSafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + byte[] iv = new byte[16]; // 16-byte IV for AES block size. + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + /** + * AES-ECB encryption. SAST: ECB mode is insecure as it does not use an IV, + * revealing data patterns. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] aesEcbEncryptUnsafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, key); + return cipher.doFinal(plaintext); + } + + // ---------- Other Symmetric Algorithms ---------- + /** + * RC4 encryption. SAST: RC4 is deprecated due to vulnerabilities. + * + * @param key The RC4 key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] rc4EncryptUnsafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("RC4"); + cipher.init(Cipher.ENCRYPT_MODE, key); + return cipher.doFinal(plaintext); + } + + /** + * DES encryption. SAST: DES is insecure due to its 56-bit effective key + * size. + * + * @param key The DES key. + * @param plaintext The plaintext to encrypt. + * @return The IV prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] desEncryptUnsafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); + byte[] iv = new byte[8]; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + /** + * TripleDES (DESede) encryption. SAST: TripleDES is weak by modern + * standards and is deprecated. + * + * @param key The TripleDES key. + * @param plaintext The plaintext to encrypt. + * @return The IV prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] tripleDesEncryptUnsafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); + byte[] iv = new byte[8]; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + /** + * ChaCha20 encryption. SAST: ChaCha20 is considered secure and is a modern + * alternative to AES. + * + * @param key The ChaCha20 key. + * @param plaintext The plaintext to encrypt. + * @return The nonce prepended to the ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] chacha20EncryptSafe(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("ChaCha20", "BC"); + byte[] nonce = new byte[12]; // ChaCha20 typically uses a 12-byte nonce. + new SecureRandom().nextBytes(nonce); + // ChaCha20 may require an IvParameterSpec for the nonce. + cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(nonce)); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[nonce.length + ciphertext.length]; + System.arraycopy(nonce, 0, output, 0, nonce.length); + System.arraycopy(ciphertext, 0, output, nonce.length, ciphertext.length); + return output; + } + + /** + * KMAC-based flow: Uses KMAC128 to derive key material for AES encryption. + * SAST: KMAC128 is secure as part of the SHA-3 family when used correctly. + * + * @param key The KMAC key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext (with IV) resulting from encryption with a derived + * key. + * @throws Exception if encryption fails. + */ + public byte[] kmacEncryptFlow(SecretKey key, byte[] plaintext) throws Exception { + Mac kmac = Mac.getInstance("KMAC128", "BC"); + kmac.init(key); + byte[] kmacOutput = kmac.doFinal(plaintext); + // Use the first 16 bytes of KMAC output as an AES key. + SecretKey derivedKey = new SecretKeySpec(kmacOutput, 0, 16, "AES"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + GCMParameterSpec spec = new GCMParameterSpec(128, iv); + cipher.init(Cipher.ENCRYPT_MODE, derivedKey, spec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return output; + } + + // ---------- Dynamic Algorithm Selection ---------- + /** + * Dynamically selects a symmetric encryption algorithm based on a + * configuration property. If the algorithm is unknown or ambiguous, falls + * back to an insecure default (AES/ECB). + * + * SAST: Dynamic selection introduces a known unknown risk. + * + * @param algorithm The algorithm name from configuration. + * @param key The symmetric key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext. + * @throws Exception if encryption fails. + */ + public byte[] dynamicSymmetricEncryption(String algorithm, SecretKey key, byte[] plaintext) throws Exception { + if ("AES/GCM/NoPadding".equalsIgnoreCase(algorithm)) { + return aesGcmEncryptSafe(key, plaintext); + } else if ("AES/CBC/PKCS5Padding".equalsIgnoreCase(algorithm)) { + return aesCbcEncryptSafe(key, plaintext); + } else if ("AES/ECB/PKCS5Padding".equalsIgnoreCase(algorithm)) { + return aesEcbEncryptUnsafe(key, plaintext); + } else if ("RC4".equalsIgnoreCase(algorithm)) { + return rc4EncryptUnsafe(key, plaintext); + } else if ("ChaCha20".equalsIgnoreCase(algorithm)) { + return chacha20EncryptSafe(key, plaintext); + } else { + // Unknown algorithm: fallback to insecure AES/ECB. + return aesEcbEncryptUnsafe(key, plaintext); + } + } + + // ---------- Further Use of Symmetric Keys ---------- + /** + * Derives a key from an input key by simple truncation. SAST: This approach + * is ambiguous; a proper KDF should be used. + * + * @param key The input symmetric key. + * @return A derived 128-bit key. + */ + public byte[] deriveKeyFromKey(SecretKey key) { + byte[] keyBytes = key.getEncoded(); + return Arrays.copyOf(keyBytes, 16); + } + + /** + * Further use: Derives two separate keys from a symmetric key using PBKDF2, + * then uses one key for encryption and one for MACing ciphertext. SAST: + * This key-splitting approach is acceptable if PBKDF2 is used securely. + * + * @param key The input key material. + * @param plaintext The plaintext to encrypt. + * @return The concatenated ciphertext and its MAC. + * @throws Exception if key derivation or encryption fails. + */ + public byte[] furtherUseSymmetricKeyForKeyDerivation(SecretKey key, byte[] plaintext) throws Exception { + String keyAsString = Base64.getEncoder().encodeToString(key.getEncoded()); + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(keyAsString.toCharArray(), salt, 10000, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] derived = factory.generateSecret(spec).getEncoded(); + byte[] encKeyBytes = Arrays.copyOfRange(derived, 0, 16); + byte[] macKeyBytes = Arrays.copyOfRange(derived, 16, 32); + SecretKey encKey = new SecretKeySpec(encKeyBytes, "AES"); + SecretKey derivedMacKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + byte[] iv = new byte[12]; + new SecureRandom().nextBytes(iv); + cipher.init(Cipher.ENCRYPT_MODE, encKey, new GCMParameterSpec(128, iv)); + byte[] ciphertext = cipher.doFinal(plaintext); + + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(derivedMacKey); + byte[] computedMac = mac.doFinal(ciphertext); + + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + storeEncryptedOutput(output); + return output; + } + + /** + * Stores the encrypted output. SAST: In production, secure + * storage/transmission is required. + * + * @param output The output to store. + */ + public void storeEncryptedOutput(byte[] output) { + String stored = Base64.getEncoder().encodeToString(output); + } + + // ---------- Helper Methods ---------- + /** + * Generates a secure 256-bit AES key. SAST: Uses a strong RNG for key + * generation. + * + * @return A new AES SecretKey. + * @throws Exception if key generation fails. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256); + return kg.generateKey(); + } + + /** + * Generates a random salt of the specified length using SecureRandom. SAST: + * Salting is essential for secure key derivation. + * + * @param length The salt length. + * @return A byte array representing the salt. + */ + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/SymmetricModesTest.java b/java/ql/test/experimental/library-tests/quantum/jca/SymmetricModesTest.java new file mode 100644 index 00000000000..18df2602a7d --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/SymmetricModesTest.java @@ -0,0 +1,131 @@ +package com.example.crypto.algorithms; + +//import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.security.SecureRandom; +import java.util.Base64; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; + +/** + * SymmetricModesTest demonstrates the use of advanced cipher modes for + * symmetric encryption: + * + * 1. AES/KWP/NoPadding: Uses AES Key Wrap with Padding (KWP) to securely wrap + * (encrypt) a key. - Secure usage: Uses a randomly generated wrapping key. + * + * 2. AES/OFB8/NoPadding: Uses AES in Output Feedback mode with an 8-bit + * feedback size. - Secure usage: Uses a random IV for each encryption. - + * Insecure usage: Using a fixed IV (or nonce) in OFB mode compromises + * confidentiality. + * + * In production, algorithm parameters (such as mode, padding, and IV + * generation) should be externalized via configuration files to support crypto + * agility. + */ +public class SymmetricModesTest { + + // static { + // // Register BouncyCastle provider for additional cipher modes. + // Security.addProvider(new BouncyCastleProvider()); + // } + // --------------------------- + // AES/KWP/NoPadding Example + // --------------------------- + /** + * Securely wraps a target AES key using AES/KWP/NoPadding. + * + * Best Practice: - The wrapping key must be generated randomly. - AES/KWP + * provides key wrapping with padding, suitable for keys whose lengths are + * not multiples of the block size. + * + * @return The Base64-encoded wrapped key. + * @throws Exception if an error occurs during key wrapping. + */ + public String secureAESKWPWrap() throws Exception { + // Generate a random wrapping key (256-bit) for key wrapping. + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + SecretKey wrappingKey = kg.generateKey(); + + // Generate a target AES key to be wrapped (128-bit). + kg.init(128, new SecureRandom()); + SecretKey targetKey = kg.generateKey(); + + // Use AES/KWP (Key Wrap with Padding) to wrap the target key. + Cipher cipher = Cipher.getInstance("AES/KWP/NoPadding", "BC"); + cipher.init(Cipher.WRAP_MODE, wrappingKey); + byte[] wrappedKey = cipher.wrap(targetKey); + + return Base64.getEncoder().encodeToString(wrappedKey); + } + + // --------------------------- + // AES/OFB8/NoPadding Examples + // --------------------------- + /** + * Securely encrypts plaintext using AES in OFB mode with an 8-bit feedback + * size (AES/OFB8/NoPadding). + * + * Best Practice: - Use a fresh, random IV for each encryption operation. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext (Base64-encoded) with the IV prepended. + * @throws Exception if encryption fails. + */ + public String secureAesOfb8Encryption(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/OFB8/NoPadding", "BC"); + byte[] iv = new byte[16]; // IV size for AES block cipher (128-bit) even if feedback is 8-bit. + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + // Prepend IV to ciphertext (as is common practice) + byte[] output = new byte[iv.length + ciphertext.length]; + System.arraycopy(iv, 0, output, 0, iv.length); + System.arraycopy(ciphertext, 0, output, iv.length, ciphertext.length); + return Base64.getEncoder().encodeToString(output); + } + + /** + * Insecurely encrypts plaintext using AES in OFB mode with an 8-bit + * feedback size (AES/OFB8/NoPadding) by using a fixed IV. + * + * Best Practice Violation: - Using a fixed IV (or nonce) with any + * encryption mode (including OFB) compromises the cipher's security. + * + * @param key The AES key. + * @param plaintext The plaintext to encrypt. + * @return The ciphertext (Base64-encoded) with the fixed IV prepended. + * @throws Exception if encryption fails. + */ + public String insecureAesOfb8Encryption(SecretKey key, byte[] plaintext) throws Exception { + Cipher cipher = Cipher.getInstance("AES/OFB8/NoPadding", "BC"); + // Fixed IV: Insecure because it causes nonce/IV reuse. + byte[] fixedIV = new byte[16]; // All zeros. + IvParameterSpec ivSpec = new IvParameterSpec(fixedIV); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); + byte[] ciphertext = cipher.doFinal(plaintext); + byte[] output = new byte[fixedIV.length + ciphertext.length]; + System.arraycopy(fixedIV, 0, output, 0, fixedIV.length); + System.arraycopy(ciphertext, 0, output, fixedIV.length, ciphertext.length); + return Base64.getEncoder().encodeToString(output); + } + + // --------------------------- + // Helper Methods + // --------------------------- + /** + * Generates a secure 256-bit AES key. + * + * @return A new AES SecretKey. + * @throws Exception if key generation fails. + */ + public SecretKey generateAESKey() throws Exception { + KeyGenerator kg = KeyGenerator.getInstance("AES"); + kg.init(256, new SecureRandom()); + return kg.generateKey(); + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/jca/UniversalFlowTest.java b/java/ql/test/experimental/library-tests/quantum/jca/UniversalFlowTest.java new file mode 100644 index 00000000000..43a508951f8 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/jca/UniversalFlowTest.java @@ -0,0 +1,49 @@ +package com.example.crypto.algorithms; + +// import org.bouncycastle.jce.provider.BouncyCastleProvider; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import java.security.*; +import java.util.Base64; +import java.util.Random; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.Files; +import java.io.IOException; + +public class UniversalFlowTest { + + public void simpleAESEncryption() throws Exception { + String algorithm = "AES"; + String otherAlgorithm = loadAlgorithmFromDisk(); + + // Randomly select between the known algorithm and the one loaded from disk + String selectedAlgorithm = (new Random().nextInt(2) == 0) ? algorithm : otherAlgorithm; + + KeyGenerator keyGen = KeyGenerator.getInstance(selectedAlgorithm); + keyGen.init(256); // 256-bit AES key. + SecretKey key = keyGen.generateKey(); + String algorithm2 = "AES/GCM/NoPadding"; + Cipher cipher = Cipher.getInstance(algorithm2); + byte[] iv = new byte[12]; // 12-byte IV recommended for GCM. + new SecureRandom().nextBytes(iv); + GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv); // 128-bit authentication tag. + cipher.init(Cipher.ENCRYPT_MODE, key, gcmSpec); + byte[] encryptedData = cipher.doFinal("Sensitive Data".getBytes()); + } + +// Method to load algorithm from disk + private String loadAlgorithmFromDisk() { + try { + // Implementation to load algorithm name from a file + Path path = Paths.get("algorithm.txt"); + return Files.readString(path).trim(); + } catch (IOException e) { + // Fallback to default algorithm if loading fails + System.err.println("Failed to load algorithm from disk: " + e.getMessage()); + return "AES"; + } + } +} diff --git a/java/ql/test/experimental/library-tests/quantum/node_edges.expected b/java/ql/test/experimental/library-tests/quantum/node_edges.expected new file mode 100644 index 00000000000..905304ac771 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/node_edges.expected @@ -0,0 +1,1743 @@ +| jca/AesWrapAndPBEWith.java:60:33:60:48 | KeyGeneration | Algorithm | jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:60:33:60:48 | KeyGeneration | Output | jca/AesWrapAndPBEWith.java:60:33:60:48 | Key | +| jca/AesWrapAndPBEWith.java:63:31:63:46 | KeyGeneration | Algorithm | jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:63:31:63:46 | KeyGeneration | Output | jca/AesWrapAndPBEWith.java:63:31:63:46 | Key | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | Mode | jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | Padding | jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:66:39:66:49 | Key | Source | jca/AesWrapAndPBEWith.java:60:33:60:48 | Key | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | Algorithm | jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | Input | jca/AesWrapAndPBEWith.java:67:41:67:49 | Message | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | Key | jca/AesWrapAndPBEWith.java:66:39:66:49 | Key | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | Nonce | jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | Output | jca/AesWrapAndPBEWith.java:67:29:67:50 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:67:41:67:49 | Message | Source | jca/AesWrapAndPBEWith.java:63:31:63:46 | Key | +| jca/AesWrapAndPBEWith.java:85:31:85:46 | KeyGeneration | Algorithm | jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:85:31:85:46 | KeyGeneration | Output | jca/AesWrapAndPBEWith.java:85:31:85:46 | Key | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | Mode | jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | Padding | jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:88:39:88:49 | Key | Source | jca/AesWrapAndPBEWith.java:88:39:88:49 | Key | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | Algorithm | jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | Input | jca/AesWrapAndPBEWith.java:89:41:89:49 | Message | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | Key | jca/AesWrapAndPBEWith.java:88:39:88:49 | Key | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | Nonce | jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | Output | jca/AesWrapAndPBEWith.java:89:29:89:50 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:89:41:89:49 | Message | Source | jca/AesWrapAndPBEWith.java:85:31:85:46 | Key | +| jca/AesWrapAndPBEWith.java:107:42:107:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | +| jca/AesWrapAndPBEWith.java:107:66:107:69 | Salt | Source | jca/AesWrapAndPBEWith.java:106:34:106:37 | Constant | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | Algorithm | jca/AesWrapAndPBEWith.java:108:65:108:82 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | Input | jca/AesWrapAndPBEWith.java:107:42:107:63 | Message | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | Output | jca/AesWrapAndPBEWith.java:109:27:109:54 | Key | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | Salt | jca/AesWrapAndPBEWith.java:107:66:107:69 | Salt | +| jca/AesWrapAndPBEWith.java:123:42:123:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | +| jca/AesWrapAndPBEWith.java:123:66:123:69 | Salt | Source | jca/AesWrapAndPBEWith.java:122:38:122:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HMACAlgorithm | H | jca/AesWrapAndPBEWith.java:124:65:124:86 | HashAlgorithm | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | KeyDerivationAlgorithm | PRF | jca/AesWrapAndPBEWith.java:124:65:124:86 | HMACAlgorithm | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | Algorithm | jca/AesWrapAndPBEWith.java:124:65:124:86 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | Input | jca/AesWrapAndPBEWith.java:123:42:123:63 | Message | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | Output | jca/AesWrapAndPBEWith.java:125:27:125:54 | Key | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | Salt | jca/AesWrapAndPBEWith.java:123:66:123:69 | Salt | +| jca/AesWrapAndPBEWith.java:141:42:141:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | +| jca/AesWrapAndPBEWith.java:141:66:141:69 | Salt | Source | jca/AesWrapAndPBEWith.java:140:38:140:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | Algorithm | jca/AesWrapAndPBEWith.java:142:65:142:98 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | Input | jca/AesWrapAndPBEWith.java:141:42:141:63 | Message | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | Output | jca/AesWrapAndPBEWith.java:143:28:143:55 | Key | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | Salt | jca/AesWrapAndPBEWith.java:141:66:141:69 | Salt | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | Mode | jca/AesWrapAndPBEWith.java:146:44:146:65 | ModeOfOperation | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | Padding | jca/AesWrapAndPBEWith.java:146:44:146:65 | PaddingAlgorithm | +| jca/AesWrapAndPBEWith.java:150:42:150:47 | Key | Source | jca/AesWrapAndPBEWith.java:143:28:143:55 | Key | +| jca/AesWrapAndPBEWith.java:150:50:150:55 | Nonce | Source | jca/AesWrapAndPBEWith.java:148:38:148:39 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | Algorithm | jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | Input | jca/AesWrapAndPBEWith.java:151:44:151:63 | Message | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | Key | jca/AesWrapAndPBEWith.java:150:42:150:47 | Key | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | Nonce | jca/AesWrapAndPBEWith.java:150:50:150:55 | Nonce | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | Output | jca/AesWrapAndPBEWith.java:151:29:151:64 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:151:44:151:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:72:200:87 | Parameter | +| jca/AesWrapAndPBEWith.java:168:42:168:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | +| jca/AesWrapAndPBEWith.java:168:66:168:69 | Salt | Source | jca/AesWrapAndPBEWith.java:167:38:167:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | Algorithm | jca/AesWrapAndPBEWith.java:169:65:169:96 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | Input | jca/AesWrapAndPBEWith.java:168:42:168:63 | Message | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | Output | jca/AesWrapAndPBEWith.java:170:28:170:55 | Key | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | Salt | jca/AesWrapAndPBEWith.java:168:66:168:69 | Salt | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | Mode | jca/AesWrapAndPBEWith.java:173:44:173:65 | ModeOfOperation | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | Padding | jca/AesWrapAndPBEWith.java:173:44:173:65 | PaddingAlgorithm | +| jca/AesWrapAndPBEWith.java:177:42:177:47 | Key | Source | jca/AesWrapAndPBEWith.java:170:28:170:55 | Key | +| jca/AesWrapAndPBEWith.java:177:50:177:55 | Nonce | Source | jca/AesWrapAndPBEWith.java:175:38:175:39 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | Algorithm | jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | Input | jca/AesWrapAndPBEWith.java:178:44:178:63 | Message | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | Key | jca/AesWrapAndPBEWith.java:177:42:177:47 | Key | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | Nonce | jca/AesWrapAndPBEWith.java:177:50:177:55 | Nonce | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | Output | jca/AesWrapAndPBEWith.java:178:29:178:64 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:178:44:178:63 | Message | Source | jca/AesWrapAndPBEWith.java:200:72:200:87 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | KeyGeneration | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | KeyGeneration | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | Key | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | KeyGeneration | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | KeyGeneration | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | SharedSecret | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | PeerKey | jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | ServerKey | jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | SharedSecret | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | SharedSecret | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | Digest | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | Digest | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | HashOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | HashOperation | Digest | jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | Digest | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | HashOperation | Message | jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:37:124:41 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:37:124:41 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | SharedSecret | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | Key | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | KeyGeneration | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | KeyGeneration | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | Key | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | KeyGeneration | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | KeyGeneration | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | MD | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | MGF1Hash | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:49:168:54 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:49:168:54 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:53:173:81 | Nonce | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:47:174:55 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:53:173:81 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:47:174:55 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:49:192:54 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:49:192:54 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:53:196:86 | Nonce | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:53:196:86 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:47:197:55 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:53:196:86 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:47:197:55 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:50:222:78 | Nonce | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:44:223:52 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:50:222:78 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:44:223:52 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | Mode | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:50:245:83 | Nonce | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:50:245:83 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:44:246:52 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:50:245:83 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:44:246:52 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HMACAlgorithm | H | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HMACAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | HashAlgorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Message | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HMACAlgorithm | H | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | Key | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HMACAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | HashAlgorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Input | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:28:309:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Key | jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Message | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:28:309:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Nonce | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:28:309:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:28:309:45 | Message | Source | jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | KeyGeneration | Algorithm | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | KeyGeneration | Output | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:19:44:19:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:19:44:19:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:23:42:23:44 | Key | Source | jca/ChainedEncryptionTest.java:119:28:119:47 | Key | +| jca/ChainedEncryptionTest.java:23:47:23:50 | Nonce | Source | jca/ChainedEncryptionTest.java:21:38:21:39 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | Algorithm | jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | Input | jca/ChainedEncryptionTest.java:24:44:24:52 | Message | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | Key | jca/ChainedEncryptionTest.java:23:42:23:44 | Key | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | Nonce | jca/ChainedEncryptionTest.java:23:47:23:50 | Nonce | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | Output | jca/ChainedEncryptionTest.java:24:29:24:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:24:44:24:52 | Message | Source | jca/ChainedEncryptionTest.java:126:31:126:57 | Constant | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:32:44:32:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:32:44:32:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:34:42:34:44 | Key | Source | jca/ChainedEncryptionTest.java:119:28:119:47 | Key | +| jca/ChainedEncryptionTest.java:34:47:34:50 | Nonce | Source | jca/ChainedEncryptionTest.java:54:16:54:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | Algorithm | jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | Input | jca/ChainedEncryptionTest.java:35:31:35:40 | Message | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | Key | jca/ChainedEncryptionTest.java:34:42:34:44 | Key | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | Nonce | jca/ChainedEncryptionTest.java:34:47:34:50 | Nonce | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | Output | jca/ChainedEncryptionTest.java:35:16:35:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:35:31:35:40 | Message | Source | jca/ChainedEncryptionTest.java:54:16:54:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:43:42:43:44 | Key | Source | jca/ChainedEncryptionTest.java:124:31:124:53 | Key | +| jca/ChainedEncryptionTest.java:43:47:43:72 | Nonce | Source | jca/ChainedEncryptionTest.java:42:38:42:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | Algorithm | jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | Input | jca/ChainedEncryptionTest.java:44:44:44:52 | Message | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | Key | jca/ChainedEncryptionTest.java:43:42:43:44 | Key | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | Nonce | jca/ChainedEncryptionTest.java:43:47:43:72 | Nonce | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | Output | jca/ChainedEncryptionTest.java:44:29:44:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:44:44:44:52 | Message | Source | jca/ChainedEncryptionTest.java:21:38:21:39 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:44:44:44:52 | Message | Source | jca/ChainedEncryptionTest.java:24:29:24:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:53:42:53:44 | Key | Source | jca/ChainedEncryptionTest.java:124:31:124:53 | Key | +| jca/ChainedEncryptionTest.java:53:47:53:72 | Nonce | Source | jca/ChainedEncryptionTest.java:42:38:42:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:53:47:53:72 | Nonce | Source | jca/ChainedEncryptionTest.java:44:29:44:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | Algorithm | jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | Input | jca/ChainedEncryptionTest.java:54:31:54:40 | Message | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | Key | jca/ChainedEncryptionTest.java:53:42:53:44 | Key | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | Nonce | jca/ChainedEncryptionTest.java:53:47:53:72 | Nonce | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | Output | jca/ChainedEncryptionTest.java:54:16:54:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:54:31:54:40 | Message | Source | jca/ChainedEncryptionTest.java:42:38:42:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:54:31:54:40 | Message | Source | jca/ChainedEncryptionTest.java:44:29:44:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:81:30:81:49 | KeyGeneration | Algorithm | jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:81:30:81:49 | KeyGeneration | Output | jca/ChainedEncryptionTest.java:81:30:81:49 | Key | +| jca/ChainedEncryptionTest.java:85:30:85:52 | KeyGeneration | Algorithm | jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:85:30:85:52 | KeyGeneration | Output | jca/ChainedEncryptionTest.java:85:30:85:52 | Key | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:90:47:90:65 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:90:47:90:65 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:92:45:92:52 | Key | Source | jca/ChainedEncryptionTest.java:81:30:81:49 | Key | +| jca/ChainedEncryptionTest.java:92:55:92:61 | Nonce | Source | jca/ChainedEncryptionTest.java:89:38:89:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | Algorithm | jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | Input | jca/ChainedEncryptionTest.java:93:52:93:61 | Message | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | Key | jca/ChainedEncryptionTest.java:92:45:92:52 | Key | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | Nonce | jca/ChainedEncryptionTest.java:92:55:92:61 | Nonce | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | Output | jca/ChainedEncryptionTest.java:93:34:93:62 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:93:52:93:61 | Message | Source | jca/ChainedEncryptionTest.java:75:46:75:61 | Parameter | +| jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:99:48:99:55 | Key | Source | jca/ChainedEncryptionTest.java:85:30:85:52 | Key | +| jca/ChainedEncryptionTest.java:99:58:99:89 | Nonce | Source | jca/ChainedEncryptionTest.java:97:38:97:48 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | Algorithm | jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | Input | jca/ChainedEncryptionTest.java:100:55:100:69 | Message | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | Key | jca/ChainedEncryptionTest.java:99:48:99:55 | Key | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | Nonce | jca/ChainedEncryptionTest.java:99:58:99:89 | Nonce | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | Output | jca/ChainedEncryptionTest.java:100:34:100:70 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:100:55:100:69 | Message | Source | jca/ChainedEncryptionTest.java:93:34:93:62 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:104:45:104:52 | Key | Source | jca/ChainedEncryptionTest.java:104:45:104:52 | Key | +| jca/ChainedEncryptionTest.java:104:55:104:86 | Nonce | Source | jca/ChainedEncryptionTest.java:97:38:97:48 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | Algorithm | jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | Input | jca/ChainedEncryptionTest.java:105:61:105:75 | Message | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | Key | jca/ChainedEncryptionTest.java:104:45:104:52 | Key | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | Nonce | jca/ChainedEncryptionTest.java:104:55:104:86 | Nonce | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | Output | jca/ChainedEncryptionTest.java:105:43:105:76 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:105:61:105:75 | Message | Source | jca/ChainedEncryptionTest.java:100:34:100:70 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | Mode | jca/ChainedEncryptionTest.java:108:44:108:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | Padding | jca/ChainedEncryptionTest.java:108:44:108:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:109:42:109:49 | Key | Source | jca/ChainedEncryptionTest.java:109:42:109:49 | Key | +| jca/ChainedEncryptionTest.java:109:52:109:83 | Nonce | Source | jca/ChainedEncryptionTest.java:89:38:89:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | Algorithm | jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | Input | jca/ChainedEncryptionTest.java:110:52:110:75 | Message | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | Key | jca/ChainedEncryptionTest.java:109:42:109:49 | Key | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | Nonce | jca/ChainedEncryptionTest.java:109:52:109:83 | Nonce | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | Output | jca/ChainedEncryptionTest.java:110:37:110:76 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:110:52:110:75 | Message | Source | jca/ChainedEncryptionTest.java:105:43:105:76 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:119:28:119:47 | KeyGeneration | Algorithm | jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:119:28:119:47 | KeyGeneration | Output | jca/ChainedEncryptionTest.java:119:28:119:47 | Key | +| jca/ChainedEncryptionTest.java:124:31:124:53 | KeyGeneration | Algorithm | jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:124:31:124:53 | KeyGeneration | Output | jca/ChainedEncryptionTest.java:124:31:124:53 | Key | +| jca/Digest.java:55:23:55:66 | Digest | Source | jca/Digest.java:55:23:55:66 | Digest | +| jca/Digest.java:55:23:55:66 | HashOperation | Algorithm | jca/Digest.java:54:58:54:66 | HashAlgorithm | +| jca/Digest.java:55:23:55:66 | HashOperation | Digest | jca/Digest.java:55:23:55:66 | Digest | +| jca/Digest.java:55:23:55:66 | HashOperation | Message | jca/Digest.java:55:37:55:65 | Message | +| jca/Digest.java:55:37:55:65 | Message | Source | jca/Digest.java:55:37:55:54 | Constant | +| jca/Digest.java:65:23:65:70 | Digest | Source | jca/Digest.java:65:23:65:70 | Digest | +| jca/Digest.java:65:23:65:70 | HashOperation | Algorithm | jca/Digest.java:64:61:64:65 | HashAlgorithm | +| jca/Digest.java:65:23:65:70 | HashOperation | Digest | jca/Digest.java:65:23:65:70 | Digest | +| jca/Digest.java:65:23:65:70 | HashOperation | Message | jca/Digest.java:65:40:65:69 | Message | +| jca/Digest.java:65:40:65:69 | Message | Source | jca/Digest.java:65:40:65:58 | Constant | +| jca/Digest.java:75:23:75:62 | Digest | Source | jca/Digest.java:75:23:75:62 | Digest | +| jca/Digest.java:75:23:75:62 | HashOperation | Algorithm | jca/Digest.java:74:64:74:72 | HashAlgorithm | +| jca/Digest.java:75:23:75:62 | HashOperation | Digest | jca/Digest.java:75:23:75:62 | Digest | +| jca/Digest.java:75:23:75:62 | HashOperation | Message | jca/Digest.java:75:43:75:61 | Message | +| jca/Digest.java:75:43:75:61 | Message | Source | jca/Digest.java:73:49:73:63 | Parameter | +| jca/Digest.java:86:23:86:26 | Message | Source | jca/Digest.java:253:38:253:41 | RandomNumberGeneration | +| jca/Digest.java:87:23:87:56 | Digest | Source | jca/Digest.java:87:23:87:56 | Digest | +| jca/Digest.java:87:23:87:56 | HashOperation | Algorithm | jca/Digest.java:85:58:85:66 | HashAlgorithm | +| jca/Digest.java:87:23:87:56 | HashOperation | Digest | jca/Digest.java:87:23:87:56 | Digest | +| jca/Digest.java:87:23:87:56 | HashOperation | Message | jca/Digest.java:86:23:86:26 | Message | +| jca/Digest.java:87:23:87:56 | HashOperation | Message | jca/Digest.java:87:37:87:55 | Message | +| jca/Digest.java:87:37:87:55 | Message | Source | jca/Digest.java:83:37:83:51 | Parameter | +| jca/Digest.java:97:42:97:63 | Message | Source | jca/Digest.java:95:37:95:51 | Parameter | +| jca/Digest.java:97:66:97:69 | Salt | Source | jca/Digest.java:253:38:253:41 | RandomNumberGeneration | +| jca/Digest.java:98:65:98:86 | HMACAlgorithm | H | jca/Digest.java:98:65:98:86 | HashAlgorithm | +| jca/Digest.java:98:65:98:86 | KeyDerivationAlgorithm | PRF | jca/Digest.java:98:65:98:86 | HMACAlgorithm | +| jca/Digest.java:99:23:99:50 | KeyDerivation | Algorithm | jca/Digest.java:98:65:98:86 | KeyDerivationAlgorithm | +| jca/Digest.java:99:23:99:50 | KeyDerivation | Input | jca/Digest.java:97:42:97:63 | Message | +| jca/Digest.java:99:23:99:50 | KeyDerivation | Output | jca/Digest.java:99:23:99:50 | Key | +| jca/Digest.java:99:23:99:50 | KeyDerivation | Salt | jca/Digest.java:97:66:97:69 | Salt | +| jca/Digest.java:109:23:109:57 | Digest | Source | jca/Digest.java:109:23:109:57 | Digest | +| jca/Digest.java:109:23:109:57 | HashOperation | Algorithm | jca/Digest.java:108:62:108:68 | HashAlgorithm | +| jca/Digest.java:109:23:109:57 | HashOperation | Digest | jca/Digest.java:109:23:109:57 | Digest | +| jca/Digest.java:109:23:109:57 | HashOperation | Message | jca/Digest.java:109:41:109:56 | Message | +| jca/Digest.java:109:41:109:56 | Message | Source | jca/Digest.java:107:40:107:51 | Parameter | +| jca/Digest.java:118:36:118:47 | HMACAlgorithm | H | jca/Digest.java:118:36:118:47 | HashAlgorithm | +| jca/Digest.java:120:19:120:27 | Key | Source | jca/Digest.java:117:49:117:58 | Parameter | +| jca/Digest.java:121:23:121:52 | MACOperation | Algorithm | jca/Digest.java:118:36:118:47 | HMACAlgorithm | +| jca/Digest.java:121:23:121:52 | MACOperation | HashAlgorithm | jca/Digest.java:118:36:118:47 | HashAlgorithm | +| jca/Digest.java:121:23:121:52 | MACOperation | Input | jca/Digest.java:121:36:121:51 | Message | +| jca/Digest.java:121:23:121:52 | MACOperation | Key | jca/Digest.java:120:19:120:27 | Key | +| jca/Digest.java:121:23:121:52 | MACOperation | Message | jca/Digest.java:121:36:121:51 | Message | +| jca/Digest.java:121:23:121:52 | MACOperation | Nonce | jca/Digest.java:121:23:121:52 | MACOperation | +| jca/Digest.java:121:23:121:52 | MACOperation | Output | jca/Digest.java:121:23:121:52 | KeyOperationOutput | +| jca/Digest.java:121:36:121:51 | Message | Source | jca/Digest.java:117:35:117:46 | Parameter | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | Mode | jca/Digest.java:140:44:140:62 | ModeOfOperation | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | Padding | jca/Digest.java:140:44:140:62 | PaddingAlgorithm | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:55:23:55:66 | Digest | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:65:23:65:70 | Digest | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:75:23:75:62 | Digest | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:87:23:87:56 | Digest | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:99:23:99:50 | Key | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:109:23:109:57 | Digest | +| jca/Digest.java:141:42:141:44 | Key | Source | jca/Digest.java:121:23:121:52 | KeyOperationOutput | +| jca/Digest.java:142:32:142:74 | EncryptOperation | Algorithm | jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | +| jca/Digest.java:142:32:142:74 | EncryptOperation | Input | jca/Digest.java:142:47:142:73 | Message | +| jca/Digest.java:142:32:142:74 | EncryptOperation | Key | jca/Digest.java:141:42:141:44 | Key | +| jca/Digest.java:142:32:142:74 | EncryptOperation | Nonce | jca/Digest.java:142:32:142:74 | EncryptOperation | +| jca/Digest.java:142:32:142:74 | EncryptOperation | Output | jca/Digest.java:142:32:142:74 | KeyOperationOutput | +| jca/Digest.java:142:47:142:73 | Message | Source | jca/Digest.java:142:47:142:62 | Constant | +| jca/Digest.java:176:42:176:71 | Message | Source | jca/Digest.java:171:50:171:62 | Parameter | +| jca/Digest.java:176:74:176:77 | Salt | Source | jca/Digest.java:253:38:253:41 | RandomNumberGeneration | +| jca/Digest.java:177:65:177:86 | HMACAlgorithm | H | jca/Digest.java:177:65:177:86 | HashAlgorithm | +| jca/Digest.java:177:65:177:86 | KeyDerivationAlgorithm | PRF | jca/Digest.java:177:65:177:86 | HMACAlgorithm | +| jca/Digest.java:178:30:178:57 | KeyDerivation | Algorithm | jca/Digest.java:177:65:177:86 | KeyDerivationAlgorithm | +| jca/Digest.java:178:30:178:57 | KeyDerivation | Input | jca/Digest.java:176:42:176:71 | Message | +| jca/Digest.java:178:30:178:57 | KeyDerivation | Output | jca/Digest.java:178:30:178:57 | Key | +| jca/Digest.java:178:30:178:57 | KeyDerivation | Salt | jca/Digest.java:176:74:176:77 | Salt | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | Mode | jca/Digest.java:186:44:186:62 | ModeOfOperation | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | Padding | jca/Digest.java:186:44:186:62 | PaddingAlgorithm | +| jca/Digest.java:187:42:187:54 | Key | Source | jca/Digest.java:187:42:187:54 | Key | +| jca/Digest.java:188:29:188:78 | EncryptOperation | Algorithm | jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | +| jca/Digest.java:188:29:188:78 | EncryptOperation | Input | jca/Digest.java:188:44:188:77 | Message | +| jca/Digest.java:188:29:188:78 | EncryptOperation | Key | jca/Digest.java:187:42:187:54 | Key | +| jca/Digest.java:188:29:188:78 | EncryptOperation | Nonce | jca/Digest.java:188:29:188:78 | EncryptOperation | +| jca/Digest.java:188:29:188:78 | EncryptOperation | Output | jca/Digest.java:188:29:188:78 | KeyOperationOutput | +| jca/Digest.java:188:44:188:77 | Message | Source | jca/Digest.java:188:44:188:66 | Constant | +| jca/Digest.java:191:35:191:46 | HMACAlgorithm | H | jca/Digest.java:191:35:191:46 | HashAlgorithm | +| jca/Digest.java:192:18:192:23 | Key | Source | jca/Digest.java:192:18:192:23 | Key | +| jca/Digest.java:193:30:193:52 | MACOperation | Algorithm | jca/Digest.java:191:35:191:46 | HMACAlgorithm | +| jca/Digest.java:193:30:193:52 | MACOperation | HashAlgorithm | jca/Digest.java:191:35:191:46 | HashAlgorithm | +| jca/Digest.java:193:30:193:52 | MACOperation | Input | jca/Digest.java:193:42:193:51 | Message | +| jca/Digest.java:193:30:193:52 | MACOperation | Key | jca/Digest.java:192:18:192:23 | Key | +| jca/Digest.java:193:30:193:52 | MACOperation | Message | jca/Digest.java:193:42:193:51 | Message | +| jca/Digest.java:193:30:193:52 | MACOperation | Nonce | jca/Digest.java:193:30:193:52 | MACOperation | +| jca/Digest.java:193:30:193:52 | MACOperation | Output | jca/Digest.java:193:30:193:52 | KeyOperationOutput | +| jca/Digest.java:193:42:193:51 | Message | Source | jca/Digest.java:188:29:188:78 | KeyOperationOutput | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | Mode | jca/Digest.java:210:44:210:62 | ModeOfOperation | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | Padding | jca/Digest.java:210:44:210:62 | PaddingAlgorithm | +| jca/Digest.java:212:42:212:44 | Key | Source | jca/Digest.java:241:16:241:35 | Key | +| jca/Digest.java:213:32:213:51 | EncryptOperation | Algorithm | jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | +| jca/Digest.java:213:32:213:51 | EncryptOperation | Input | jca/Digest.java:213:47:213:50 | Message | +| jca/Digest.java:213:32:213:51 | EncryptOperation | Key | jca/Digest.java:212:42:212:44 | Key | +| jca/Digest.java:213:32:213:51 | EncryptOperation | Nonce | jca/Digest.java:213:32:213:51 | EncryptOperation | +| jca/Digest.java:213:32:213:51 | EncryptOperation | Output | jca/Digest.java:213:32:213:51 | KeyOperationOutput | +| jca/Digest.java:213:47:213:50 | Message | Source | jca/Digest.java:155:39:155:51 | Parameter | +| jca/Digest.java:241:16:241:35 | KeyGeneration | Algorithm | jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | +| jca/Digest.java:241:16:241:35 | KeyGeneration | Output | jca/Digest.java:241:16:241:35 | Key | +| jca/EllipticCurve1.java:47:16:47:36 | Key | Algorithm | jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | +| jca/EllipticCurve1.java:47:16:47:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | +| jca/EllipticCurve1.java:47:16:47:36 | KeyGeneration | Output | jca/EllipticCurve1.java:47:16:47:36 | Key | +| jca/EllipticCurve1.java:57:16:57:36 | Key | Algorithm | jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | +| jca/EllipticCurve1.java:57:16:57:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | +| jca/EllipticCurve1.java:57:16:57:36 | KeyGeneration | Output | jca/EllipticCurve1.java:57:16:57:36 | Key | +| jca/EllipticCurve1.java:67:16:67:36 | Key | Algorithm | jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | +| jca/EllipticCurve1.java:67:16:67:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | +| jca/EllipticCurve1.java:67:16:67:36 | KeyGeneration | Output | jca/EllipticCurve1.java:67:16:67:36 | Key | +| jca/EllipticCurve1.java:76:16:76:36 | Key | Algorithm | jca/EllipticCurve1.java:74:61:74:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:76:16:76:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:74:61:74:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:76:16:76:36 | KeyGeneration | Output | jca/EllipticCurve1.java:76:16:76:36 | Key | +| jca/EllipticCurve1.java:84:16:84:36 | Key | Algorithm | jca/EllipticCurve1.java:83:61:83:66 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:84:16:84:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:83:61:83:66 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:84:16:84:36 | KeyGeneration | Output | jca/EllipticCurve1.java:84:16:84:36 | Key | +| jca/EllipticCurve1.java:95:16:95:36 | Key | Algorithm | jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | +| jca/EllipticCurve1.java:95:16:95:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | +| jca/EllipticCurve1.java:95:16:95:36 | KeyGeneration | Output | jca/EllipticCurve1.java:95:16:95:36 | Key | +| jca/EllipticCurve1.java:106:16:106:36 | Key | Algorithm | jca/EllipticCurve1.java:105:66:105:76 | Constant | +| jca/EllipticCurve1.java:106:16:106:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:105:66:105:76 | Constant | +| jca/EllipticCurve1.java:106:16:106:36 | KeyGeneration | Output | jca/EllipticCurve1.java:106:16:106:36 | Key | +| jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | Mode | jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | +| jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | Padding | jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | +| jca/EllipticCurve1.java:115:16:115:36 | Key | Algorithm | jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | +| jca/EllipticCurve1.java:115:16:115:36 | KeyGeneration | Algorithm | jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | +| jca/EllipticCurve1.java:115:16:115:36 | KeyGeneration | Output | jca/EllipticCurve1.java:115:16:115:36 | Key | +| jca/EllipticCurve2.java:47:16:47:36 | Key | Algorithm | jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | +| jca/EllipticCurve2.java:47:16:47:36 | KeyGeneration | Algorithm | jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | +| jca/EllipticCurve2.java:47:16:47:36 | KeyGeneration | Output | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:56:16:56:36 | Key | Algorithm | jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | +| jca/EllipticCurve2.java:56:16:56:36 | KeyGeneration | Algorithm | jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | +| jca/EllipticCurve2.java:56:16:56:36 | KeyGeneration | Output | jca/EllipticCurve2.java:56:16:56:36 | Key | +| jca/EllipticCurve2.java:65:16:65:36 | Key | Algorithm | jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | +| jca/EllipticCurve2.java:65:16:65:36 | KeyGeneration | Algorithm | jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | +| jca/EllipticCurve2.java:65:16:65:36 | KeyGeneration | Output | jca/EllipticCurve2.java:65:16:65:36 | Key | +| jca/EllipticCurve2.java:73:16:73:36 | Key | Algorithm | jca/EllipticCurve2.java:72:61:72:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:73:16:73:36 | KeyGeneration | Algorithm | jca/EllipticCurve2.java:72:61:72:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:73:16:73:36 | KeyGeneration | Output | jca/EllipticCurve2.java:73:16:73:36 | Key | +| jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:81:16:81:36 | Key | Algorithm | jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:81:16:81:36 | KeyGeneration | Algorithm | jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:81:16:81:36 | KeyGeneration | Output | jca/EllipticCurve2.java:81:16:81:36 | Key | +| jca/EllipticCurve2.java:106:17:106:36 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:107:20:107:36 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:108:16:108:34 | KeyAgreementOperation | Algorithm | jca/EllipticCurve2.java:105:52:105:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:108:16:108:34 | KeyAgreementOperation | Output | jca/EllipticCurve2.java:108:16:108:34 | SharedSecret | +| jca/EllipticCurve2.java:108:16:108:34 | KeyAgreementOperation | PeerKey | jca/EllipticCurve2.java:107:20:107:36 | Key | +| jca/EllipticCurve2.java:108:16:108:34 | KeyAgreementOperation | ServerKey | jca/EllipticCurve2.java:106:17:106:36 | Key | +| jca/EllipticCurve2.java:108:16:108:34 | SharedSecret | Source | jca/EllipticCurve2.java:108:16:108:34 | SharedSecret | +| jca/EllipticCurve2.java:120:17:120:37 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:121:20:121:39 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:122:16:122:34 | KeyAgreementOperation | Algorithm | jca/EllipticCurve2.java:119:52:119:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:122:16:122:34 | KeyAgreementOperation | Output | jca/EllipticCurve2.java:122:16:122:34 | SharedSecret | +| jca/EllipticCurve2.java:122:16:122:34 | KeyAgreementOperation | PeerKey | jca/EllipticCurve2.java:121:20:121:39 | Key | +| jca/EllipticCurve2.java:122:16:122:34 | KeyAgreementOperation | ServerKey | jca/EllipticCurve2.java:120:17:120:37 | Key | +| jca/EllipticCurve2.java:122:16:122:34 | SharedSecret | Source | jca/EllipticCurve2.java:122:16:122:34 | SharedSecret | +| jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:137:28:137:42 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:138:26:138:32 | Message | Source | jca/EllipticCurve2.java:245:30:245:53 | Constant | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | Algorithm | jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | HashAlgorithm | jca/EllipticCurve2.java:136:53:136:69 | HashAlgorithm | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | Input | jca/EllipticCurve2.java:138:26:138:32 | Message | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | Key | jca/EllipticCurve2.java:137:28:137:42 | Key | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | Output | jca/EllipticCurve2.java:139:16:139:31 | SignatureOutput | +| jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:152:30:152:43 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:153:26:153:32 | Message | Source | jca/EllipticCurve2.java:245:30:245:53 | Constant | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | Algorithm | jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | HashAlgorithm | jca/EllipticCurve2.java:151:53:151:69 | HashAlgorithm | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | Input | jca/EllipticCurve2.java:153:26:153:32 | Message | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | Key | jca/EllipticCurve2.java:152:30:152:43 | Key | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | Signature | jca/EllipticCurve2.java:154:33:154:46 | SignatureInput | +| jca/EllipticCurve2.java:154:33:154:46 | SignatureInput | Source | jca/EllipticCurve2.java:139:16:139:31 | SignatureOutput | +| jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:167:28:167:42 | Key | Source | jca/EllipticCurve2.java:81:16:81:36 | Key | +| jca/EllipticCurve2.java:168:26:168:32 | Message | Source | jca/EllipticCurve2.java:245:30:245:53 | Constant | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | Algorithm | jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | HashAlgorithm | jca/EllipticCurve2.java:169:16:169:31 | SignOperation | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | Input | jca/EllipticCurve2.java:168:26:168:32 | Message | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | Key | jca/EllipticCurve2.java:167:28:167:42 | Key | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | Output | jca/EllipticCurve2.java:169:16:169:31 | SignatureOutput | +| jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:182:30:182:43 | Key | Source | jca/EllipticCurve2.java:81:16:81:36 | Key | +| jca/EllipticCurve2.java:183:26:183:32 | Message | Source | jca/EllipticCurve2.java:245:30:245:53 | Constant | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | Algorithm | jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | HashAlgorithm | jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | Input | jca/EllipticCurve2.java:183:26:183:32 | Message | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | Key | jca/EllipticCurve2.java:182:30:182:43 | Key | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | Signature | jca/EllipticCurve2.java:184:33:184:46 | SignatureInput | +| jca/EllipticCurve2.java:184:33:184:46 | SignatureInput | Source | jca/EllipticCurve2.java:169:16:169:31 | SignatureOutput | +| jca/EllipticCurve2.java:207:17:207:37 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:208:20:208:41 | Key | Source | jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:209:31:209:49 | KeyAgreementOperation | Algorithm | jca/EllipticCurve2.java:206:52:206:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:209:31:209:49 | KeyAgreementOperation | Output | jca/EllipticCurve2.java:209:31:209:49 | SharedSecret | +| jca/EllipticCurve2.java:209:31:209:49 | KeyAgreementOperation | PeerKey | jca/EllipticCurve2.java:208:20:208:41 | Key | +| jca/EllipticCurve2.java:209:31:209:49 | KeyAgreementOperation | ServerKey | jca/EllipticCurve2.java:207:17:207:37 | Key | +| jca/EllipticCurve2.java:209:31:209:49 | SharedSecret | Source | jca/EllipticCurve2.java:209:31:209:49 | SharedSecret | +| jca/EllipticCurve2.java:214:29:214:55 | Digest | Source | jca/EllipticCurve2.java:214:29:214:55 | Digest | +| jca/EllipticCurve2.java:214:29:214:55 | HashOperation | Algorithm | jca/EllipticCurve2.java:213:58:213:66 | HashAlgorithm | +| jca/EllipticCurve2.java:214:29:214:55 | HashOperation | Digest | jca/EllipticCurve2.java:214:29:214:55 | Digest | +| jca/EllipticCurve2.java:214:29:214:55 | HashOperation | Message | jca/EllipticCurve2.java:214:43:214:54 | Message | +| jca/EllipticCurve2.java:214:43:214:54 | Message | Source | jca/EllipticCurve2.java:209:31:209:49 | SharedSecret | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | Mode | jca/EllipticCurve2.java:219:44:219:62 | ModeOfOperation | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | Padding | jca/EllipticCurve2.java:219:44:219:62 | PaddingAlgorithm | +| jca/EllipticCurve2.java:223:42:223:47 | Key | Source | jca/EllipticCurve2.java:223:42:223:47 | Key | +| jca/EllipticCurve2.java:223:50:223:53 | Nonce | Source | jca/EllipticCurve2.java:221:38:221:39 | RandomNumberGeneration | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | Algorithm | jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | Input | jca/EllipticCurve2.java:224:44:224:52 | Message | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | Key | jca/EllipticCurve2.java:223:42:223:47 | Key | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | Nonce | jca/EllipticCurve2.java:223:50:223:53 | Nonce | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | Output | jca/EllipticCurve2.java:224:29:224:53 | KeyOperationOutput | +| jca/EllipticCurve2.java:224:44:224:52 | Message | Source | jca/EllipticCurve2.java:258:62:258:83 | Constant | +| jca/Encryption1.java:62:25:62:44 | KeyGeneration | Algorithm | jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:62:25:62:44 | KeyGeneration | Output | jca/Encryption1.java:62:25:62:44 | Key | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:63:44:63:62 | ModeOfOperation | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:63:44:63:62 | PaddingAlgorithm | +| jca/Encryption1.java:67:42:67:44 | Key | Source | jca/Encryption1.java:62:25:62:44 | Key | +| jca/Encryption1.java:67:47:67:53 | Nonce | Source | jca/Encryption1.java:65:38:65:39 | RandomNumberGeneration | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | Algorithm | jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | Input | jca/Encryption1.java:68:47:68:73 | Message | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | Key | jca/Encryption1.java:67:42:67:44 | Key | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | Nonce | jca/Encryption1.java:67:47:67:53 | Nonce | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | Output | jca/Encryption1.java:68:32:68:74 | KeyOperationOutput | +| jca/Encryption1.java:68:47:68:73 | Message | Source | jca/Encryption1.java:68:47:68:62 | Constant | +| jca/Encryption1.java:85:25:85:44 | KeyGeneration | Algorithm | jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:85:25:85:44 | KeyGeneration | Output | jca/Encryption1.java:85:25:85:44 | Key | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:88:44:88:62 | ModeOfOperation | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:88:44:88:62 | PaddingAlgorithm | +| jca/Encryption1.java:89:42:89:44 | Key | Source | jca/Encryption1.java:85:25:85:44 | Key | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | Algorithm | jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | Input | jca/Encryption1.java:90:47:90:73 | Message | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | Key | jca/Encryption1.java:89:42:89:44 | Key | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | Nonce | jca/Encryption1.java:90:32:90:74 | EncryptOperation | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | Output | jca/Encryption1.java:90:32:90:74 | KeyOperationOutput | +| jca/Encryption1.java:90:47:90:73 | Message | Source | jca/Encryption1.java:90:47:90:62 | Constant | +| jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:105:44:105:82 | ModeOfOperation | +| jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | +| jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | MD | jca/Encryption1.java:105:44:105:82 | HashAlgorithm | +| jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | MGF1Hash | jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | +| jca/Encryption1.java:106:42:106:50 | Key | Source | jca/Encryption1.java:104:35:104:53 | Parameter | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | Algorithm | jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | Input | jca/Encryption1.java:107:47:107:61 | Message | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | Key | jca/Encryption1.java:106:42:106:50 | Key | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | Nonce | jca/Encryption1.java:107:32:107:62 | EncryptOperation | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | Output | jca/Encryption1.java:107:32:107:62 | KeyOperationOutput | +| jca/Encryption1.java:107:47:107:61 | Message | Source | jca/Encryption1.java:104:56:104:66 | Parameter | +| jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:120:44:120:82 | ModeOfOperation | +| jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | +| jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | MD | jca/Encryption1.java:120:44:120:82 | HashAlgorithm | +| jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | MGF1Hash | jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | +| jca/Encryption1.java:121:42:121:51 | Key | Source | jca/Encryption1.java:119:35:119:55 | Parameter | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | Algorithm | jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | Input | jca/Encryption1.java:122:47:122:59 | Message | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | Key | jca/Encryption1.java:121:42:121:51 | Key | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | Nonce | jca/Encryption1.java:122:32:122:60 | DecryptOperation | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | Output | jca/Encryption1.java:122:32:122:60 | KeyOperationOutput | +| jca/Encryption1.java:122:47:122:59 | Message | Source | jca/Encryption1.java:119:58:119:77 | Parameter | +| jca/Encryption1.java:139:28:139:47 | KeyGeneration | Algorithm | jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:139:28:139:47 | KeyGeneration | Output | jca/Encryption1.java:139:28:139:47 | Key | +| jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:141:47:141:85 | ModeOfOperation | +| jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | +| jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | MD | jca/Encryption1.java:141:47:141:85 | HashAlgorithm | +| jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | MGF1Hash | jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | +| jca/Encryption1.java:142:45:142:56 | Key | Source | jca/Encryption1.java:136:34:136:55 | Parameter | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | Algorithm | jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | Input | jca/Encryption1.java:143:52:143:70 | Message | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | Key | jca/Encryption1.java:142:45:142:56 | Key | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | Nonce | jca/Encryption1.java:143:34:143:71 | EncryptOperation | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | Output | jca/Encryption1.java:143:34:143:71 | KeyOperationOutput | +| jca/Encryption1.java:143:52:143:70 | Message | Source | jca/Encryption1.java:139:28:139:47 | Key | +| jca/Encryption1.java:163:28:163:47 | KeyGeneration | Algorithm | jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:163:28:163:47 | KeyGeneration | Output | jca/Encryption1.java:163:28:163:47 | Key | +| jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:166:47:166:85 | ModeOfOperation | +| jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | +| jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | MD | jca/Encryption1.java:166:47:166:85 | HashAlgorithm | +| jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | MGF1Hash | jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | +| jca/Encryption1.java:167:45:167:56 | Key | Source | jca/Encryption1.java:159:34:159:55 | Parameter | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | Algorithm | jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | Input | jca/Encryption1.java:168:52:168:70 | Message | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | Key | jca/Encryption1.java:167:45:167:56 | Key | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | Nonce | jca/Encryption1.java:168:34:168:71 | EncryptOperation | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | Output | jca/Encryption1.java:168:34:168:71 | KeyOperationOutput | +| jca/Encryption1.java:168:52:168:70 | Message | Source | jca/Encryption1.java:163:28:163:47 | Key | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | Mode | jca/Encryption1.java:171:47:171:65 | ModeOfOperation | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | Padding | jca/Encryption1.java:171:47:171:65 | PaddingAlgorithm | +| jca/Encryption1.java:175:45:175:50 | Key | Source | jca/Encryption1.java:163:28:163:47 | Key | +| jca/Encryption1.java:175:53:175:59 | Nonce | Source | jca/Encryption1.java:173:38:173:39 | RandomNumberGeneration | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | Algorithm | jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | Input | jca/Encryption1.java:176:50:176:64 | Message | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | Key | jca/Encryption1.java:175:45:175:50 | Key | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | Nonce | jca/Encryption1.java:175:53:175:59 | Nonce | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | Output | jca/Encryption1.java:176:32:176:65 | KeyOperationOutput | +| jca/Encryption1.java:176:50:176:64 | Message | Source | jca/Encryption1.java:159:58:159:68 | Parameter | +| jca/Encryption2.java:56:16:56:49 | Key | Algorithm | jca/Encryption2.java:55:60:55:70 | EllipticCurve | +| jca/Encryption2.java:56:16:56:49 | KeyGeneration | Algorithm | jca/Encryption2.java:55:60:55:70 | EllipticCurve | +| jca/Encryption2.java:56:16:56:49 | KeyGeneration | Output | jca/Encryption2.java:56:16:56:49 | Key | +| jca/Encryption2.java:72:27:72:36 | Key | Source | jca/Encryption2.java:56:16:56:49 | Key | +| jca/Encryption2.java:73:30:73:38 | Key | Source | jca/Encryption2.java:90:38:90:65 | Parameter | +| jca/Encryption2.java:73:30:73:38 | Key | Source | jca/Encryption2.java:132:45:132:65 | Parameter | +| jca/Encryption2.java:74:16:74:44 | KeyAgreementOperation | Algorithm | jca/Encryption2.java:71:62:71:67 | KeyAgreementAlgorithm | +| jca/Encryption2.java:74:16:74:44 | KeyAgreementOperation | Output | jca/Encryption2.java:74:16:74:44 | SharedSecret | +| jca/Encryption2.java:74:16:74:44 | KeyAgreementOperation | PeerKey | jca/Encryption2.java:73:30:73:38 | Key | +| jca/Encryption2.java:74:16:74:44 | KeyAgreementOperation | ServerKey | jca/Encryption2.java:72:27:72:36 | Key | +| jca/Encryption2.java:74:16:74:44 | SharedSecret | Source | jca/Encryption2.java:74:16:74:44 | SharedSecret | +| jca/Encryption2.java:100:30:100:56 | Digest | Source | jca/Encryption2.java:100:30:100:56 | Digest | +| jca/Encryption2.java:100:30:100:56 | HashOperation | Algorithm | jca/Encryption2.java:99:58:99:66 | HashAlgorithm | +| jca/Encryption2.java:100:30:100:56 | HashOperation | Digest | jca/Encryption2.java:100:30:100:56 | Digest | +| jca/Encryption2.java:100:30:100:56 | HashOperation | Message | jca/Encryption2.java:100:44:100:55 | Message | +| jca/Encryption2.java:100:44:100:55 | Message | Source | jca/Encryption2.java:74:16:74:44 | SharedSecret | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | Mode | jca/Encryption2.java:105:47:105:65 | ModeOfOperation | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | Padding | jca/Encryption2.java:105:47:105:65 | PaddingAlgorithm | +| jca/Encryption2.java:109:45:109:50 | Key | Source | jca/Encryption2.java:100:30:100:56 | Digest | +| jca/Encryption2.java:109:53:109:59 | Nonce | Source | jca/Encryption2.java:107:38:107:39 | RandomNumberGeneration | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | Algorithm | jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | Input | jca/Encryption2.java:110:50:110:64 | Message | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | Key | jca/Encryption2.java:109:45:109:50 | Key | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | Nonce | jca/Encryption2.java:109:53:109:59 | Nonce | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | Output | jca/Encryption2.java:110:32:110:65 | KeyOperationOutput | +| jca/Encryption2.java:110:50:110:64 | Message | Source | jca/Encryption2.java:90:68:90:78 | Parameter | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | Mode | jca/Encryption2.java:145:47:145:65 | ModeOfOperation | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | Padding | jca/Encryption2.java:145:47:145:65 | PaddingAlgorithm | +| jca/Encryption2.java:149:45:149:50 | Key | Source | jca/Encryption2.java:149:45:149:50 | Key | +| jca/Encryption2.java:149:53:149:59 | Nonce | Source | jca/Encryption2.java:147:38:147:39 | RandomNumberGeneration | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | Algorithm | jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | Input | jca/Encryption2.java:150:50:150:97 | Message | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | Key | jca/Encryption2.java:149:45:149:50 | Key | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | Nonce | jca/Encryption2.java:149:53:149:59 | Nonce | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | Output | jca/Encryption2.java:150:32:150:98 | KeyOperationOutput | +| jca/Encryption2.java:150:50:150:97 | Message | Source | jca/Encryption2.java:150:50:150:86 | Constant | +| jca/Encryption2.java:173:36:173:47 | HMACAlgorithm | H | jca/Encryption2.java:173:36:173:47 | HashAlgorithm | +| jca/Encryption2.java:175:19:175:27 | Key | Source | jca/Encryption2.java:132:68:132:88 | Parameter | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Algorithm | jca/Encryption2.java:173:36:173:47 | HMACAlgorithm | +| jca/Encryption2.java:176:31:176:52 | MACOperation | HashAlgorithm | jca/Encryption2.java:173:36:173:47 | HashAlgorithm | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Input | jca/Encryption2.java:176:44:176:51 | Message | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Key | jca/Encryption2.java:175:19:175:27 | Key | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Message | jca/Encryption2.java:176:44:176:51 | Message | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Nonce | jca/Encryption2.java:176:31:176:52 | MACOperation | +| jca/Encryption2.java:176:31:176:52 | MACOperation | Output | jca/Encryption2.java:176:31:176:52 | KeyOperationOutput | +| jca/Encryption2.java:176:44:176:51 | Message | Source | jca/Encryption2.java:74:16:74:44 | SharedSecret | +| jca/Hash.java:76:23:76:66 | Digest | Source | jca/Hash.java:76:23:76:66 | Digest | +| jca/Hash.java:76:23:76:66 | HashOperation | Algorithm | jca/Hash.java:75:58:75:66 | HashAlgorithm | +| jca/Hash.java:76:23:76:66 | HashOperation | Digest | jca/Hash.java:76:23:76:66 | Digest | +| jca/Hash.java:76:23:76:66 | HashOperation | Message | jca/Hash.java:76:37:76:65 | Message | +| jca/Hash.java:76:37:76:65 | Message | Source | jca/Hash.java:76:37:76:54 | Constant | +| jca/Hash.java:89:23:89:70 | Digest | Source | jca/Hash.java:89:23:89:70 | Digest | +| jca/Hash.java:89:23:89:70 | HashOperation | Algorithm | jca/Hash.java:88:61:88:65 | HashAlgorithm | +| jca/Hash.java:89:23:89:70 | HashOperation | Digest | jca/Hash.java:89:23:89:70 | Digest | +| jca/Hash.java:89:23:89:70 | HashOperation | Message | jca/Hash.java:89:40:89:69 | Message | +| jca/Hash.java:89:40:89:69 | Message | Source | jca/Hash.java:89:40:89:58 | Constant | +| jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | Mode | jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | +| jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | Padding | jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | +| jca/Hash.java:135:28:135:37 | Key | Source | jca/Hash.java:133:43:133:63 | Parameter | +| jca/Hash.java:136:26:136:41 | Message | Source | jca/Hash.java:133:29:133:40 | Parameter | +| jca/Hash.java:137:29:137:44 | SignOperation | Algorithm | jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | +| jca/Hash.java:137:29:137:44 | SignOperation | HashAlgorithm | jca/Hash.java:134:53:134:67 | HashAlgorithm | +| jca/Hash.java:137:29:137:44 | SignOperation | Input | jca/Hash.java:136:26:136:41 | Message | +| jca/Hash.java:137:29:137:44 | SignOperation | Key | jca/Hash.java:135:28:135:37 | Key | +| jca/Hash.java:137:29:137:44 | SignOperation | Output | jca/Hash.java:137:29:137:44 | SignatureOutput | +| jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | Mode | jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | +| jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | Padding | jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | +| jca/Hash.java:156:30:156:38 | Key | Source | jca/Hash.java:154:73:154:91 | Parameter | +| jca/Hash.java:157:26:157:41 | Message | Source | jca/Hash.java:154:40:154:51 | Parameter | +| jca/Hash.java:158:16:158:43 | VerifyOperation | Algorithm | jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | +| jca/Hash.java:158:16:158:43 | VerifyOperation | HashAlgorithm | jca/Hash.java:155:53:155:67 | HashAlgorithm | +| jca/Hash.java:158:16:158:43 | VerifyOperation | Input | jca/Hash.java:157:26:157:41 | Message | +| jca/Hash.java:158:16:158:43 | VerifyOperation | Key | jca/Hash.java:156:30:156:38 | Key | +| jca/Hash.java:158:16:158:43 | VerifyOperation | Signature | jca/Hash.java:158:33:158:42 | SignatureInput | +| jca/Hash.java:158:33:158:42 | SignatureInput | Source | jca/Hash.java:154:54:154:70 | Parameter | +| jca/Hash.java:174:23:174:52 | Digest | Source | jca/Hash.java:174:23:174:52 | Digest | +| jca/Hash.java:174:23:174:52 | HashOperation | Algorithm | jca/Hash.java:173:58:173:66 | HashAlgorithm | +| jca/Hash.java:174:23:174:52 | HashOperation | Digest | jca/Hash.java:174:23:174:52 | Digest | +| jca/Hash.java:174:23:174:52 | HashOperation | Message | jca/Hash.java:174:37:174:51 | Message | +| jca/Hash.java:174:37:174:51 | Message | Source | jca/Hash.java:172:43:172:53 | Parameter | +| jca/Hash.java:195:27:195:57 | Digest | Source | jca/Hash.java:195:27:195:57 | Digest | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:31:192:48 | Constant | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:32:191:38 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:41:191:49 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:52:191:60 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:63:191:71 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:74:191:82 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:85:191:94 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:191:97:191:106 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:192:13:192:25 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Algorithm | jca/Hash.java:192:43:192:47 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | HashOperation | Digest | jca/Hash.java:195:27:195:57 | Digest | +| jca/Hash.java:195:27:195:57 | HashOperation | Message | jca/Hash.java:195:41:195:56 | Message | +| jca/Hash.java:195:41:195:56 | Message | Source | jca/Hash.java:190:43:190:54 | Parameter | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | H | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:216:22:216:30 | Key | Source | jca/Hash.java:211:57:211:66 | Parameter | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:31:212:116 | Constant | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:32:212:41 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:44:212:55 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:58:212:69 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:72:212:83 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:86:212:99 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Algorithm | jca/Hash.java:212:102:212:115 | HMACAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | HashAlgorithm | jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:217:27:217:55 | MACOperation | Input | jca/Hash.java:217:39:217:54 | Message | +| jca/Hash.java:217:27:217:55 | MACOperation | Key | jca/Hash.java:216:22:216:30 | Key | +| jca/Hash.java:217:27:217:55 | MACOperation | Message | jca/Hash.java:217:39:217:54 | Message | +| jca/Hash.java:217:27:217:55 | MACOperation | Nonce | jca/Hash.java:217:27:217:55 | MACOperation | +| jca/Hash.java:217:27:217:55 | MACOperation | Output | jca/Hash.java:217:27:217:55 | KeyOperationOutput | +| jca/Hash.java:217:39:217:54 | Message | Source | jca/Hash.java:211:43:211:54 | Parameter | +| jca/Hash.java:235:42:235:63 | Message | Source | jca/Hash.java:232:40:232:54 | Parameter | +| jca/Hash.java:235:66:235:69 | Salt | Source | jca/Hash.java:310:38:310:41 | RandomNumberGeneration | +| jca/Hash.java:236:65:236:86 | HMACAlgorithm | H | jca/Hash.java:236:65:236:86 | HashAlgorithm | +| jca/Hash.java:236:65:236:86 | KeyDerivationAlgorithm | PRF | jca/Hash.java:236:65:236:86 | HMACAlgorithm | +| jca/Hash.java:237:23:237:50 | KeyDerivation | Algorithm | jca/Hash.java:236:65:236:86 | KeyDerivationAlgorithm | +| jca/Hash.java:237:23:237:50 | KeyDerivation | Input | jca/Hash.java:235:42:235:63 | Message | +| jca/Hash.java:237:23:237:50 | KeyDerivation | Output | jca/Hash.java:237:23:237:50 | Key | +| jca/Hash.java:237:23:237:50 | KeyDerivation | Salt | jca/Hash.java:235:66:235:69 | Salt | +| jca/Hash.java:252:23:252:70 | Digest | Source | jca/Hash.java:252:23:252:70 | Digest | +| jca/Hash.java:252:23:252:70 | HashOperation | Algorithm | jca/Hash.java:294:16:294:66 | Constant | +| jca/Hash.java:252:23:252:70 | HashOperation | Algorithm | jca/Hash.java:294:16:294:66 | LocalData | +| jca/Hash.java:252:23:252:70 | HashOperation | Algorithm | jca/Hash.java:294:57:294:65 | HashAlgorithm | +| jca/Hash.java:252:23:252:70 | HashOperation | Digest | jca/Hash.java:252:23:252:70 | Digest | +| jca/Hash.java:252:23:252:70 | HashOperation | Message | jca/Hash.java:252:37:252:69 | Message | +| jca/Hash.java:252:37:252:69 | Message | Source | jca/Hash.java:252:37:252:58 | Constant | +| jca/Hash.java:270:27:270:30 | Message | Source | jca/Hash.java:269:27:269:38 | Constant | +| jca/Hash.java:271:40:271:54 | Digest | Source | jca/Hash.java:271:40:271:54 | Digest | +| jca/Hash.java:271:40:271:54 | HashOperation | Algorithm | jca/Hash.java:266:31:266:76 | Constant | +| jca/Hash.java:271:40:271:54 | HashOperation | Algorithm | jca/Hash.java:266:32:266:40 | HashAlgorithm | +| jca/Hash.java:271:40:271:54 | HashOperation | Algorithm | jca/Hash.java:266:43:266:51 | HashAlgorithm | +| jca/Hash.java:271:40:271:54 | HashOperation | Algorithm | jca/Hash.java:266:54:266:63 | HashAlgorithm | +| jca/Hash.java:271:40:271:54 | HashOperation | Algorithm | jca/Hash.java:266:66:266:75 | HashAlgorithm | +| jca/Hash.java:271:40:271:54 | HashOperation | Digest | jca/Hash.java:271:40:271:54 | Digest | +| jca/Hash.java:271:40:271:54 | HashOperation | Message | jca/Hash.java:270:27:270:30 | Message | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:30:44:30:65 | ModeOfOperation | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:30:44:30:65 | PaddingAlgorithm | +| jca/IVArtifact.java:31:42:31:44 | Key | Source | jca/IVArtifact.java:76:16:76:35 | Key | +| jca/IVArtifact.java:31:47:31:52 | Nonce | Source | jca/IVArtifact.java:81:38:81:39 | RandomNumberGeneration | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | Algorithm | jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | Input | jca/IVArtifact.java:32:44:32:72 | Message | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | Key | jca/IVArtifact.java:31:42:31:44 | Key | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | Nonce | jca/IVArtifact.java:31:47:31:52 | Nonce | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | Output | jca/IVArtifact.java:32:29:32:73 | KeyOperationOutput | +| jca/IVArtifact.java:32:44:32:72 | Message | Source | jca/IVArtifact.java:32:44:32:61 | Constant | +| jca/IVArtifact.java:38:42:38:44 | Key | Source | jca/IVArtifact.java:76:16:76:35 | Key | +| jca/IVArtifact.java:38:47:38:52 | Nonce | Source | jca/IVArtifact.java:81:38:81:39 | RandomNumberGeneration | +| jca/IVArtifact.java:38:47:38:52 | Nonce | Source | jca/IVArtifact.java:87:32:87:33 | RandomNumberGeneration | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Algorithm | jca/IVArtifact.java:70:16:70:81 | Constant | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Algorithm | jca/IVArtifact.java:70:16:70:81 | LocalData | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Algorithm | jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Input | jca/IVArtifact.java:39:44:39:52 | Message | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Key | jca/IVArtifact.java:38:42:38:44 | Key | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Nonce | jca/IVArtifact.java:38:47:38:52 | Nonce | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | Output | jca/IVArtifact.java:39:29:39:53 | KeyOperationOutput | +| jca/IVArtifact.java:39:44:39:52 | Message | Source | jca/IVArtifact.java:49:27:49:42 | Constant | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:70:59:70:80 | ModeOfOperation | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:70:59:70:80 | PaddingAlgorithm | +| jca/IVArtifact.java:76:16:76:35 | KeyGeneration | Algorithm | jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | +| jca/IVArtifact.java:76:16:76:35 | KeyGeneration | Output | jca/IVArtifact.java:76:16:76:35 | Key | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:105:44:105:62 | ModeOfOperation | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:105:44:105:62 | PaddingAlgorithm | +| jca/IVArtifact.java:108:42:108:44 | Key | Source | jca/IVArtifact.java:255:29:255:44 | Key | +| jca/IVArtifact.java:108:47:108:50 | Nonce | Source | jca/IVArtifact.java:108:47:108:50 | Nonce | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | Algorithm | jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | Input | jca/IVArtifact.java:109:31:109:39 | Message | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | Key | jca/IVArtifact.java:108:42:108:44 | Key | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | Nonce | jca/IVArtifact.java:108:47:108:50 | Nonce | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | Output | jca/IVArtifact.java:109:16:109:40 | KeyOperationOutput | +| jca/IVArtifact.java:109:31:109:39 | Message | Source | jca/IVArtifact.java:256:32:256:47 | Constant | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:132:44:132:62 | ModeOfOperation | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:132:44:132:62 | PaddingAlgorithm | +| jca/IVArtifact.java:134:42:134:44 | Key | Source | jca/IVArtifact.java:255:29:255:44 | Key | +| jca/IVArtifact.java:134:47:134:50 | Nonce | Source | jca/IVArtifact.java:116:31:116:34 | Constant | +| jca/IVArtifact.java:134:47:134:50 | Nonce | Source | jca/IVArtifact.java:130:42:130:49 | RandomNumberGeneration | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | Algorithm | jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | Input | jca/IVArtifact.java:135:31:135:39 | Message | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | Key | jca/IVArtifact.java:134:42:134:44 | Key | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | Nonce | jca/IVArtifact.java:134:47:134:50 | Nonce | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | Output | jca/IVArtifact.java:135:16:135:40 | KeyOperationOutput | +| jca/IVArtifact.java:135:31:135:39 | Message | Source | jca/IVArtifact.java:256:32:256:47 | Constant | +| jca/IVArtifact.java:154:31:154:78 | Digest | Source | jca/IVArtifact.java:154:31:154:78 | Digest | +| jca/IVArtifact.java:154:31:154:78 | HashOperation | Algorithm | jca/IVArtifact.java:153:58:153:66 | HashAlgorithm | +| jca/IVArtifact.java:154:31:154:78 | HashOperation | Digest | jca/IVArtifact.java:154:31:154:78 | Digest | +| jca/IVArtifact.java:154:31:154:78 | HashOperation | Message | jca/IVArtifact.java:154:45:154:77 | Message | +| jca/IVArtifact.java:154:45:154:77 | Message | Source | jca/IVArtifact.java:154:45:154:59 | Constant | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:156:44:156:62 | ModeOfOperation | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:156:44:156:62 | PaddingAlgorithm | +| jca/IVArtifact.java:158:42:158:44 | Key | Source | jca/IVArtifact.java:255:29:255:44 | Key | +| jca/IVArtifact.java:158:47:158:50 | Nonce | Source | jca/IVArtifact.java:154:31:154:78 | Digest | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | Algorithm | jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | Input | jca/IVArtifact.java:159:31:159:39 | Message | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | Key | jca/IVArtifact.java:158:42:158:44 | Key | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | Nonce | jca/IVArtifact.java:158:47:158:50 | Nonce | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | Output | jca/IVArtifact.java:159:16:159:40 | KeyOperationOutput | +| jca/IVArtifact.java:159:31:159:39 | Message | Source | jca/IVArtifact.java:256:32:256:47 | Constant | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:180:48:180:66 | ModeOfOperation | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:180:48:180:66 | PaddingAlgorithm | +| jca/IVArtifact.java:182:46:182:48 | Key | Source | jca/IVArtifact.java:255:29:255:44 | Key | +| jca/IVArtifact.java:182:51:182:54 | Nonce | Source | jca/IVArtifact.java:177:38:177:39 | RandomNumberGeneration | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | Algorithm | jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | Input | jca/IVArtifact.java:183:45:183:57 | Message | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | Key | jca/IVArtifact.java:182:46:182:48 | Key | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | Nonce | jca/IVArtifact.java:182:51:182:54 | Nonce | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | Output | jca/IVArtifact.java:183:30:183:58 | KeyOperationOutput | +| jca/IVArtifact.java:183:45:183:57 | Message | Source | jca/IVArtifact.java:275:34:275:46 | Constant | +| jca/IVArtifact.java:183:45:183:57 | Message | Source | jca/IVArtifact.java:275:60:275:72 | Constant | +| jca/IVArtifact.java:183:45:183:57 | Message | Source | jca/IVArtifact.java:275:86:275:100 | Constant | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | Mode | jca/IVArtifact.java:198:44:198:62 | ModeOfOperation | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | Padding | jca/IVArtifact.java:198:44:198:62 | PaddingAlgorithm | +| jca/IVArtifact.java:201:42:201:44 | Key | Source | jca/IVArtifact.java:215:53:215:65 | Parameter | +| jca/IVArtifact.java:201:42:201:44 | Key | Source | jca/IVArtifact.java:235:60:235:72 | Parameter | +| jca/IVArtifact.java:201:47:201:50 | Nonce | Source | jca/IVArtifact.java:201:47:201:50 | Nonce | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | Algorithm | jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | Input | jca/IVArtifact.java:202:31:202:39 | Message | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | Key | jca/IVArtifact.java:201:42:201:44 | Key | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | Nonce | jca/IVArtifact.java:201:47:201:50 | Nonce | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | Output | jca/IVArtifact.java:202:16:202:40 | KeyOperationOutput | +| jca/IVArtifact.java:202:31:202:39 | Message | Source | jca/IVArtifact.java:215:68:215:83 | Parameter | +| jca/IVArtifact.java:202:31:202:39 | Message | Source | jca/IVArtifact.java:235:75:235:90 | Parameter | +| jca/IVArtifact.java:255:29:255:44 | KeyGeneration | Algorithm | jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | +| jca/IVArtifact.java:255:29:255:44 | KeyGeneration | Output | jca/IVArtifact.java:255:29:255:44 | Key | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | Algorithm | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | KeyGeneration | Algorithm | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | KeyGeneration | Output | jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | Algorithm | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | KeyGeneration | Algorithm | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | KeyGeneration | Output | jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | Output | jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | PeerKey | jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | Key | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | ServerKey | jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | Key | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | Source | jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | Digest | Source | jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | HashOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | HashOperation | Digest | jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | HashOperation | Message | jca/KeyAgreementHybridCryptosystem.java:79:37:79:41 | Message | +| jca/KeyAgreementHybridCryptosystem.java:79:37:79:41 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | Mode | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | Padding | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:112:50:112:53 | Nonce | Source | jca/KeyAgreementHybridCryptosystem.java:110:38:110:39 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | Input | jca/KeyAgreementHybridCryptosystem.java:113:44:113:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | Key | jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:112:50:112:53 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | Output | jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:113:44:113:52 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | Mode | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | Padding | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:132:50:132:53 | Nonce | Source | jca/KeyAgreementHybridCryptosystem.java:132:50:132:53 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | Input | jca/KeyAgreementHybridCryptosystem.java:133:44:133:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | Key | jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:132:50:132:53 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | Output | jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:133:44:133:52 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | Digest | Source | jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | HashOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | HashOperation | Digest | jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | HashOperation | Message | jca/KeyAgreementHybridCryptosystem.java:150:77:150:88 | Message | +| jca/KeyAgreementHybridCryptosystem.java:150:77:150:88 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | +| jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | Mode | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | Padding | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:156:53:156:78 | Nonce | Source | jca/KeyAgreementHybridCryptosystem.java:155:38:155:42 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | Input | jca/KeyAgreementHybridCryptosystem.java:157:44:157:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | Key | jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | Key | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:156:53:156:78 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | Output | jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:157:44:157:52 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | Mode | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | Padding | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | Key | +| jca/KeyAgreementHybridCryptosystem.java:175:53:175:83 | Nonce | Source | jca/KeyAgreementHybridCryptosystem.java:175:53:175:83 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | Input | jca/KeyAgreementHybridCryptosystem.java:176:44:176:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | Key | jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | Key | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:175:53:175:83 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | Output | jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:176:44:176:52 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:215:42:215:66 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:212:58:212:70 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:215:69:215:72 | Salt | Source | jca/KeyAgreementHybridCryptosystem.java:269:38:269:41 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HMACAlgorithm | H | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | KeyDerivationAlgorithm | PRF | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HMACAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | KeyDerivationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | Input | jca/KeyAgreementHybridCryptosystem.java:215:42:215:66 | Message | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | Output | jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | Key | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | Salt | jca/KeyAgreementHybridCryptosystem.java:215:69:215:72 | Salt | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | Mode | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | Padding | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | Key | +| jca/KeyAgreementHybridCryptosystem.java:227:57:227:63 | Nonce | Source | jca/KeyAgreementHybridCryptosystem.java:225:38:225:39 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | Input | jca/KeyAgreementHybridCryptosystem.java:228:44:228:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | Key | jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | Key | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:227:57:227:63 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | Output | jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:228:44:228:52 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:212:73:212:88 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HMACAlgorithm | H | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | Key | Source | jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | Key | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Algorithm | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HMACAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | HashAlgorithm | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Input | jca/KeyAgreementHybridCryptosystem.java:232:42:232:51 | Message | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Key | jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | Key | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Message | jca/KeyAgreementHybridCryptosystem.java:232:42:232:51 | Message | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Nonce | jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | Output | jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:232:42:232:51 | Message | Source | jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | KeyGeneration | Algorithm | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | KeyGeneration | Output | jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | Key | +| jca/KeyArtifact.java:20:31:20:50 | KeyGeneration | Algorithm | jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:20:31:20:50 | KeyGeneration | Output | jca/KeyArtifact.java:20:31:20:50 | Key | +| jca/KeyArtifact.java:25:30:25:49 | KeyGeneration | Algorithm | jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:25:30:25:49 | KeyGeneration | Output | jca/KeyArtifact.java:25:30:25:49 | Key | +| jca/KeyArtifact.java:32:30:32:57 | Key | Algorithm | jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:32:30:32:57 | KeyGeneration | Algorithm | jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:32:30:32:57 | KeyGeneration | Output | jca/KeyArtifact.java:32:30:32:57 | Key | +| jca/KeyArtifact.java:37:29:37:56 | Key | Algorithm | jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:37:29:37:56 | KeyGeneration | Algorithm | jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:37:29:37:56 | KeyGeneration | Output | jca/KeyArtifact.java:37:29:37:56 | Key | +| jca/KeyArtifact.java:42:26:42:53 | Key | Algorithm | jca/KeyArtifact.java:42:26:42:53 | Key | +| jca/KeyArtifact.java:42:26:42:53 | KeyGeneration | Algorithm | jca/KeyArtifact.java:42:26:42:53 | KeyGeneration | +| jca/KeyArtifact.java:42:26:42:53 | KeyGeneration | Output | jca/KeyArtifact.java:42:26:42:53 | Key | +| jca/KeyArtifact.java:66:32:66:51 | KeyGeneration | Algorithm | jca/KeyArtifact.java:62:28:62:73 | Constant | +| jca/KeyArtifact.java:66:32:66:51 | KeyGeneration | Algorithm | jca/KeyArtifact.java:62:28:62:73 | LocalData | +| jca/KeyArtifact.java:66:32:66:51 | KeyGeneration | Algorithm | jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:66:32:66:51 | KeyGeneration | Output | jca/KeyArtifact.java:66:32:66:51 | Key | +| jca/KeyArtifact.java:73:16:73:43 | Key | Algorithm | jca/KeyArtifact.java:78:31:78:54 | Constant | +| jca/KeyArtifact.java:73:16:73:43 | Key | Algorithm | jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:73:16:73:43 | Key | Algorithm | jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:73:16:73:43 | KeyGeneration | Algorithm | jca/KeyArtifact.java:78:31:78:54 | Constant | +| jca/KeyArtifact.java:73:16:73:43 | KeyGeneration | Algorithm | jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:73:16:73:43 | KeyGeneration | Algorithm | jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:73:16:73:43 | KeyGeneration | Output | jca/KeyArtifact.java:73:16:73:43 | Key | +| jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | Mode | jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | Padding | jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | +| jca/KeyDerivation1.java:80:42:80:63 | Message | Source | jca/KeyDerivation1.java:78:39:78:53 | Parameter | +| jca/KeyDerivation1.java:80:66:80:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:81:65:81:86 | HMACAlgorithm | H | jca/KeyDerivation1.java:81:65:81:86 | HashAlgorithm | +| jca/KeyDerivation1.java:81:65:81:86 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:81:65:81:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:81:65:81:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | Input | jca/KeyDerivation1.java:80:42:80:63 | Message | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | Output | jca/KeyDerivation1.java:82:22:82:49 | Key | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:80:66:80:69 | Salt | +| jca/KeyDerivation1.java:94:42:94:63 | Message | Source | jca/KeyDerivation1.java:92:36:92:50 | Parameter | +| jca/KeyDerivation1.java:94:66:94:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:95:65:95:86 | HMACAlgorithm | H | jca/KeyDerivation1.java:95:65:95:86 | HashAlgorithm | +| jca/KeyDerivation1.java:95:65:95:86 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:95:65:95:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:95:65:95:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | Input | jca/KeyDerivation1.java:94:42:94:63 | Message | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | Output | jca/KeyDerivation1.java:96:22:96:49 | Key | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:94:66:94:69 | Salt | +| jca/KeyDerivation1.java:108:42:108:63 | Message | Source | jca/KeyDerivation1.java:106:37:106:51 | Parameter | +| jca/KeyDerivation1.java:108:66:108:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:109:65:109:86 | HMACAlgorithm | H | jca/KeyDerivation1.java:109:65:109:86 | HashAlgorithm | +| jca/KeyDerivation1.java:109:65:109:86 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:109:65:109:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:109:65:109:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | Input | jca/KeyDerivation1.java:108:42:108:63 | Message | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | Output | jca/KeyDerivation1.java:110:22:110:49 | Key | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:108:66:108:69 | Salt | +| jca/KeyDerivation1.java:122:42:122:63 | Message | Source | jca/KeyDerivation1.java:120:32:120:46 | Parameter | +| jca/KeyDerivation1.java:122:66:122:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:123:65:123:84 | HMACAlgorithm | H | jca/KeyDerivation1.java:123:65:123:84 | HashAlgorithm | +| jca/KeyDerivation1.java:123:65:123:84 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:123:65:123:84 | HMACAlgorithm | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:123:65:123:84 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | Input | jca/KeyDerivation1.java:122:42:122:63 | Message | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | Output | jca/KeyDerivation1.java:124:22:124:49 | Key | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:122:66:122:69 | Salt | +| jca/KeyDerivation1.java:136:42:136:63 | Message | Source | jca/KeyDerivation1.java:134:34:134:48 | Parameter | +| jca/KeyDerivation1.java:136:66:136:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:137:65:137:86 | HMACAlgorithm | H | jca/KeyDerivation1.java:137:65:137:86 | HashAlgorithm | +| jca/KeyDerivation1.java:137:65:137:86 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:137:65:137:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:137:65:137:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | Input | jca/KeyDerivation1.java:136:42:136:63 | Message | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | Output | jca/KeyDerivation1.java:138:22:138:49 | Key | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:136:66:136:69 | Salt | +| jca/KeyDerivation1.java:157:42:157:63 | Message | Source | jca/KeyDerivation1.java:154:28:154:42 | Parameter | +| jca/KeyDerivation1.java:157:66:157:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:158:65:158:72 | Constant | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | Input | jca/KeyDerivation1.java:157:42:157:63 | Message | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | Output | jca/KeyDerivation1.java:159:22:159:49 | Key | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:157:66:157:69 | Salt | +| jca/KeyDerivation1.java:172:42:172:63 | Message | Source | jca/KeyDerivation1.java:169:30:169:44 | Parameter | +| jca/KeyDerivation1.java:172:66:172:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:173:65:173:72 | Constant | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | Input | jca/KeyDerivation1.java:172:42:172:63 | Message | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | Output | jca/KeyDerivation1.java:174:22:174:49 | Key | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | Salt | jca/KeyDerivation1.java:172:66:172:69 | Salt | +| jca/KeyDerivation1.java:244:29:244:59 | Digest | Source | jca/KeyDerivation1.java:244:29:244:59 | Digest | +| jca/KeyDerivation1.java:244:29:244:59 | HashOperation | Algorithm | jca/KeyDerivation1.java:243:58:243:66 | HashAlgorithm | +| jca/KeyDerivation1.java:244:29:244:59 | HashOperation | Digest | jca/KeyDerivation1.java:244:29:244:59 | Digest | +| jca/KeyDerivation1.java:244:29:244:59 | HashOperation | Message | jca/KeyDerivation1.java:244:43:244:58 | Message | +| jca/KeyDerivation1.java:244:43:244:58 | Message | Source | jca/KeyDerivation1.java:242:45:242:56 | Parameter | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | Mode | jca/KeyDerivation1.java:249:70:249:88 | ModeOfOperation | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | Padding | jca/KeyDerivation1.java:249:70:249:88 | PaddingAlgorithm | +| jca/KeyDerivation1.java:250:55:250:57 | Key | Source | jca/KeyDerivation1.java:244:29:244:59 | Digest | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | Algorithm | jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | Input | jca/KeyDerivation1.java:251:44:251:73 | Message | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | Key | jca/KeyDerivation1.java:250:55:250:57 | Key | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | Nonce | jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | Output | jca/KeyDerivation1.java:251:29:251:74 | KeyOperationOutput | +| jca/KeyDerivation1.java:251:44:251:73 | Message | Source | jca/KeyDerivation1.java:251:44:251:62 | Constant | +| jca/KeyDerivation1.java:309:54:309:75 | HMACAlgorithm | H | jca/KeyDerivation1.java:309:54:309:75 | HashAlgorithm | +| jca/KeyDerivation1.java:309:54:309:75 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:309:54:309:75 | HMACAlgorithm | +| jca/KeyDerivation1.java:314:42:314:63 | Message | Source | jca/KeyDerivation1.java:302:37:302:51 | Parameter | +| jca/KeyDerivation1.java:314:66:314:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:309:25:309:76 | Constant | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:309:25:309:76 | LocalData | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:309:54:309:75 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Input | jca/KeyDerivation1.java:314:42:314:63 | Message | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Output | jca/KeyDerivation1.java:316:26:316:53 | Key | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Salt | jca/KeyDerivation1.java:314:66:314:69 | Salt | +| jca/KeyDerivation1.java:333:42:333:63 | Message | Source | jca/KeyDerivation1.java:283:43:283:57 | Parameter | +| jca/KeyDerivation1.java:333:66:333:69 | Salt | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:334:65:334:86 | HMACAlgorithm | H | jca/KeyDerivation1.java:334:65:334:86 | HashAlgorithm | +| jca/KeyDerivation1.java:334:65:334:86 | KeyDerivationAlgorithm | PRF | jca/KeyDerivation1.java:334:65:334:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | Algorithm | jca/KeyDerivation1.java:334:65:334:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | Input | jca/KeyDerivation1.java:333:42:333:63 | Message | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | Output | jca/KeyDerivation1.java:335:16:335:43 | Key | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | Salt | jca/KeyDerivation1.java:333:66:333:69 | Salt | +| jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | H | jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | +| jca/KeyDerivation1.java:347:19:347:27 | Key | Source | jca/KeyDerivation1.java:335:16:335:43 | Key | +| jca/KeyDerivation1.java:347:19:347:27 | Key | Source | jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Algorithm | jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | HashAlgorithm | jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Input | jca/KeyDerivation1.java:348:35:348:37 | Message | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Key | jca/KeyDerivation1.java:347:19:347:27 | Key | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Message | jca/KeyDerivation1.java:348:35:348:37 | Message | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Nonce | jca/KeyDerivation1.java:348:22:348:38 | MACOperation | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | Output | jca/KeyDerivation1.java:348:22:348:38 | KeyOperationOutput | +| jca/KeyDerivation1.java:348:35:348:37 | Message | Source | jca/KeyDerivation1.java:269:32:269:41 | Parameter | +| jca/KeyDerivation1.java:348:35:348:37 | Message | Source | jca/KeyDerivation1.java:283:60:283:78 | Parameter | +| jca/KeyDerivation1.java:352:19:352:54 | Key | Source | jca/KeyDerivation1.java:348:22:348:38 | KeyOperationOutput | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Algorithm | jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | HashAlgorithm | jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Input | jca/KeyDerivation1.java:353:35:353:61 | Message | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Key | jca/KeyDerivation1.java:347:19:347:27 | Key | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Key | jca/KeyDerivation1.java:352:19:352:54 | Key | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Message | jca/KeyDerivation1.java:353:35:353:61 | Message | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Nonce | jca/KeyDerivation1.java:353:22:353:62 | MACOperation | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | Output | jca/KeyDerivation1.java:353:22:353:62 | KeyOperationOutput | +| jca/KeyDerivation1.java:353:35:353:61 | Message | Source | jca/KeyDerivation1.java:353:35:353:50 | Constant | +| jca/KeyEncapsulation.java:62:28:62:47 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:62:28:62:47 | KeyGeneration | Output | jca/KeyEncapsulation.java:62:28:62:47 | Key | +| jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | Mode | jca/KeyEncapsulation.java:67:47:67:85 | ModeOfOperation | +| jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | Padding | jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | MD | jca/KeyEncapsulation.java:67:47:67:85 | HashAlgorithm | +| jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | MGF1Hash | jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:68:45:68:50 | Key | Source | jca/KeyEncapsulation.java:209:25:209:48 | Key | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | Algorithm | jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | Input | jca/KeyEncapsulation.java:69:47:69:65 | Message | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | Key | jca/KeyEncapsulation.java:68:45:68:50 | Key | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | Nonce | jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | Output | jca/KeyEncapsulation.java:69:29:69:66 | KeyOperationOutput | +| jca/KeyEncapsulation.java:69:47:69:65 | Message | Source | jca/KeyEncapsulation.java:62:28:62:47 | Key | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | Mode | jca/KeyEncapsulation.java:73:47:73:65 | ModeOfOperation | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | Padding | jca/KeyEncapsulation.java:73:47:73:65 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:77:45:77:50 | Key | Source | jca/KeyEncapsulation.java:62:28:62:47 | Key | +| jca/KeyEncapsulation.java:77:53:77:59 | Nonce | Source | jca/KeyEncapsulation.java:75:38:75:39 | RandomNumberGeneration | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | Algorithm | jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | Input | jca/KeyEncapsulation.java:78:47:78:79 | Message | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | Key | jca/KeyEncapsulation.java:77:45:77:50 | Key | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | Nonce | jca/KeyEncapsulation.java:77:53:77:59 | Nonce | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | Output | jca/KeyEncapsulation.java:78:29:78:80 | KeyOperationOutput | +| jca/KeyEncapsulation.java:78:47:78:79 | Message | Source | jca/KeyEncapsulation.java:78:47:78:68 | Constant | +| jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | Mode | jca/KeyEncapsulation.java:92:47:92:85 | ModeOfOperation | +| jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | Padding | jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | MD | jca/KeyEncapsulation.java:92:47:92:85 | HashAlgorithm | +| jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | MGF1Hash | jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:93:45:93:51 | Key | Source | jca/KeyEncapsulation.java:91:37:91:54 | Parameter | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | Algorithm | jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | Input | jca/KeyEncapsulation.java:94:48:94:57 | Message | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | Key | jca/KeyEncapsulation.java:93:45:93:51 | Key | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | Nonce | jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | Output | jca/KeyEncapsulation.java:94:30:94:58 | KeyOperationOutput | +| jca/KeyEncapsulation.java:94:48:94:57 | Message | Source | jca/KeyEncapsulation.java:91:57:91:73 | Parameter | +| jca/KeyEncapsulation.java:118:31:118:51 | Key | Algorithm | jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | +| jca/KeyEncapsulation.java:118:31:118:51 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | +| jca/KeyEncapsulation.java:118:31:118:51 | KeyGeneration | Output | jca/KeyEncapsulation.java:118:31:118:51 | Key | +| jca/KeyEncapsulation.java:122:17:122:40 | Key | Source | jca/KeyEncapsulation.java:118:31:118:51 | Key | +| jca/KeyEncapsulation.java:123:20:123:24 | Key | Source | jca/KeyEncapsulation.java:215:24:215:46 | Key | +| jca/KeyEncapsulation.java:124:31:124:49 | KeyAgreementOperation | Algorithm | jca/KeyEncapsulation.java:121:52:121:57 | KeyAgreementAlgorithm | +| jca/KeyEncapsulation.java:124:31:124:49 | KeyAgreementOperation | Output | jca/KeyEncapsulation.java:124:31:124:49 | SharedSecret | +| jca/KeyEncapsulation.java:124:31:124:49 | KeyAgreementOperation | PeerKey | jca/KeyEncapsulation.java:123:20:123:24 | Key | +| jca/KeyEncapsulation.java:124:31:124:49 | KeyAgreementOperation | ServerKey | jca/KeyEncapsulation.java:122:17:122:40 | Key | +| jca/KeyEncapsulation.java:124:31:124:49 | SharedSecret | Source | jca/KeyEncapsulation.java:124:31:124:49 | SharedSecret | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | Mode | jca/KeyEncapsulation.java:133:47:133:65 | ModeOfOperation | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | Padding | jca/KeyEncapsulation.java:133:47:133:65 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:136:45:136:50 | Key | Source | jca/KeyEncapsulation.java:124:31:124:49 | SharedSecret | +| jca/KeyEncapsulation.java:136:53:136:81 | Nonce | Source | jca/KeyEncapsulation.java:135:38:135:39 | RandomNumberGeneration | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | Algorithm | jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | Input | jca/KeyEncapsulation.java:137:47:137:72 | Message | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | Key | jca/KeyEncapsulation.java:136:45:136:50 | Key | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | Nonce | jca/KeyEncapsulation.java:136:53:136:81 | Nonce | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | Output | jca/KeyEncapsulation.java:137:29:137:73 | KeyOperationOutput | +| jca/KeyEncapsulation.java:137:47:137:72 | Message | Source | jca/KeyEncapsulation.java:137:47:137:61 | Constant | +| jca/KeyEncapsulation.java:187:31:187:51 | Key | Algorithm | jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | +| jca/KeyEncapsulation.java:187:31:187:51 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | +| jca/KeyEncapsulation.java:187:31:187:51 | KeyGeneration | Output | jca/KeyEncapsulation.java:187:31:187:51 | Key | +| jca/KeyEncapsulation.java:189:17:189:40 | Key | Source | jca/KeyEncapsulation.java:187:31:187:51 | Key | +| jca/KeyEncapsulation.java:190:20:190:34 | Key | Source | jca/KeyEncapsulation.java:226:31:226:53 | Key | +| jca/KeyEncapsulation.java:191:31:191:49 | KeyAgreementOperation | Algorithm | jca/KeyEncapsulation.java:188:52:188:57 | KeyAgreementAlgorithm | +| jca/KeyEncapsulation.java:191:31:191:49 | KeyAgreementOperation | Output | jca/KeyEncapsulation.java:191:31:191:49 | SharedSecret | +| jca/KeyEncapsulation.java:191:31:191:49 | KeyAgreementOperation | PeerKey | jca/KeyEncapsulation.java:190:20:190:34 | Key | +| jca/KeyEncapsulation.java:191:31:191:49 | KeyAgreementOperation | ServerKey | jca/KeyEncapsulation.java:189:17:189:40 | Key | +| jca/KeyEncapsulation.java:191:31:191:49 | SharedSecret | Source | jca/KeyEncapsulation.java:191:31:191:49 | SharedSecret | +| jca/KeyEncapsulation.java:209:25:209:48 | Key | Algorithm | jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:209:25:209:48 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:209:25:209:48 | KeyGeneration | Output | jca/KeyEncapsulation.java:209:25:209:48 | Key | +| jca/KeyEncapsulation.java:215:24:215:46 | Key | Algorithm | jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | +| jca/KeyEncapsulation.java:215:24:215:46 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | +| jca/KeyEncapsulation.java:215:24:215:46 | KeyGeneration | Output | jca/KeyEncapsulation.java:215:24:215:46 | Key | +| jca/KeyEncapsulation.java:226:31:226:53 | Key | Algorithm | jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | +| jca/KeyEncapsulation.java:226:31:226:53 | KeyGeneration | Algorithm | jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | +| jca/KeyEncapsulation.java:226:31:226:53 | KeyGeneration | Output | jca/KeyEncapsulation.java:226:31:226:53 | Key | +| jca/KeyExchange.java:54:16:54:38 | Key | Algorithm | jca/KeyExchange.java:52:63:52:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:54:16:54:38 | KeyGeneration | Algorithm | jca/KeyExchange.java:52:63:52:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:54:16:54:38 | KeyGeneration | Output | jca/KeyExchange.java:54:16:54:38 | Key | +| jca/KeyExchange.java:70:16:70:38 | Key | Algorithm | jca/KeyExchange.java:67:63:67:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:70:16:70:38 | KeyGeneration | Algorithm | jca/KeyExchange.java:67:63:67:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:70:16:70:38 | KeyGeneration | Output | jca/KeyExchange.java:70:16:70:38 | Key | +| jca/KeyExchange.java:85:16:85:38 | Key | Algorithm | jca/KeyExchange.java:83:63:83:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:85:16:85:38 | KeyGeneration | Algorithm | jca/KeyExchange.java:83:63:83:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:85:16:85:38 | KeyGeneration | Output | jca/KeyExchange.java:85:16:85:38 | Key | +| jca/KeyExchange.java:100:17:100:26 | Key | Source | jca/KeyExchange.java:54:16:54:38 | Key | +| jca/KeyExchange.java:100:17:100:26 | Key | Source | jca/KeyExchange.java:70:16:70:38 | Key | +| jca/KeyExchange.java:100:17:100:26 | Key | Source | jca/KeyExchange.java:85:16:85:38 | Key | +| jca/KeyExchange.java:101:20:101:28 | Key | Source | jca/KeyExchange.java:54:16:54:38 | Key | +| jca/KeyExchange.java:101:20:101:28 | Key | Source | jca/KeyExchange.java:70:16:70:38 | Key | +| jca/KeyExchange.java:101:20:101:28 | Key | Source | jca/KeyExchange.java:85:16:85:38 | Key | +| jca/KeyExchange.java:102:16:102:34 | KeyAgreementOperation | Algorithm | jca/KeyExchange.java:99:52:99:55 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:102:16:102:34 | KeyAgreementOperation | Output | jca/KeyExchange.java:102:16:102:34 | SharedSecret | +| jca/KeyExchange.java:102:16:102:34 | KeyAgreementOperation | PeerKey | jca/KeyExchange.java:101:20:101:28 | Key | +| jca/KeyExchange.java:102:16:102:34 | KeyAgreementOperation | ServerKey | jca/KeyExchange.java:100:17:100:26 | Key | +| jca/KeyExchange.java:102:16:102:34 | SharedSecret | Source | jca/KeyExchange.java:102:16:102:34 | SharedSecret | +| jca/KeyExchange.java:122:16:122:38 | Key | Algorithm | jca/KeyExchange.java:121:49:121:59 | EllipticCurve | +| jca/KeyExchange.java:122:16:122:38 | KeyGeneration | Algorithm | jca/KeyExchange.java:121:49:121:59 | EllipticCurve | +| jca/KeyExchange.java:122:16:122:38 | KeyGeneration | Output | jca/KeyExchange.java:122:16:122:38 | Key | +| jca/KeyExchange.java:137:17:137:26 | Key | Source | jca/KeyExchange.java:122:16:122:38 | Key | +| jca/KeyExchange.java:138:20:138:28 | Key | Source | jca/KeyExchange.java:122:16:122:38 | Key | +| jca/KeyExchange.java:139:16:139:34 | KeyAgreementOperation | Algorithm | jca/KeyExchange.java:136:52:136:57 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:139:16:139:34 | KeyAgreementOperation | Output | jca/KeyExchange.java:139:16:139:34 | SharedSecret | +| jca/KeyExchange.java:139:16:139:34 | KeyAgreementOperation | PeerKey | jca/KeyExchange.java:138:20:138:28 | Key | +| jca/KeyExchange.java:139:16:139:34 | KeyAgreementOperation | ServerKey | jca/KeyExchange.java:137:17:137:26 | Key | +| jca/KeyExchange.java:139:16:139:34 | SharedSecret | Source | jca/KeyExchange.java:139:16:139:34 | SharedSecret | +| jca/KeyExchange.java:159:16:159:36 | Key | Algorithm | jca/KeyExchange.java:156:61:156:68 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:159:16:159:36 | KeyGeneration | Algorithm | jca/KeyExchange.java:156:61:156:68 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:159:16:159:36 | KeyGeneration | Output | jca/KeyExchange.java:159:16:159:36 | Key | +| jca/KeyExchange.java:174:17:174:26 | Key | Source | jca/KeyExchange.java:159:16:159:36 | Key | +| jca/KeyExchange.java:175:20:175:28 | Key | Source | jca/KeyExchange.java:159:16:159:36 | Key | +| jca/KeyExchange.java:176:16:176:34 | KeyAgreementOperation | Algorithm | jca/KeyExchange.java:173:52:173:59 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:176:16:176:34 | KeyAgreementOperation | Output | jca/KeyExchange.java:176:16:176:34 | SharedSecret | +| jca/KeyExchange.java:176:16:176:34 | KeyAgreementOperation | PeerKey | jca/KeyExchange.java:175:20:175:28 | Key | +| jca/KeyExchange.java:176:16:176:34 | KeyAgreementOperation | ServerKey | jca/KeyExchange.java:174:17:174:26 | Key | +| jca/KeyExchange.java:176:16:176:34 | SharedSecret | Source | jca/KeyExchange.java:176:16:176:34 | SharedSecret | +| jca/KeyExchange.java:196:16:196:36 | Key | Algorithm | jca/KeyExchange.java:193:61:193:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:196:16:196:36 | KeyGeneration | Algorithm | jca/KeyExchange.java:193:61:193:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:196:16:196:36 | KeyGeneration | Output | jca/KeyExchange.java:196:16:196:36 | Key | +| jca/KeyExchange.java:211:17:211:26 | Key | Source | jca/KeyExchange.java:196:16:196:36 | Key | +| jca/KeyExchange.java:212:20:212:28 | Key | Source | jca/KeyExchange.java:196:16:196:36 | Key | +| jca/KeyExchange.java:213:16:213:34 | KeyAgreementOperation | Algorithm | jca/KeyExchange.java:210:52:210:57 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:213:16:213:34 | KeyAgreementOperation | Output | jca/KeyExchange.java:213:16:213:34 | SharedSecret | +| jca/KeyExchange.java:213:16:213:34 | KeyAgreementOperation | PeerKey | jca/KeyExchange.java:212:20:212:28 | Key | +| jca/KeyExchange.java:213:16:213:34 | KeyAgreementOperation | ServerKey | jca/KeyExchange.java:211:17:211:26 | Key | +| jca/KeyExchange.java:213:16:213:34 | SharedSecret | Source | jca/KeyExchange.java:213:16:213:34 | SharedSecret | +| jca/MACOperation.java:60:35:60:46 | HMACAlgorithm | H | jca/MACOperation.java:60:35:60:46 | HashAlgorithm | +| jca/MACOperation.java:62:18:62:26 | Key | Source | jca/MACOperation.java:59:52:59:61 | Parameter | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Algorithm | jca/MACOperation.java:60:35:60:46 | HMACAlgorithm | +| jca/MACOperation.java:63:16:63:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:60:35:60:46 | HashAlgorithm | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Input | jca/MACOperation.java:63:28:63:45 | Message | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Key | jca/MACOperation.java:62:18:62:26 | Key | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Message | jca/MACOperation.java:63:28:63:45 | Message | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Nonce | jca/MACOperation.java:63:16:63:46 | MACOperation | +| jca/MACOperation.java:63:16:63:46 | MACOperation | Output | jca/MACOperation.java:63:16:63:46 | KeyOperationOutput | +| jca/MACOperation.java:63:28:63:45 | Message | Source | jca/MACOperation.java:59:36:59:49 | Parameter | +| jca/MACOperation.java:71:35:71:48 | HMACAlgorithm | H | jca/MACOperation.java:71:35:71:48 | HashAlgorithm | +| jca/MACOperation.java:73:18:73:26 | Key | Source | jca/MACOperation.java:70:50:70:59 | Parameter | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Algorithm | jca/MACOperation.java:71:35:71:48 | HMACAlgorithm | +| jca/MACOperation.java:74:16:74:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:71:35:71:48 | HashAlgorithm | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Input | jca/MACOperation.java:74:28:74:45 | Message | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Key | jca/MACOperation.java:73:18:73:26 | Key | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Message | jca/MACOperation.java:74:28:74:45 | Message | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Nonce | jca/MACOperation.java:74:16:74:46 | MACOperation | +| jca/MACOperation.java:74:16:74:46 | MACOperation | Output | jca/MACOperation.java:74:16:74:46 | KeyOperationOutput | +| jca/MACOperation.java:74:28:74:45 | Message | Source | jca/MACOperation.java:70:34:70:47 | Parameter | +| jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | Mode | jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | +| jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | Padding | jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | +| jca/MACOperation.java:84:18:84:26 | Key | Source | jca/MACOperation.java:81:50:81:59 | Parameter | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Algorithm | jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | +| jca/MACOperation.java:85:16:85:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:85:16:85:46 | MACOperation | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Input | jca/MACOperation.java:85:28:85:45 | Message | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Key | jca/MACOperation.java:84:18:84:26 | Key | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Message | jca/MACOperation.java:85:28:85:45 | Message | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Nonce | jca/MACOperation.java:85:16:85:46 | MACOperation | +| jca/MACOperation.java:85:16:85:46 | MACOperation | Output | jca/MACOperation.java:85:16:85:46 | KeyOperationOutput | +| jca/MACOperation.java:85:28:85:45 | Message | Source | jca/MACOperation.java:81:34:81:47 | Parameter | +| jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | Mode | jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | +| jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | Padding | jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | +| jca/MACOperation.java:98:18:98:26 | Key | Source | jca/MACOperation.java:92:46:92:55 | Parameter | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Algorithm | jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | +| jca/MACOperation.java:99:16:99:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:99:16:99:46 | MACOperation | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Input | jca/MACOperation.java:99:28:99:45 | Message | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Key | jca/MACOperation.java:98:18:98:26 | Key | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Message | jca/MACOperation.java:99:28:99:45 | Message | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Nonce | jca/MACOperation.java:99:16:99:46 | MACOperation | +| jca/MACOperation.java:99:16:99:46 | MACOperation | Output | jca/MACOperation.java:99:16:99:46 | KeyOperationOutput | +| jca/MACOperation.java:99:28:99:45 | Message | Source | jca/MACOperation.java:92:30:92:43 | Parameter | +| jca/MACOperation.java:109:18:109:26 | Key | Source | jca/MACOperation.java:106:46:106:55 | Parameter | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Algorithm | jca/MACOperation.java:107:35:107:43 | Constant | +| jca/MACOperation.java:110:16:110:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:110:16:110:46 | MACOperation | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Input | jca/MACOperation.java:110:28:110:45 | Message | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Key | jca/MACOperation.java:109:18:109:26 | Key | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Message | jca/MACOperation.java:110:28:110:45 | Message | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Nonce | jca/MACOperation.java:110:16:110:46 | MACOperation | +| jca/MACOperation.java:110:16:110:46 | MACOperation | Output | jca/MACOperation.java:110:16:110:46 | KeyOperationOutput | +| jca/MACOperation.java:110:28:110:45 | Message | Source | jca/MACOperation.java:106:30:106:43 | Parameter | +| jca/MACOperation.java:118:35:118:44 | HMACAlgorithm | H | jca/MACOperation.java:118:35:118:44 | HashAlgorithm | +| jca/MACOperation.java:120:18:120:26 | Key | Source | jca/MACOperation.java:117:52:117:61 | Parameter | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Algorithm | jca/MACOperation.java:118:35:118:44 | HMACAlgorithm | +| jca/MACOperation.java:121:16:121:46 | MACOperation | HashAlgorithm | jca/MACOperation.java:118:35:118:44 | HashAlgorithm | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Input | jca/MACOperation.java:121:28:121:45 | Message | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Key | jca/MACOperation.java:120:18:120:26 | Key | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Message | jca/MACOperation.java:121:28:121:45 | Message | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Nonce | jca/MACOperation.java:121:16:121:46 | MACOperation | +| jca/MACOperation.java:121:16:121:46 | MACOperation | Output | jca/MACOperation.java:121:16:121:46 | KeyOperationOutput | +| jca/MACOperation.java:121:28:121:45 | Message | Source | jca/MACOperation.java:117:36:117:49 | Parameter | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | Mode | jca/MACOperation.java:136:44:136:62 | ModeOfOperation | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | Padding | jca/MACOperation.java:136:44:136:62 | PaddingAlgorithm | +| jca/MACOperation.java:137:42:137:44 | Key | Source | jca/MACOperation.java:133:34:133:49 | Parameter | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | Algorithm | jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | Input | jca/MACOperation.java:138:47:138:73 | Message | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | Key | jca/MACOperation.java:137:42:137:44 | Key | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | Nonce | jca/MACOperation.java:138:32:138:74 | EncryptOperation | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | Output | jca/MACOperation.java:138:32:138:74 | KeyOperationOutput | +| jca/MACOperation.java:138:47:138:73 | Message | Source | jca/MACOperation.java:138:47:138:62 | Constant | +| jca/MACOperation.java:170:42:170:68 | Message | Source | jca/MACOperation.java:166:47:166:62 | Parameter | +| jca/MACOperation.java:170:71:170:74 | Salt | Source | jca/MACOperation.java:246:38:246:41 | RandomNumberGeneration | +| jca/MACOperation.java:171:65:171:86 | HMACAlgorithm | H | jca/MACOperation.java:171:65:171:86 | HashAlgorithm | +| jca/MACOperation.java:171:65:171:86 | KeyDerivationAlgorithm | PRF | jca/MACOperation.java:171:65:171:86 | HMACAlgorithm | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | Algorithm | jca/MACOperation.java:171:65:171:86 | KeyDerivationAlgorithm | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | Input | jca/MACOperation.java:170:42:170:68 | Message | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | Output | jca/MACOperation.java:172:30:172:57 | Key | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | Salt | jca/MACOperation.java:170:71:170:74 | Salt | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | Mode | jca/MACOperation.java:180:44:180:62 | ModeOfOperation | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | Padding | jca/MACOperation.java:180:44:180:62 | PaddingAlgorithm | +| jca/MACOperation.java:181:42:181:54 | Key | Source | jca/MACOperation.java:181:42:181:54 | Key | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | Algorithm | jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | Input | jca/MACOperation.java:182:44:182:77 | Message | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | Key | jca/MACOperation.java:181:42:181:54 | Key | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | Nonce | jca/MACOperation.java:182:29:182:78 | EncryptOperation | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | Output | jca/MACOperation.java:182:29:182:78 | KeyOperationOutput | +| jca/MACOperation.java:182:44:182:77 | Message | Source | jca/MACOperation.java:182:44:182:66 | Constant | +| jca/MACOperation.java:185:35:185:46 | HMACAlgorithm | H | jca/MACOperation.java:185:35:185:46 | HashAlgorithm | +| jca/MACOperation.java:186:18:186:30 | Key | Source | jca/MACOperation.java:186:18:186:30 | Key | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Algorithm | jca/MACOperation.java:185:35:185:46 | HMACAlgorithm | +| jca/MACOperation.java:187:30:187:52 | MACOperation | HashAlgorithm | jca/MACOperation.java:185:35:185:46 | HashAlgorithm | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Input | jca/MACOperation.java:187:42:187:51 | Message | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Key | jca/MACOperation.java:186:18:186:30 | Key | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Message | jca/MACOperation.java:187:42:187:51 | Message | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Nonce | jca/MACOperation.java:187:30:187:52 | MACOperation | +| jca/MACOperation.java:187:30:187:52 | MACOperation | Output | jca/MACOperation.java:187:30:187:52 | KeyOperationOutput | +| jca/MACOperation.java:187:42:187:51 | Message | Source | jca/MACOperation.java:182:29:182:78 | KeyOperationOutput | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | Mode | jca/MACOperation.java:216:44:216:62 | ModeOfOperation | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | Padding | jca/MACOperation.java:216:44:216:62 | PaddingAlgorithm | +| jca/MACOperation.java:218:42:218:44 | Key | Source | jca/MACOperation.java:234:16:234:35 | Key | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | Algorithm | jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | Input | jca/MACOperation.java:219:47:219:50 | Message | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | Key | jca/MACOperation.java:218:42:218:44 | Key | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | Nonce | jca/MACOperation.java:219:32:219:51 | EncryptOperation | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | Output | jca/MACOperation.java:219:32:219:51 | KeyOperationOutput | +| jca/MACOperation.java:219:47:219:50 | Message | Source | jca/MACOperation.java:150:36:150:51 | Parameter | +| jca/MACOperation.java:234:16:234:35 | KeyGeneration | Algorithm | jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | +| jca/MACOperation.java:234:16:234:35 | KeyGeneration | Output | jca/MACOperation.java:234:16:234:35 | Key | +| jca/Nonce.java:24:35:24:46 | HMACAlgorithm | H | jca/Nonce.java:24:35:24:46 | HashAlgorithm | +| jca/Nonce.java:25:18:25:20 | Key | Source | jca/Nonce.java:93:16:93:35 | Key | +| jca/Nonce.java:26:20:26:24 | Message | Source | jca/Nonce.java:98:38:98:42 | RandomNumberGeneration | +| jca/Nonce.java:27:28:27:69 | MACOperation | Algorithm | jca/Nonce.java:24:35:24:46 | HMACAlgorithm | +| jca/Nonce.java:27:28:27:69 | MACOperation | HashAlgorithm | jca/Nonce.java:24:35:24:46 | HashAlgorithm | +| jca/Nonce.java:27:28:27:69 | MACOperation | Input | jca/Nonce.java:26:20:26:24 | Message | +| jca/Nonce.java:27:28:27:69 | MACOperation | Input | jca/Nonce.java:27:40:27:68 | Message | +| jca/Nonce.java:27:28:27:69 | MACOperation | Key | jca/Nonce.java:25:18:25:20 | Key | +| jca/Nonce.java:27:28:27:69 | MACOperation | Message | jca/Nonce.java:26:20:26:24 | Message | +| jca/Nonce.java:27:28:27:69 | MACOperation | Message | jca/Nonce.java:27:40:27:68 | Message | +| jca/Nonce.java:27:28:27:69 | MACOperation | Nonce | jca/Nonce.java:27:28:27:69 | MACOperation | +| jca/Nonce.java:27:28:27:69 | MACOperation | Output | jca/Nonce.java:27:28:27:69 | KeyOperationOutput | +| jca/Nonce.java:27:40:27:68 | Message | Source | jca/Nonce.java:27:40:27:57 | Constant | +| jca/Nonce.java:37:35:37:46 | HMACAlgorithm | H | jca/Nonce.java:37:35:37:46 | HashAlgorithm | +| jca/Nonce.java:38:18:38:20 | Key | Source | jca/Nonce.java:93:16:93:35 | Key | +| jca/Nonce.java:39:20:39:24 | Message | Source | jca/Nonce.java:35:24:35:41 | Constant | +| jca/Nonce.java:40:28:40:67 | MACOperation | Algorithm | jca/Nonce.java:37:35:37:46 | HMACAlgorithm | +| jca/Nonce.java:40:28:40:67 | MACOperation | HashAlgorithm | jca/Nonce.java:37:35:37:46 | HashAlgorithm | +| jca/Nonce.java:40:28:40:67 | MACOperation | Input | jca/Nonce.java:39:20:39:24 | Message | +| jca/Nonce.java:40:28:40:67 | MACOperation | Input | jca/Nonce.java:40:40:40:66 | Message | +| jca/Nonce.java:40:28:40:67 | MACOperation | Key | jca/Nonce.java:38:18:38:20 | Key | +| jca/Nonce.java:40:28:40:67 | MACOperation | Message | jca/Nonce.java:39:20:39:24 | Message | +| jca/Nonce.java:40:28:40:67 | MACOperation | Message | jca/Nonce.java:40:40:40:66 | Message | +| jca/Nonce.java:40:28:40:67 | MACOperation | Nonce | jca/Nonce.java:40:28:40:67 | MACOperation | +| jca/Nonce.java:40:28:40:67 | MACOperation | Output | jca/Nonce.java:40:28:40:67 | KeyOperationOutput | +| jca/Nonce.java:40:40:40:66 | Message | Source | jca/Nonce.java:40:40:40:55 | Constant | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | Mode | jca/Nonce.java:50:44:50:62 | ModeOfOperation | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | Padding | jca/Nonce.java:50:44:50:62 | PaddingAlgorithm | +| jca/Nonce.java:51:42:51:44 | Key | Source | jca/Nonce.java:47:39:47:51 | Parameter | +| jca/Nonce.java:51:47:51:53 | Nonce | Source | jca/Nonce.java:112:16:112:33 | Constant | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | Algorithm | jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | Input | jca/Nonce.java:52:44:52:52 | Message | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | Key | jca/Nonce.java:51:42:51:44 | Key | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | Nonce | jca/Nonce.java:51:47:51:53 | Nonce | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | Output | jca/Nonce.java:52:29:52:53 | KeyOperationOutput | +| jca/Nonce.java:52:44:52:52 | Message | Source | jca/Nonce.java:47:54:47:69 | Parameter | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | Mode | jca/Nonce.java:61:44:61:62 | ModeOfOperation | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | Padding | jca/Nonce.java:61:44:61:62 | PaddingAlgorithm | +| jca/Nonce.java:62:42:62:44 | Key | Source | jca/Nonce.java:58:37:58:49 | Parameter | +| jca/Nonce.java:62:47:62:53 | Nonce | Source | jca/Nonce.java:98:38:98:42 | RandomNumberGeneration | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | Algorithm | jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | Input | jca/Nonce.java:63:44:63:52 | Message | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | Key | jca/Nonce.java:62:42:62:44 | Key | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | Nonce | jca/Nonce.java:62:47:62:53 | Nonce | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | Output | jca/Nonce.java:63:29:63:53 | KeyOperationOutput | +| jca/Nonce.java:63:44:63:52 | Message | Source | jca/Nonce.java:58:52:58:67 | Parameter | +| jca/Nonce.java:70:53:70:64 | HMACAlgorithm | H | jca/Nonce.java:70:53:70:64 | HashAlgorithm | +| jca/Nonce.java:78:18:78:20 | Key | Source | jca/Nonce.java:93:16:93:35 | Key | +| jca/Nonce.java:79:20:79:24 | Message | Source | jca/Nonce.java:98:38:98:42 | RandomNumberGeneration | +| jca/Nonce.java:79:20:79:24 | Message | Source | jca/Nonce.java:104:32:104:36 | RandomNumberGeneration | +| jca/Nonce.java:80:28:80:67 | MACOperation | Algorithm | jca/Nonce.java:70:53:70:64 | HMACAlgorithm | +| jca/Nonce.java:80:28:80:67 | MACOperation | HashAlgorithm | jca/Nonce.java:70:53:70:64 | HashAlgorithm | +| jca/Nonce.java:80:28:80:67 | MACOperation | Input | jca/Nonce.java:79:20:79:24 | Message | +| jca/Nonce.java:80:28:80:67 | MACOperation | Input | jca/Nonce.java:80:40:80:66 | Message | +| jca/Nonce.java:80:28:80:67 | MACOperation | Key | jca/Nonce.java:78:18:78:20 | Key | +| jca/Nonce.java:80:28:80:67 | MACOperation | Message | jca/Nonce.java:79:20:79:24 | Message | +| jca/Nonce.java:80:28:80:67 | MACOperation | Message | jca/Nonce.java:80:40:80:66 | Message | +| jca/Nonce.java:80:28:80:67 | MACOperation | Nonce | jca/Nonce.java:80:28:80:67 | MACOperation | +| jca/Nonce.java:80:28:80:67 | MACOperation | Output | jca/Nonce.java:80:28:80:67 | KeyOperationOutput | +| jca/Nonce.java:80:40:80:66 | Message | Source | jca/Nonce.java:80:40:80:55 | Constant | +| jca/Nonce.java:93:16:93:35 | KeyGeneration | Algorithm | jca/Nonce.java:92:56:92:67 | Constant | +| jca/Nonce.java:93:16:93:35 | KeyGeneration | Output | jca/Nonce.java:93:16:93:35 | Key | +| jca/PrngTest.java:154:16:154:35 | KeyGeneration | Algorithm | jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | +| jca/PrngTest.java:154:16:154:35 | KeyGeneration | Output | jca/PrngTest.java:154:16:154:35 | Key | +| jca/SignEncryptCombinations.java:53:16:53:38 | Key | Algorithm | jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | +| jca/SignEncryptCombinations.java:53:16:53:38 | KeyGeneration | Algorithm | jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | +| jca/SignEncryptCombinations.java:53:16:53:38 | KeyGeneration | Output | jca/SignEncryptCombinations.java:53:16:53:38 | Key | +| jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | Mode | jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | Padding | jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:62:28:62:34 | Key | Source | jca/SignEncryptCombinations.java:53:16:53:38 | Key | +| jca/SignEncryptCombinations.java:63:26:63:29 | Message | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:63:26:63:29 | Message | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:63:26:63:29 | Message | Source | jca/SignEncryptCombinations.java:335:26:335:47 | Constant | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | Algorithm | jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | HashAlgorithm | jca/SignEncryptCombinations.java:61:53:61:69 | HashAlgorithm | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | Input | jca/SignEncryptCombinations.java:63:26:63:29 | Message | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | Key | jca/SignEncryptCombinations.java:62:28:62:34 | Key | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | Output | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | Mode | jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | Padding | jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:69:30:69:35 | Key | Source | jca/SignEncryptCombinations.java:53:16:53:38 | Key | +| jca/SignEncryptCombinations.java:70:26:70:29 | Message | Source | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:70:26:70:29 | Message | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:70:26:70:29 | Message | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:70:26:70:29 | Message | Source | jca/SignEncryptCombinations.java:335:26:335:47 | Constant | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | Algorithm | jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | HashAlgorithm | jca/SignEncryptCombinations.java:68:53:68:69 | HashAlgorithm | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | Input | jca/SignEncryptCombinations.java:70:26:70:29 | Message | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | Key | jca/SignEncryptCombinations.java:69:30:69:35 | Key | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | Signature | jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | +| jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | Source | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | Source | jca/SignEncryptCombinations.java:113:16:113:41 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:84:16:84:31 | KeyGeneration | Algorithm | jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:84:16:84:31 | KeyGeneration | Output | jca/SignEncryptCombinations.java:84:16:84:31 | Key | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | Mode | jca/SignEncryptCombinations.java:92:44:92:62 | ModeOfOperation | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | Padding | jca/SignEncryptCombinations.java:92:44:92:62 | PaddingAlgorithm | +| jca/SignEncryptCombinations.java:96:42:96:44 | Key | Source | jca/SignEncryptCombinations.java:84:16:84:31 | Key | +| jca/SignEncryptCombinations.java:96:47:96:50 | Nonce | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | Algorithm | jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | Input | jca/SignEncryptCombinations.java:97:44:97:52 | Message | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | Key | jca/SignEncryptCombinations.java:96:42:96:44 | Key | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | Nonce | jca/SignEncryptCombinations.java:96:47:96:50 | Nonce | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | Output | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:97:44:97:52 | Message | Source | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:97:44:97:52 | Message | Source | jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:97:44:97:52 | Message | Source | jca/SignEncryptCombinations.java:335:26:335:47 | Constant | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | Mode | jca/SignEncryptCombinations.java:111:44:111:62 | ModeOfOperation | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | Padding | jca/SignEncryptCombinations.java:111:44:111:62 | PaddingAlgorithm | +| jca/SignEncryptCombinations.java:112:42:112:44 | Key | Source | jca/SignEncryptCombinations.java:84:16:84:31 | Key | +| jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | Source | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | Source | jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | Algorithm | jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | Input | jca/SignEncryptCombinations.java:113:31:113:40 | Message | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | Key | jca/SignEncryptCombinations.java:112:42:112:44 | Key | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | Nonce | jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | Output | jca/SignEncryptCombinations.java:113:16:113:41 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:113:31:113:40 | Message | Source | jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:113:31:113:40 | Message | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:113:31:113:40 | Message | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:113:31:113:40 | Message | Source | jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:121:35:121:46 | HMACAlgorithm | H | jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | +| jca/SignEncryptCombinations.java:122:18:122:20 | Key | Source | jca/SignEncryptCombinations.java:84:16:84:31 | Key | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Algorithm | jca/SignEncryptCombinations.java:121:35:121:46 | HMACAlgorithm | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | HashAlgorithm | jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Input | jca/SignEncryptCombinations.java:123:28:123:31 | Message | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Key | jca/SignEncryptCombinations.java:122:18:122:20 | Key | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Message | jca/SignEncryptCombinations.java:123:28:123:31 | Message | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Nonce | jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | Output | jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | Source | jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | Source | jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | Source | jca/SignEncryptCombinations.java:113:16:113:41 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | Source | jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | Source | jca/SignEncryptCombinations.java:335:26:335:47 | Constant | +| jca/SignatureOperation.java:54:16:54:36 | Key | Algorithm | jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:54:16:54:36 | KeyGeneration | Algorithm | jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:54:16:54:36 | KeyGeneration | Output | jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:64:28:64:37 | Key | Source | jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:65:26:65:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | Algorithm | jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:63:53:63:74 | HashAlgorithm | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | Input | jca/SignatureOperation.java:65:26:65:29 | Message | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | Key | jca/SignatureOperation.java:64:28:64:37 | Key | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | Output | jca/SignatureOperation.java:66:16:66:31 | SignatureOutput | +| jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:76:30:76:38 | Key | Source | jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:77:26:77:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | Algorithm | jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:75:53:75:74 | HashAlgorithm | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | Input | jca/SignatureOperation.java:77:26:77:29 | Message | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | Key | jca/SignatureOperation.java:76:30:76:38 | Key | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | Signature | jca/SignatureOperation.java:78:33:78:40 | SignatureInput | +| jca/SignatureOperation.java:78:33:78:40 | SignatureInput | Source | jca/SignatureOperation.java:66:16:66:31 | SignatureOutput | +| jca/SignatureOperation.java:94:16:94:38 | Key | Algorithm | jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | +| jca/SignatureOperation.java:94:16:94:38 | KeyGeneration | Algorithm | jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | +| jca/SignatureOperation.java:94:16:94:38 | KeyGeneration | Output | jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:104:28:104:37 | Key | Source | jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:105:26:105:29 | Message | Source | jca/SignatureOperation.java:231:26:231:44 | Constant | +| jca/SignatureOperation.java:105:26:105:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | Algorithm | jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:103:53:103:69 | HashAlgorithm | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | Input | jca/SignatureOperation.java:105:26:105:29 | Message | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | Key | jca/SignatureOperation.java:104:28:104:37 | Key | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | Output | jca/SignatureOperation.java:106:16:106:31 | SignatureOutput | +| jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:116:30:116:38 | Key | Source | jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:117:26:117:29 | Message | Source | jca/SignatureOperation.java:231:26:231:44 | Constant | +| jca/SignatureOperation.java:117:26:117:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | Algorithm | jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:115:53:115:69 | HashAlgorithm | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | Input | jca/SignatureOperation.java:117:26:117:29 | Message | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | Key | jca/SignatureOperation.java:116:30:116:38 | Key | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | Signature | jca/SignatureOperation.java:118:33:118:40 | SignatureInput | +| jca/SignatureOperation.java:118:33:118:40 | SignatureInput | Source | jca/SignatureOperation.java:106:16:106:31 | SignatureOutput | +| jca/SignatureOperation.java:118:33:118:40 | SignatureInput | Source | jca/SignatureOperation.java:236:27:236:30 | Constant | +| jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:133:16:133:36 | Key | Algorithm | jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:133:16:133:36 | KeyGeneration | Algorithm | jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:133:16:133:36 | KeyGeneration | Output | jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:143:28:143:37 | Key | Source | jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:144:26:144:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | Algorithm | jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:145:16:145:31 | SignOperation | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | Input | jca/SignatureOperation.java:144:26:144:29 | Message | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | Key | jca/SignatureOperation.java:143:28:143:37 | Key | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | Output | jca/SignatureOperation.java:145:16:145:31 | SignatureOutput | +| jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:155:30:155:38 | Key | Source | jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:156:26:156:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | Algorithm | jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | Input | jca/SignatureOperation.java:156:26:156:29 | Message | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | Key | jca/SignatureOperation.java:155:30:155:38 | Key | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | Signature | jca/SignatureOperation.java:157:33:157:40 | SignatureInput | +| jca/SignatureOperation.java:157:33:157:40 | SignatureInput | Source | jca/SignatureOperation.java:145:16:145:31 | SignatureOutput | +| jca/SignatureOperation.java:175:16:175:36 | Key | Algorithm | jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:175:16:175:36 | KeyGeneration | Algorithm | jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:175:16:175:36 | KeyGeneration | Output | jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:186:28:186:37 | Key | Source | jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:187:26:187:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | Algorithm | jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:185:53:185:65 | HashAlgorithm | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | Input | jca/SignatureOperation.java:187:26:187:29 | Message | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | Key | jca/SignatureOperation.java:186:28:186:37 | Key | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | Output | jca/SignatureOperation.java:188:16:188:31 | SignatureOutput | +| jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:199:30:199:38 | Key | Source | jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:200:26:200:29 | Message | Source | jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | Algorithm | jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:198:53:198:65 | HashAlgorithm | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | Input | jca/SignatureOperation.java:200:26:200:29 | Message | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | Key | jca/SignatureOperation.java:199:30:199:38 | Key | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | Signature | jca/SignatureOperation.java:201:33:201:40 | SignatureInput | +| jca/SignatureOperation.java:201:33:201:40 | SignatureInput | Source | jca/SignatureOperation.java:188:16:188:31 | SignatureOutput | +| jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | Mode | jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | Padding | jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:283:28:283:42 | Key | Source | jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:283:28:283:42 | Key | Source | jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:283:28:283:42 | Key | Source | jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:283:28:283:42 | Key | Source | jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:284:26:284:32 | Message | Source | jca/SignatureOperation.java:282:26:282:49 | Constant | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Algorithm | jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Algorithm | jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Algorithm | jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Algorithm | jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Algorithm | jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | HashAlgorithm | jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Input | jca/SignatureOperation.java:284:26:284:32 | Message | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Key | jca/SignatureOperation.java:283:28:283:42 | Key | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | Output | jca/SignatureOperation.java:285:27:285:42 | SignatureOutput | +| jca/SignatureOperation.java:287:30:287:43 | Key | Source | jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:287:30:287:43 | Key | Source | jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:287:30:287:43 | Key | Source | jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:287:30:287:43 | Key | Source | jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:288:26:288:32 | Message | Source | jca/SignatureOperation.java:288:26:288:32 | Message | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Algorithm | jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Algorithm | jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Algorithm | jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Algorithm | jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Algorithm | jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | HashAlgorithm | jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Input | jca/SignatureOperation.java:284:26:284:32 | Message | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Input | jca/SignatureOperation.java:288:26:288:32 | Message | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Key | jca/SignatureOperation.java:283:28:283:42 | Key | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Key | jca/SignatureOperation.java:287:30:287:43 | Key | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | Signature | jca/SignatureOperation.java:289:45:289:52 | SignatureInput | +| jca/SignatureOperation.java:289:45:289:52 | SignatureInput | Source | jca/SignatureOperation.java:285:27:285:42 | SignatureOutput | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:51:44:51:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:51:44:51:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:55:42:55:44 | Key | Source | jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:55:47:55:50 | Nonce | Source | jca/SymmetricAlgorithm.java:53:38:53:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:56:44:56:52 | Message | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:55:42:55:44 | Key | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:55:47:55:50 | Nonce | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:56:29:56:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:56:44:56:52 | Message | Source | jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:73:44:73:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:73:44:73:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:76:42:76:44 | Key | Source | jca/SymmetricAlgorithm.java:72:39:72:51 | Parameter | +| jca/SymmetricAlgorithm.java:76:47:76:50 | Nonce | Source | jca/SymmetricAlgorithm.java:76:47:76:50 | Nonce | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:77:44:77:52 | Message | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:76:42:76:44 | Key | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:76:47:76:50 | Nonce | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:77:29:77:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:77:44:77:52 | Message | Source | jca/SymmetricAlgorithm.java:72:54:72:69 | Parameter | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:94:44:94:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:94:44:94:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:98:42:98:44 | Key | Source | jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:98:47:98:52 | Nonce | Source | jca/SymmetricAlgorithm.java:96:38:96:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:99:44:99:52 | Message | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:98:42:98:44 | Key | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:98:47:98:52 | Nonce | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:99:29:99:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:99:44:99:52 | Message | Source | jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:116:44:116:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:116:44:116:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:117:42:117:44 | Key | Source | jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:118:31:118:39 | Message | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:117:42:117:44 | Key | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:118:16:118:40 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:118:31:118:39 | Message | Source | jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:132:42:132:44 | Key | Source | jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:133:31:133:39 | Message | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:132:42:132:44 | Key | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:133:16:133:40 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:133:31:133:39 | Message | Source | jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:146:44:146:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:146:44:146:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:150:42:150:44 | Key | Source | jca/SymmetricAlgorithm.java:145:36:145:48 | Parameter | +| jca/SymmetricAlgorithm.java:150:47:150:52 | Nonce | Source | jca/SymmetricAlgorithm.java:148:38:148:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:151:44:151:52 | Message | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:150:42:150:44 | Key | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:150:47:150:52 | Nonce | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:151:29:151:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:151:44:151:52 | Message | Source | jca/SymmetricAlgorithm.java:145:51:145:66 | Parameter | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:168:44:168:68 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:168:44:168:68 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:172:42:172:44 | Key | Source | jca/SymmetricAlgorithm.java:167:42:167:54 | Parameter | +| jca/SymmetricAlgorithm.java:172:47:172:52 | Nonce | Source | jca/SymmetricAlgorithm.java:170:38:170:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:173:44:173:52 | Message | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:172:42:172:44 | Key | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:172:47:172:52 | Nonce | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:173:29:173:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:173:44:173:52 | Message | Source | jca/SymmetricAlgorithm.java:167:57:167:72 | Parameter | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:194:42:194:44 | Key | Source | jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:194:47:194:72 | Nonce | Source | jca/SymmetricAlgorithm.java:192:38:192:42 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:195:44:195:52 | Message | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:194:42:194:44 | Key | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:194:47:194:72 | Nonce | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:195:29:195:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:195:44:195:52 | Message | Source | jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:214:19:214:21 | Key | Source | jca/SymmetricAlgorithm.java:212:35:212:47 | Parameter | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Algorithm | jca/SymmetricAlgorithm.java:213:36:213:44 | Constant | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | HashAlgorithm | jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Input | jca/SymmetricAlgorithm.java:215:42:215:50 | Message | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Key | jca/SymmetricAlgorithm.java:214:19:214:21 | Key | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Message | jca/SymmetricAlgorithm.java:215:42:215:50 | Message | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Nonce | jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | Output | jca/SymmetricAlgorithm.java:215:29:215:51 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:215:42:215:50 | Message | Source | jca/SymmetricAlgorithm.java:212:50:212:65 | Parameter | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:218:44:218:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:218:44:218:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:222:42:222:51 | Key | Source | jca/SymmetricAlgorithm.java:215:29:215:51 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:222:54:222:57 | Nonce | Source | jca/SymmetricAlgorithm.java:220:38:220:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:223:44:223:52 | Message | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:222:42:222:51 | Key | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:222:54:222:57 | Nonce | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:223:29:223:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:223:44:223:52 | Message | Source | jca/SymmetricAlgorithm.java:223:44:223:52 | Message | +| jca/SymmetricAlgorithm.java:287:42:287:66 | Message | Source | jca/SymmetricAlgorithm.java:284:58:284:70 | Parameter | +| jca/SymmetricAlgorithm.java:287:69:287:72 | Salt | Source | jca/SymmetricAlgorithm.java:345:38:345:41 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HMACAlgorithm | H | jca/SymmetricAlgorithm.java:288:65:288:86 | HashAlgorithm | +| jca/SymmetricAlgorithm.java:288:65:288:86 | KeyDerivationAlgorithm | PRF | jca/SymmetricAlgorithm.java:288:65:288:86 | HMACAlgorithm | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | Algorithm | jca/SymmetricAlgorithm.java:288:65:288:86 | KeyDerivationAlgorithm | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | Input | jca/SymmetricAlgorithm.java:287:42:287:66 | Message | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | Output | jca/SymmetricAlgorithm.java:289:26:289:53 | Key | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | Salt | jca/SymmetricAlgorithm.java:287:69:287:72 | Salt | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | Mode | jca/SymmetricAlgorithm.java:295:44:295:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | Padding | jca/SymmetricAlgorithm.java:295:44:295:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:298:42:298:47 | Key | Source | jca/SymmetricAlgorithm.java:298:42:298:47 | Key | +| jca/SymmetricAlgorithm.java:298:50:298:78 | Nonce | Source | jca/SymmetricAlgorithm.java:297:38:297:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | Algorithm | jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | Input | jca/SymmetricAlgorithm.java:299:44:299:52 | Message | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | Key | jca/SymmetricAlgorithm.java:298:42:298:47 | Key | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | Nonce | jca/SymmetricAlgorithm.java:298:50:298:78 | Nonce | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | Output | jca/SymmetricAlgorithm.java:299:29:299:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:299:44:299:52 | Message | Source | jca/SymmetricAlgorithm.java:284:73:284:88 | Parameter | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HMACAlgorithm | H | jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | +| jca/SymmetricAlgorithm.java:302:18:302:30 | Key | Source | jca/SymmetricAlgorithm.java:302:18:302:30 | Key | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Algorithm | jca/SymmetricAlgorithm.java:301:35:301:46 | HMACAlgorithm | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | HashAlgorithm | jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Input | jca/SymmetricAlgorithm.java:303:42:303:51 | Message | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Key | jca/SymmetricAlgorithm.java:302:18:302:30 | Key | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Message | jca/SymmetricAlgorithm.java:303:42:303:51 | Message | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Nonce | jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | Output | jca/SymmetricAlgorithm.java:303:30:303:52 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:303:42:303:51 | Message | Source | jca/SymmetricAlgorithm.java:299:29:299:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:333:16:333:31 | KeyGeneration | Algorithm | jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:333:16:333:31 | KeyGeneration | Output | jca/SymmetricAlgorithm.java:333:16:333:31 | Key | +| jca/SymmetricModesTest.java:50:33:50:48 | KeyGeneration | Algorithm | jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:50:33:50:48 | KeyGeneration | Output | jca/SymmetricModesTest.java:50:33:50:48 | Key | +| jca/SymmetricModesTest.java:54:31:54:46 | KeyGeneration | Algorithm | jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:54:31:54:46 | KeyGeneration | Output | jca/SymmetricModesTest.java:54:31:54:46 | Key | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | Mode | jca/SymmetricModesTest.java:57:44:57:62 | ModeOfOperation | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | Padding | jca/SymmetricModesTest.java:57:44:57:62 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:58:39:58:49 | Key | Source | jca/SymmetricModesTest.java:50:33:50:48 | Key | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | Algorithm | jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | Input | jca/SymmetricModesTest.java:59:41:59:49 | Message | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | Key | jca/SymmetricModesTest.java:58:39:58:49 | Key | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | Nonce | jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | Output | jca/SymmetricModesTest.java:59:29:59:50 | KeyOperationOutput | +| jca/SymmetricModesTest.java:59:41:59:49 | Message | Source | jca/SymmetricModesTest.java:54:31:54:46 | Key | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | Mode | jca/SymmetricModesTest.java:79:44:79:63 | ModeOfOperation | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | Padding | jca/SymmetricModesTest.java:79:44:79:63 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:83:42:83:44 | Key | Source | jca/SymmetricModesTest.java:78:43:78:55 | Parameter | +| jca/SymmetricModesTest.java:83:47:83:52 | Nonce | Source | jca/SymmetricModesTest.java:81:38:81:39 | RandomNumberGeneration | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | Algorithm | jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | Input | jca/SymmetricModesTest.java:84:44:84:52 | Message | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | Key | jca/SymmetricModesTest.java:83:42:83:44 | Key | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | Nonce | jca/SymmetricModesTest.java:83:47:83:52 | Nonce | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | Output | jca/SymmetricModesTest.java:84:29:84:53 | KeyOperationOutput | +| jca/SymmetricModesTest.java:84:44:84:52 | Message | Source | jca/SymmetricModesTest.java:78:58:78:73 | Parameter | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | Mode | jca/SymmetricModesTest.java:105:44:105:63 | ModeOfOperation | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | Padding | jca/SymmetricModesTest.java:105:44:105:63 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:109:42:109:44 | Key | Source | jca/SymmetricModesTest.java:104:45:104:57 | Parameter | +| jca/SymmetricModesTest.java:109:47:109:52 | Nonce | Source | jca/SymmetricModesTest.java:109:47:109:52 | Nonce | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | Algorithm | jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | Input | jca/SymmetricModesTest.java:110:44:110:52 | Message | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | Key | jca/SymmetricModesTest.java:109:42:109:44 | Key | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | Nonce | jca/SymmetricModesTest.java:109:47:109:52 | Nonce | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | Output | jca/SymmetricModesTest.java:110:29:110:53 | KeyOperationOutput | +| jca/SymmetricModesTest.java:110:44:110:52 | Message | Source | jca/SymmetricModesTest.java:104:60:104:75 | Parameter | +| jca/SymmetricModesTest.java:129:16:129:31 | KeyGeneration | Algorithm | jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:129:16:129:31 | KeyGeneration | Output | jca/SymmetricModesTest.java:129:16:129:31 | Key | +| jca/UniversalFlowTest.java:27:25:27:44 | KeyGeneration | Algorithm | jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | +| jca/UniversalFlowTest.java:27:25:27:44 | KeyGeneration | Algorithm | jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | +| jca/UniversalFlowTest.java:27:25:27:44 | KeyGeneration | Output | jca/UniversalFlowTest.java:27:25:27:44 | Key | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | Mode | jca/UniversalFlowTest.java:28:29:28:47 | ModeOfOperation | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | Padding | jca/UniversalFlowTest.java:28:29:28:47 | PaddingAlgorithm | +| jca/UniversalFlowTest.java:33:42:33:44 | Key | Source | jca/UniversalFlowTest.java:27:25:27:44 | Key | +| jca/UniversalFlowTest.java:33:47:33:53 | Nonce | Source | jca/UniversalFlowTest.java:31:38:31:39 | RandomNumberGeneration | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | Algorithm | jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | Input | jca/UniversalFlowTest.java:34:47:34:73 | Message | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | Key | jca/UniversalFlowTest.java:33:42:33:44 | Key | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | Nonce | jca/UniversalFlowTest.java:33:47:33:53 | Nonce | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | Output | jca/UniversalFlowTest.java:34:32:34:74 | KeyOperationOutput | +| jca/UniversalFlowTest.java:34:47:34:73 | Message | Source | jca/UniversalFlowTest.java:34:47:34:62 | Constant | diff --git a/java/ql/test/experimental/library-tests/quantum/node_edges.ql b/java/ql/test/experimental/library-tests/quantum/node_edges.ql new file mode 100644 index 00000000000..4c9afb6c8ff --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/node_edges.ql @@ -0,0 +1,5 @@ +import java +import experimental.quantum.Language + +from Crypto::NodeBase n, string key +select n, key, n.getChild(key) diff --git a/java/ql/test/experimental/library-tests/quantum/node_properties.expected b/java/ql/test/experimental/library-tests/quantum/node_properties.expected new file mode 100644 index 00000000000..20c7276cc4f --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/node_properties.expected @@ -0,0 +1,1765 @@ +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | KeySize | Constant:128 | jca/AesWrapAndPBEWith.java:62:17:62:19 | jca/AesWrapAndPBEWith.java:62:17:62:19 | +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/AesWrapAndPBEWith.java:59:17:59:19 | jca/AesWrapAndPBEWith.java:59:17:59:19 | +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:58:52:58:56 | jca/AesWrapAndPBEWith.java:58:52:58:56 | +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | RawName | AES | jca/AesWrapAndPBEWith.java:58:52:58:56 | jca/AesWrapAndPBEWith.java:58:52:58:56 | +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:58:52:58:56 | jca/AesWrapAndPBEWith.java:58:52:58:56 | +| jca/AesWrapAndPBEWith.java:59:17:59:19 | Constant | Description | 256 | jca/AesWrapAndPBEWith.java:59:17:59:19 | jca/AesWrapAndPBEWith.java:59:17:59:19 | +| jca/AesWrapAndPBEWith.java:60:33:60:48 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:60:33:60:48 | jca/AesWrapAndPBEWith.java:60:33:60:48 | +| jca/AesWrapAndPBEWith.java:62:17:62:19 | Constant | Description | 128 | jca/AesWrapAndPBEWith.java:62:17:62:19 | jca/AesWrapAndPBEWith.java:62:17:62:19 | +| jca/AesWrapAndPBEWith.java:63:31:63:46 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:63:31:63:46 | jca/AesWrapAndPBEWith.java:63:31:63:46 | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:65:44:65:52 | jca/AesWrapAndPBEWith.java:65:44:65:52 | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | RawName | AESWrap | jca/AesWrapAndPBEWith.java:65:44:65:52 | jca/AesWrapAndPBEWith.java:65:44:65:52 | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:65:44:65:52 | jca/AesWrapAndPBEWith.java:65:44:65:52 | +| jca/AesWrapAndPBEWith.java:66:39:66:49 | Key | KeyType | Unknown | jca/AesWrapAndPBEWith.java:66:39:66:49 | jca/AesWrapAndPBEWith.java:66:39:66:49 | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | KeyOperationSubtype | Wrap | jca/AesWrapAndPBEWith.java:67:29:67:50 | jca/AesWrapAndPBEWith.java:67:29:67:50 | +| jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | KeySize | Constant:128 | jca/AesWrapAndPBEWith.java:84:17:84:19 | jca/AesWrapAndPBEWith.java:84:17:84:19 | +| jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:83:52:83:56 | jca/AesWrapAndPBEWith.java:83:52:83:56 | +| jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | RawName | AES | jca/AesWrapAndPBEWith.java:83:52:83:56 | jca/AesWrapAndPBEWith.java:83:52:83:56 | +| jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:83:52:83:56 | jca/AesWrapAndPBEWith.java:83:52:83:56 | +| jca/AesWrapAndPBEWith.java:84:17:84:19 | Constant | Description | 128 | jca/AesWrapAndPBEWith.java:84:17:84:19 | jca/AesWrapAndPBEWith.java:84:17:84:19 | +| jca/AesWrapAndPBEWith.java:85:31:85:46 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:85:31:85:46 | jca/AesWrapAndPBEWith.java:85:31:85:46 | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:87:44:87:52 | jca/AesWrapAndPBEWith.java:87:44:87:52 | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | RawName | AESWrap | jca/AesWrapAndPBEWith.java:87:44:87:52 | jca/AesWrapAndPBEWith.java:87:44:87:52 | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:87:44:87:52 | jca/AesWrapAndPBEWith.java:87:44:87:52 | +| jca/AesWrapAndPBEWith.java:88:39:88:49 | Key | KeyType | Unknown | jca/AesWrapAndPBEWith.java:88:39:88:49 | jca/AesWrapAndPBEWith.java:88:39:88:49 | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | KeyOperationSubtype | Wrap | jca/AesWrapAndPBEWith.java:89:29:89:50 | jca/AesWrapAndPBEWith.java:89:29:89:50 | +| jca/AesWrapAndPBEWith.java:106:34:106:37 | Constant | Description | 0x00 | jca/AesWrapAndPBEWith.java:106:34:106:37 | jca/AesWrapAndPBEWith.java:106:34:106:37 | +| jca/AesWrapAndPBEWith.java:107:72:107:75 | Constant | Description | 1000 | jca/AesWrapAndPBEWith.java:107:72:107:75 | jca/AesWrapAndPBEWith.java:107:72:107:75 | +| jca/AesWrapAndPBEWith.java:107:78:107:79 | Constant | Description | 64 | jca/AesWrapAndPBEWith.java:107:78:107:79 | jca/AesWrapAndPBEWith.java:107:78:107:79 | +| jca/AesWrapAndPBEWith.java:108:65:108:82 | KeyDerivationAlgorithm | Name | PBEWithMD5AndDES | jca/AesWrapAndPBEWith.java:108:65:108:82 | jca/AesWrapAndPBEWith.java:108:65:108:82 | +| jca/AesWrapAndPBEWith.java:108:65:108:82 | KeyDerivationAlgorithm | RawName | PBEWithMD5AndDES | jca/AesWrapAndPBEWith.java:108:65:108:82 | jca/AesWrapAndPBEWith.java:108:65:108:82 | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:109:27:109:54 | jca/AesWrapAndPBEWith.java:109:27:109:54 | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | Iterations | Constant:1000 | jca/AesWrapAndPBEWith.java:107:72:107:75 | jca/AesWrapAndPBEWith.java:107:72:107:75 | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | KeySize | Constant:64 | jca/AesWrapAndPBEWith.java:107:78:107:79 | jca/AesWrapAndPBEWith.java:107:78:107:79 | +| jca/AesWrapAndPBEWith.java:122:38:122:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AesWrapAndPBEWith.java:122:38:122:41 | jca/AesWrapAndPBEWith.java:122:38:122:41 | +| jca/AesWrapAndPBEWith.java:123:72:123:76 | Constant | Description | 10000 | jca/AesWrapAndPBEWith.java:123:72:123:76 | jca/AesWrapAndPBEWith.java:123:72:123:76 | +| jca/AesWrapAndPBEWith.java:123:79:123:81 | Constant | Description | 256 | jca/AesWrapAndPBEWith.java:123:79:123:81 | jca/AesWrapAndPBEWith.java:123:79:123:81 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HMACAlgorithm | Name | HMAC | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HashAlgorithm | DigestSize | 256 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HashAlgorithm | Name | SHA2 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/AesWrapAndPBEWith.java:124:65:124:86 | jca/AesWrapAndPBEWith.java:124:65:124:86 | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:125:27:125:54 | jca/AesWrapAndPBEWith.java:125:27:125:54 | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | Iterations | Constant:10000 | jca/AesWrapAndPBEWith.java:123:72:123:76 | jca/AesWrapAndPBEWith.java:123:72:123:76 | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | KeySize | Constant:256 | jca/AesWrapAndPBEWith.java:123:79:123:81 | jca/AesWrapAndPBEWith.java:123:79:123:81 | +| jca/AesWrapAndPBEWith.java:140:38:140:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AesWrapAndPBEWith.java:140:38:140:41 | jca/AesWrapAndPBEWith.java:140:38:140:41 | +| jca/AesWrapAndPBEWith.java:141:72:141:76 | Constant | Description | 10000 | jca/AesWrapAndPBEWith.java:141:72:141:76 | jca/AesWrapAndPBEWith.java:141:72:141:76 | +| jca/AesWrapAndPBEWith.java:141:79:141:81 | Constant | Description | 128 | jca/AesWrapAndPBEWith.java:141:79:141:81 | jca/AesWrapAndPBEWith.java:141:79:141:81 | +| jca/AesWrapAndPBEWith.java:142:65:142:98 | KeyDerivationAlgorithm | Name | PBEWithSHA256And128BitAES-CBC-BC | jca/AesWrapAndPBEWith.java:142:65:142:98 | jca/AesWrapAndPBEWith.java:142:65:142:98 | +| jca/AesWrapAndPBEWith.java:142:65:142:98 | KeyDerivationAlgorithm | RawName | PBEWithSHA256And128BitAES-CBC-BC | jca/AesWrapAndPBEWith.java:142:65:142:98 | jca/AesWrapAndPBEWith.java:142:65:142:98 | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:143:28:143:55 | jca/AesWrapAndPBEWith.java:143:28:143:55 | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | Iterations | Constant:10000 | jca/AesWrapAndPBEWith.java:141:72:141:76 | jca/AesWrapAndPBEWith.java:141:72:141:76 | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | KeySize | Constant:128 | jca/AesWrapAndPBEWith.java:141:79:141:81 | jca/AesWrapAndPBEWith.java:141:79:141:81 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | RawName | AES/CBC/PKCS5Padding | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | ModeOfOperation | Name | CBC | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | ModeOfOperation | RawName | CBC | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | PaddingAlgorithm | Name | PKCS7 | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/AesWrapAndPBEWith.java:146:44:146:65 | jca/AesWrapAndPBEWith.java:146:44:146:65 | +| jca/AesWrapAndPBEWith.java:148:38:148:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AesWrapAndPBEWith.java:148:38:148:39 | jca/AesWrapAndPBEWith.java:148:38:148:39 | +| jca/AesWrapAndPBEWith.java:150:42:150:47 | Key | KeyType | Unknown | jca/AesWrapAndPBEWith.java:150:42:150:47 | jca/AesWrapAndPBEWith.java:150:42:150:47 | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AesWrapAndPBEWith.java:151:29:151:64 | jca/AesWrapAndPBEWith.java:151:29:151:64 | +| jca/AesWrapAndPBEWith.java:167:38:167:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AesWrapAndPBEWith.java:167:38:167:41 | jca/AesWrapAndPBEWith.java:167:38:167:41 | +| jca/AesWrapAndPBEWith.java:168:72:168:76 | Constant | Description | 10000 | jca/AesWrapAndPBEWith.java:168:72:168:76 | jca/AesWrapAndPBEWith.java:168:72:168:76 | +| jca/AesWrapAndPBEWith.java:168:79:168:81 | Constant | Description | 128 | jca/AesWrapAndPBEWith.java:168:79:168:81 | jca/AesWrapAndPBEWith.java:168:79:168:81 | +| jca/AesWrapAndPBEWith.java:169:65:169:96 | KeyDerivationAlgorithm | Name | PBEWithSHA1And128BitAES-CBC-BC | jca/AesWrapAndPBEWith.java:169:65:169:96 | jca/AesWrapAndPBEWith.java:169:65:169:96 | +| jca/AesWrapAndPBEWith.java:169:65:169:96 | KeyDerivationAlgorithm | RawName | PBEWithSHA1And128BitAES-CBC-BC | jca/AesWrapAndPBEWith.java:169:65:169:96 | jca/AesWrapAndPBEWith.java:169:65:169:96 | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | Key | KeyType | Symmetric | jca/AesWrapAndPBEWith.java:170:28:170:55 | jca/AesWrapAndPBEWith.java:170:28:170:55 | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | Iterations | Constant:10000 | jca/AesWrapAndPBEWith.java:168:72:168:76 | jca/AesWrapAndPBEWith.java:168:72:168:76 | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | KeySize | Constant:128 | jca/AesWrapAndPBEWith.java:168:79:168:81 | jca/AesWrapAndPBEWith.java:168:79:168:81 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | Name | AES | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | RawName | AES/CBC/PKCS5Padding | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | Structure | Block | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | ModeOfOperation | Name | CBC | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | ModeOfOperation | RawName | CBC | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | PaddingAlgorithm | Name | PKCS7 | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/AesWrapAndPBEWith.java:173:44:173:65 | jca/AesWrapAndPBEWith.java:173:44:173:65 | +| jca/AesWrapAndPBEWith.java:175:38:175:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AesWrapAndPBEWith.java:175:38:175:39 | jca/AesWrapAndPBEWith.java:175:38:175:39 | +| jca/AesWrapAndPBEWith.java:177:42:177:47 | Key | KeyType | Unknown | jca/AesWrapAndPBEWith.java:177:42:177:47 | jca/AesWrapAndPBEWith.java:177:42:177:47 | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AesWrapAndPBEWith.java:178:29:178:64 | jca/AesWrapAndPBEWith.java:178:29:178:64 | +| jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | Description | password | jca/AesWrapAndPBEWith.java:200:55:200:69 | jca/AesWrapAndPBEWith.java:200:55:200:69 | +| jca/AesWrapAndPBEWith.java:200:72:200:87 | Parameter | Description | plaintext | jca/AesWrapAndPBEWith.java:200:72:200:87 | jca/AesWrapAndPBEWith.java:200:72:200:87 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | CurveType | SEC | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | KeySize | 256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | Name | secp256r1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | ParsedName | secp256r1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | RawName | secp256r1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | KeyType | Asymmetric | jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | KeyAgreementAlgorithm | Name | X25519 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | KeyAgreementAlgorithm | RawName | X25519 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:95:24:95:26 | Constant | Description | 255 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:95:24:95:26 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:95:24:95:26 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | Key | KeyType | Asymmetric | jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | HashAlgorithm | DigestSize | 256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | HashAlgorithm | Name | SHA2 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | HashAlgorithm | RawName | SHA-256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | Name | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | RawName | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | Constant | Description | 2048 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | Key | KeyType | Asymmetric | jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | KeySize | Constant:1024 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | Name | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | RawName | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | Constant | Description | 1024 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | Key | KeyType | Asymmetric | jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | HashAlgorithm | DigestSize | 256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | HashAlgorithm | Name | SHA2 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | Name | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | ModeOfOperation | Name | ECB | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | ModeOfOperation | RawName | ECB | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | Name | OAEP | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | KeyOperationSubtype | Wrap | jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | Name | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | Structure | Block | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | ModeOfOperation | Name | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | ModeOfOperation | RawName | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | PaddingAlgorithm | Name | UnknownPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | PaddingAlgorithm | RawName | NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | Name | RSA | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | RawName | RSA/ECB/PKCS1Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | ModeOfOperation | Name | ECB | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | ModeOfOperation | RawName | ECB | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | PaddingAlgorithm | Name | UnknownPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | PaddingAlgorithm | RawName | PKCS1Padding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | KeyOperationSubtype | Wrap | jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | Name | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | Structure | Block | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | ModeOfOperation | Name | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | ModeOfOperation | RawName | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | PaddingAlgorithm | Name | UnknownPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | PaddingAlgorithm | RawName | NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | KeyAgreementAlgorithm | Name | ECDH | jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | KeyAgreementAlgorithm | RawName | ECDH | jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | Name | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | Structure | Block | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | ModeOfOperation | Name | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | ModeOfOperation | RawName | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | PaddingAlgorithm | Name | UnknownPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | PaddingAlgorithm | RawName | NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | KeyAgreementAlgorithm | Name | ECDH | jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | KeyAgreementAlgorithm | RawName | ECDH | jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | Name | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | Structure | Block | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | ModeOfOperation | Name | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | ModeOfOperation | RawName | GCM | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | PaddingAlgorithm | Name | UnknownPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | PaddingAlgorithm | RawName | NoPadding | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | Description | plaintext | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HMACAlgorithm | Name | HMAC | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | DigestSize | 256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | Name | SHA2 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | RawName | HmacSHA256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | KeyOperationSubtype | Mac | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HMACAlgorithm | Name | HMAC | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HMACAlgorithm | RawName | HmacSHA1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | DigestSize | 160 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | Name | SHA1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | RawName | HmacSHA1 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | Key | KeyType | Unknown | jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | KeyOperationSubtype | Mac | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | Name | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | RawName | AES | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | Structure | Block | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | Constant | Description | 256 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | KeyType | Symmetric | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | ModeOfOperation | Name | GCM | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | ModeOfOperation | RawName | GCM | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | PaddingAlgorithm | Name | UnknownPadding | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:19:44:19:62 | PaddingAlgorithm | RawName | NoPadding | jca/ChainedEncryptionTest.java:19:44:19:62 | jca/ChainedEncryptionTest.java:19:44:19:62 | +| jca/ChainedEncryptionTest.java:21:38:21:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/ChainedEncryptionTest.java:21:38:21:39 | jca/ChainedEncryptionTest.java:21:38:21:39 | +| jca/ChainedEncryptionTest.java:23:42:23:44 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:23:42:23:44 | jca/ChainedEncryptionTest.java:23:42:23:44 | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/ChainedEncryptionTest.java:24:29:24:53 | jca/ChainedEncryptionTest.java:24:29:24:53 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | ModeOfOperation | Name | GCM | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | ModeOfOperation | RawName | GCM | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | PaddingAlgorithm | Name | UnknownPadding | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:32:44:32:62 | PaddingAlgorithm | RawName | NoPadding | jca/ChainedEncryptionTest.java:32:44:32:62 | jca/ChainedEncryptionTest.java:32:44:32:62 | +| jca/ChainedEncryptionTest.java:34:42:34:44 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:34:42:34:44 | jca/ChainedEncryptionTest.java:34:42:34:44 | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/ChainedEncryptionTest.java:35:16:35:41 | jca/ChainedEncryptionTest.java:35:16:35:41 | +| jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | Name | Unknown | jca/ChainedEncryptionTest.java:40:44:40:62 | jca/ChainedEncryptionTest.java:40:44:40:62 | +| jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/ChainedEncryptionTest.java:40:44:40:62 | jca/ChainedEncryptionTest.java:40:44:40:62 | +| jca/ChainedEncryptionTest.java:42:38:42:42 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/ChainedEncryptionTest.java:42:38:42:42 | jca/ChainedEncryptionTest.java:42:38:42:42 | +| jca/ChainedEncryptionTest.java:43:42:43:44 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:43:42:43:44 | jca/ChainedEncryptionTest.java:43:42:43:44 | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/ChainedEncryptionTest.java:44:29:44:53 | jca/ChainedEncryptionTest.java:44:29:44:53 | +| jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | Name | Unknown | jca/ChainedEncryptionTest.java:52:44:52:62 | jca/ChainedEncryptionTest.java:52:44:52:62 | +| jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/ChainedEncryptionTest.java:52:44:52:62 | jca/ChainedEncryptionTest.java:52:44:52:62 | +| jca/ChainedEncryptionTest.java:53:42:53:44 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:53:42:53:44 | jca/ChainedEncryptionTest.java:53:42:53:44 | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/ChainedEncryptionTest.java:54:16:54:41 | jca/ChainedEncryptionTest.java:54:16:54:41 | +| jca/ChainedEncryptionTest.java:75:46:75:61 | Parameter | Description | plaintext | jca/ChainedEncryptionTest.java:75:46:75:61 | jca/ChainedEncryptionTest.java:75:46:75:61 | +| jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/ChainedEncryptionTest.java:80:21:80:23 | jca/ChainedEncryptionTest.java:80:21:80:23 | +| jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:79:56:79:60 | jca/ChainedEncryptionTest.java:79:56:79:60 | +| jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | RawName | AES | jca/ChainedEncryptionTest.java:79:56:79:60 | jca/ChainedEncryptionTest.java:79:56:79:60 | +| jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:79:56:79:60 | jca/ChainedEncryptionTest.java:79:56:79:60 | +| jca/ChainedEncryptionTest.java:80:21:80:23 | Constant | Description | 256 | jca/ChainedEncryptionTest.java:80:21:80:23 | jca/ChainedEncryptionTest.java:80:21:80:23 | +| jca/ChainedEncryptionTest.java:81:30:81:49 | Key | KeyType | Symmetric | jca/ChainedEncryptionTest.java:81:30:81:49 | jca/ChainedEncryptionTest.java:81:30:81:49 | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | KeySize | 256 | jca/ChainedEncryptionTest.java:83:59:83:68 | jca/ChainedEncryptionTest.java:83:59:83:68 | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/ChainedEncryptionTest.java:84:24:84:26 | jca/ChainedEncryptionTest.java:84:24:84:26 | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | Name | ChaCha20 | jca/ChainedEncryptionTest.java:83:59:83:68 | jca/ChainedEncryptionTest.java:83:59:83:68 | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | RawName | ChaCha20 | jca/ChainedEncryptionTest.java:83:59:83:68 | jca/ChainedEncryptionTest.java:83:59:83:68 | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | Structure | Stream | jca/ChainedEncryptionTest.java:83:59:83:68 | jca/ChainedEncryptionTest.java:83:59:83:68 | +| jca/ChainedEncryptionTest.java:84:24:84:26 | Constant | Description | 256 | jca/ChainedEncryptionTest.java:84:24:84:26 | jca/ChainedEncryptionTest.java:84:24:84:26 | +| jca/ChainedEncryptionTest.java:85:30:85:52 | Key | KeyType | Symmetric | jca/ChainedEncryptionTest.java:85:30:85:52 | jca/ChainedEncryptionTest.java:85:30:85:52 | +| jca/ChainedEncryptionTest.java:89:38:89:42 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/ChainedEncryptionTest.java:89:38:89:42 | jca/ChainedEncryptionTest.java:89:38:89:42 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | ModeOfOperation | Name | GCM | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | ModeOfOperation | RawName | GCM | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | PaddingAlgorithm | Name | UnknownPadding | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:90:47:90:65 | PaddingAlgorithm | RawName | NoPadding | jca/ChainedEncryptionTest.java:90:47:90:65 | jca/ChainedEncryptionTest.java:90:47:90:65 | +| jca/ChainedEncryptionTest.java:92:45:92:52 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:92:45:92:52 | jca/ChainedEncryptionTest.java:92:45:92:52 | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/ChainedEncryptionTest.java:93:34:93:62 | jca/ChainedEncryptionTest.java:93:34:93:62 | +| jca/ChainedEncryptionTest.java:97:38:97:48 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/ChainedEncryptionTest.java:97:38:97:48 | jca/ChainedEncryptionTest.java:97:38:97:48 | +| jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | Name | Unknown | jca/ChainedEncryptionTest.java:98:50:98:68 | jca/ChainedEncryptionTest.java:98:50:98:68 | +| jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/ChainedEncryptionTest.java:98:50:98:68 | jca/ChainedEncryptionTest.java:98:50:98:68 | +| jca/ChainedEncryptionTest.java:99:48:99:55 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:99:48:99:55 | jca/ChainedEncryptionTest.java:99:48:99:55 | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/ChainedEncryptionTest.java:100:34:100:70 | jca/ChainedEncryptionTest.java:100:34:100:70 | +| jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | Name | Unknown | jca/ChainedEncryptionTest.java:103:47:103:65 | jca/ChainedEncryptionTest.java:103:47:103:65 | +| jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/ChainedEncryptionTest.java:103:47:103:65 | jca/ChainedEncryptionTest.java:103:47:103:65 | +| jca/ChainedEncryptionTest.java:104:45:104:52 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:104:45:104:52 | jca/ChainedEncryptionTest.java:104:45:104:52 | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/ChainedEncryptionTest.java:105:43:105:76 | jca/ChainedEncryptionTest.java:105:43:105:76 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | ModeOfOperation | Name | GCM | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | ModeOfOperation | RawName | GCM | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | PaddingAlgorithm | Name | UnknownPadding | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:108:44:108:62 | PaddingAlgorithm | RawName | NoPadding | jca/ChainedEncryptionTest.java:108:44:108:62 | jca/ChainedEncryptionTest.java:108:44:108:62 | +| jca/ChainedEncryptionTest.java:109:42:109:49 | Key | KeyType | Unknown | jca/ChainedEncryptionTest.java:109:42:109:49 | jca/ChainedEncryptionTest.java:109:42:109:49 | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/ChainedEncryptionTest.java:110:37:110:76 | jca/ChainedEncryptionTest.java:110:37:110:76 | +| jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/ChainedEncryptionTest.java:118:21:118:23 | jca/ChainedEncryptionTest.java:118:21:118:23 | +| jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | Name | AES | jca/ChainedEncryptionTest.java:117:56:117:60 | jca/ChainedEncryptionTest.java:117:56:117:60 | +| jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | RawName | AES | jca/ChainedEncryptionTest.java:117:56:117:60 | jca/ChainedEncryptionTest.java:117:56:117:60 | +| jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | Structure | Block | jca/ChainedEncryptionTest.java:117:56:117:60 | jca/ChainedEncryptionTest.java:117:56:117:60 | +| jca/ChainedEncryptionTest.java:118:21:118:23 | Constant | Description | 256 | jca/ChainedEncryptionTest.java:118:21:118:23 | jca/ChainedEncryptionTest.java:118:21:118:23 | +| jca/ChainedEncryptionTest.java:119:28:119:47 | Key | KeyType | Symmetric | jca/ChainedEncryptionTest.java:119:28:119:47 | jca/ChainedEncryptionTest.java:119:28:119:47 | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | KeySize | 256 | jca/ChainedEncryptionTest.java:122:59:122:68 | jca/ChainedEncryptionTest.java:122:59:122:68 | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/ChainedEncryptionTest.java:123:24:123:26 | jca/ChainedEncryptionTest.java:123:24:123:26 | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | Name | ChaCha20 | jca/ChainedEncryptionTest.java:122:59:122:68 | jca/ChainedEncryptionTest.java:122:59:122:68 | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | RawName | ChaCha20 | jca/ChainedEncryptionTest.java:122:59:122:68 | jca/ChainedEncryptionTest.java:122:59:122:68 | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | Structure | Stream | jca/ChainedEncryptionTest.java:122:59:122:68 | jca/ChainedEncryptionTest.java:122:59:122:68 | +| jca/ChainedEncryptionTest.java:123:24:123:26 | Constant | Description | 256 | jca/ChainedEncryptionTest.java:123:24:123:26 | jca/ChainedEncryptionTest.java:123:24:123:26 | +| jca/ChainedEncryptionTest.java:124:31:124:53 | Key | KeyType | Symmetric | jca/ChainedEncryptionTest.java:124:31:124:53 | jca/ChainedEncryptionTest.java:124:31:124:53 | +| jca/ChainedEncryptionTest.java:126:31:126:57 | Constant | Description | "This is a secret message." | jca/ChainedEncryptionTest.java:126:31:126:57 | jca/ChainedEncryptionTest.java:126:31:126:57 | +| jca/Digest.java:54:58:54:66 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:54:58:54:66 | jca/Digest.java:54:58:54:66 | +| jca/Digest.java:54:58:54:66 | HashAlgorithm | Name | SHA2 | jca/Digest.java:54:58:54:66 | jca/Digest.java:54:58:54:66 | +| jca/Digest.java:54:58:54:66 | HashAlgorithm | RawName | SHA-256 | jca/Digest.java:54:58:54:66 | jca/Digest.java:54:58:54:66 | +| jca/Digest.java:55:37:55:54 | Constant | Description | "Simple Test Data" | jca/Digest.java:55:37:55:54 | jca/Digest.java:55:37:55:54 | +| jca/Digest.java:64:61:64:65 | HashAlgorithm | DigestSize | 128 | jca/Digest.java:64:61:64:65 | jca/Digest.java:64:61:64:65 | +| jca/Digest.java:64:61:64:65 | HashAlgorithm | Name | MD5 | jca/Digest.java:64:61:64:65 | jca/Digest.java:64:61:64:65 | +| jca/Digest.java:64:61:64:65 | HashAlgorithm | RawName | MD5 | jca/Digest.java:64:61:64:65 | jca/Digest.java:64:61:64:65 | +| jca/Digest.java:65:40:65:58 | Constant | Description | "Weak Hash Example" | jca/Digest.java:65:40:65:58 | jca/Digest.java:65:40:65:58 | +| jca/Digest.java:73:49:73:63 | Parameter | Description | password | jca/Digest.java:73:49:73:63 | jca/Digest.java:73:49:73:63 | +| jca/Digest.java:74:64:74:72 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:74:64:74:72 | jca/Digest.java:74:64:74:72 | +| jca/Digest.java:74:64:74:72 | HashAlgorithm | Name | SHA2 | jca/Digest.java:74:64:74:72 | jca/Digest.java:74:64:74:72 | +| jca/Digest.java:74:64:74:72 | HashAlgorithm | RawName | SHA-256 | jca/Digest.java:74:64:74:72 | jca/Digest.java:74:64:74:72 | +| jca/Digest.java:83:37:83:51 | Parameter | Description | password | jca/Digest.java:83:37:83:51 | jca/Digest.java:83:37:83:51 | +| jca/Digest.java:85:58:85:66 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:85:58:85:66 | jca/Digest.java:85:58:85:66 | +| jca/Digest.java:85:58:85:66 | HashAlgorithm | Name | SHA2 | jca/Digest.java:85:58:85:66 | jca/Digest.java:85:58:85:66 | +| jca/Digest.java:85:58:85:66 | HashAlgorithm | RawName | SHA-256 | jca/Digest.java:85:58:85:66 | jca/Digest.java:85:58:85:66 | +| jca/Digest.java:95:37:95:51 | Parameter | Description | password | jca/Digest.java:95:37:95:51 | jca/Digest.java:95:37:95:51 | +| jca/Digest.java:97:72:97:76 | Constant | Description | 10000 | jca/Digest.java:97:72:97:76 | jca/Digest.java:97:72:97:76 | +| jca/Digest.java:97:79:97:81 | Constant | Description | 256 | jca/Digest.java:97:79:97:81 | jca/Digest.java:97:79:97:81 | +| jca/Digest.java:98:65:98:86 | HMACAlgorithm | Name | HMAC | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | HashAlgorithm | Name | SHA2 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:98:65:98:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:98:65:98:86 | jca/Digest.java:98:65:98:86 | +| jca/Digest.java:99:23:99:50 | Key | KeyType | Symmetric | jca/Digest.java:99:23:99:50 | jca/Digest.java:99:23:99:50 | +| jca/Digest.java:99:23:99:50 | KeyDerivation | Iterations | Constant:10000 | jca/Digest.java:97:72:97:76 | jca/Digest.java:97:72:97:76 | +| jca/Digest.java:99:23:99:50 | KeyDerivation | KeySize | Constant:256 | jca/Digest.java:97:79:97:81 | jca/Digest.java:97:79:97:81 | +| jca/Digest.java:107:40:107:51 | Parameter | Description | input | jca/Digest.java:107:40:107:51 | jca/Digest.java:107:40:107:51 | +| jca/Digest.java:108:62:108:68 | HashAlgorithm | DigestSize | 160 | jca/Digest.java:108:62:108:68 | jca/Digest.java:108:62:108:68 | +| jca/Digest.java:108:62:108:68 | HashAlgorithm | Name | SHA1 | jca/Digest.java:108:62:108:68 | jca/Digest.java:108:62:108:68 | +| jca/Digest.java:108:62:108:68 | HashAlgorithm | RawName | SHA-1 | jca/Digest.java:108:62:108:68 | jca/Digest.java:108:62:108:68 | +| jca/Digest.java:117:35:117:46 | Parameter | Description | input | jca/Digest.java:117:35:117:46 | jca/Digest.java:117:35:117:46 | +| jca/Digest.java:117:49:117:58 | Parameter | Description | key | jca/Digest.java:117:49:117:58 | jca/Digest.java:117:49:117:58 | +| jca/Digest.java:118:36:118:47 | HMACAlgorithm | Name | HMAC | jca/Digest.java:118:36:118:47 | jca/Digest.java:118:36:118:47 | +| jca/Digest.java:118:36:118:47 | HMACAlgorithm | RawName | HmacSHA256 | jca/Digest.java:118:36:118:47 | jca/Digest.java:118:36:118:47 | +| jca/Digest.java:118:36:118:47 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:118:36:118:47 | jca/Digest.java:118:36:118:47 | +| jca/Digest.java:118:36:118:47 | HashAlgorithm | Name | SHA2 | jca/Digest.java:118:36:118:47 | jca/Digest.java:118:36:118:47 | +| jca/Digest.java:118:36:118:47 | HashAlgorithm | RawName | HmacSHA256 | jca/Digest.java:118:36:118:47 | jca/Digest.java:118:36:118:47 | +| jca/Digest.java:120:19:120:27 | Key | KeyType | Unknown | jca/Digest.java:120:19:120:27 | jca/Digest.java:120:19:120:27 | +| jca/Digest.java:121:23:121:52 | MACOperation | KeyOperationSubtype | Mac | jca/Digest.java:121:23:121:52 | jca/Digest.java:121:23:121:52 | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | Name | AES | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | Structure | Block | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | ModeOfOperation | Name | GCM | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | ModeOfOperation | RawName | GCM | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:140:44:140:62 | PaddingAlgorithm | RawName | NoPadding | jca/Digest.java:140:44:140:62 | jca/Digest.java:140:44:140:62 | +| jca/Digest.java:141:42:141:44 | Key | KeyType | Unknown | jca/Digest.java:141:42:141:44 | jca/Digest.java:141:42:141:44 | +| jca/Digest.java:142:32:142:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Digest.java:142:32:142:74 | jca/Digest.java:142:32:142:74 | +| jca/Digest.java:142:47:142:62 | Constant | Description | "Sensitive Data" | jca/Digest.java:142:47:142:62 | jca/Digest.java:142:47:142:62 | +| jca/Digest.java:155:39:155:51 | Parameter | Description | digest | jca/Digest.java:155:39:155:51 | jca/Digest.java:155:39:155:51 | +| jca/Digest.java:171:50:171:62 | Parameter | Description | digest | jca/Digest.java:171:50:171:62 | jca/Digest.java:171:50:171:62 | +| jca/Digest.java:176:80:176:84 | Constant | Description | 10000 | jca/Digest.java:176:80:176:84 | jca/Digest.java:176:80:176:84 | +| jca/Digest.java:176:87:176:89 | Constant | Description | 256 | jca/Digest.java:176:87:176:89 | jca/Digest.java:176:87:176:89 | +| jca/Digest.java:177:65:177:86 | HMACAlgorithm | Name | HMAC | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | HashAlgorithm | Name | SHA2 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:177:65:177:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Digest.java:177:65:177:86 | jca/Digest.java:177:65:177:86 | +| jca/Digest.java:178:30:178:57 | Key | KeyType | Symmetric | jca/Digest.java:178:30:178:57 | jca/Digest.java:178:30:178:57 | +| jca/Digest.java:178:30:178:57 | KeyDerivation | Iterations | Constant:10000 | jca/Digest.java:176:80:176:84 | jca/Digest.java:176:80:176:84 | +| jca/Digest.java:178:30:178:57 | KeyDerivation | KeySize | Constant:256 | jca/Digest.java:176:87:176:89 | jca/Digest.java:176:87:176:89 | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | Name | AES | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | Structure | Block | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | ModeOfOperation | Name | GCM | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | ModeOfOperation | RawName | GCM | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:186:44:186:62 | PaddingAlgorithm | RawName | NoPadding | jca/Digest.java:186:44:186:62 | jca/Digest.java:186:44:186:62 | +| jca/Digest.java:187:42:187:54 | Key | KeyType | Unknown | jca/Digest.java:187:42:187:54 | jca/Digest.java:187:42:187:54 | +| jca/Digest.java:188:29:188:78 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Digest.java:188:29:188:78 | jca/Digest.java:188:29:188:78 | +| jca/Digest.java:188:44:188:66 | Constant | Description | "Further Use Test Data" | jca/Digest.java:188:44:188:66 | jca/Digest.java:188:44:188:66 | +| jca/Digest.java:191:35:191:46 | HMACAlgorithm | Name | HMAC | jca/Digest.java:191:35:191:46 | jca/Digest.java:191:35:191:46 | +| jca/Digest.java:191:35:191:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/Digest.java:191:35:191:46 | jca/Digest.java:191:35:191:46 | +| jca/Digest.java:191:35:191:46 | HashAlgorithm | DigestSize | 256 | jca/Digest.java:191:35:191:46 | jca/Digest.java:191:35:191:46 | +| jca/Digest.java:191:35:191:46 | HashAlgorithm | Name | SHA2 | jca/Digest.java:191:35:191:46 | jca/Digest.java:191:35:191:46 | +| jca/Digest.java:191:35:191:46 | HashAlgorithm | RawName | HmacSHA256 | jca/Digest.java:191:35:191:46 | jca/Digest.java:191:35:191:46 | +| jca/Digest.java:192:18:192:23 | Key | KeyType | Unknown | jca/Digest.java:192:18:192:23 | jca/Digest.java:192:18:192:23 | +| jca/Digest.java:193:30:193:52 | MACOperation | KeyOperationSubtype | Mac | jca/Digest.java:193:30:193:52 | jca/Digest.java:193:30:193:52 | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | Name | AES | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | Structure | Block | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | ModeOfOperation | Name | GCM | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | ModeOfOperation | RawName | GCM | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:210:44:210:62 | PaddingAlgorithm | RawName | NoPadding | jca/Digest.java:210:44:210:62 | jca/Digest.java:210:44:210:62 | +| jca/Digest.java:212:42:212:44 | Key | KeyType | Unknown | jca/Digest.java:212:42:212:44 | jca/Digest.java:212:42:212:44 | +| jca/Digest.java:213:32:213:51 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Digest.java:213:32:213:51 | jca/Digest.java:213:32:213:51 | +| jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/Digest.java:240:21:240:23 | jca/Digest.java:240:21:240:23 | +| jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | Name | AES | jca/Digest.java:239:56:239:60 | jca/Digest.java:239:56:239:60 | +| jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | RawName | AES | jca/Digest.java:239:56:239:60 | jca/Digest.java:239:56:239:60 | +| jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | Structure | Block | jca/Digest.java:239:56:239:60 | jca/Digest.java:239:56:239:60 | +| jca/Digest.java:240:21:240:23 | Constant | Description | 256 | jca/Digest.java:240:21:240:23 | jca/Digest.java:240:21:240:23 | +| jca/Digest.java:241:16:241:35 | Key | KeyType | Symmetric | jca/Digest.java:241:16:241:35 | jca/Digest.java:241:16:241:35 | +| jca/Digest.java:253:38:253:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Digest.java:253:38:253:41 | jca/Digest.java:253:38:253:41 | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | CurveType | SEC | jca/EllipticCurve1.java:46:66:46:76 | jca/EllipticCurve1.java:46:66:46:76 | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | KeySize | 256 | jca/EllipticCurve1.java:46:66:46:76 | jca/EllipticCurve1.java:46:66:46:76 | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | Name | secp256r1 | jca/EllipticCurve1.java:46:66:46:76 | jca/EllipticCurve1.java:46:66:46:76 | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | ParsedName | secp256r1 | jca/EllipticCurve1.java:46:66:46:76 | jca/EllipticCurve1.java:46:66:46:76 | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | RawName | secp256r1 | jca/EllipticCurve1.java:46:66:46:76 | jca/EllipticCurve1.java:46:66:46:76 | +| jca/EllipticCurve1.java:47:16:47:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:47:16:47:36 | jca/EllipticCurve1.java:47:16:47:36 | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | CurveType | SEC | jca/EllipticCurve1.java:56:66:56:76 | jca/EllipticCurve1.java:56:66:56:76 | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | KeySize | 256 | jca/EllipticCurve1.java:56:66:56:76 | jca/EllipticCurve1.java:56:66:56:76 | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | Name | secp256k1 | jca/EllipticCurve1.java:56:66:56:76 | jca/EllipticCurve1.java:56:66:56:76 | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | ParsedName | secp256k1 | jca/EllipticCurve1.java:56:66:56:76 | jca/EllipticCurve1.java:56:66:56:76 | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | RawName | secp256k1 | jca/EllipticCurve1.java:56:66:56:76 | jca/EllipticCurve1.java:56:66:56:76 | +| jca/EllipticCurve1.java:57:16:57:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:57:16:57:36 | jca/EllipticCurve1.java:57:16:57:36 | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | CurveType | BRAINPOOL | jca/EllipticCurve1.java:66:66:66:82 | jca/EllipticCurve1.java:66:66:66:82 | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | KeySize | 256 | jca/EllipticCurve1.java:66:66:66:82 | jca/EllipticCurve1.java:66:66:66:82 | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | Name | brainpoolP256r1 | jca/EllipticCurve1.java:66:66:66:82 | jca/EllipticCurve1.java:66:66:66:82 | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | ParsedName | brainpoolP256r1 | jca/EllipticCurve1.java:66:66:66:82 | jca/EllipticCurve1.java:66:66:66:82 | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | RawName | brainpoolP256r1 | jca/EllipticCurve1.java:66:66:66:82 | jca/EllipticCurve1.java:66:66:66:82 | +| jca/EllipticCurve1.java:67:16:67:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:67:16:67:36 | jca/EllipticCurve1.java:67:16:67:36 | +| jca/EllipticCurve1.java:74:61:74:68 | KeyAgreementAlgorithm | Name | X25519 | jca/EllipticCurve1.java:74:61:74:68 | jca/EllipticCurve1.java:74:61:74:68 | +| jca/EllipticCurve1.java:74:61:74:68 | KeyAgreementAlgorithm | RawName | X25519 | jca/EllipticCurve1.java:74:61:74:68 | jca/EllipticCurve1.java:74:61:74:68 | +| jca/EllipticCurve1.java:76:16:76:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:76:16:76:36 | jca/EllipticCurve1.java:76:16:76:36 | +| jca/EllipticCurve1.java:83:61:83:66 | KeyAgreementAlgorithm | Name | X448 | jca/EllipticCurve1.java:83:61:83:66 | jca/EllipticCurve1.java:83:61:83:66 | +| jca/EllipticCurve1.java:83:61:83:66 | KeyAgreementAlgorithm | RawName | X448 | jca/EllipticCurve1.java:83:61:83:66 | jca/EllipticCurve1.java:83:61:83:66 | +| jca/EllipticCurve1.java:84:16:84:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:84:16:84:36 | jca/EllipticCurve1.java:84:16:84:36 | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | CurveType | SEC | jca/EllipticCurve1.java:94:66:94:76 | jca/EllipticCurve1.java:94:66:94:76 | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | KeySize | 163 | jca/EllipticCurve1.java:94:66:94:76 | jca/EllipticCurve1.java:94:66:94:76 | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | Name | sect163r2 | jca/EllipticCurve1.java:94:66:94:76 | jca/EllipticCurve1.java:94:66:94:76 | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | ParsedName | sect163r2 | jca/EllipticCurve1.java:94:66:94:76 | jca/EllipticCurve1.java:94:66:94:76 | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | RawName | sect163r2 | jca/EllipticCurve1.java:94:66:94:76 | jca/EllipticCurve1.java:94:66:94:76 | +| jca/EllipticCurve1.java:95:16:95:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:95:16:95:36 | jca/EllipticCurve1.java:95:16:95:36 | +| jca/EllipticCurve1.java:105:66:105:76 | Constant | Description | "sm2p256v1" | jca/EllipticCurve1.java:105:66:105:76 | jca/EllipticCurve1.java:105:66:105:76 | +| jca/EllipticCurve1.java:106:16:106:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:106:16:106:36 | jca/EllipticCurve1.java:106:16:106:36 | +| jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | Name | EDSA | jca/EllipticCurve1.java:114:61:114:69 | jca/EllipticCurve1.java:114:61:114:69 | +| jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | RawName | Ed25519 | jca/EllipticCurve1.java:114:61:114:69 | jca/EllipticCurve1.java:114:61:114:69 | +| jca/EllipticCurve1.java:115:16:115:36 | Key | KeyType | Asymmetric | jca/EllipticCurve1.java:115:16:115:36 | jca/EllipticCurve1.java:115:16:115:36 | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | CurveType | SEC | jca/EllipticCurve2.java:46:47:46:57 | jca/EllipticCurve2.java:46:47:46:57 | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | KeySize | 256 | jca/EllipticCurve2.java:46:47:46:57 | jca/EllipticCurve2.java:46:47:46:57 | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | Name | secp256r1 | jca/EllipticCurve2.java:46:47:46:57 | jca/EllipticCurve2.java:46:47:46:57 | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | ParsedName | secp256r1 | jca/EllipticCurve2.java:46:47:46:57 | jca/EllipticCurve2.java:46:47:46:57 | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | RawName | secp256r1 | jca/EllipticCurve2.java:46:47:46:57 | jca/EllipticCurve2.java:46:47:46:57 | +| jca/EllipticCurve2.java:47:16:47:36 | Key | KeyType | Asymmetric | jca/EllipticCurve2.java:47:16:47:36 | jca/EllipticCurve2.java:47:16:47:36 | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | CurveType | SEC | jca/EllipticCurve2.java:55:47:55:57 | jca/EllipticCurve2.java:55:47:55:57 | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | KeySize | 256 | jca/EllipticCurve2.java:55:47:55:57 | jca/EllipticCurve2.java:55:47:55:57 | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | Name | secp256k1 | jca/EllipticCurve2.java:55:47:55:57 | jca/EllipticCurve2.java:55:47:55:57 | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | ParsedName | secp256k1 | jca/EllipticCurve2.java:55:47:55:57 | jca/EllipticCurve2.java:55:47:55:57 | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | RawName | secp256k1 | jca/EllipticCurve2.java:55:47:55:57 | jca/EllipticCurve2.java:55:47:55:57 | +| jca/EllipticCurve2.java:56:16:56:36 | Key | KeyType | Asymmetric | jca/EllipticCurve2.java:56:16:56:36 | jca/EllipticCurve2.java:56:16:56:36 | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | CurveType | BRAINPOOL | jca/EllipticCurve2.java:64:47:64:63 | jca/EllipticCurve2.java:64:47:64:63 | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | KeySize | 256 | jca/EllipticCurve2.java:64:47:64:63 | jca/EllipticCurve2.java:64:47:64:63 | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | Name | brainpoolP256r1 | jca/EllipticCurve2.java:64:47:64:63 | jca/EllipticCurve2.java:64:47:64:63 | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | ParsedName | brainpoolP256r1 | jca/EllipticCurve2.java:64:47:64:63 | jca/EllipticCurve2.java:64:47:64:63 | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | RawName | brainpoolP256r1 | jca/EllipticCurve2.java:64:47:64:63 | jca/EllipticCurve2.java:64:47:64:63 | +| jca/EllipticCurve2.java:65:16:65:36 | Key | KeyType | Asymmetric | jca/EllipticCurve2.java:65:16:65:36 | jca/EllipticCurve2.java:65:16:65:36 | +| jca/EllipticCurve2.java:72:61:72:68 | KeyAgreementAlgorithm | Name | X25519 | jca/EllipticCurve2.java:72:61:72:68 | jca/EllipticCurve2.java:72:61:72:68 | +| jca/EllipticCurve2.java:72:61:72:68 | KeyAgreementAlgorithm | RawName | X25519 | jca/EllipticCurve2.java:72:61:72:68 | jca/EllipticCurve2.java:72:61:72:68 | +| jca/EllipticCurve2.java:73:16:73:36 | Key | KeyType | Asymmetric | jca/EllipticCurve2.java:73:16:73:36 | jca/EllipticCurve2.java:73:16:73:36 | +| jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | Name | EDSA | jca/EllipticCurve2.java:80:61:80:69 | jca/EllipticCurve2.java:80:61:80:69 | +| jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | RawName | Ed25519 | jca/EllipticCurve2.java:80:61:80:69 | jca/EllipticCurve2.java:80:61:80:69 | +| jca/EllipticCurve2.java:81:16:81:36 | Key | KeyType | Asymmetric | jca/EllipticCurve2.java:81:16:81:36 | jca/EllipticCurve2.java:81:16:81:36 | +| jca/EllipticCurve2.java:105:52:105:57 | KeyAgreementAlgorithm | Name | ECDH | jca/EllipticCurve2.java:105:52:105:57 | jca/EllipticCurve2.java:105:52:105:57 | +| jca/EllipticCurve2.java:105:52:105:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/EllipticCurve2.java:105:52:105:57 | jca/EllipticCurve2.java:105:52:105:57 | +| jca/EllipticCurve2.java:106:17:106:36 | Key | KeyType | Unknown | jca/EllipticCurve2.java:106:17:106:36 | jca/EllipticCurve2.java:106:17:106:36 | +| jca/EllipticCurve2.java:107:20:107:36 | Key | KeyType | Unknown | jca/EllipticCurve2.java:107:20:107:36 | jca/EllipticCurve2.java:107:20:107:36 | +| jca/EllipticCurve2.java:119:52:119:57 | KeyAgreementAlgorithm | Name | ECDH | jca/EllipticCurve2.java:119:52:119:57 | jca/EllipticCurve2.java:119:52:119:57 | +| jca/EllipticCurve2.java:119:52:119:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/EllipticCurve2.java:119:52:119:57 | jca/EllipticCurve2.java:119:52:119:57 | +| jca/EllipticCurve2.java:120:17:120:37 | Key | KeyType | Unknown | jca/EllipticCurve2.java:120:17:120:37 | jca/EllipticCurve2.java:120:17:120:37 | +| jca/EllipticCurve2.java:121:20:121:39 | Key | KeyType | Unknown | jca/EllipticCurve2.java:121:20:121:39 | jca/EllipticCurve2.java:121:20:121:39 | +| jca/EllipticCurve2.java:136:53:136:69 | HashAlgorithm | DigestSize | 256 | jca/EllipticCurve2.java:136:53:136:69 | jca/EllipticCurve2.java:136:53:136:69 | +| jca/EllipticCurve2.java:136:53:136:69 | HashAlgorithm | Name | SHA2 | jca/EllipticCurve2.java:136:53:136:69 | jca/EllipticCurve2.java:136:53:136:69 | +| jca/EllipticCurve2.java:136:53:136:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/EllipticCurve2.java:136:53:136:69 | jca/EllipticCurve2.java:136:53:136:69 | +| jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | Name | ECDSA | jca/EllipticCurve2.java:136:53:136:69 | jca/EllipticCurve2.java:136:53:136:69 | +| jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/EllipticCurve2.java:136:53:136:69 | jca/EllipticCurve2.java:136:53:136:69 | +| jca/EllipticCurve2.java:137:28:137:42 | Key | KeyType | Unknown | jca/EllipticCurve2.java:137:28:137:42 | jca/EllipticCurve2.java:137:28:137:42 | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | KeyOperationSubtype | Sign | jca/EllipticCurve2.java:139:16:139:31 | jca/EllipticCurve2.java:139:16:139:31 | +| jca/EllipticCurve2.java:151:53:151:69 | HashAlgorithm | DigestSize | 256 | jca/EllipticCurve2.java:151:53:151:69 | jca/EllipticCurve2.java:151:53:151:69 | +| jca/EllipticCurve2.java:151:53:151:69 | HashAlgorithm | Name | SHA2 | jca/EllipticCurve2.java:151:53:151:69 | jca/EllipticCurve2.java:151:53:151:69 | +| jca/EllipticCurve2.java:151:53:151:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/EllipticCurve2.java:151:53:151:69 | jca/EllipticCurve2.java:151:53:151:69 | +| jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | Name | ECDSA | jca/EllipticCurve2.java:151:53:151:69 | jca/EllipticCurve2.java:151:53:151:69 | +| jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/EllipticCurve2.java:151:53:151:69 | jca/EllipticCurve2.java:151:53:151:69 | +| jca/EllipticCurve2.java:152:30:152:43 | Key | KeyType | Unknown | jca/EllipticCurve2.java:152:30:152:43 | jca/EllipticCurve2.java:152:30:152:43 | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | KeyOperationSubtype | Verify | jca/EllipticCurve2.java:154:16:154:47 | jca/EllipticCurve2.java:154:16:154:47 | +| jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | Name | EDSA | jca/EllipticCurve2.java:166:53:166:61 | jca/EllipticCurve2.java:166:53:166:61 | +| jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | RawName | Ed25519 | jca/EllipticCurve2.java:166:53:166:61 | jca/EllipticCurve2.java:166:53:166:61 | +| jca/EllipticCurve2.java:167:28:167:42 | Key | KeyType | Unknown | jca/EllipticCurve2.java:167:28:167:42 | jca/EllipticCurve2.java:167:28:167:42 | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | KeyOperationSubtype | Sign | jca/EllipticCurve2.java:169:16:169:31 | jca/EllipticCurve2.java:169:16:169:31 | +| jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | Name | EDSA | jca/EllipticCurve2.java:181:53:181:61 | jca/EllipticCurve2.java:181:53:181:61 | +| jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | RawName | Ed25519 | jca/EllipticCurve2.java:181:53:181:61 | jca/EllipticCurve2.java:181:53:181:61 | +| jca/EllipticCurve2.java:182:30:182:43 | Key | KeyType | Unknown | jca/EllipticCurve2.java:182:30:182:43 | jca/EllipticCurve2.java:182:30:182:43 | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | KeyOperationSubtype | Verify | jca/EllipticCurve2.java:184:16:184:47 | jca/EllipticCurve2.java:184:16:184:47 | +| jca/EllipticCurve2.java:206:52:206:57 | KeyAgreementAlgorithm | Name | ECDH | jca/EllipticCurve2.java:206:52:206:57 | jca/EllipticCurve2.java:206:52:206:57 | +| jca/EllipticCurve2.java:206:52:206:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/EllipticCurve2.java:206:52:206:57 | jca/EllipticCurve2.java:206:52:206:57 | +| jca/EllipticCurve2.java:207:17:207:37 | Key | KeyType | Unknown | jca/EllipticCurve2.java:207:17:207:37 | jca/EllipticCurve2.java:207:17:207:37 | +| jca/EllipticCurve2.java:208:20:208:41 | Key | KeyType | Unknown | jca/EllipticCurve2.java:208:20:208:41 | jca/EllipticCurve2.java:208:20:208:41 | +| jca/EllipticCurve2.java:213:58:213:66 | HashAlgorithm | DigestSize | 256 | jca/EllipticCurve2.java:213:58:213:66 | jca/EllipticCurve2.java:213:58:213:66 | +| jca/EllipticCurve2.java:213:58:213:66 | HashAlgorithm | Name | SHA2 | jca/EllipticCurve2.java:213:58:213:66 | jca/EllipticCurve2.java:213:58:213:66 | +| jca/EllipticCurve2.java:213:58:213:66 | HashAlgorithm | RawName | SHA-256 | jca/EllipticCurve2.java:213:58:213:66 | jca/EllipticCurve2.java:213:58:213:66 | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | Name | AES | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | Structure | Block | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | ModeOfOperation | Name | GCM | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | ModeOfOperation | RawName | GCM | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | PaddingAlgorithm | Name | UnknownPadding | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:219:44:219:62 | PaddingAlgorithm | RawName | NoPadding | jca/EllipticCurve2.java:219:44:219:62 | jca/EllipticCurve2.java:219:44:219:62 | +| jca/EllipticCurve2.java:221:38:221:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/EllipticCurve2.java:221:38:221:39 | jca/EllipticCurve2.java:221:38:221:39 | +| jca/EllipticCurve2.java:223:42:223:47 | Key | KeyType | Unknown | jca/EllipticCurve2.java:223:42:223:47 | jca/EllipticCurve2.java:223:42:223:47 | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/EllipticCurve2.java:224:29:224:53 | jca/EllipticCurve2.java:224:29:224:53 | +| jca/EllipticCurve2.java:245:30:245:53 | Constant | Description | "Test message for ECDSA" | jca/EllipticCurve2.java:245:30:245:53 | jca/EllipticCurve2.java:245:30:245:53 | +| jca/EllipticCurve2.java:258:62:258:83 | Constant | Description | "Secret ECIES Message" | jca/EllipticCurve2.java:258:62:258:83 | jca/EllipticCurve2.java:258:62:258:83 | +| jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/Encryption1.java:61:21:61:23 | jca/Encryption1.java:61:21:61:23 | +| jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:60:56:60:60 | jca/Encryption1.java:60:56:60:60 | +| jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | RawName | AES | jca/Encryption1.java:60:56:60:60 | jca/Encryption1.java:60:56:60:60 | +| jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:60:56:60:60 | jca/Encryption1.java:60:56:60:60 | +| jca/Encryption1.java:61:21:61:23 | Constant | Description | 256 | jca/Encryption1.java:61:21:61:23 | jca/Encryption1.java:61:21:61:23 | +| jca/Encryption1.java:62:25:62:44 | Key | KeyType | Symmetric | jca/Encryption1.java:62:25:62:44 | jca/Encryption1.java:62:25:62:44 | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | ModeOfOperation | Name | GCM | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | ModeOfOperation | RawName | GCM | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:63:44:63:62 | PaddingAlgorithm | RawName | NoPadding | jca/Encryption1.java:63:44:63:62 | jca/Encryption1.java:63:44:63:62 | +| jca/Encryption1.java:65:38:65:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Encryption1.java:65:38:65:39 | jca/Encryption1.java:65:38:65:39 | +| jca/Encryption1.java:67:42:67:44 | Key | KeyType | Unknown | jca/Encryption1.java:67:42:67:44 | jca/Encryption1.java:67:42:67:44 | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:68:32:68:74 | jca/Encryption1.java:68:32:68:74 | +| jca/Encryption1.java:68:47:68:62 | Constant | Description | "Sensitive Data" | jca/Encryption1.java:68:47:68:62 | jca/Encryption1.java:68:47:68:62 | +| jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/Encryption1.java:84:21:84:23 | jca/Encryption1.java:84:21:84:23 | +| jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:83:56:83:60 | jca/Encryption1.java:83:56:83:60 | +| jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | RawName | AES | jca/Encryption1.java:83:56:83:60 | jca/Encryption1.java:83:56:83:60 | +| jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:83:56:83:60 | jca/Encryption1.java:83:56:83:60 | +| jca/Encryption1.java:84:21:84:23 | Constant | Description | 256 | jca/Encryption1.java:84:21:84:23 | jca/Encryption1.java:84:21:84:23 | +| jca/Encryption1.java:85:25:85:44 | Key | KeyType | Symmetric | jca/Encryption1.java:85:25:85:44 | jca/Encryption1.java:85:25:85:44 | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | RawName | AES/ECB/NoPadding | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | ModeOfOperation | Name | ECB | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | ModeOfOperation | RawName | ECB | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:88:44:88:62 | PaddingAlgorithm | RawName | NoPadding | jca/Encryption1.java:88:44:88:62 | jca/Encryption1.java:88:44:88:62 | +| jca/Encryption1.java:89:42:89:44 | Key | KeyType | Unknown | jca/Encryption1.java:89:42:89:44 | jca/Encryption1.java:89:42:89:44 | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:90:32:90:74 | jca/Encryption1.java:90:32:90:74 | +| jca/Encryption1.java:90:47:90:62 | Constant | Description | "Sensitive Data" | jca/Encryption1.java:90:47:90:62 | jca/Encryption1.java:90:47:90:62 | +| jca/Encryption1.java:104:35:104:53 | Parameter | Description | publicKey | jca/Encryption1.java:104:35:104:53 | jca/Encryption1.java:104:35:104:53 | +| jca/Encryption1.java:104:56:104:66 | Parameter | Description | data | jca/Encryption1.java:104:56:104:66 | jca/Encryption1.java:104:56:104:66 | +| jca/Encryption1.java:105:44:105:82 | HashAlgorithm | DigestSize | 256 | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | HashAlgorithm | Name | SHA2 | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | Name | RSA | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | ModeOfOperation | Name | ECB | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | ModeOfOperation | RawName | ECB | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | Name | OAEP | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:105:44:105:82 | jca/Encryption1.java:105:44:105:82 | +| jca/Encryption1.java:106:42:106:50 | Key | KeyType | Unknown | jca/Encryption1.java:106:42:106:50 | jca/Encryption1.java:106:42:106:50 | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:107:32:107:62 | jca/Encryption1.java:107:32:107:62 | +| jca/Encryption1.java:119:35:119:55 | Parameter | Description | privateKey | jca/Encryption1.java:119:35:119:55 | jca/Encryption1.java:119:35:119:55 | +| jca/Encryption1.java:119:58:119:77 | Parameter | Description | encryptedData | jca/Encryption1.java:119:58:119:77 | jca/Encryption1.java:119:58:119:77 | +| jca/Encryption1.java:120:44:120:82 | HashAlgorithm | DigestSize | 256 | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | HashAlgorithm | Name | SHA2 | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | Name | RSA | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | ModeOfOperation | Name | ECB | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | ModeOfOperation | RawName | ECB | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | Name | OAEP | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:120:44:120:82 | jca/Encryption1.java:120:44:120:82 | +| jca/Encryption1.java:121:42:121:51 | Key | KeyType | Unknown | jca/Encryption1.java:121:42:121:51 | jca/Encryption1.java:121:42:121:51 | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/Encryption1.java:122:32:122:60 | jca/Encryption1.java:122:32:122:60 | +| jca/Encryption1.java:136:34:136:55 | Parameter | Description | rsaPublicKey | jca/Encryption1.java:136:34:136:55 | jca/Encryption1.java:136:34:136:55 | +| jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/Encryption1.java:138:21:138:23 | jca/Encryption1.java:138:21:138:23 | +| jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:137:56:137:60 | jca/Encryption1.java:137:56:137:60 | +| jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | RawName | AES | jca/Encryption1.java:137:56:137:60 | jca/Encryption1.java:137:56:137:60 | +| jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:137:56:137:60 | jca/Encryption1.java:137:56:137:60 | +| jca/Encryption1.java:138:21:138:23 | Constant | Description | 256 | jca/Encryption1.java:138:21:138:23 | jca/Encryption1.java:138:21:138:23 | +| jca/Encryption1.java:139:28:139:47 | Key | KeyType | Symmetric | jca/Encryption1.java:139:28:139:47 | jca/Encryption1.java:139:28:139:47 | +| jca/Encryption1.java:141:47:141:85 | HashAlgorithm | DigestSize | 256 | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | HashAlgorithm | Name | SHA2 | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | Name | RSA | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | ModeOfOperation | Name | ECB | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | ModeOfOperation | RawName | ECB | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | Name | OAEP | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:141:47:141:85 | jca/Encryption1.java:141:47:141:85 | +| jca/Encryption1.java:142:45:142:56 | Key | KeyType | Unknown | jca/Encryption1.java:142:45:142:56 | jca/Encryption1.java:142:45:142:56 | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:143:34:143:71 | jca/Encryption1.java:143:34:143:71 | +| jca/Encryption1.java:159:34:159:55 | Parameter | Description | rsaPublicKey | jca/Encryption1.java:159:34:159:55 | jca/Encryption1.java:159:34:159:55 | +| jca/Encryption1.java:159:58:159:68 | Parameter | Description | data | jca/Encryption1.java:159:58:159:68 | jca/Encryption1.java:159:58:159:68 | +| jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/Encryption1.java:162:21:162:23 | jca/Encryption1.java:162:21:162:23 | +| jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:161:56:161:60 | jca/Encryption1.java:161:56:161:60 | +| jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | RawName | AES | jca/Encryption1.java:161:56:161:60 | jca/Encryption1.java:161:56:161:60 | +| jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:161:56:161:60 | jca/Encryption1.java:161:56:161:60 | +| jca/Encryption1.java:162:21:162:23 | Constant | Description | 256 | jca/Encryption1.java:162:21:162:23 | jca/Encryption1.java:162:21:162:23 | +| jca/Encryption1.java:163:28:163:47 | Key | KeyType | Symmetric | jca/Encryption1.java:163:28:163:47 | jca/Encryption1.java:163:28:163:47 | +| jca/Encryption1.java:166:47:166:85 | HashAlgorithm | DigestSize | 256 | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | HashAlgorithm | Name | SHA2 | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | Name | RSA | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | ModeOfOperation | Name | ECB | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | ModeOfOperation | RawName | ECB | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | Name | OAEP | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/Encryption1.java:166:47:166:85 | jca/Encryption1.java:166:47:166:85 | +| jca/Encryption1.java:167:45:167:56 | Key | KeyType | Unknown | jca/Encryption1.java:167:45:167:56 | jca/Encryption1.java:167:45:167:56 | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:168:34:168:71 | jca/Encryption1.java:168:34:168:71 | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | Name | AES | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | Structure | Block | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | ModeOfOperation | Name | GCM | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | ModeOfOperation | RawName | GCM | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | PaddingAlgorithm | Name | UnknownPadding | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:171:47:171:65 | PaddingAlgorithm | RawName | NoPadding | jca/Encryption1.java:171:47:171:65 | jca/Encryption1.java:171:47:171:65 | +| jca/Encryption1.java:173:38:173:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Encryption1.java:173:38:173:39 | jca/Encryption1.java:173:38:173:39 | +| jca/Encryption1.java:175:45:175:50 | Key | KeyType | Unknown | jca/Encryption1.java:175:45:175:50 | jca/Encryption1.java:175:45:175:50 | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption1.java:176:32:176:65 | jca/Encryption1.java:176:32:176:65 | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | CurveType | SEC | jca/Encryption2.java:55:60:55:70 | jca/Encryption2.java:55:60:55:70 | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | KeySize | 256 | jca/Encryption2.java:55:60:55:70 | jca/Encryption2.java:55:60:55:70 | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | Name | secp256r1 | jca/Encryption2.java:55:60:55:70 | jca/Encryption2.java:55:60:55:70 | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | ParsedName | secp256r1 | jca/Encryption2.java:55:60:55:70 | jca/Encryption2.java:55:60:55:70 | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | RawName | secp256r1 | jca/Encryption2.java:55:60:55:70 | jca/Encryption2.java:55:60:55:70 | +| jca/Encryption2.java:56:16:56:49 | Key | KeyType | Asymmetric | jca/Encryption2.java:56:16:56:49 | jca/Encryption2.java:56:16:56:49 | +| jca/Encryption2.java:71:62:71:67 | KeyAgreementAlgorithm | Name | ECDH | jca/Encryption2.java:71:62:71:67 | jca/Encryption2.java:71:62:71:67 | +| jca/Encryption2.java:71:62:71:67 | KeyAgreementAlgorithm | RawName | ECDH | jca/Encryption2.java:71:62:71:67 | jca/Encryption2.java:71:62:71:67 | +| jca/Encryption2.java:72:27:72:36 | Key | KeyType | Unknown | jca/Encryption2.java:72:27:72:36 | jca/Encryption2.java:72:27:72:36 | +| jca/Encryption2.java:73:30:73:38 | Key | KeyType | Unknown | jca/Encryption2.java:73:30:73:38 | jca/Encryption2.java:73:30:73:38 | +| jca/Encryption2.java:90:38:90:65 | Parameter | Description | recipientPublicKey | jca/Encryption2.java:90:38:90:65 | jca/Encryption2.java:90:38:90:65 | +| jca/Encryption2.java:90:68:90:78 | Parameter | Description | data | jca/Encryption2.java:90:68:90:78 | jca/Encryption2.java:90:68:90:78 | +| jca/Encryption2.java:99:58:99:66 | HashAlgorithm | DigestSize | 256 | jca/Encryption2.java:99:58:99:66 | jca/Encryption2.java:99:58:99:66 | +| jca/Encryption2.java:99:58:99:66 | HashAlgorithm | Name | SHA2 | jca/Encryption2.java:99:58:99:66 | jca/Encryption2.java:99:58:99:66 | +| jca/Encryption2.java:99:58:99:66 | HashAlgorithm | RawName | SHA-256 | jca/Encryption2.java:99:58:99:66 | jca/Encryption2.java:99:58:99:66 | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | Name | AES | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | Structure | Block | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | ModeOfOperation | Name | GCM | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | ModeOfOperation | RawName | GCM | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | PaddingAlgorithm | Name | UnknownPadding | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:105:47:105:65 | PaddingAlgorithm | RawName | NoPadding | jca/Encryption2.java:105:47:105:65 | jca/Encryption2.java:105:47:105:65 | +| jca/Encryption2.java:107:38:107:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Encryption2.java:107:38:107:39 | jca/Encryption2.java:107:38:107:39 | +| jca/Encryption2.java:109:45:109:50 | Key | KeyType | Unknown | jca/Encryption2.java:109:45:109:50 | jca/Encryption2.java:109:45:109:50 | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption2.java:110:32:110:65 | jca/Encryption2.java:110:32:110:65 | +| jca/Encryption2.java:132:45:132:65 | Parameter | Description | ecPublicKey | jca/Encryption2.java:132:45:132:65 | jca/Encryption2.java:132:45:132:65 | +| jca/Encryption2.java:132:68:132:88 | Parameter | Description | pqSharedSecret | jca/Encryption2.java:132:68:132:88 | jca/Encryption2.java:132:68:132:88 | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | Name | AES | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | Structure | Block | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | ModeOfOperation | Name | GCM | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | ModeOfOperation | RawName | GCM | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | PaddingAlgorithm | Name | UnknownPadding | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:145:47:145:65 | PaddingAlgorithm | RawName | NoPadding | jca/Encryption2.java:145:47:145:65 | jca/Encryption2.java:145:47:145:65 | +| jca/Encryption2.java:147:38:147:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Encryption2.java:147:38:147:39 | jca/Encryption2.java:147:38:147:39 | +| jca/Encryption2.java:149:45:149:50 | Key | KeyType | Unknown | jca/Encryption2.java:149:45:149:50 | jca/Encryption2.java:149:45:149:50 | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Encryption2.java:150:32:150:98 | jca/Encryption2.java:150:32:150:98 | +| jca/Encryption2.java:150:50:150:86 | Constant | Description | "Post-Quantum Hybrid Encryption Data" | jca/Encryption2.java:150:50:150:86 | jca/Encryption2.java:150:50:150:86 | +| jca/Encryption2.java:173:36:173:47 | HMACAlgorithm | Name | HMAC | jca/Encryption2.java:173:36:173:47 | jca/Encryption2.java:173:36:173:47 | +| jca/Encryption2.java:173:36:173:47 | HMACAlgorithm | RawName | HmacSHA256 | jca/Encryption2.java:173:36:173:47 | jca/Encryption2.java:173:36:173:47 | +| jca/Encryption2.java:173:36:173:47 | HashAlgorithm | DigestSize | 256 | jca/Encryption2.java:173:36:173:47 | jca/Encryption2.java:173:36:173:47 | +| jca/Encryption2.java:173:36:173:47 | HashAlgorithm | Name | SHA2 | jca/Encryption2.java:173:36:173:47 | jca/Encryption2.java:173:36:173:47 | +| jca/Encryption2.java:173:36:173:47 | HashAlgorithm | RawName | HmacSHA256 | jca/Encryption2.java:173:36:173:47 | jca/Encryption2.java:173:36:173:47 | +| jca/Encryption2.java:175:19:175:27 | Key | KeyType | Unknown | jca/Encryption2.java:175:19:175:27 | jca/Encryption2.java:175:19:175:27 | +| jca/Encryption2.java:176:31:176:52 | MACOperation | KeyOperationSubtype | Mac | jca/Encryption2.java:176:31:176:52 | jca/Encryption2.java:176:31:176:52 | +| jca/Hash.java:75:58:75:66 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:75:58:75:66 | jca/Hash.java:75:58:75:66 | +| jca/Hash.java:75:58:75:66 | HashAlgorithm | Name | SHA2 | jca/Hash.java:75:58:75:66 | jca/Hash.java:75:58:75:66 | +| jca/Hash.java:75:58:75:66 | HashAlgorithm | RawName | SHA-256 | jca/Hash.java:75:58:75:66 | jca/Hash.java:75:58:75:66 | +| jca/Hash.java:76:37:76:54 | Constant | Description | "Simple Test Data" | jca/Hash.java:76:37:76:54 | jca/Hash.java:76:37:76:54 | +| jca/Hash.java:88:61:88:65 | HashAlgorithm | DigestSize | 128 | jca/Hash.java:88:61:88:65 | jca/Hash.java:88:61:88:65 | +| jca/Hash.java:88:61:88:65 | HashAlgorithm | Name | MD5 | jca/Hash.java:88:61:88:65 | jca/Hash.java:88:61:88:65 | +| jca/Hash.java:88:61:88:65 | HashAlgorithm | RawName | MD5 | jca/Hash.java:88:61:88:65 | jca/Hash.java:88:61:88:65 | +| jca/Hash.java:89:40:89:58 | Constant | Description | "Weak Hash Example" | jca/Hash.java:89:40:89:58 | jca/Hash.java:89:40:89:58 | +| jca/Hash.java:133:29:133:40 | Parameter | Description | input | jca/Hash.java:133:29:133:40 | jca/Hash.java:133:29:133:40 | +| jca/Hash.java:133:43:133:63 | Parameter | Description | privateKey | jca/Hash.java:133:43:133:63 | jca/Hash.java:133:43:133:63 | +| jca/Hash.java:134:53:134:67 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:134:53:134:67 | jca/Hash.java:134:53:134:67 | +| jca/Hash.java:134:53:134:67 | HashAlgorithm | Name | SHA2 | jca/Hash.java:134:53:134:67 | jca/Hash.java:134:53:134:67 | +| jca/Hash.java:134:53:134:67 | HashAlgorithm | RawName | SHA256withRSA | jca/Hash.java:134:53:134:67 | jca/Hash.java:134:53:134:67 | +| jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | Name | RSA | jca/Hash.java:134:53:134:67 | jca/Hash.java:134:53:134:67 | +| jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | RawName | SHA256withRSA | jca/Hash.java:134:53:134:67 | jca/Hash.java:134:53:134:67 | +| jca/Hash.java:135:28:135:37 | Key | KeyType | Unknown | jca/Hash.java:135:28:135:37 | jca/Hash.java:135:28:135:37 | +| jca/Hash.java:137:29:137:44 | SignOperation | KeyOperationSubtype | Sign | jca/Hash.java:137:29:137:44 | jca/Hash.java:137:29:137:44 | +| jca/Hash.java:154:40:154:51 | Parameter | Description | input | jca/Hash.java:154:40:154:51 | jca/Hash.java:154:40:154:51 | +| jca/Hash.java:154:54:154:70 | Parameter | Description | signedHash | jca/Hash.java:154:54:154:70 | jca/Hash.java:154:54:154:70 | +| jca/Hash.java:154:73:154:91 | Parameter | Description | publicKey | jca/Hash.java:154:73:154:91 | jca/Hash.java:154:73:154:91 | +| jca/Hash.java:155:53:155:67 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:155:53:155:67 | jca/Hash.java:155:53:155:67 | +| jca/Hash.java:155:53:155:67 | HashAlgorithm | Name | SHA2 | jca/Hash.java:155:53:155:67 | jca/Hash.java:155:53:155:67 | +| jca/Hash.java:155:53:155:67 | HashAlgorithm | RawName | SHA256withRSA | jca/Hash.java:155:53:155:67 | jca/Hash.java:155:53:155:67 | +| jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | Name | RSA | jca/Hash.java:155:53:155:67 | jca/Hash.java:155:53:155:67 | +| jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | RawName | SHA256withRSA | jca/Hash.java:155:53:155:67 | jca/Hash.java:155:53:155:67 | +| jca/Hash.java:156:30:156:38 | Key | KeyType | Unknown | jca/Hash.java:156:30:156:38 | jca/Hash.java:156:30:156:38 | +| jca/Hash.java:158:16:158:43 | VerifyOperation | KeyOperationSubtype | Verify | jca/Hash.java:158:16:158:43 | jca/Hash.java:158:16:158:43 | +| jca/Hash.java:172:43:172:53 | Parameter | Description | data | jca/Hash.java:172:43:172:53 | jca/Hash.java:172:43:172:53 | +| jca/Hash.java:173:58:173:66 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:173:58:173:66 | jca/Hash.java:173:58:173:66 | +| jca/Hash.java:173:58:173:66 | HashAlgorithm | Name | SHA2 | jca/Hash.java:173:58:173:66 | jca/Hash.java:173:58:173:66 | +| jca/Hash.java:173:58:173:66 | HashAlgorithm | RawName | SHA-256 | jca/Hash.java:173:58:173:66 | jca/Hash.java:173:58:173:66 | +| jca/Hash.java:190:43:190:54 | Parameter | Description | input | jca/Hash.java:190:43:190:54 | jca/Hash.java:190:43:190:54 | +| jca/Hash.java:191:31:192:48 | Constant | Description | {...} | jca/Hash.java:191:31:192:48 | jca/Hash.java:191:31:192:48 | +| jca/Hash.java:191:32:191:38 | HashAlgorithm | DigestSize | 160 | jca/Hash.java:191:32:191:38 | jca/Hash.java:191:32:191:38 | +| jca/Hash.java:191:32:191:38 | HashAlgorithm | Name | SHA1 | jca/Hash.java:191:32:191:38 | jca/Hash.java:191:32:191:38 | +| jca/Hash.java:191:32:191:38 | HashAlgorithm | RawName | SHA-1 | jca/Hash.java:191:32:191:38 | jca/Hash.java:191:32:191:38 | +| jca/Hash.java:191:41:191:49 | HashAlgorithm | DigestSize | 224 | jca/Hash.java:191:41:191:49 | jca/Hash.java:191:41:191:49 | +| jca/Hash.java:191:41:191:49 | HashAlgorithm | Name | SHA2 | jca/Hash.java:191:41:191:49 | jca/Hash.java:191:41:191:49 | +| jca/Hash.java:191:41:191:49 | HashAlgorithm | RawName | SHA-224 | jca/Hash.java:191:41:191:49 | jca/Hash.java:191:41:191:49 | +| jca/Hash.java:191:52:191:60 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:191:52:191:60 | jca/Hash.java:191:52:191:60 | +| jca/Hash.java:191:52:191:60 | HashAlgorithm | Name | SHA2 | jca/Hash.java:191:52:191:60 | jca/Hash.java:191:52:191:60 | +| jca/Hash.java:191:52:191:60 | HashAlgorithm | RawName | SHA-256 | jca/Hash.java:191:52:191:60 | jca/Hash.java:191:52:191:60 | +| jca/Hash.java:191:63:191:71 | HashAlgorithm | DigestSize | 384 | jca/Hash.java:191:63:191:71 | jca/Hash.java:191:63:191:71 | +| jca/Hash.java:191:63:191:71 | HashAlgorithm | Name | SHA2 | jca/Hash.java:191:63:191:71 | jca/Hash.java:191:63:191:71 | +| jca/Hash.java:191:63:191:71 | HashAlgorithm | RawName | SHA-384 | jca/Hash.java:191:63:191:71 | jca/Hash.java:191:63:191:71 | +| jca/Hash.java:191:74:191:82 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:191:74:191:82 | jca/Hash.java:191:74:191:82 | +| jca/Hash.java:191:74:191:82 | HashAlgorithm | Name | SHA2 | jca/Hash.java:191:74:191:82 | jca/Hash.java:191:74:191:82 | +| jca/Hash.java:191:74:191:82 | HashAlgorithm | RawName | SHA-512 | jca/Hash.java:191:74:191:82 | jca/Hash.java:191:74:191:82 | +| jca/Hash.java:191:85:191:94 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:191:85:191:94 | jca/Hash.java:191:85:191:94 | +| jca/Hash.java:191:85:191:94 | HashAlgorithm | Name | SHA3 | jca/Hash.java:191:85:191:94 | jca/Hash.java:191:85:191:94 | +| jca/Hash.java:191:85:191:94 | HashAlgorithm | RawName | SHA3-256 | jca/Hash.java:191:85:191:94 | jca/Hash.java:191:85:191:94 | +| jca/Hash.java:191:97:191:106 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:191:97:191:106 | jca/Hash.java:191:97:191:106 | +| jca/Hash.java:191:97:191:106 | HashAlgorithm | Name | SHA3 | jca/Hash.java:191:97:191:106 | jca/Hash.java:191:97:191:106 | +| jca/Hash.java:191:97:191:106 | HashAlgorithm | RawName | SHA3-512 | jca/Hash.java:191:97:191:106 | jca/Hash.java:191:97:191:106 | +| jca/Hash.java:192:13:192:25 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:192:13:192:25 | jca/Hash.java:192:13:192:25 | +| jca/Hash.java:192:13:192:25 | HashAlgorithm | Name | BLAKE2B | jca/Hash.java:192:13:192:25 | jca/Hash.java:192:13:192:25 | +| jca/Hash.java:192:13:192:25 | HashAlgorithm | RawName | BLAKE2B-512 | jca/Hash.java:192:13:192:25 | jca/Hash.java:192:13:192:25 | +| jca/Hash.java:192:43:192:47 | HashAlgorithm | DigestSize | 128 | jca/Hash.java:192:43:192:47 | jca/Hash.java:192:43:192:47 | +| jca/Hash.java:192:43:192:47 | HashAlgorithm | Name | MD5 | jca/Hash.java:192:43:192:47 | jca/Hash.java:192:43:192:47 | +| jca/Hash.java:192:43:192:47 | HashAlgorithm | RawName | MD5 | jca/Hash.java:192:43:192:47 | jca/Hash.java:192:43:192:47 | +| jca/Hash.java:211:43:211:54 | Parameter | Description | input | jca/Hash.java:211:43:211:54 | jca/Hash.java:211:43:211:54 | +| jca/Hash.java:211:57:211:66 | Parameter | Description | key | jca/Hash.java:211:57:211:66 | jca/Hash.java:211:57:211:66 | +| jca/Hash.java:212:31:212:116 | Constant | Description | {...} | jca/Hash.java:212:31:212:116 | jca/Hash.java:212:31:212:116 | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:32:212:41 | jca/Hash.java:212:32:212:41 | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | RawName | HmacSHA1 | jca/Hash.java:212:32:212:41 | jca/Hash.java:212:32:212:41 | +| jca/Hash.java:212:32:212:41 | HashAlgorithm | DigestSize | 160 | jca/Hash.java:212:32:212:41 | jca/Hash.java:212:32:212:41 | +| jca/Hash.java:212:32:212:41 | HashAlgorithm | Name | SHA1 | jca/Hash.java:212:32:212:41 | jca/Hash.java:212:32:212:41 | +| jca/Hash.java:212:32:212:41 | HashAlgorithm | RawName | HmacSHA1 | jca/Hash.java:212:32:212:41 | jca/Hash.java:212:32:212:41 | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:44:212:55 | jca/Hash.java:212:44:212:55 | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | RawName | HmacSHA256 | jca/Hash.java:212:44:212:55 | jca/Hash.java:212:44:212:55 | +| jca/Hash.java:212:44:212:55 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:212:44:212:55 | jca/Hash.java:212:44:212:55 | +| jca/Hash.java:212:44:212:55 | HashAlgorithm | Name | SHA2 | jca/Hash.java:212:44:212:55 | jca/Hash.java:212:44:212:55 | +| jca/Hash.java:212:44:212:55 | HashAlgorithm | RawName | HmacSHA256 | jca/Hash.java:212:44:212:55 | jca/Hash.java:212:44:212:55 | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:58:212:69 | jca/Hash.java:212:58:212:69 | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | RawName | HmacSHA384 | jca/Hash.java:212:58:212:69 | jca/Hash.java:212:58:212:69 | +| jca/Hash.java:212:58:212:69 | HashAlgorithm | DigestSize | 384 | jca/Hash.java:212:58:212:69 | jca/Hash.java:212:58:212:69 | +| jca/Hash.java:212:58:212:69 | HashAlgorithm | Name | SHA2 | jca/Hash.java:212:58:212:69 | jca/Hash.java:212:58:212:69 | +| jca/Hash.java:212:58:212:69 | HashAlgorithm | RawName | HmacSHA384 | jca/Hash.java:212:58:212:69 | jca/Hash.java:212:58:212:69 | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:72:212:83 | jca/Hash.java:212:72:212:83 | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | RawName | HmacSHA512 | jca/Hash.java:212:72:212:83 | jca/Hash.java:212:72:212:83 | +| jca/Hash.java:212:72:212:83 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:212:72:212:83 | jca/Hash.java:212:72:212:83 | +| jca/Hash.java:212:72:212:83 | HashAlgorithm | Name | SHA2 | jca/Hash.java:212:72:212:83 | jca/Hash.java:212:72:212:83 | +| jca/Hash.java:212:72:212:83 | HashAlgorithm | RawName | HmacSHA512 | jca/Hash.java:212:72:212:83 | jca/Hash.java:212:72:212:83 | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:86:212:99 | jca/Hash.java:212:86:212:99 | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | RawName | HmacSHA3-256 | jca/Hash.java:212:86:212:99 | jca/Hash.java:212:86:212:99 | +| jca/Hash.java:212:86:212:99 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:212:86:212:99 | jca/Hash.java:212:86:212:99 | +| jca/Hash.java:212:86:212:99 | HashAlgorithm | Name | SHA3 | jca/Hash.java:212:86:212:99 | jca/Hash.java:212:86:212:99 | +| jca/Hash.java:212:86:212:99 | HashAlgorithm | RawName | HmacSHA3-256 | jca/Hash.java:212:86:212:99 | jca/Hash.java:212:86:212:99 | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | Name | HMAC | jca/Hash.java:212:102:212:115 | jca/Hash.java:212:102:212:115 | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | RawName | HmacSHA3-512 | jca/Hash.java:212:102:212:115 | jca/Hash.java:212:102:212:115 | +| jca/Hash.java:212:102:212:115 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:212:102:212:115 | jca/Hash.java:212:102:212:115 | +| jca/Hash.java:212:102:212:115 | HashAlgorithm | Name | SHA3 | jca/Hash.java:212:102:212:115 | jca/Hash.java:212:102:212:115 | +| jca/Hash.java:212:102:212:115 | HashAlgorithm | RawName | HmacSHA3-512 | jca/Hash.java:212:102:212:115 | jca/Hash.java:212:102:212:115 | +| jca/Hash.java:216:22:216:30 | Key | KeyType | Unknown | jca/Hash.java:216:22:216:30 | jca/Hash.java:216:22:216:30 | +| jca/Hash.java:217:27:217:55 | MACOperation | KeyOperationSubtype | Mac | jca/Hash.java:217:27:217:55 | jca/Hash.java:217:27:217:55 | +| jca/Hash.java:232:40:232:54 | Parameter | Description | password | jca/Hash.java:232:40:232:54 | jca/Hash.java:232:40:232:54 | +| jca/Hash.java:235:72:235:76 | Constant | Description | 10000 | jca/Hash.java:235:72:235:76 | jca/Hash.java:235:72:235:76 | +| jca/Hash.java:235:79:235:81 | Constant | Description | 256 | jca/Hash.java:235:79:235:81 | jca/Hash.java:235:79:235:81 | +| jca/Hash.java:236:65:236:86 | HMACAlgorithm | Name | HMAC | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | HashAlgorithm | Name | SHA2 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:236:65:236:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/Hash.java:236:65:236:86 | jca/Hash.java:236:65:236:86 | +| jca/Hash.java:237:23:237:50 | Key | KeyType | Symmetric | jca/Hash.java:237:23:237:50 | jca/Hash.java:237:23:237:50 | +| jca/Hash.java:237:23:237:50 | KeyDerivation | Iterations | Constant:10000 | jca/Hash.java:235:72:235:76 | jca/Hash.java:235:72:235:76 | +| jca/Hash.java:237:23:237:50 | KeyDerivation | KeySize | Constant:256 | jca/Hash.java:235:79:235:81 | jca/Hash.java:235:79:235:81 | +| jca/Hash.java:252:37:252:58 | Constant | Description | "Config-based Hashing" | jca/Hash.java:252:37:252:58 | jca/Hash.java:252:37:252:58 | +| jca/Hash.java:266:31:266:76 | Constant | Description | {...} | jca/Hash.java:266:31:266:76 | jca/Hash.java:266:31:266:76 | +| jca/Hash.java:266:32:266:40 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:266:32:266:40 | jca/Hash.java:266:32:266:40 | +| jca/Hash.java:266:32:266:40 | HashAlgorithm | Name | SHA2 | jca/Hash.java:266:32:266:40 | jca/Hash.java:266:32:266:40 | +| jca/Hash.java:266:32:266:40 | HashAlgorithm | RawName | SHA-256 | jca/Hash.java:266:32:266:40 | jca/Hash.java:266:32:266:40 | +| jca/Hash.java:266:43:266:51 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:266:43:266:51 | jca/Hash.java:266:43:266:51 | +| jca/Hash.java:266:43:266:51 | HashAlgorithm | Name | SHA2 | jca/Hash.java:266:43:266:51 | jca/Hash.java:266:43:266:51 | +| jca/Hash.java:266:43:266:51 | HashAlgorithm | RawName | SHA-512 | jca/Hash.java:266:43:266:51 | jca/Hash.java:266:43:266:51 | +| jca/Hash.java:266:54:266:63 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:266:54:266:63 | jca/Hash.java:266:54:266:63 | +| jca/Hash.java:266:54:266:63 | HashAlgorithm | Name | SHA3 | jca/Hash.java:266:54:266:63 | jca/Hash.java:266:54:266:63 | +| jca/Hash.java:266:54:266:63 | HashAlgorithm | RawName | SHA3-256 | jca/Hash.java:266:54:266:63 | jca/Hash.java:266:54:266:63 | +| jca/Hash.java:266:66:266:75 | HashAlgorithm | DigestSize | 512 | jca/Hash.java:266:66:266:75 | jca/Hash.java:266:66:266:75 | +| jca/Hash.java:266:66:266:75 | HashAlgorithm | Name | SHA3 | jca/Hash.java:266:66:266:75 | jca/Hash.java:266:66:266:75 | +| jca/Hash.java:266:66:266:75 | HashAlgorithm | RawName | SHA3-512 | jca/Hash.java:266:66:266:75 | jca/Hash.java:266:66:266:75 | +| jca/Hash.java:269:27:269:38 | Constant | Description | "fixed-seed" | jca/Hash.java:269:27:269:38 | jca/Hash.java:269:27:269:38 | +| jca/Hash.java:294:16:294:66 | Constant | Description | getProperty(...) | jca/Hash.java:294:16:294:66 | jca/Hash.java:294:16:294:66 | +| jca/Hash.java:294:16:294:66 | LocalData | Description | getProperty(...) | jca/Hash.java:294:16:294:66 | jca/Hash.java:294:16:294:66 | +| jca/Hash.java:294:57:294:65 | HashAlgorithm | DigestSize | 256 | jca/Hash.java:294:57:294:65 | jca/Hash.java:294:57:294:65 | +| jca/Hash.java:294:57:294:65 | HashAlgorithm | Name | SHA2 | jca/Hash.java:294:57:294:65 | jca/Hash.java:294:57:294:65 | +| jca/Hash.java:294:57:294:65 | HashAlgorithm | RawName | SHA-256 | jca/Hash.java:294:57:294:65 | jca/Hash.java:294:57:294:65 | +| jca/Hash.java:310:38:310:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Hash.java:310:38:310:41 | jca/Hash.java:310:38:310:41 | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | RawName | AES/CBC/PKCS5Padding | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | ModeOfOperation | Name | CBC | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | ModeOfOperation | RawName | CBC | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | PaddingAlgorithm | Name | PKCS7 | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:30:44:30:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/IVArtifact.java:30:44:30:65 | jca/IVArtifact.java:30:44:30:65 | +| jca/IVArtifact.java:31:42:31:44 | Key | KeyType | Unknown | jca/IVArtifact.java:31:42:31:44 | jca/IVArtifact.java:31:42:31:44 | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:32:29:32:73 | jca/IVArtifact.java:32:29:32:73 | +| jca/IVArtifact.java:32:44:32:61 | Constant | Description | "Simple Test Data" | jca/IVArtifact.java:32:44:32:61 | jca/IVArtifact.java:32:44:32:61 | +| jca/IVArtifact.java:38:42:38:44 | Key | KeyType | Unknown | jca/IVArtifact.java:38:42:38:44 | jca/IVArtifact.java:38:42:38:44 | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:39:29:39:53 | jca/IVArtifact.java:39:29:39:53 | +| jca/IVArtifact.java:49:27:49:42 | Constant | Description | "Sensitive Data" | jca/IVArtifact.java:49:27:49:42 | jca/IVArtifact.java:49:27:49:42 | +| jca/IVArtifact.java:70:16:70:81 | Constant | Description | getProperty(...) | jca/IVArtifact.java:70:16:70:81 | jca/IVArtifact.java:70:16:70:81 | +| jca/IVArtifact.java:70:16:70:81 | LocalData | Description | getProperty(...) | jca/IVArtifact.java:70:16:70:81 | jca/IVArtifact.java:70:16:70:81 | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | RawName | AES/CBC/PKCS5Padding | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | ModeOfOperation | Name | CBC | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | ModeOfOperation | RawName | CBC | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | PaddingAlgorithm | Name | PKCS7 | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:70:59:70:80 | PaddingAlgorithm | RawName | PKCS5Padding | jca/IVArtifact.java:70:59:70:80 | jca/IVArtifact.java:70:59:70:80 | +| jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/IVArtifact.java:75:21:75:23 | jca/IVArtifact.java:75:21:75:23 | +| jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:74:56:74:60 | jca/IVArtifact.java:74:56:74:60 | +| jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | RawName | AES | jca/IVArtifact.java:74:56:74:60 | jca/IVArtifact.java:74:56:74:60 | +| jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:74:56:74:60 | jca/IVArtifact.java:74:56:74:60 | +| jca/IVArtifact.java:75:21:75:23 | Constant | Description | 256 | jca/IVArtifact.java:75:21:75:23 | jca/IVArtifact.java:75:21:75:23 | +| jca/IVArtifact.java:76:16:76:35 | Key | KeyType | Symmetric | jca/IVArtifact.java:76:16:76:35 | jca/IVArtifact.java:76:16:76:35 | +| jca/IVArtifact.java:81:38:81:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/IVArtifact.java:81:38:81:39 | jca/IVArtifact.java:81:38:81:39 | +| jca/IVArtifact.java:87:32:87:33 | RandomNumberGeneration | Description | java.util.Random | jca/IVArtifact.java:87:32:87:33 | jca/IVArtifact.java:87:32:87:33 | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | ModeOfOperation | Name | GCM | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | ModeOfOperation | RawName | GCM | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | PaddingAlgorithm | Name | UnknownPadding | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:105:44:105:62 | PaddingAlgorithm | RawName | NoPadding | jca/IVArtifact.java:105:44:105:62 | jca/IVArtifact.java:105:44:105:62 | +| jca/IVArtifact.java:108:42:108:44 | Key | KeyType | Unknown | jca/IVArtifact.java:108:42:108:44 | jca/IVArtifact.java:108:42:108:44 | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:109:16:109:40 | jca/IVArtifact.java:109:16:109:40 | +| jca/IVArtifact.java:116:31:116:34 | Constant | Description | null | jca/IVArtifact.java:116:31:116:34 | jca/IVArtifact.java:116:31:116:34 | +| jca/IVArtifact.java:130:42:130:49 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/IVArtifact.java:130:42:130:49 | jca/IVArtifact.java:130:42:130:49 | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | ModeOfOperation | Name | GCM | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | ModeOfOperation | RawName | GCM | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | PaddingAlgorithm | Name | UnknownPadding | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:132:44:132:62 | PaddingAlgorithm | RawName | NoPadding | jca/IVArtifact.java:132:44:132:62 | jca/IVArtifact.java:132:44:132:62 | +| jca/IVArtifact.java:134:42:134:44 | Key | KeyType | Unknown | jca/IVArtifact.java:134:42:134:44 | jca/IVArtifact.java:134:42:134:44 | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:135:16:135:40 | jca/IVArtifact.java:135:16:135:40 | +| jca/IVArtifact.java:153:58:153:66 | HashAlgorithm | DigestSize | 256 | jca/IVArtifact.java:153:58:153:66 | jca/IVArtifact.java:153:58:153:66 | +| jca/IVArtifact.java:153:58:153:66 | HashAlgorithm | Name | SHA2 | jca/IVArtifact.java:153:58:153:66 | jca/IVArtifact.java:153:58:153:66 | +| jca/IVArtifact.java:153:58:153:66 | HashAlgorithm | RawName | SHA-256 | jca/IVArtifact.java:153:58:153:66 | jca/IVArtifact.java:153:58:153:66 | +| jca/IVArtifact.java:154:45:154:59 | Constant | Description | "fixedConstant" | jca/IVArtifact.java:154:45:154:59 | jca/IVArtifact.java:154:45:154:59 | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | ModeOfOperation | Name | GCM | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | ModeOfOperation | RawName | GCM | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | PaddingAlgorithm | Name | UnknownPadding | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:156:44:156:62 | PaddingAlgorithm | RawName | NoPadding | jca/IVArtifact.java:156:44:156:62 | jca/IVArtifact.java:156:44:156:62 | +| jca/IVArtifact.java:158:42:158:44 | Key | KeyType | Unknown | jca/IVArtifact.java:158:42:158:44 | jca/IVArtifact.java:158:42:158:44 | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:159:16:159:40 | jca/IVArtifact.java:159:16:159:40 | +| jca/IVArtifact.java:177:38:177:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/IVArtifact.java:177:38:177:39 | jca/IVArtifact.java:177:38:177:39 | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | ModeOfOperation | Name | GCM | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | ModeOfOperation | RawName | GCM | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | PaddingAlgorithm | Name | UnknownPadding | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:180:48:180:66 | PaddingAlgorithm | RawName | NoPadding | jca/IVArtifact.java:180:48:180:66 | jca/IVArtifact.java:180:48:180:66 | +| jca/IVArtifact.java:182:46:182:48 | Key | KeyType | Unknown | jca/IVArtifact.java:182:46:182:48 | jca/IVArtifact.java:182:46:182:48 | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:183:30:183:58 | jca/IVArtifact.java:183:30:183:58 | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | ModeOfOperation | Name | GCM | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | ModeOfOperation | RawName | GCM | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | PaddingAlgorithm | Name | UnknownPadding | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:198:44:198:62 | PaddingAlgorithm | RawName | NoPadding | jca/IVArtifact.java:198:44:198:62 | jca/IVArtifact.java:198:44:198:62 | +| jca/IVArtifact.java:201:42:201:44 | Key | KeyType | Unknown | jca/IVArtifact.java:201:42:201:44 | jca/IVArtifact.java:201:42:201:44 | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/IVArtifact.java:202:16:202:40 | jca/IVArtifact.java:202:16:202:40 | +| jca/IVArtifact.java:215:53:215:65 | Parameter | Description | key | jca/IVArtifact.java:215:53:215:65 | jca/IVArtifact.java:215:53:215:65 | +| jca/IVArtifact.java:215:68:215:83 | Parameter | Description | plaintext | jca/IVArtifact.java:215:68:215:83 | jca/IVArtifact.java:215:68:215:83 | +| jca/IVArtifact.java:235:60:235:72 | Parameter | Description | key | jca/IVArtifact.java:235:60:235:72 | jca/IVArtifact.java:235:60:235:72 | +| jca/IVArtifact.java:235:75:235:90 | Parameter | Description | plaintext | jca/IVArtifact.java:235:75:235:90 | jca/IVArtifact.java:235:75:235:90 | +| jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/IVArtifact.java:254:21:254:23 | jca/IVArtifact.java:254:21:254:23 | +| jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | Name | AES | jca/IVArtifact.java:253:56:253:60 | jca/IVArtifact.java:253:56:253:60 | +| jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | RawName | AES | jca/IVArtifact.java:253:56:253:60 | jca/IVArtifact.java:253:56:253:60 | +| jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | Structure | Block | jca/IVArtifact.java:253:56:253:60 | jca/IVArtifact.java:253:56:253:60 | +| jca/IVArtifact.java:254:21:254:23 | Constant | Description | 256 | jca/IVArtifact.java:254:21:254:23 | jca/IVArtifact.java:254:21:254:23 | +| jca/IVArtifact.java:255:29:255:44 | Key | KeyType | Symmetric | jca/IVArtifact.java:255:29:255:44 | jca/IVArtifact.java:255:29:255:44 | +| jca/IVArtifact.java:256:32:256:47 | Constant | Description | "Sensitive Data" | jca/IVArtifact.java:256:32:256:47 | jca/IVArtifact.java:256:32:256:47 | +| jca/IVArtifact.java:275:34:275:46 | Constant | Description | "Message One" | jca/IVArtifact.java:275:34:275:46 | jca/IVArtifact.java:275:34:275:46 | +| jca/IVArtifact.java:275:60:275:72 | Constant | Description | "Message Two" | jca/IVArtifact.java:275:60:275:72 | jca/IVArtifact.java:275:60:275:72 | +| jca/IVArtifact.java:275:86:275:100 | Constant | Description | "Message Three" | jca/IVArtifact.java:275:86:275:100 | jca/IVArtifact.java:275:86:275:100 | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | CurveType | SEC | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | KeySize | 256 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | Name | secp256r1 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | ParsedName | secp256r1 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | RawName | secp256r1 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | KeyType | Asymmetric | jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | +| jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | KeyAgreementAlgorithm | Name | X25519 | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | +| jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | KeyAgreementAlgorithm | RawName | X25519 | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | +| jca/KeyAgreementHybridCryptosystem.java:59:24:59:26 | Constant | Description | 255 | jca/KeyAgreementHybridCryptosystem.java:59:24:59:26 | jca/KeyAgreementHybridCryptosystem.java:59:24:59:26 | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | KeyType | Asymmetric | jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | +| jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | +| jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | +| jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | HashAlgorithm | DigestSize | 256 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | +| jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | HashAlgorithm | Name | SHA2 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | +| jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | HashAlgorithm | RawName | SHA-256 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | +| jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | KeyAgreementAlgorithm | Name | ECDH | jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | +| jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | KeyAgreementAlgorithm | RawName | ECDH | jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | Name | AES | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | Structure | Block | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | ModeOfOperation | Name | GCM | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | ModeOfOperation | RawName | GCM | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | PaddingAlgorithm | RawName | NoPadding | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | +| jca/KeyAgreementHybridCryptosystem.java:110:38:110:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyAgreementHybridCryptosystem.java:110:38:110:39 | jca/KeyAgreementHybridCryptosystem.java:110:38:110:39 | +| jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | +| jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | KeyAgreementAlgorithm | Name | ECDH | jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | +| jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | KeyAgreementAlgorithm | RawName | ECDH | jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | Name | AES | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | Structure | Block | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | ModeOfOperation | Name | GCM | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | ModeOfOperation | RawName | GCM | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | PaddingAlgorithm | RawName | NoPadding | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | +| jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | +| jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | KeyAgreementAlgorithm | Name | X25519 | jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | +| jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | KeyAgreementAlgorithm | RawName | X25519 | jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | +| jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | HashAlgorithm | DigestSize | 256 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | +| jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | HashAlgorithm | Name | SHA2 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | +| jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | HashAlgorithm | RawName | SHA-256 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | +| jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | Name | Unknown | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | +| jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | +| jca/KeyAgreementHybridCryptosystem.java:155:38:155:42 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyAgreementHybridCryptosystem.java:155:38:155:42 | jca/KeyAgreementHybridCryptosystem.java:155:38:155:42 | +| jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | +| jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | KeyAgreementAlgorithm | Name | X25519 | jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | +| jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | KeyAgreementAlgorithm | RawName | X25519 | jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | +| jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | Name | Unknown | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | +| jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | RawName | ChaCha20-Poly1305 | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | +| jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | +| jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | Description | plaintext | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | +| jca/KeyAgreementHybridCryptosystem.java:212:58:212:70 | Parameter | Description | key | jca/KeyAgreementHybridCryptosystem.java:212:58:212:70 | jca/KeyAgreementHybridCryptosystem.java:212:58:212:70 | +| jca/KeyAgreementHybridCryptosystem.java:212:73:212:88 | Parameter | Description | plaintext | jca/KeyAgreementHybridCryptosystem.java:212:73:212:88 | jca/KeyAgreementHybridCryptosystem.java:212:73:212:88 | +| jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | Constant | Description | 10000 | jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | +| jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | Constant | Description | 256 | jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HMACAlgorithm | Name | HMAC | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HashAlgorithm | DigestSize | 256 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HashAlgorithm | Name | SHA2 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | Key | KeyType | Symmetric | jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | Iterations | Constant:10000 | jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | KeySize | Constant:256 | jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | Name | AES | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | Structure | Block | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | ModeOfOperation | Name | GCM | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | ModeOfOperation | RawName | GCM | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | PaddingAlgorithm | RawName | NoPadding | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | +| jca/KeyAgreementHybridCryptosystem.java:225:38:225:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyAgreementHybridCryptosystem.java:225:38:225:39 | jca/KeyAgreementHybridCryptosystem.java:225:38:225:39 | +| jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HMACAlgorithm | Name | HMAC | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | DigestSize | 256 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | Name | SHA2 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | RawName | HmacSHA256 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | +| jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | Key | KeyType | Unknown | jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | KeyOperationSubtype | Mac | jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | +| jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | +| jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | Name | AES | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | +| jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | RawName | AES | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | +| jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | Structure | Block | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | +| jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | Constant | Description | 256 | jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | +| jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | Key | KeyType | Symmetric | jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | +| jca/KeyAgreementHybridCryptosystem.java:269:38:269:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyAgreementHybridCryptosystem.java:269:38:269:41 | jca/KeyAgreementHybridCryptosystem.java:269:38:269:41 | +| jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/KeyArtifact.java:19:21:19:23 | jca/KeyArtifact.java:19:21:19:23 | +| jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | Name | AES | jca/KeyArtifact.java:18:56:18:60 | jca/KeyArtifact.java:18:56:18:60 | +| jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | RawName | AES | jca/KeyArtifact.java:18:56:18:60 | jca/KeyArtifact.java:18:56:18:60 | +| jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | Structure | Block | jca/KeyArtifact.java:18:56:18:60 | jca/KeyArtifact.java:18:56:18:60 | +| jca/KeyArtifact.java:19:21:19:23 | Constant | Description | 256 | jca/KeyArtifact.java:19:21:19:23 | jca/KeyArtifact.java:19:21:19:23 | +| jca/KeyArtifact.java:20:31:20:50 | Key | KeyType | Symmetric | jca/KeyArtifact.java:20:31:20:50 | jca/KeyArtifact.java:20:31:20:50 | +| jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/KeyArtifact.java:24:21:24:23 | jca/KeyArtifact.java:24:21:24:23 | +| jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | Name | AES | jca/KeyArtifact.java:23:43:23:47 | jca/KeyArtifact.java:23:43:23:47 | +| jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | RawName | AES | jca/KeyArtifact.java:23:43:23:47 | jca/KeyArtifact.java:23:43:23:47 | +| jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | Structure | Block | jca/KeyArtifact.java:23:43:23:47 | jca/KeyArtifact.java:23:43:23:47 | +| jca/KeyArtifact.java:24:21:24:23 | Constant | Description | 256 | jca/KeyArtifact.java:24:21:24:23 | jca/KeyArtifact.java:24:21:24:23 | +| jca/KeyArtifact.java:25:30:25:49 | Key | KeyType | Symmetric | jca/KeyArtifact.java:25:30:25:49 | jca/KeyArtifact.java:25:30:25:49 | +| jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/KeyArtifact.java:31:31:31:34 | jca/KeyArtifact.java:31:31:31:34 | +| jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | Name | RSA | jca/KeyArtifact.java:30:68:30:72 | jca/KeyArtifact.java:30:68:30:72 | +| jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | RawName | RSA | jca/KeyArtifact.java:30:68:30:72 | jca/KeyArtifact.java:30:68:30:72 | +| jca/KeyArtifact.java:31:31:31:34 | Constant | Description | 2048 | jca/KeyArtifact.java:31:31:31:34 | jca/KeyArtifact.java:31:31:31:34 | +| jca/KeyArtifact.java:32:30:32:57 | Key | KeyType | Asymmetric | jca/KeyArtifact.java:32:30:32:57 | jca/KeyArtifact.java:32:30:32:57 | +| jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/KeyArtifact.java:36:31:36:34 | jca/KeyArtifact.java:36:31:36:34 | +| jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | Name | RSA | jca/KeyArtifact.java:35:51:35:55 | jca/KeyArtifact.java:35:51:35:55 | +| jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | RawName | RSA | jca/KeyArtifact.java:35:51:35:55 | jca/KeyArtifact.java:35:51:35:55 | +| jca/KeyArtifact.java:36:31:36:34 | Constant | Description | 2048 | jca/KeyArtifact.java:36:31:36:34 | jca/KeyArtifact.java:36:31:36:34 | +| jca/KeyArtifact.java:37:29:37:56 | Key | KeyType | Asymmetric | jca/KeyArtifact.java:37:29:37:56 | jca/KeyArtifact.java:37:29:37:56 | +| jca/KeyArtifact.java:41:31:41:33 | Constant | Description | 256 | jca/KeyArtifact.java:41:31:41:33 | jca/KeyArtifact.java:41:31:41:33 | +| jca/KeyArtifact.java:42:26:42:53 | Key | KeyType | Asymmetric | jca/KeyArtifact.java:42:26:42:53 | jca/KeyArtifact.java:42:26:42:53 | +| jca/KeyArtifact.java:62:28:62:73 | Constant | Description | getProperty(...) | jca/KeyArtifact.java:62:28:62:73 | jca/KeyArtifact.java:62:28:62:73 | +| jca/KeyArtifact.java:62:28:62:73 | LocalData | Description | getProperty(...) | jca/KeyArtifact.java:62:28:62:73 | jca/KeyArtifact.java:62:28:62:73 | +| jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/KeyArtifact.java:65:21:65:23 | jca/KeyArtifact.java:65:21:65:23 | +| jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | Name | AES | jca/KeyArtifact.java:62:68:62:72 | jca/KeyArtifact.java:62:68:62:72 | +| jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | RawName | AES | jca/KeyArtifact.java:62:68:62:72 | jca/KeyArtifact.java:62:68:62:72 | +| jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | Structure | Block | jca/KeyArtifact.java:62:68:62:72 | jca/KeyArtifact.java:62:68:62:72 | +| jca/KeyArtifact.java:65:21:65:23 | Constant | Description | 256 | jca/KeyArtifact.java:65:21:65:23 | jca/KeyArtifact.java:65:21:65:23 | +| jca/KeyArtifact.java:66:32:66:51 | Key | KeyType | Symmetric | jca/KeyArtifact.java:66:32:66:51 | jca/KeyArtifact.java:66:32:66:51 | +| jca/KeyArtifact.java:72:31:72:34 | Constant | Description | 2048 | jca/KeyArtifact.java:72:31:72:34 | jca/KeyArtifact.java:72:31:72:34 | +| jca/KeyArtifact.java:73:16:73:43 | Key | KeyType | Asymmetric | jca/KeyArtifact.java:73:16:73:43 | jca/KeyArtifact.java:73:16:73:43 | +| jca/KeyArtifact.java:78:31:78:54 | Constant | Description | {...} | jca/KeyArtifact.java:78:31:78:54 | jca/KeyArtifact.java:78:31:78:54 | +| jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/KeyArtifact.java:72:31:72:34 | jca/KeyArtifact.java:72:31:72:34 | +| jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | Name | RSA | jca/KeyArtifact.java:78:32:78:36 | jca/KeyArtifact.java:78:32:78:36 | +| jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | RawName | RSA | jca/KeyArtifact.java:78:32:78:36 | jca/KeyArtifact.java:78:32:78:36 | +| jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | Name | EDSA | jca/KeyArtifact.java:78:45:78:53 | jca/KeyArtifact.java:78:45:78:53 | +| jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | RawName | Ed25519 | jca/KeyArtifact.java:78:45:78:53 | jca/KeyArtifact.java:78:45:78:53 | +| jca/KeyDerivation1.java:78:39:78:53 | Parameter | Description | password | jca/KeyDerivation1.java:78:39:78:53 | jca/KeyDerivation1.java:78:39:78:53 | +| jca/KeyDerivation1.java:80:72:80:76 | Constant | Description | 10000 | jca/KeyDerivation1.java:80:72:80:76 | jca/KeyDerivation1.java:80:72:80:76 | +| jca/KeyDerivation1.java:80:79:80:81 | Constant | Description | 256 | jca/KeyDerivation1.java:80:79:80:81 | jca/KeyDerivation1.java:80:79:80:81 | +| jca/KeyDerivation1.java:81:65:81:86 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:81:65:81:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:81:65:81:86 | jca/KeyDerivation1.java:81:65:81:86 | +| jca/KeyDerivation1.java:82:22:82:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:82:22:82:49 | jca/KeyDerivation1.java:82:22:82:49 | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | Iterations | Constant:10000 | jca/KeyDerivation1.java:80:72:80:76 | jca/KeyDerivation1.java:80:72:80:76 | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:80:79:80:81 | jca/KeyDerivation1.java:80:79:80:81 | +| jca/KeyDerivation1.java:92:36:92:50 | Parameter | Description | password | jca/KeyDerivation1.java:92:36:92:50 | jca/KeyDerivation1.java:92:36:92:50 | +| jca/KeyDerivation1.java:94:72:94:73 | Constant | Description | 10 | jca/KeyDerivation1.java:94:72:94:73 | jca/KeyDerivation1.java:94:72:94:73 | +| jca/KeyDerivation1.java:94:76:94:78 | Constant | Description | 256 | jca/KeyDerivation1.java:94:76:94:78 | jca/KeyDerivation1.java:94:76:94:78 | +| jca/KeyDerivation1.java:95:65:95:86 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:95:65:95:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:95:65:95:86 | jca/KeyDerivation1.java:95:65:95:86 | +| jca/KeyDerivation1.java:96:22:96:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:96:22:96:49 | jca/KeyDerivation1.java:96:22:96:49 | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | Iterations | Constant:10 | jca/KeyDerivation1.java:94:72:94:73 | jca/KeyDerivation1.java:94:72:94:73 | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:94:76:94:78 | jca/KeyDerivation1.java:94:76:94:78 | +| jca/KeyDerivation1.java:106:37:106:51 | Parameter | Description | password | jca/KeyDerivation1.java:106:37:106:51 | jca/KeyDerivation1.java:106:37:106:51 | +| jca/KeyDerivation1.java:108:72:108:80 | Constant | Description | 1_000_000 | jca/KeyDerivation1.java:108:72:108:80 | jca/KeyDerivation1.java:108:72:108:80 | +| jca/KeyDerivation1.java:108:83:108:85 | Constant | Description | 256 | jca/KeyDerivation1.java:108:83:108:85 | jca/KeyDerivation1.java:108:83:108:85 | +| jca/KeyDerivation1.java:109:65:109:86 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:109:65:109:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:109:65:109:86 | jca/KeyDerivation1.java:109:65:109:86 | +| jca/KeyDerivation1.java:110:22:110:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:110:22:110:49 | jca/KeyDerivation1.java:110:22:110:49 | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | Iterations | Constant:1_000_000 | jca/KeyDerivation1.java:108:72:108:80 | jca/KeyDerivation1.java:108:72:108:80 | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:108:83:108:85 | jca/KeyDerivation1.java:108:83:108:85 | +| jca/KeyDerivation1.java:120:32:120:46 | Parameter | Description | password | jca/KeyDerivation1.java:120:32:120:46 | jca/KeyDerivation1.java:120:32:120:46 | +| jca/KeyDerivation1.java:122:72:122:76 | Constant | Description | 80000 | jca/KeyDerivation1.java:122:72:122:76 | jca/KeyDerivation1.java:122:72:122:76 | +| jca/KeyDerivation1.java:122:79:122:81 | Constant | Description | 256 | jca/KeyDerivation1.java:122:79:122:81 | jca/KeyDerivation1.java:122:79:122:81 | +| jca/KeyDerivation1.java:123:65:123:84 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA1 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | HashAlgorithm | DigestSize | 160 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | HashAlgorithm | Name | SHA1 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | HashAlgorithm | RawName | PBKDF2WithHmacSHA1 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA1 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:123:65:123:84 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA1 | jca/KeyDerivation1.java:123:65:123:84 | jca/KeyDerivation1.java:123:65:123:84 | +| jca/KeyDerivation1.java:124:22:124:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:124:22:124:49 | jca/KeyDerivation1.java:124:22:124:49 | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | Iterations | Constant:80000 | jca/KeyDerivation1.java:122:72:122:76 | jca/KeyDerivation1.java:122:72:122:76 | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:122:79:122:81 | jca/KeyDerivation1.java:122:79:122:81 | +| jca/KeyDerivation1.java:134:34:134:48 | Parameter | Description | password | jca/KeyDerivation1.java:134:34:134:48 | jca/KeyDerivation1.java:134:34:134:48 | +| jca/KeyDerivation1.java:136:72:136:77 | Constant | Description | 160000 | jca/KeyDerivation1.java:136:72:136:77 | jca/KeyDerivation1.java:136:72:136:77 | +| jca/KeyDerivation1.java:136:80:136:82 | Constant | Description | 256 | jca/KeyDerivation1.java:136:80:136:82 | jca/KeyDerivation1.java:136:80:136:82 | +| jca/KeyDerivation1.java:137:65:137:86 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA512 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | HashAlgorithm | DigestSize | 512 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA512 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA512 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:137:65:137:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA512 | jca/KeyDerivation1.java:137:65:137:86 | jca/KeyDerivation1.java:137:65:137:86 | +| jca/KeyDerivation1.java:138:22:138:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:138:22:138:49 | jca/KeyDerivation1.java:138:22:138:49 | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | Iterations | Constant:160000 | jca/KeyDerivation1.java:136:72:136:77 | jca/KeyDerivation1.java:136:72:136:77 | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:136:80:136:82 | jca/KeyDerivation1.java:136:80:136:82 | +| jca/KeyDerivation1.java:154:28:154:42 | Parameter | Description | password | jca/KeyDerivation1.java:154:28:154:42 | jca/KeyDerivation1.java:154:28:154:42 | +| jca/KeyDerivation1.java:157:72:157:75 | Constant | Description | 1024 | jca/KeyDerivation1.java:157:72:157:75 | jca/KeyDerivation1.java:157:72:157:75 | +| jca/KeyDerivation1.java:157:78:157:80 | Constant | Description | 128 | jca/KeyDerivation1.java:157:78:157:80 | jca/KeyDerivation1.java:157:78:157:80 | +| jca/KeyDerivation1.java:158:65:158:72 | Constant | Description | "SCRYPT" | jca/KeyDerivation1.java:158:65:158:72 | jca/KeyDerivation1.java:158:65:158:72 | +| jca/KeyDerivation1.java:159:22:159:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:159:22:159:49 | jca/KeyDerivation1.java:159:22:159:49 | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | Iterations | Constant:1024 | jca/KeyDerivation1.java:157:72:157:75 | jca/KeyDerivation1.java:157:72:157:75 | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | KeySize | Constant:128 | jca/KeyDerivation1.java:157:78:157:80 | jca/KeyDerivation1.java:157:78:157:80 | +| jca/KeyDerivation1.java:169:30:169:44 | Parameter | Description | password | jca/KeyDerivation1.java:169:30:169:44 | jca/KeyDerivation1.java:169:30:169:44 | +| jca/KeyDerivation1.java:172:72:172:76 | Constant | Description | 16384 | jca/KeyDerivation1.java:172:72:172:76 | jca/KeyDerivation1.java:172:72:172:76 | +| jca/KeyDerivation1.java:172:79:172:81 | Constant | Description | 256 | jca/KeyDerivation1.java:172:79:172:81 | jca/KeyDerivation1.java:172:79:172:81 | +| jca/KeyDerivation1.java:173:65:173:72 | Constant | Description | "SCRYPT" | jca/KeyDerivation1.java:173:65:173:72 | jca/KeyDerivation1.java:173:65:173:72 | +| jca/KeyDerivation1.java:174:22:174:49 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:174:22:174:49 | jca/KeyDerivation1.java:174:22:174:49 | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | Iterations | Constant:16384 | jca/KeyDerivation1.java:172:72:172:76 | jca/KeyDerivation1.java:172:72:172:76 | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:172:79:172:81 | jca/KeyDerivation1.java:172:79:172:81 | +| jca/KeyDerivation1.java:242:45:242:56 | Parameter | Description | input | jca/KeyDerivation1.java:242:45:242:56 | jca/KeyDerivation1.java:242:45:242:56 | +| jca/KeyDerivation1.java:243:58:243:66 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:243:58:243:66 | jca/KeyDerivation1.java:243:58:243:66 | +| jca/KeyDerivation1.java:243:58:243:66 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:243:58:243:66 | jca/KeyDerivation1.java:243:58:243:66 | +| jca/KeyDerivation1.java:243:58:243:66 | HashAlgorithm | RawName | SHA-256 | jca/KeyDerivation1.java:243:58:243:66 | jca/KeyDerivation1.java:243:58:243:66 | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | Name | AES | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | RawName | AES/ECB/NoPadding | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | Structure | Block | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | ModeOfOperation | Name | ECB | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | ModeOfOperation | RawName | ECB | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:249:70:249:88 | PaddingAlgorithm | RawName | NoPadding | jca/KeyDerivation1.java:249:70:249:88 | jca/KeyDerivation1.java:249:70:249:88 | +| jca/KeyDerivation1.java:250:55:250:57 | Key | KeyType | Unknown | jca/KeyDerivation1.java:250:55:250:57 | jca/KeyDerivation1.java:250:55:250:57 | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyDerivation1.java:251:29:251:74 | jca/KeyDerivation1.java:251:29:251:74 | +| jca/KeyDerivation1.java:251:44:251:62 | Constant | Description | "SampleData16Bytes" | jca/KeyDerivation1.java:251:44:251:62 | jca/KeyDerivation1.java:251:44:251:62 | +| jca/KeyDerivation1.java:269:32:269:41 | Parameter | Description | ikm | jca/KeyDerivation1.java:269:32:269:41 | jca/KeyDerivation1.java:269:32:269:41 | +| jca/KeyDerivation1.java:283:43:283:57 | Parameter | Description | password | jca/KeyDerivation1.java:283:43:283:57 | jca/KeyDerivation1.java:283:43:283:57 | +| jca/KeyDerivation1.java:283:60:283:78 | Parameter | Description | sharedSecret | jca/KeyDerivation1.java:283:60:283:78 | jca/KeyDerivation1.java:283:60:283:78 | +| jca/KeyDerivation1.java:302:37:302:51 | Parameter | Description | password | jca/KeyDerivation1.java:302:37:302:51 | jca/KeyDerivation1.java:302:37:302:51 | +| jca/KeyDerivation1.java:309:25:309:76 | Constant | Description | getProperty(...) | jca/KeyDerivation1.java:309:25:309:76 | jca/KeyDerivation1.java:309:25:309:76 | +| jca/KeyDerivation1.java:309:25:309:76 | LocalData | Description | getProperty(...) | jca/KeyDerivation1.java:309:25:309:76 | jca/KeyDerivation1.java:309:25:309:76 | +| jca/KeyDerivation1.java:309:54:309:75 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:309:54:309:75 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:309:54:309:75 | jca/KeyDerivation1.java:309:54:309:75 | +| jca/KeyDerivation1.java:310:43:310:86 | Constant | Description | getProperty(...) | jca/KeyDerivation1.java:310:43:310:86 | jca/KeyDerivation1.java:310:43:310:86 | +| jca/KeyDerivation1.java:310:43:310:86 | LocalData | Description | getProperty(...) | jca/KeyDerivation1.java:310:43:310:86 | jca/KeyDerivation1.java:310:43:310:86 | +| jca/KeyDerivation1.java:311:40:311:78 | Constant | Description | getProperty(...) | jca/KeyDerivation1.java:311:40:311:78 | jca/KeyDerivation1.java:311:40:311:78 | +| jca/KeyDerivation1.java:311:40:311:78 | LocalData | Description | getProperty(...) | jca/KeyDerivation1.java:311:40:311:78 | jca/KeyDerivation1.java:311:40:311:78 | +| jca/KeyDerivation1.java:316:26:316:53 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:316:26:316:53 | jca/KeyDerivation1.java:316:26:316:53 | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Iterations | Constant:getProperty(...) | jca/KeyDerivation1.java:310:43:310:86 | jca/KeyDerivation1.java:310:43:310:86 | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | Iterations | LocalData:getProperty(...) | jca/KeyDerivation1.java:310:43:310:86 | jca/KeyDerivation1.java:310:43:310:86 | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | KeySize | Constant:getProperty(...) | jca/KeyDerivation1.java:311:40:311:78 | jca/KeyDerivation1.java:311:40:311:78 | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | KeySize | LocalData:getProperty(...) | jca/KeyDerivation1.java:311:40:311:78 | jca/KeyDerivation1.java:311:40:311:78 | +| jca/KeyDerivation1.java:333:72:333:76 | Constant | Description | 10000 | jca/KeyDerivation1.java:333:72:333:76 | jca/KeyDerivation1.java:333:72:333:76 | +| jca/KeyDerivation1.java:333:79:333:81 | Constant | Description | 256 | jca/KeyDerivation1.java:333:79:333:81 | jca/KeyDerivation1.java:333:79:333:81 | +| jca/KeyDerivation1.java:334:65:334:86 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:334:65:334:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/KeyDerivation1.java:334:65:334:86 | jca/KeyDerivation1.java:334:65:334:86 | +| jca/KeyDerivation1.java:335:16:335:43 | Key | KeyType | Symmetric | jca/KeyDerivation1.java:335:16:335:43 | jca/KeyDerivation1.java:335:16:335:43 | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | Iterations | Constant:10000 | jca/KeyDerivation1.java:333:72:333:76 | jca/KeyDerivation1.java:333:72:333:76 | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | KeySize | Constant:256 | jca/KeyDerivation1.java:333:79:333:81 | jca/KeyDerivation1.java:333:79:333:81 | +| jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | Name | HMAC | jca/KeyDerivation1.java:345:36:345:47 | jca/KeyDerivation1.java:345:36:345:47 | +| jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | RawName | HmacSHA256 | jca/KeyDerivation1.java:345:36:345:47 | jca/KeyDerivation1.java:345:36:345:47 | +| jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | DigestSize | 256 | jca/KeyDerivation1.java:345:36:345:47 | jca/KeyDerivation1.java:345:36:345:47 | +| jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | Name | SHA2 | jca/KeyDerivation1.java:345:36:345:47 | jca/KeyDerivation1.java:345:36:345:47 | +| jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | RawName | HmacSHA256 | jca/KeyDerivation1.java:345:36:345:47 | jca/KeyDerivation1.java:345:36:345:47 | +| jca/KeyDerivation1.java:347:19:347:27 | Key | KeyType | Unknown | jca/KeyDerivation1.java:347:19:347:27 | jca/KeyDerivation1.java:347:19:347:27 | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | KeyOperationSubtype | Mac | jca/KeyDerivation1.java:348:22:348:38 | jca/KeyDerivation1.java:348:22:348:38 | +| jca/KeyDerivation1.java:352:19:352:54 | Key | KeyType | Unknown | jca/KeyDerivation1.java:352:19:352:54 | jca/KeyDerivation1.java:352:19:352:54 | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | KeyOperationSubtype | Mac | jca/KeyDerivation1.java:353:22:353:62 | jca/KeyDerivation1.java:353:22:353:62 | +| jca/KeyDerivation1.java:353:35:353:50 | Constant | Description | "hkdf-expansion" | jca/KeyDerivation1.java:353:35:353:50 | jca/KeyDerivation1.java:353:35:353:50 | +| jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyDerivation1.java:365:38:365:41 | jca/KeyDerivation1.java:365:38:365:41 | +| jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/KeyEncapsulation.java:61:21:61:23 | jca/KeyEncapsulation.java:61:21:61:23 | +| jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | Name | AES | jca/KeyEncapsulation.java:60:56:60:60 | jca/KeyEncapsulation.java:60:56:60:60 | +| jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | RawName | AES | jca/KeyEncapsulation.java:60:56:60:60 | jca/KeyEncapsulation.java:60:56:60:60 | +| jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | Structure | Block | jca/KeyEncapsulation.java:60:56:60:60 | jca/KeyEncapsulation.java:60:56:60:60 | +| jca/KeyEncapsulation.java:61:21:61:23 | Constant | Description | 256 | jca/KeyEncapsulation.java:61:21:61:23 | jca/KeyEncapsulation.java:61:21:61:23 | +| jca/KeyEncapsulation.java:62:28:62:47 | Key | KeyType | Symmetric | jca/KeyEncapsulation.java:62:28:62:47 | jca/KeyEncapsulation.java:62:28:62:47 | +| jca/KeyEncapsulation.java:67:47:67:85 | HashAlgorithm | DigestSize | 256 | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | HashAlgorithm | Name | SHA2 | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | Name | RSA | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | ModeOfOperation | Name | ECB | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | ModeOfOperation | RawName | ECB | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | Name | OAEP | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:67:47:67:85 | jca/KeyEncapsulation.java:67:47:67:85 | +| jca/KeyEncapsulation.java:68:45:68:50 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:68:45:68:50 | jca/KeyEncapsulation.java:68:45:68:50 | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyEncapsulation.java:69:29:69:66 | jca/KeyEncapsulation.java:69:29:69:66 | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | Name | AES | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | Structure | Block | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | ModeOfOperation | Name | GCM | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | ModeOfOperation | RawName | GCM | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:73:47:73:65 | PaddingAlgorithm | RawName | NoPadding | jca/KeyEncapsulation.java:73:47:73:65 | jca/KeyEncapsulation.java:73:47:73:65 | +| jca/KeyEncapsulation.java:75:38:75:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyEncapsulation.java:75:38:75:39 | jca/KeyEncapsulation.java:75:38:75:39 | +| jca/KeyEncapsulation.java:77:45:77:50 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:77:45:77:50 | jca/KeyEncapsulation.java:77:45:77:50 | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyEncapsulation.java:78:29:78:80 | jca/KeyEncapsulation.java:78:29:78:80 | +| jca/KeyEncapsulation.java:78:47:78:68 | Constant | Description | "KEM-based encryption" | jca/KeyEncapsulation.java:78:47:78:68 | jca/KeyEncapsulation.java:78:47:78:68 | +| jca/KeyEncapsulation.java:91:37:91:54 | Parameter | Description | rsaPriv | jca/KeyEncapsulation.java:91:37:91:54 | jca/KeyEncapsulation.java:91:37:91:54 | +| jca/KeyEncapsulation.java:91:57:91:73 | Parameter | Description | wrappedKey | jca/KeyEncapsulation.java:91:57:91:73 | jca/KeyEncapsulation.java:91:57:91:73 | +| jca/KeyEncapsulation.java:92:47:92:85 | HashAlgorithm | DigestSize | 256 | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | HashAlgorithm | Name | SHA2 | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | HashAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | Name | RSA | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | RawName | RSA/ECB/OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | ModeOfOperation | Name | ECB | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | ModeOfOperation | RawName | ECB | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | Name | OAEP | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | RawName | OAEPWithSHA-256AndMGF1Padding | jca/KeyEncapsulation.java:92:47:92:85 | jca/KeyEncapsulation.java:92:47:92:85 | +| jca/KeyEncapsulation.java:93:45:93:51 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:93:45:93:51 | jca/KeyEncapsulation.java:93:45:93:51 | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/KeyEncapsulation.java:94:30:94:58 | jca/KeyEncapsulation.java:94:30:94:58 | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | CurveType | SEC | jca/KeyEncapsulation.java:117:47:117:57 | jca/KeyEncapsulation.java:117:47:117:57 | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | KeySize | 256 | jca/KeyEncapsulation.java:117:47:117:57 | jca/KeyEncapsulation.java:117:47:117:57 | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | Name | secp256r1 | jca/KeyEncapsulation.java:117:47:117:57 | jca/KeyEncapsulation.java:117:47:117:57 | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | ParsedName | secp256r1 | jca/KeyEncapsulation.java:117:47:117:57 | jca/KeyEncapsulation.java:117:47:117:57 | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | RawName | secp256r1 | jca/KeyEncapsulation.java:117:47:117:57 | jca/KeyEncapsulation.java:117:47:117:57 | +| jca/KeyEncapsulation.java:118:31:118:51 | Key | KeyType | Asymmetric | jca/KeyEncapsulation.java:118:31:118:51 | jca/KeyEncapsulation.java:118:31:118:51 | +| jca/KeyEncapsulation.java:121:52:121:57 | KeyAgreementAlgorithm | Name | ECDH | jca/KeyEncapsulation.java:121:52:121:57 | jca/KeyEncapsulation.java:121:52:121:57 | +| jca/KeyEncapsulation.java:121:52:121:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/KeyEncapsulation.java:121:52:121:57 | jca/KeyEncapsulation.java:121:52:121:57 | +| jca/KeyEncapsulation.java:122:17:122:40 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:122:17:122:40 | jca/KeyEncapsulation.java:122:17:122:40 | +| jca/KeyEncapsulation.java:123:20:123:24 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:123:20:123:24 | jca/KeyEncapsulation.java:123:20:123:24 | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | Name | AES | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | Structure | Block | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | ModeOfOperation | Name | GCM | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | ModeOfOperation | RawName | GCM | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | PaddingAlgorithm | Name | UnknownPadding | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:133:47:133:65 | PaddingAlgorithm | RawName | NoPadding | jca/KeyEncapsulation.java:133:47:133:65 | jca/KeyEncapsulation.java:133:47:133:65 | +| jca/KeyEncapsulation.java:135:38:135:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/KeyEncapsulation.java:135:38:135:39 | jca/KeyEncapsulation.java:135:38:135:39 | +| jca/KeyEncapsulation.java:136:45:136:50 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:136:45:136:50 | jca/KeyEncapsulation.java:136:45:136:50 | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/KeyEncapsulation.java:137:29:137:73 | jca/KeyEncapsulation.java:137:29:137:73 | +| jca/KeyEncapsulation.java:137:47:137:61 | Constant | Description | "ECIES message" | jca/KeyEncapsulation.java:137:47:137:61 | jca/KeyEncapsulation.java:137:47:137:61 | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | CurveType | SEC | jca/KeyEncapsulation.java:186:47:186:57 | jca/KeyEncapsulation.java:186:47:186:57 | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | KeySize | 256 | jca/KeyEncapsulation.java:186:47:186:57 | jca/KeyEncapsulation.java:186:47:186:57 | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | Name | secp256r1 | jca/KeyEncapsulation.java:186:47:186:57 | jca/KeyEncapsulation.java:186:47:186:57 | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | ParsedName | secp256r1 | jca/KeyEncapsulation.java:186:47:186:57 | jca/KeyEncapsulation.java:186:47:186:57 | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | RawName | secp256r1 | jca/KeyEncapsulation.java:186:47:186:57 | jca/KeyEncapsulation.java:186:47:186:57 | +| jca/KeyEncapsulation.java:187:31:187:51 | Key | KeyType | Asymmetric | jca/KeyEncapsulation.java:187:31:187:51 | jca/KeyEncapsulation.java:187:31:187:51 | +| jca/KeyEncapsulation.java:188:52:188:57 | KeyAgreementAlgorithm | Name | ECDH | jca/KeyEncapsulation.java:188:52:188:57 | jca/KeyEncapsulation.java:188:52:188:57 | +| jca/KeyEncapsulation.java:188:52:188:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/KeyEncapsulation.java:188:52:188:57 | jca/KeyEncapsulation.java:188:52:188:57 | +| jca/KeyEncapsulation.java:189:17:189:40 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:189:17:189:40 | jca/KeyEncapsulation.java:189:17:189:40 | +| jca/KeyEncapsulation.java:190:20:190:34 | Key | KeyType | Unknown | jca/KeyEncapsulation.java:190:20:190:34 | jca/KeyEncapsulation.java:190:20:190:34 | +| jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/KeyEncapsulation.java:208:27:208:30 | jca/KeyEncapsulation.java:208:27:208:30 | +| jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | Name | RSA | jca/KeyEncapsulation.java:207:64:207:68 | jca/KeyEncapsulation.java:207:64:207:68 | +| jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | RawName | RSA | jca/KeyEncapsulation.java:207:64:207:68 | jca/KeyEncapsulation.java:207:64:207:68 | +| jca/KeyEncapsulation.java:208:27:208:30 | Constant | Description | 2048 | jca/KeyEncapsulation.java:208:27:208:30 | jca/KeyEncapsulation.java:208:27:208:30 | +| jca/KeyEncapsulation.java:209:25:209:48 | Key | KeyType | Asymmetric | jca/KeyEncapsulation.java:209:25:209:48 | jca/KeyEncapsulation.java:209:25:209:48 | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | CurveType | SEC | jca/KeyEncapsulation.java:214:49:214:59 | jca/KeyEncapsulation.java:214:49:214:59 | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | KeySize | 256 | jca/KeyEncapsulation.java:214:49:214:59 | jca/KeyEncapsulation.java:214:49:214:59 | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | Name | secp256r1 | jca/KeyEncapsulation.java:214:49:214:59 | jca/KeyEncapsulation.java:214:49:214:59 | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | ParsedName | secp256r1 | jca/KeyEncapsulation.java:214:49:214:59 | jca/KeyEncapsulation.java:214:49:214:59 | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | RawName | secp256r1 | jca/KeyEncapsulation.java:214:49:214:59 | jca/KeyEncapsulation.java:214:49:214:59 | +| jca/KeyEncapsulation.java:215:24:215:46 | Key | KeyType | Asymmetric | jca/KeyEncapsulation.java:215:24:215:46 | jca/KeyEncapsulation.java:215:24:215:46 | +| jca/KeyEncapsulation.java:226:31:226:53 | Key | KeyType | Asymmetric | jca/KeyEncapsulation.java:226:31:226:53 | jca/KeyEncapsulation.java:226:31:226:53 | +| jca/KeyExchange.java:52:63:52:66 | KeyAgreementAlgorithm | Name | DH | jca/KeyExchange.java:52:63:52:66 | jca/KeyExchange.java:52:63:52:66 | +| jca/KeyExchange.java:52:63:52:66 | KeyAgreementAlgorithm | RawName | DH | jca/KeyExchange.java:52:63:52:66 | jca/KeyExchange.java:52:63:52:66 | +| jca/KeyExchange.java:53:26:53:29 | Constant | Description | 2048 | jca/KeyExchange.java:53:26:53:29 | jca/KeyExchange.java:53:26:53:29 | +| jca/KeyExchange.java:54:16:54:38 | Key | KeyType | Asymmetric | jca/KeyExchange.java:54:16:54:38 | jca/KeyExchange.java:54:16:54:38 | +| jca/KeyExchange.java:67:63:67:66 | KeyAgreementAlgorithm | Name | DH | jca/KeyExchange.java:67:63:67:66 | jca/KeyExchange.java:67:63:67:66 | +| jca/KeyExchange.java:67:63:67:66 | KeyAgreementAlgorithm | RawName | DH | jca/KeyExchange.java:67:63:67:66 | jca/KeyExchange.java:67:63:67:66 | +| jca/KeyExchange.java:69:26:69:28 | Constant | Description | 512 | jca/KeyExchange.java:69:26:69:28 | jca/KeyExchange.java:69:26:69:28 | +| jca/KeyExchange.java:70:16:70:38 | Key | KeyType | Asymmetric | jca/KeyExchange.java:70:16:70:38 | jca/KeyExchange.java:70:16:70:38 | +| jca/KeyExchange.java:83:63:83:66 | KeyAgreementAlgorithm | Name | DH | jca/KeyExchange.java:83:63:83:66 | jca/KeyExchange.java:83:63:83:66 | +| jca/KeyExchange.java:83:63:83:66 | KeyAgreementAlgorithm | RawName | DH | jca/KeyExchange.java:83:63:83:66 | jca/KeyExchange.java:83:63:83:66 | +| jca/KeyExchange.java:84:26:84:29 | Constant | Description | 4096 | jca/KeyExchange.java:84:26:84:29 | jca/KeyExchange.java:84:26:84:29 | +| jca/KeyExchange.java:85:16:85:38 | Key | KeyType | Asymmetric | jca/KeyExchange.java:85:16:85:38 | jca/KeyExchange.java:85:16:85:38 | +| jca/KeyExchange.java:99:52:99:55 | KeyAgreementAlgorithm | Name | DH | jca/KeyExchange.java:99:52:99:55 | jca/KeyExchange.java:99:52:99:55 | +| jca/KeyExchange.java:99:52:99:55 | KeyAgreementAlgorithm | RawName | DH | jca/KeyExchange.java:99:52:99:55 | jca/KeyExchange.java:99:52:99:55 | +| jca/KeyExchange.java:100:17:100:26 | Key | KeyType | Unknown | jca/KeyExchange.java:100:17:100:26 | jca/KeyExchange.java:100:17:100:26 | +| jca/KeyExchange.java:101:20:101:28 | Key | KeyType | Unknown | jca/KeyExchange.java:101:20:101:28 | jca/KeyExchange.java:101:20:101:28 | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | CurveType | SEC | jca/KeyExchange.java:121:49:121:59 | jca/KeyExchange.java:121:49:121:59 | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | KeySize | 256 | jca/KeyExchange.java:121:49:121:59 | jca/KeyExchange.java:121:49:121:59 | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | Name | secp256r1 | jca/KeyExchange.java:121:49:121:59 | jca/KeyExchange.java:121:49:121:59 | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | ParsedName | secp256r1 | jca/KeyExchange.java:121:49:121:59 | jca/KeyExchange.java:121:49:121:59 | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | RawName | secp256r1 | jca/KeyExchange.java:121:49:121:59 | jca/KeyExchange.java:121:49:121:59 | +| jca/KeyExchange.java:122:16:122:38 | Key | KeyType | Asymmetric | jca/KeyExchange.java:122:16:122:38 | jca/KeyExchange.java:122:16:122:38 | +| jca/KeyExchange.java:136:52:136:57 | KeyAgreementAlgorithm | Name | ECDH | jca/KeyExchange.java:136:52:136:57 | jca/KeyExchange.java:136:52:136:57 | +| jca/KeyExchange.java:136:52:136:57 | KeyAgreementAlgorithm | RawName | ECDH | jca/KeyExchange.java:136:52:136:57 | jca/KeyExchange.java:136:52:136:57 | +| jca/KeyExchange.java:137:17:137:26 | Key | KeyType | Unknown | jca/KeyExchange.java:137:17:137:26 | jca/KeyExchange.java:137:17:137:26 | +| jca/KeyExchange.java:138:20:138:28 | Key | KeyType | Unknown | jca/KeyExchange.java:138:20:138:28 | jca/KeyExchange.java:138:20:138:28 | +| jca/KeyExchange.java:156:61:156:68 | KeyAgreementAlgorithm | Name | X25519 | jca/KeyExchange.java:156:61:156:68 | jca/KeyExchange.java:156:61:156:68 | +| jca/KeyExchange.java:156:61:156:68 | KeyAgreementAlgorithm | RawName | X25519 | jca/KeyExchange.java:156:61:156:68 | jca/KeyExchange.java:156:61:156:68 | +| jca/KeyExchange.java:158:24:158:26 | Constant | Description | 255 | jca/KeyExchange.java:158:24:158:26 | jca/KeyExchange.java:158:24:158:26 | +| jca/KeyExchange.java:159:16:159:36 | Key | KeyType | Asymmetric | jca/KeyExchange.java:159:16:159:36 | jca/KeyExchange.java:159:16:159:36 | +| jca/KeyExchange.java:173:52:173:59 | KeyAgreementAlgorithm | Name | X25519 | jca/KeyExchange.java:173:52:173:59 | jca/KeyExchange.java:173:52:173:59 | +| jca/KeyExchange.java:173:52:173:59 | KeyAgreementAlgorithm | RawName | X25519 | jca/KeyExchange.java:173:52:173:59 | jca/KeyExchange.java:173:52:173:59 | +| jca/KeyExchange.java:174:17:174:26 | Key | KeyType | Unknown | jca/KeyExchange.java:174:17:174:26 | jca/KeyExchange.java:174:17:174:26 | +| jca/KeyExchange.java:175:20:175:28 | Key | KeyType | Unknown | jca/KeyExchange.java:175:20:175:28 | jca/KeyExchange.java:175:20:175:28 | +| jca/KeyExchange.java:193:61:193:66 | KeyAgreementAlgorithm | Name | X448 | jca/KeyExchange.java:193:61:193:66 | jca/KeyExchange.java:193:61:193:66 | +| jca/KeyExchange.java:193:61:193:66 | KeyAgreementAlgorithm | RawName | X448 | jca/KeyExchange.java:193:61:193:66 | jca/KeyExchange.java:193:61:193:66 | +| jca/KeyExchange.java:195:24:195:26 | Constant | Description | 448 | jca/KeyExchange.java:195:24:195:26 | jca/KeyExchange.java:195:24:195:26 | +| jca/KeyExchange.java:196:16:196:36 | Key | KeyType | Asymmetric | jca/KeyExchange.java:196:16:196:36 | jca/KeyExchange.java:196:16:196:36 | +| jca/KeyExchange.java:210:52:210:57 | KeyAgreementAlgorithm | Name | X448 | jca/KeyExchange.java:210:52:210:57 | jca/KeyExchange.java:210:52:210:57 | +| jca/KeyExchange.java:210:52:210:57 | KeyAgreementAlgorithm | RawName | X448 | jca/KeyExchange.java:210:52:210:57 | jca/KeyExchange.java:210:52:210:57 | +| jca/KeyExchange.java:211:17:211:26 | Key | KeyType | Unknown | jca/KeyExchange.java:211:17:211:26 | jca/KeyExchange.java:211:17:211:26 | +| jca/KeyExchange.java:212:20:212:28 | Key | KeyType | Unknown | jca/KeyExchange.java:212:20:212:28 | jca/KeyExchange.java:212:20:212:28 | +| jca/MACOperation.java:59:36:59:49 | Parameter | Description | message | jca/MACOperation.java:59:36:59:49 | jca/MACOperation.java:59:36:59:49 | +| jca/MACOperation.java:59:52:59:61 | Parameter | Description | key | jca/MACOperation.java:59:52:59:61 | jca/MACOperation.java:59:52:59:61 | +| jca/MACOperation.java:60:35:60:46 | HMACAlgorithm | Name | HMAC | jca/MACOperation.java:60:35:60:46 | jca/MACOperation.java:60:35:60:46 | +| jca/MACOperation.java:60:35:60:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/MACOperation.java:60:35:60:46 | jca/MACOperation.java:60:35:60:46 | +| jca/MACOperation.java:60:35:60:46 | HashAlgorithm | DigestSize | 256 | jca/MACOperation.java:60:35:60:46 | jca/MACOperation.java:60:35:60:46 | +| jca/MACOperation.java:60:35:60:46 | HashAlgorithm | Name | SHA2 | jca/MACOperation.java:60:35:60:46 | jca/MACOperation.java:60:35:60:46 | +| jca/MACOperation.java:60:35:60:46 | HashAlgorithm | RawName | HmacSHA256 | jca/MACOperation.java:60:35:60:46 | jca/MACOperation.java:60:35:60:46 | +| jca/MACOperation.java:62:18:62:26 | Key | KeyType | Unknown | jca/MACOperation.java:62:18:62:26 | jca/MACOperation.java:62:18:62:26 | +| jca/MACOperation.java:63:16:63:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:63:16:63:46 | jca/MACOperation.java:63:16:63:46 | +| jca/MACOperation.java:70:34:70:47 | Parameter | Description | message | jca/MACOperation.java:70:34:70:47 | jca/MACOperation.java:70:34:70:47 | +| jca/MACOperation.java:70:50:70:59 | Parameter | Description | key | jca/MACOperation.java:70:50:70:59 | jca/MACOperation.java:70:50:70:59 | +| jca/MACOperation.java:71:35:71:48 | HMACAlgorithm | Name | HMAC | jca/MACOperation.java:71:35:71:48 | jca/MACOperation.java:71:35:71:48 | +| jca/MACOperation.java:71:35:71:48 | HMACAlgorithm | RawName | HmacSHA3-256 | jca/MACOperation.java:71:35:71:48 | jca/MACOperation.java:71:35:71:48 | +| jca/MACOperation.java:71:35:71:48 | HashAlgorithm | DigestSize | 256 | jca/MACOperation.java:71:35:71:48 | jca/MACOperation.java:71:35:71:48 | +| jca/MACOperation.java:71:35:71:48 | HashAlgorithm | Name | SHA3 | jca/MACOperation.java:71:35:71:48 | jca/MACOperation.java:71:35:71:48 | +| jca/MACOperation.java:71:35:71:48 | HashAlgorithm | RawName | HmacSHA3-256 | jca/MACOperation.java:71:35:71:48 | jca/MACOperation.java:71:35:71:48 | +| jca/MACOperation.java:73:18:73:26 | Key | KeyType | Unknown | jca/MACOperation.java:73:18:73:26 | jca/MACOperation.java:73:18:73:26 | +| jca/MACOperation.java:74:16:74:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:74:16:74:46 | jca/MACOperation.java:74:16:74:46 | +| jca/MACOperation.java:81:34:81:47 | Parameter | Description | message | jca/MACOperation.java:81:34:81:47 | jca/MACOperation.java:81:34:81:47 | +| jca/MACOperation.java:81:50:81:59 | Parameter | Description | key | jca/MACOperation.java:81:50:81:59 | jca/MACOperation.java:81:50:81:59 | +| jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | Name | UnknownMac | jca/MACOperation.java:82:35:82:44 | jca/MACOperation.java:82:35:82:44 | +| jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | RawName | Poly1305 | jca/MACOperation.java:82:35:82:44 | jca/MACOperation.java:82:35:82:44 | +| jca/MACOperation.java:84:18:84:26 | Key | KeyType | Unknown | jca/MACOperation.java:84:18:84:26 | jca/MACOperation.java:84:18:84:26 | +| jca/MACOperation.java:85:16:85:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:85:16:85:46 | jca/MACOperation.java:85:16:85:46 | +| jca/MACOperation.java:92:30:92:43 | Parameter | Description | message | jca/MACOperation.java:92:30:92:43 | jca/MACOperation.java:92:30:92:43 | +| jca/MACOperation.java:92:46:92:55 | Parameter | Description | key | jca/MACOperation.java:92:46:92:55 | jca/MACOperation.java:92:46:92:55 | +| jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | Name | UnknownMac | jca/MACOperation.java:94:35:94:40 | jca/MACOperation.java:94:35:94:40 | +| jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | RawName | GMac | jca/MACOperation.java:94:35:94:40 | jca/MACOperation.java:94:35:94:40 | +| jca/MACOperation.java:98:18:98:26 | Key | KeyType | Unknown | jca/MACOperation.java:98:18:98:26 | jca/MACOperation.java:98:18:98:26 | +| jca/MACOperation.java:99:16:99:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:99:16:99:46 | jca/MACOperation.java:99:16:99:46 | +| jca/MACOperation.java:106:30:106:43 | Parameter | Description | message | jca/MACOperation.java:106:30:106:43 | jca/MACOperation.java:106:30:106:43 | +| jca/MACOperation.java:106:46:106:55 | Parameter | Description | key | jca/MACOperation.java:106:46:106:55 | jca/MACOperation.java:106:46:106:55 | +| jca/MACOperation.java:107:35:107:43 | Constant | Description | "KMAC128" | jca/MACOperation.java:107:35:107:43 | jca/MACOperation.java:107:35:107:43 | +| jca/MACOperation.java:109:18:109:26 | Key | KeyType | Unknown | jca/MACOperation.java:109:18:109:26 | jca/MACOperation.java:109:18:109:26 | +| jca/MACOperation.java:110:16:110:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:110:16:110:46 | jca/MACOperation.java:110:16:110:46 | +| jca/MACOperation.java:117:36:117:49 | Parameter | Description | message | jca/MACOperation.java:117:36:117:49 | jca/MACOperation.java:117:36:117:49 | +| jca/MACOperation.java:117:52:117:61 | Parameter | Description | key | jca/MACOperation.java:117:52:117:61 | jca/MACOperation.java:117:52:117:61 | +| jca/MACOperation.java:118:35:118:44 | HMACAlgorithm | Name | HMAC | jca/MACOperation.java:118:35:118:44 | jca/MACOperation.java:118:35:118:44 | +| jca/MACOperation.java:118:35:118:44 | HMACAlgorithm | RawName | HmacSHA1 | jca/MACOperation.java:118:35:118:44 | jca/MACOperation.java:118:35:118:44 | +| jca/MACOperation.java:118:35:118:44 | HashAlgorithm | DigestSize | 160 | jca/MACOperation.java:118:35:118:44 | jca/MACOperation.java:118:35:118:44 | +| jca/MACOperation.java:118:35:118:44 | HashAlgorithm | Name | SHA1 | jca/MACOperation.java:118:35:118:44 | jca/MACOperation.java:118:35:118:44 | +| jca/MACOperation.java:118:35:118:44 | HashAlgorithm | RawName | HmacSHA1 | jca/MACOperation.java:118:35:118:44 | jca/MACOperation.java:118:35:118:44 | +| jca/MACOperation.java:120:18:120:26 | Key | KeyType | Unknown | jca/MACOperation.java:120:18:120:26 | jca/MACOperation.java:120:18:120:26 | +| jca/MACOperation.java:121:16:121:46 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:121:16:121:46 | jca/MACOperation.java:121:16:121:46 | +| jca/MACOperation.java:133:34:133:49 | Parameter | Description | macOutput | jca/MACOperation.java:133:34:133:49 | jca/MACOperation.java:133:34:133:49 | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | Name | AES | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | Structure | Block | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | ModeOfOperation | Name | GCM | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | ModeOfOperation | RawName | GCM | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | PaddingAlgorithm | Name | UnknownPadding | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:136:44:136:62 | PaddingAlgorithm | RawName | NoPadding | jca/MACOperation.java:136:44:136:62 | jca/MACOperation.java:136:44:136:62 | +| jca/MACOperation.java:137:42:137:44 | Key | KeyType | Unknown | jca/MACOperation.java:137:42:137:44 | jca/MACOperation.java:137:42:137:44 | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/MACOperation.java:138:32:138:74 | jca/MACOperation.java:138:32:138:74 | +| jca/MACOperation.java:138:47:138:62 | Constant | Description | "Sensitive Data" | jca/MACOperation.java:138:47:138:62 | jca/MACOperation.java:138:47:138:62 | +| jca/MACOperation.java:150:36:150:51 | Parameter | Description | macOutput | jca/MACOperation.java:150:36:150:51 | jca/MACOperation.java:150:36:150:51 | +| jca/MACOperation.java:166:47:166:62 | Parameter | Description | macOutput | jca/MACOperation.java:166:47:166:62 | jca/MACOperation.java:166:47:166:62 | +| jca/MACOperation.java:170:77:170:81 | Constant | Description | 10000 | jca/MACOperation.java:170:77:170:81 | jca/MACOperation.java:170:77:170:81 | +| jca/MACOperation.java:170:84:170:86 | Constant | Description | 256 | jca/MACOperation.java:170:84:170:86 | jca/MACOperation.java:170:84:170:86 | +| jca/MACOperation.java:171:65:171:86 | HMACAlgorithm | Name | HMAC | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | HashAlgorithm | DigestSize | 256 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | HashAlgorithm | Name | SHA2 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:171:65:171:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/MACOperation.java:171:65:171:86 | jca/MACOperation.java:171:65:171:86 | +| jca/MACOperation.java:172:30:172:57 | Key | KeyType | Symmetric | jca/MACOperation.java:172:30:172:57 | jca/MACOperation.java:172:30:172:57 | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | Iterations | Constant:10000 | jca/MACOperation.java:170:77:170:81 | jca/MACOperation.java:170:77:170:81 | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | KeySize | Constant:256 | jca/MACOperation.java:170:84:170:86 | jca/MACOperation.java:170:84:170:86 | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | Name | AES | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | Structure | Block | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | ModeOfOperation | Name | GCM | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | ModeOfOperation | RawName | GCM | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | PaddingAlgorithm | Name | UnknownPadding | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:180:44:180:62 | PaddingAlgorithm | RawName | NoPadding | jca/MACOperation.java:180:44:180:62 | jca/MACOperation.java:180:44:180:62 | +| jca/MACOperation.java:181:42:181:54 | Key | KeyType | Unknown | jca/MACOperation.java:181:42:181:54 | jca/MACOperation.java:181:42:181:54 | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/MACOperation.java:182:29:182:78 | jca/MACOperation.java:182:29:182:78 | +| jca/MACOperation.java:182:44:182:66 | Constant | Description | "Further Use Test Data" | jca/MACOperation.java:182:44:182:66 | jca/MACOperation.java:182:44:182:66 | +| jca/MACOperation.java:185:35:185:46 | HMACAlgorithm | Name | HMAC | jca/MACOperation.java:185:35:185:46 | jca/MACOperation.java:185:35:185:46 | +| jca/MACOperation.java:185:35:185:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/MACOperation.java:185:35:185:46 | jca/MACOperation.java:185:35:185:46 | +| jca/MACOperation.java:185:35:185:46 | HashAlgorithm | DigestSize | 256 | jca/MACOperation.java:185:35:185:46 | jca/MACOperation.java:185:35:185:46 | +| jca/MACOperation.java:185:35:185:46 | HashAlgorithm | Name | SHA2 | jca/MACOperation.java:185:35:185:46 | jca/MACOperation.java:185:35:185:46 | +| jca/MACOperation.java:185:35:185:46 | HashAlgorithm | RawName | HmacSHA256 | jca/MACOperation.java:185:35:185:46 | jca/MACOperation.java:185:35:185:46 | +| jca/MACOperation.java:186:18:186:30 | Key | KeyType | Unknown | jca/MACOperation.java:186:18:186:30 | jca/MACOperation.java:186:18:186:30 | +| jca/MACOperation.java:187:30:187:52 | MACOperation | KeyOperationSubtype | Mac | jca/MACOperation.java:187:30:187:52 | jca/MACOperation.java:187:30:187:52 | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | Name | AES | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | Structure | Block | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | ModeOfOperation | Name | GCM | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | ModeOfOperation | RawName | GCM | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | PaddingAlgorithm | Name | UnknownPadding | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:216:44:216:62 | PaddingAlgorithm | RawName | NoPadding | jca/MACOperation.java:216:44:216:62 | jca/MACOperation.java:216:44:216:62 | +| jca/MACOperation.java:218:42:218:44 | Key | KeyType | Unknown | jca/MACOperation.java:218:42:218:44 | jca/MACOperation.java:218:42:218:44 | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/MACOperation.java:219:32:219:51 | jca/MACOperation.java:219:32:219:51 | +| jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/MACOperation.java:233:21:233:23 | jca/MACOperation.java:233:21:233:23 | +| jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | Name | AES | jca/MACOperation.java:232:56:232:60 | jca/MACOperation.java:232:56:232:60 | +| jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | RawName | AES | jca/MACOperation.java:232:56:232:60 | jca/MACOperation.java:232:56:232:60 | +| jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | Structure | Block | jca/MACOperation.java:232:56:232:60 | jca/MACOperation.java:232:56:232:60 | +| jca/MACOperation.java:233:21:233:23 | Constant | Description | 256 | jca/MACOperation.java:233:21:233:23 | jca/MACOperation.java:233:21:233:23 | +| jca/MACOperation.java:234:16:234:35 | Key | KeyType | Symmetric | jca/MACOperation.java:234:16:234:35 | jca/MACOperation.java:234:16:234:35 | +| jca/MACOperation.java:246:38:246:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/MACOperation.java:246:38:246:41 | jca/MACOperation.java:246:38:246:41 | +| jca/Nonce.java:24:35:24:46 | HMACAlgorithm | Name | HMAC | jca/Nonce.java:24:35:24:46 | jca/Nonce.java:24:35:24:46 | +| jca/Nonce.java:24:35:24:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:24:35:24:46 | jca/Nonce.java:24:35:24:46 | +| jca/Nonce.java:24:35:24:46 | HashAlgorithm | DigestSize | 256 | jca/Nonce.java:24:35:24:46 | jca/Nonce.java:24:35:24:46 | +| jca/Nonce.java:24:35:24:46 | HashAlgorithm | Name | SHA2 | jca/Nonce.java:24:35:24:46 | jca/Nonce.java:24:35:24:46 | +| jca/Nonce.java:24:35:24:46 | HashAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:24:35:24:46 | jca/Nonce.java:24:35:24:46 | +| jca/Nonce.java:25:18:25:20 | Key | KeyType | Unknown | jca/Nonce.java:25:18:25:20 | jca/Nonce.java:25:18:25:20 | +| jca/Nonce.java:27:28:27:69 | MACOperation | KeyOperationSubtype | Mac | jca/Nonce.java:27:28:27:69 | jca/Nonce.java:27:28:27:69 | +| jca/Nonce.java:27:40:27:57 | Constant | Description | "Simple Test Data" | jca/Nonce.java:27:40:27:57 | jca/Nonce.java:27:40:27:57 | +| jca/Nonce.java:35:24:35:41 | Constant | Description | "BADNONCEBADNONCE" | jca/Nonce.java:35:24:35:41 | jca/Nonce.java:35:24:35:41 | +| jca/Nonce.java:37:35:37:46 | HMACAlgorithm | Name | HMAC | jca/Nonce.java:37:35:37:46 | jca/Nonce.java:37:35:37:46 | +| jca/Nonce.java:37:35:37:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:37:35:37:46 | jca/Nonce.java:37:35:37:46 | +| jca/Nonce.java:37:35:37:46 | HashAlgorithm | DigestSize | 256 | jca/Nonce.java:37:35:37:46 | jca/Nonce.java:37:35:37:46 | +| jca/Nonce.java:37:35:37:46 | HashAlgorithm | Name | SHA2 | jca/Nonce.java:37:35:37:46 | jca/Nonce.java:37:35:37:46 | +| jca/Nonce.java:37:35:37:46 | HashAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:37:35:37:46 | jca/Nonce.java:37:35:37:46 | +| jca/Nonce.java:38:18:38:20 | Key | KeyType | Unknown | jca/Nonce.java:38:18:38:20 | jca/Nonce.java:38:18:38:20 | +| jca/Nonce.java:40:28:40:67 | MACOperation | KeyOperationSubtype | Mac | jca/Nonce.java:40:28:40:67 | jca/Nonce.java:40:28:40:67 | +| jca/Nonce.java:40:40:40:55 | Constant | Description | "Sensitive Data" | jca/Nonce.java:40:40:40:55 | jca/Nonce.java:40:40:40:55 | +| jca/Nonce.java:47:39:47:51 | Parameter | Description | key | jca/Nonce.java:47:39:47:51 | jca/Nonce.java:47:39:47:51 | +| jca/Nonce.java:47:54:47:69 | Parameter | Description | plaintext | jca/Nonce.java:47:54:47:69 | jca/Nonce.java:47:54:47:69 | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | Name | AES | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | Structure | Block | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | ModeOfOperation | Name | GCM | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | ModeOfOperation | RawName | GCM | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:50:44:50:62 | PaddingAlgorithm | RawName | NoPadding | jca/Nonce.java:50:44:50:62 | jca/Nonce.java:50:44:50:62 | +| jca/Nonce.java:51:42:51:44 | Key | KeyType | Unknown | jca/Nonce.java:51:42:51:44 | jca/Nonce.java:51:42:51:44 | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Nonce.java:52:29:52:53 | jca/Nonce.java:52:29:52:53 | +| jca/Nonce.java:58:37:58:49 | Parameter | Description | key | jca/Nonce.java:58:37:58:49 | jca/Nonce.java:58:37:58:49 | +| jca/Nonce.java:58:52:58:67 | Parameter | Description | plaintext | jca/Nonce.java:58:52:58:67 | jca/Nonce.java:58:52:58:67 | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | Name | AES | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | Structure | Block | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | ModeOfOperation | Name | GCM | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | ModeOfOperation | RawName | GCM | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | PaddingAlgorithm | Name | UnknownPadding | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:61:44:61:62 | PaddingAlgorithm | RawName | NoPadding | jca/Nonce.java:61:44:61:62 | jca/Nonce.java:61:44:61:62 | +| jca/Nonce.java:62:42:62:44 | Key | KeyType | Unknown | jca/Nonce.java:62:42:62:44 | jca/Nonce.java:62:42:62:44 | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/Nonce.java:63:29:63:53 | jca/Nonce.java:63:29:63:53 | +| jca/Nonce.java:70:53:70:64 | HMACAlgorithm | Name | HMAC | jca/Nonce.java:70:53:70:64 | jca/Nonce.java:70:53:70:64 | +| jca/Nonce.java:70:53:70:64 | HMACAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:70:53:70:64 | jca/Nonce.java:70:53:70:64 | +| jca/Nonce.java:70:53:70:64 | HashAlgorithm | DigestSize | 256 | jca/Nonce.java:70:53:70:64 | jca/Nonce.java:70:53:70:64 | +| jca/Nonce.java:70:53:70:64 | HashAlgorithm | Name | SHA2 | jca/Nonce.java:70:53:70:64 | jca/Nonce.java:70:53:70:64 | +| jca/Nonce.java:70:53:70:64 | HashAlgorithm | RawName | HmacSHA256 | jca/Nonce.java:70:53:70:64 | jca/Nonce.java:70:53:70:64 | +| jca/Nonce.java:78:18:78:20 | Key | KeyType | Unknown | jca/Nonce.java:78:18:78:20 | jca/Nonce.java:78:18:78:20 | +| jca/Nonce.java:80:28:80:67 | MACOperation | KeyOperationSubtype | Mac | jca/Nonce.java:80:28:80:67 | jca/Nonce.java:80:28:80:67 | +| jca/Nonce.java:80:40:80:55 | Constant | Description | "Sensitive Data" | jca/Nonce.java:80:40:80:55 | jca/Nonce.java:80:40:80:55 | +| jca/Nonce.java:92:56:92:67 | Constant | Description | "HmacSHA256" | jca/Nonce.java:92:56:92:67 | jca/Nonce.java:92:56:92:67 | +| jca/Nonce.java:93:16:93:35 | Key | KeyType | Symmetric | jca/Nonce.java:93:16:93:35 | jca/Nonce.java:93:16:93:35 | +| jca/Nonce.java:98:38:98:42 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/Nonce.java:98:38:98:42 | jca/Nonce.java:98:38:98:42 | +| jca/Nonce.java:104:32:104:36 | RandomNumberGeneration | Description | java.util.Random | jca/Nonce.java:104:32:104:36 | jca/Nonce.java:104:32:104:36 | +| jca/Nonce.java:112:16:112:33 | Constant | Description | "BADNONCEBADNONCE" | jca/Nonce.java:112:16:112:33 | jca/Nonce.java:112:16:112:33 | +| jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/PrngTest.java:153:21:153:23 | jca/PrngTest.java:153:21:153:23 | +| jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | Name | AES | jca/PrngTest.java:152:56:152:60 | jca/PrngTest.java:152:56:152:60 | +| jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | RawName | AES | jca/PrngTest.java:152:56:152:60 | jca/PrngTest.java:152:56:152:60 | +| jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | Structure | Block | jca/PrngTest.java:152:56:152:60 | jca/PrngTest.java:152:56:152:60 | +| jca/PrngTest.java:153:21:153:23 | Constant | Description | 256 | jca/PrngTest.java:153:21:153:23 | jca/PrngTest.java:153:21:153:23 | +| jca/PrngTest.java:154:16:154:35 | Key | KeyType | Symmetric | jca/PrngTest.java:154:16:154:35 | jca/PrngTest.java:154:16:154:35 | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | CurveType | SEC | jca/SignEncryptCombinations.java:52:49:52:59 | jca/SignEncryptCombinations.java:52:49:52:59 | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | KeySize | 256 | jca/SignEncryptCombinations.java:52:49:52:59 | jca/SignEncryptCombinations.java:52:49:52:59 | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | Name | secp256r1 | jca/SignEncryptCombinations.java:52:49:52:59 | jca/SignEncryptCombinations.java:52:49:52:59 | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | ParsedName | secp256r1 | jca/SignEncryptCombinations.java:52:49:52:59 | jca/SignEncryptCombinations.java:52:49:52:59 | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | RawName | secp256r1 | jca/SignEncryptCombinations.java:52:49:52:59 | jca/SignEncryptCombinations.java:52:49:52:59 | +| jca/SignEncryptCombinations.java:53:16:53:38 | Key | KeyType | Asymmetric | jca/SignEncryptCombinations.java:53:16:53:38 | jca/SignEncryptCombinations.java:53:16:53:38 | +| jca/SignEncryptCombinations.java:61:53:61:69 | HashAlgorithm | DigestSize | 256 | jca/SignEncryptCombinations.java:61:53:61:69 | jca/SignEncryptCombinations.java:61:53:61:69 | +| jca/SignEncryptCombinations.java:61:53:61:69 | HashAlgorithm | Name | SHA2 | jca/SignEncryptCombinations.java:61:53:61:69 | jca/SignEncryptCombinations.java:61:53:61:69 | +| jca/SignEncryptCombinations.java:61:53:61:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/SignEncryptCombinations.java:61:53:61:69 | jca/SignEncryptCombinations.java:61:53:61:69 | +| jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | Name | ECDSA | jca/SignEncryptCombinations.java:61:53:61:69 | jca/SignEncryptCombinations.java:61:53:61:69 | +| jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/SignEncryptCombinations.java:61:53:61:69 | jca/SignEncryptCombinations.java:61:53:61:69 | +| jca/SignEncryptCombinations.java:62:28:62:34 | Key | KeyType | Unknown | jca/SignEncryptCombinations.java:62:28:62:34 | jca/SignEncryptCombinations.java:62:28:62:34 | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | KeyOperationSubtype | Sign | jca/SignEncryptCombinations.java:64:16:64:31 | jca/SignEncryptCombinations.java:64:16:64:31 | +| jca/SignEncryptCombinations.java:68:53:68:69 | HashAlgorithm | DigestSize | 256 | jca/SignEncryptCombinations.java:68:53:68:69 | jca/SignEncryptCombinations.java:68:53:68:69 | +| jca/SignEncryptCombinations.java:68:53:68:69 | HashAlgorithm | Name | SHA2 | jca/SignEncryptCombinations.java:68:53:68:69 | jca/SignEncryptCombinations.java:68:53:68:69 | +| jca/SignEncryptCombinations.java:68:53:68:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/SignEncryptCombinations.java:68:53:68:69 | jca/SignEncryptCombinations.java:68:53:68:69 | +| jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | Name | ECDSA | jca/SignEncryptCombinations.java:68:53:68:69 | jca/SignEncryptCombinations.java:68:53:68:69 | +| jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/SignEncryptCombinations.java:68:53:68:69 | jca/SignEncryptCombinations.java:68:53:68:69 | +| jca/SignEncryptCombinations.java:69:30:69:35 | Key | KeyType | Unknown | jca/SignEncryptCombinations.java:69:30:69:35 | jca/SignEncryptCombinations.java:69:30:69:35 | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignEncryptCombinations.java:71:16:71:47 | jca/SignEncryptCombinations.java:71:16:71:47 | +| jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/SignEncryptCombinations.java:83:17:83:19 | jca/SignEncryptCombinations.java:83:17:83:19 | +| jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | Name | AES | jca/SignEncryptCombinations.java:82:52:82:56 | jca/SignEncryptCombinations.java:82:52:82:56 | +| jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | RawName | AES | jca/SignEncryptCombinations.java:82:52:82:56 | jca/SignEncryptCombinations.java:82:52:82:56 | +| jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | Structure | Block | jca/SignEncryptCombinations.java:82:52:82:56 | jca/SignEncryptCombinations.java:82:52:82:56 | +| jca/SignEncryptCombinations.java:83:17:83:19 | Constant | Description | 256 | jca/SignEncryptCombinations.java:83:17:83:19 | jca/SignEncryptCombinations.java:83:17:83:19 | +| jca/SignEncryptCombinations.java:84:16:84:31 | Key | KeyType | Symmetric | jca/SignEncryptCombinations.java:84:16:84:31 | jca/SignEncryptCombinations.java:84:16:84:31 | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | Name | AES | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | Structure | Block | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | ModeOfOperation | Name | GCM | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | ModeOfOperation | RawName | GCM | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:92:44:92:62 | PaddingAlgorithm | RawName | NoPadding | jca/SignEncryptCombinations.java:92:44:92:62 | jca/SignEncryptCombinations.java:92:44:92:62 | +| jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SignEncryptCombinations.java:94:26:94:27 | jca/SignEncryptCombinations.java:94:26:94:27 | +| jca/SignEncryptCombinations.java:96:42:96:44 | Key | KeyType | Unknown | jca/SignEncryptCombinations.java:96:42:96:44 | jca/SignEncryptCombinations.java:96:42:96:44 | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SignEncryptCombinations.java:97:29:97:53 | jca/SignEncryptCombinations.java:97:29:97:53 | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | Name | AES | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | Structure | Block | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | ModeOfOperation | Name | GCM | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | ModeOfOperation | RawName | GCM | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:111:44:111:62 | PaddingAlgorithm | RawName | NoPadding | jca/SignEncryptCombinations.java:111:44:111:62 | jca/SignEncryptCombinations.java:111:44:111:62 | +| jca/SignEncryptCombinations.java:112:42:112:44 | Key | KeyType | Unknown | jca/SignEncryptCombinations.java:112:42:112:44 | jca/SignEncryptCombinations.java:112:42:112:44 | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | KeyOperationSubtype | Decrypt | jca/SignEncryptCombinations.java:113:16:113:41 | jca/SignEncryptCombinations.java:113:16:113:41 | +| jca/SignEncryptCombinations.java:121:35:121:46 | HMACAlgorithm | Name | HMAC | jca/SignEncryptCombinations.java:121:35:121:46 | jca/SignEncryptCombinations.java:121:35:121:46 | +| jca/SignEncryptCombinations.java:121:35:121:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/SignEncryptCombinations.java:121:35:121:46 | jca/SignEncryptCombinations.java:121:35:121:46 | +| jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | DigestSize | 256 | jca/SignEncryptCombinations.java:121:35:121:46 | jca/SignEncryptCombinations.java:121:35:121:46 | +| jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | Name | SHA2 | jca/SignEncryptCombinations.java:121:35:121:46 | jca/SignEncryptCombinations.java:121:35:121:46 | +| jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | RawName | HmacSHA256 | jca/SignEncryptCombinations.java:121:35:121:46 | jca/SignEncryptCombinations.java:121:35:121:46 | +| jca/SignEncryptCombinations.java:122:18:122:20 | Key | KeyType | Unknown | jca/SignEncryptCombinations.java:122:18:122:20 | jca/SignEncryptCombinations.java:122:18:122:20 | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | KeyOperationSubtype | Mac | jca/SignEncryptCombinations.java:123:16:123:32 | jca/SignEncryptCombinations.java:123:16:123:32 | +| jca/SignEncryptCombinations.java:335:26:335:47 | Constant | Description | "Hello, combinations!" | jca/SignEncryptCombinations.java:335:26:335:47 | jca/SignEncryptCombinations.java:335:26:335:47 | +| jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | KeySize | Constant:2048 | jca/SignatureOperation.java:53:24:53:27 | jca/SignatureOperation.java:53:24:53:27 | +| jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:52:61:52:65 | jca/SignatureOperation.java:52:61:52:65 | +| jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | RawName | RSA | jca/SignatureOperation.java:52:61:52:65 | jca/SignatureOperation.java:52:61:52:65 | +| jca/SignatureOperation.java:53:24:53:27 | Constant | Description | 2048 | jca/SignatureOperation.java:53:24:53:27 | jca/SignatureOperation.java:53:24:53:27 | +| jca/SignatureOperation.java:54:16:54:36 | Key | KeyType | Asymmetric | jca/SignatureOperation.java:54:16:54:36 | jca/SignatureOperation.java:54:16:54:36 | +| jca/SignatureOperation.java:63:53:63:74 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:63:53:63:74 | jca/SignatureOperation.java:63:53:63:74 | +| jca/SignatureOperation.java:63:53:63:74 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:63:53:63:74 | jca/SignatureOperation.java:63:53:63:74 | +| jca/SignatureOperation.java:63:53:63:74 | HashAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:63:53:63:74 | jca/SignatureOperation.java:63:53:63:74 | +| jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:63:53:63:74 | jca/SignatureOperation.java:63:53:63:74 | +| jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:63:53:63:74 | jca/SignatureOperation.java:63:53:63:74 | +| jca/SignatureOperation.java:64:28:64:37 | Key | KeyType | Unknown | jca/SignatureOperation.java:64:28:64:37 | jca/SignatureOperation.java:64:28:64:37 | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | KeyOperationSubtype | Sign | jca/SignatureOperation.java:66:16:66:31 | jca/SignatureOperation.java:66:16:66:31 | +| jca/SignatureOperation.java:75:53:75:74 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:75:53:75:74 | jca/SignatureOperation.java:75:53:75:74 | +| jca/SignatureOperation.java:75:53:75:74 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:75:53:75:74 | jca/SignatureOperation.java:75:53:75:74 | +| jca/SignatureOperation.java:75:53:75:74 | HashAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:75:53:75:74 | jca/SignatureOperation.java:75:53:75:74 | +| jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:75:53:75:74 | jca/SignatureOperation.java:75:53:75:74 | +| jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:75:53:75:74 | jca/SignatureOperation.java:75:53:75:74 | +| jca/SignatureOperation.java:76:30:76:38 | Key | KeyType | Unknown | jca/SignatureOperation.java:76:30:76:38 | jca/SignatureOperation.java:76:30:76:38 | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignatureOperation.java:78:16:78:41 | jca/SignatureOperation.java:78:16:78:41 | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | CurveType | SEC | jca/SignatureOperation.java:93:49:93:59 | jca/SignatureOperation.java:93:49:93:59 | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | KeySize | 256 | jca/SignatureOperation.java:93:49:93:59 | jca/SignatureOperation.java:93:49:93:59 | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | Name | secp256r1 | jca/SignatureOperation.java:93:49:93:59 | jca/SignatureOperation.java:93:49:93:59 | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | ParsedName | secp256r1 | jca/SignatureOperation.java:93:49:93:59 | jca/SignatureOperation.java:93:49:93:59 | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | RawName | secp256r1 | jca/SignatureOperation.java:93:49:93:59 | jca/SignatureOperation.java:93:49:93:59 | +| jca/SignatureOperation.java:94:16:94:38 | Key | KeyType | Asymmetric | jca/SignatureOperation.java:94:16:94:38 | jca/SignatureOperation.java:94:16:94:38 | +| jca/SignatureOperation.java:103:53:103:69 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:103:53:103:69 | jca/SignatureOperation.java:103:53:103:69 | +| jca/SignatureOperation.java:103:53:103:69 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:103:53:103:69 | jca/SignatureOperation.java:103:53:103:69 | +| jca/SignatureOperation.java:103:53:103:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:103:53:103:69 | jca/SignatureOperation.java:103:53:103:69 | +| jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | Name | ECDSA | jca/SignatureOperation.java:103:53:103:69 | jca/SignatureOperation.java:103:53:103:69 | +| jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:103:53:103:69 | jca/SignatureOperation.java:103:53:103:69 | +| jca/SignatureOperation.java:104:28:104:37 | Key | KeyType | Unknown | jca/SignatureOperation.java:104:28:104:37 | jca/SignatureOperation.java:104:28:104:37 | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | KeyOperationSubtype | Sign | jca/SignatureOperation.java:106:16:106:31 | jca/SignatureOperation.java:106:16:106:31 | +| jca/SignatureOperation.java:115:53:115:69 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:115:53:115:69 | jca/SignatureOperation.java:115:53:115:69 | +| jca/SignatureOperation.java:115:53:115:69 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:115:53:115:69 | jca/SignatureOperation.java:115:53:115:69 | +| jca/SignatureOperation.java:115:53:115:69 | HashAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:115:53:115:69 | jca/SignatureOperation.java:115:53:115:69 | +| jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | Name | ECDSA | jca/SignatureOperation.java:115:53:115:69 | jca/SignatureOperation.java:115:53:115:69 | +| jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:115:53:115:69 | jca/SignatureOperation.java:115:53:115:69 | +| jca/SignatureOperation.java:116:30:116:38 | Key | KeyType | Unknown | jca/SignatureOperation.java:116:30:116:38 | jca/SignatureOperation.java:116:30:116:38 | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignatureOperation.java:118:16:118:41 | jca/SignatureOperation.java:118:16:118:41 | +| jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | Name | EDSA | jca/SignatureOperation.java:132:61:132:69 | jca/SignatureOperation.java:132:61:132:69 | +| jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | RawName | Ed25519 | jca/SignatureOperation.java:132:61:132:69 | jca/SignatureOperation.java:132:61:132:69 | +| jca/SignatureOperation.java:133:16:133:36 | Key | KeyType | Asymmetric | jca/SignatureOperation.java:133:16:133:36 | jca/SignatureOperation.java:133:16:133:36 | +| jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | Name | EDSA | jca/SignatureOperation.java:142:53:142:61 | jca/SignatureOperation.java:142:53:142:61 | +| jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | RawName | Ed25519 | jca/SignatureOperation.java:142:53:142:61 | jca/SignatureOperation.java:142:53:142:61 | +| jca/SignatureOperation.java:143:28:143:37 | Key | KeyType | Unknown | jca/SignatureOperation.java:143:28:143:37 | jca/SignatureOperation.java:143:28:143:37 | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | KeyOperationSubtype | Sign | jca/SignatureOperation.java:145:16:145:31 | jca/SignatureOperation.java:145:16:145:31 | +| jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | Name | EDSA | jca/SignatureOperation.java:154:53:154:61 | jca/SignatureOperation.java:154:53:154:61 | +| jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | RawName | Ed25519 | jca/SignatureOperation.java:154:53:154:61 | jca/SignatureOperation.java:154:53:154:61 | +| jca/SignatureOperation.java:155:30:155:38 | Key | KeyType | Unknown | jca/SignatureOperation.java:155:30:155:38 | jca/SignatureOperation.java:155:30:155:38 | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignatureOperation.java:157:16:157:41 | jca/SignatureOperation.java:157:16:157:41 | +| jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | KeySize | Constant:1024 | jca/SignatureOperation.java:174:24:174:27 | jca/SignatureOperation.java:174:24:174:27 | +| jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:173:61:173:65 | jca/SignatureOperation.java:173:61:173:65 | +| jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | RawName | RSA | jca/SignatureOperation.java:173:61:173:65 | jca/SignatureOperation.java:173:61:173:65 | +| jca/SignatureOperation.java:174:24:174:27 | Constant | Description | 1024 | jca/SignatureOperation.java:174:24:174:27 | jca/SignatureOperation.java:174:24:174:27 | +| jca/SignatureOperation.java:175:16:175:36 | Key | KeyType | Asymmetric | jca/SignatureOperation.java:175:16:175:36 | jca/SignatureOperation.java:175:16:175:36 | +| jca/SignatureOperation.java:185:53:185:65 | HashAlgorithm | DigestSize | 160 | jca/SignatureOperation.java:185:53:185:65 | jca/SignatureOperation.java:185:53:185:65 | +| jca/SignatureOperation.java:185:53:185:65 | HashAlgorithm | Name | SHA1 | jca/SignatureOperation.java:185:53:185:65 | jca/SignatureOperation.java:185:53:185:65 | +| jca/SignatureOperation.java:185:53:185:65 | HashAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:185:53:185:65 | jca/SignatureOperation.java:185:53:185:65 | +| jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:185:53:185:65 | jca/SignatureOperation.java:185:53:185:65 | +| jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:185:53:185:65 | jca/SignatureOperation.java:185:53:185:65 | +| jca/SignatureOperation.java:186:28:186:37 | Key | KeyType | Unknown | jca/SignatureOperation.java:186:28:186:37 | jca/SignatureOperation.java:186:28:186:37 | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | KeyOperationSubtype | Sign | jca/SignatureOperation.java:188:16:188:31 | jca/SignatureOperation.java:188:16:188:31 | +| jca/SignatureOperation.java:198:53:198:65 | HashAlgorithm | DigestSize | 160 | jca/SignatureOperation.java:198:53:198:65 | jca/SignatureOperation.java:198:53:198:65 | +| jca/SignatureOperation.java:198:53:198:65 | HashAlgorithm | Name | SHA1 | jca/SignatureOperation.java:198:53:198:65 | jca/SignatureOperation.java:198:53:198:65 | +| jca/SignatureOperation.java:198:53:198:65 | HashAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:198:53:198:65 | jca/SignatureOperation.java:198:53:198:65 | +| jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:198:53:198:65 | jca/SignatureOperation.java:198:53:198:65 | +| jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:198:53:198:65 | jca/SignatureOperation.java:198:53:198:65 | +| jca/SignatureOperation.java:199:30:199:38 | Key | KeyType | Unknown | jca/SignatureOperation.java:199:30:199:38 | jca/SignatureOperation.java:199:30:199:38 | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignatureOperation.java:201:16:201:41 | jca/SignatureOperation.java:201:16:201:41 | +| jca/SignatureOperation.java:231:26:231:44 | Constant | Description | "Important Message" | jca/SignatureOperation.java:231:26:231:44 | jca/SignatureOperation.java:231:26:231:44 | +| jca/SignatureOperation.java:236:27:236:30 | Constant | Description | 0x01 | jca/SignatureOperation.java:236:27:236:30 | jca/SignatureOperation.java:236:27:236:30 | +| jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:266:47:266:68 | jca/SignatureOperation.java:266:47:266:68 | +| jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:266:47:266:68 | jca/SignatureOperation.java:266:47:266:68 | +| jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:266:47:266:68 | jca/SignatureOperation.java:266:47:266:68 | +| jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:266:47:266:68 | jca/SignatureOperation.java:266:47:266:68 | +| jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:266:47:266:68 | jca/SignatureOperation.java:266:47:266:68 | +| jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:269:47:269:63 | jca/SignatureOperation.java:269:47:269:63 | +| jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:269:47:269:63 | jca/SignatureOperation.java:269:47:269:63 | +| jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:269:47:269:63 | jca/SignatureOperation.java:269:47:269:63 | +| jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | Name | ECDSA | jca/SignatureOperation.java:269:47:269:63 | jca/SignatureOperation.java:269:47:269:63 | +| jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | RawName | SHA256withECDSA | jca/SignatureOperation.java:269:47:269:63 | jca/SignatureOperation.java:269:47:269:63 | +| jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | Name | EDSA | jca/SignatureOperation.java:272:47:272:55 | jca/SignatureOperation.java:272:47:272:55 | +| jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | RawName | Ed25519 | jca/SignatureOperation.java:272:47:272:55 | jca/SignatureOperation.java:272:47:272:55 | +| jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | DigestSize | 160 | jca/SignatureOperation.java:275:47:275:59 | jca/SignatureOperation.java:275:47:275:59 | +| jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | Name | SHA1 | jca/SignatureOperation.java:275:47:275:59 | jca/SignatureOperation.java:275:47:275:59 | +| jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:275:47:275:59 | jca/SignatureOperation.java:275:47:275:59 | +| jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:275:47:275:59 | jca/SignatureOperation.java:275:47:275:59 | +| jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | RawName | SHA1withRSA | jca/SignatureOperation.java:275:47:275:59 | jca/SignatureOperation.java:275:47:275:59 | +| jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | DigestSize | 256 | jca/SignatureOperation.java:279:47:279:68 | jca/SignatureOperation.java:279:47:279:68 | +| jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | Name | SHA2 | jca/SignatureOperation.java:279:47:279:68 | jca/SignatureOperation.java:279:47:279:68 | +| jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:279:47:279:68 | jca/SignatureOperation.java:279:47:279:68 | +| jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | Name | RSA | jca/SignatureOperation.java:279:47:279:68 | jca/SignatureOperation.java:279:47:279:68 | +| jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | RawName | SHA256withRSAandMGF1 | jca/SignatureOperation.java:279:47:279:68 | jca/SignatureOperation.java:279:47:279:68 | +| jca/SignatureOperation.java:282:26:282:49 | Constant | Description | "Dynamic Signature Demo" | jca/SignatureOperation.java:282:26:282:49 | jca/SignatureOperation.java:282:26:282:49 | +| jca/SignatureOperation.java:283:28:283:42 | Key | KeyType | Unknown | jca/SignatureOperation.java:283:28:283:42 | jca/SignatureOperation.java:283:28:283:42 | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | KeyOperationSubtype | Sign | jca/SignatureOperation.java:285:27:285:42 | jca/SignatureOperation.java:285:27:285:42 | +| jca/SignatureOperation.java:287:30:287:43 | Key | KeyType | Unknown | jca/SignatureOperation.java:287:30:287:43 | jca/SignatureOperation.java:287:30:287:43 | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | KeyOperationSubtype | Verify | jca/SignatureOperation.java:289:28:289:53 | jca/SignatureOperation.java:289:28:289:53 | +| jca/SignatureOperation.java:311:26:311:49 | Constant | Description | "Hello Signature World!" | jca/SignatureOperation.java:311:26:311:49 | jca/SignatureOperation.java:311:26:311:49 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | ModeOfOperation | Name | GCM | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | ModeOfOperation | RawName | GCM | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:51:44:51:62 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricAlgorithm.java:51:44:51:62 | jca/SymmetricAlgorithm.java:51:44:51:62 | +| jca/SymmetricAlgorithm.java:53:38:53:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:53:38:53:39 | jca/SymmetricAlgorithm.java:53:38:53:39 | +| jca/SymmetricAlgorithm.java:55:42:55:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:55:42:55:44 | jca/SymmetricAlgorithm.java:55:42:55:44 | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:56:29:56:53 | jca/SymmetricAlgorithm.java:56:29:56:53 | +| jca/SymmetricAlgorithm.java:72:39:72:51 | Parameter | Description | key | jca/SymmetricAlgorithm.java:72:39:72:51 | jca/SymmetricAlgorithm.java:72:39:72:51 | +| jca/SymmetricAlgorithm.java:72:54:72:69 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:72:54:72:69 | jca/SymmetricAlgorithm.java:72:54:72:69 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | ModeOfOperation | Name | GCM | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | ModeOfOperation | RawName | GCM | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:73:44:73:62 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricAlgorithm.java:73:44:73:62 | jca/SymmetricAlgorithm.java:73:44:73:62 | +| jca/SymmetricAlgorithm.java:76:42:76:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:76:42:76:44 | jca/SymmetricAlgorithm.java:76:42:76:44 | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:77:29:77:53 | jca/SymmetricAlgorithm.java:77:29:77:53 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | RawName | AES/CBC/PKCS5Padding | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | ModeOfOperation | Name | CBC | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | ModeOfOperation | RawName | CBC | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | PaddingAlgorithm | Name | PKCS7 | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:94:44:94:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/SymmetricAlgorithm.java:94:44:94:65 | jca/SymmetricAlgorithm.java:94:44:94:65 | +| jca/SymmetricAlgorithm.java:96:38:96:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:96:38:96:39 | jca/SymmetricAlgorithm.java:96:38:96:39 | +| jca/SymmetricAlgorithm.java:98:42:98:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:98:42:98:44 | jca/SymmetricAlgorithm.java:98:42:98:44 | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:99:29:99:53 | jca/SymmetricAlgorithm.java:99:29:99:53 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | RawName | AES/ECB/PKCS5Padding | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | ModeOfOperation | Name | ECB | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | ModeOfOperation | RawName | ECB | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | PaddingAlgorithm | Name | PKCS7 | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:116:44:116:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/SymmetricAlgorithm.java:116:44:116:65 | jca/SymmetricAlgorithm.java:116:44:116:65 | +| jca/SymmetricAlgorithm.java:117:42:117:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:117:42:117:44 | jca/SymmetricAlgorithm.java:117:42:117:44 | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:118:16:118:40 | jca/SymmetricAlgorithm.java:118:16:118:40 | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | Name | RC4 | jca/SymmetricAlgorithm.java:131:44:131:48 | jca/SymmetricAlgorithm.java:131:44:131:48 | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | RawName | RC4 | jca/SymmetricAlgorithm.java:131:44:131:48 | jca/SymmetricAlgorithm.java:131:44:131:48 | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | Structure | Stream | jca/SymmetricAlgorithm.java:131:44:131:48 | jca/SymmetricAlgorithm.java:131:44:131:48 | +| jca/SymmetricAlgorithm.java:132:42:132:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:132:42:132:44 | jca/SymmetricAlgorithm.java:132:42:132:44 | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:133:16:133:40 | jca/SymmetricAlgorithm.java:133:16:133:40 | +| jca/SymmetricAlgorithm.java:145:36:145:48 | Parameter | Description | key | jca/SymmetricAlgorithm.java:145:36:145:48 | jca/SymmetricAlgorithm.java:145:36:145:48 | +| jca/SymmetricAlgorithm.java:145:51:145:66 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:145:51:145:66 | jca/SymmetricAlgorithm.java:145:51:145:66 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | KeySize | 56 | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | Name | DES | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | RawName | DES/CBC/PKCS5Padding | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | ModeOfOperation | Name | CBC | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | ModeOfOperation | RawName | CBC | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | PaddingAlgorithm | Name | PKCS7 | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:146:44:146:65 | PaddingAlgorithm | RawName | PKCS5Padding | jca/SymmetricAlgorithm.java:146:44:146:65 | jca/SymmetricAlgorithm.java:146:44:146:65 | +| jca/SymmetricAlgorithm.java:148:38:148:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:148:38:148:39 | jca/SymmetricAlgorithm.java:148:38:148:39 | +| jca/SymmetricAlgorithm.java:150:42:150:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:150:42:150:44 | jca/SymmetricAlgorithm.java:150:42:150:44 | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:151:29:151:53 | jca/SymmetricAlgorithm.java:151:29:151:53 | +| jca/SymmetricAlgorithm.java:167:42:167:54 | Parameter | Description | key | jca/SymmetricAlgorithm.java:167:42:167:54 | jca/SymmetricAlgorithm.java:167:42:167:54 | +| jca/SymmetricAlgorithm.java:167:57:167:72 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:167:57:167:72 | jca/SymmetricAlgorithm.java:167:57:167:72 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | KeySize | 56 | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | Name | DES | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | RawName | DESede/CBC/PKCS5Padding | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | ModeOfOperation | Name | CBC | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | ModeOfOperation | RawName | CBC | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | PaddingAlgorithm | Name | PKCS7 | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:168:44:168:68 | PaddingAlgorithm | RawName | PKCS5Padding | jca/SymmetricAlgorithm.java:168:44:168:68 | jca/SymmetricAlgorithm.java:168:44:168:68 | +| jca/SymmetricAlgorithm.java:170:38:170:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:170:38:170:39 | jca/SymmetricAlgorithm.java:170:38:170:39 | +| jca/SymmetricAlgorithm.java:172:42:172:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:172:42:172:44 | jca/SymmetricAlgorithm.java:172:42:172:44 | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:173:29:173:53 | jca/SymmetricAlgorithm.java:173:29:173:53 | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | KeySize | 256 | jca/SymmetricAlgorithm.java:190:44:190:53 | jca/SymmetricAlgorithm.java:190:44:190:53 | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | Name | ChaCha20 | jca/SymmetricAlgorithm.java:190:44:190:53 | jca/SymmetricAlgorithm.java:190:44:190:53 | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | RawName | ChaCha20 | jca/SymmetricAlgorithm.java:190:44:190:53 | jca/SymmetricAlgorithm.java:190:44:190:53 | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | Structure | Stream | jca/SymmetricAlgorithm.java:190:44:190:53 | jca/SymmetricAlgorithm.java:190:44:190:53 | +| jca/SymmetricAlgorithm.java:192:38:192:42 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:192:38:192:42 | jca/SymmetricAlgorithm.java:192:38:192:42 | +| jca/SymmetricAlgorithm.java:194:42:194:44 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:194:42:194:44 | jca/SymmetricAlgorithm.java:194:42:194:44 | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:195:29:195:53 | jca/SymmetricAlgorithm.java:195:29:195:53 | +| jca/SymmetricAlgorithm.java:212:35:212:47 | Parameter | Description | key | jca/SymmetricAlgorithm.java:212:35:212:47 | jca/SymmetricAlgorithm.java:212:35:212:47 | +| jca/SymmetricAlgorithm.java:212:50:212:65 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:212:50:212:65 | jca/SymmetricAlgorithm.java:212:50:212:65 | +| jca/SymmetricAlgorithm.java:213:36:213:44 | Constant | Description | "KMAC128" | jca/SymmetricAlgorithm.java:213:36:213:44 | jca/SymmetricAlgorithm.java:213:36:213:44 | +| jca/SymmetricAlgorithm.java:214:19:214:21 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:214:19:214:21 | jca/SymmetricAlgorithm.java:214:19:214:21 | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | KeyOperationSubtype | Mac | jca/SymmetricAlgorithm.java:215:29:215:51 | jca/SymmetricAlgorithm.java:215:29:215:51 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | ModeOfOperation | Name | GCM | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | ModeOfOperation | RawName | GCM | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:218:44:218:62 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricAlgorithm.java:218:44:218:62 | jca/SymmetricAlgorithm.java:218:44:218:62 | +| jca/SymmetricAlgorithm.java:220:38:220:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:220:38:220:39 | jca/SymmetricAlgorithm.java:220:38:220:39 | +| jca/SymmetricAlgorithm.java:222:42:222:51 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:222:42:222:51 | jca/SymmetricAlgorithm.java:222:42:222:51 | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:223:29:223:53 | jca/SymmetricAlgorithm.java:223:29:223:53 | +| jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | Description | key | jca/SymmetricAlgorithm.java:244:64:244:76 | jca/SymmetricAlgorithm.java:244:64:244:76 | +| jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:244:79:244:94 | jca/SymmetricAlgorithm.java:244:79:244:94 | +| jca/SymmetricAlgorithm.java:284:58:284:70 | Parameter | Description | key | jca/SymmetricAlgorithm.java:284:58:284:70 | jca/SymmetricAlgorithm.java:284:58:284:70 | +| jca/SymmetricAlgorithm.java:284:73:284:88 | Parameter | Description | plaintext | jca/SymmetricAlgorithm.java:284:73:284:88 | jca/SymmetricAlgorithm.java:284:73:284:88 | +| jca/SymmetricAlgorithm.java:287:75:287:79 | Constant | Description | 10000 | jca/SymmetricAlgorithm.java:287:75:287:79 | jca/SymmetricAlgorithm.java:287:75:287:79 | +| jca/SymmetricAlgorithm.java:287:82:287:84 | Constant | Description | 256 | jca/SymmetricAlgorithm.java:287:82:287:84 | jca/SymmetricAlgorithm.java:287:82:287:84 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HMACAlgorithm | Name | HMAC | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HMACAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HashAlgorithm | DigestSize | 256 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HashAlgorithm | Name | SHA2 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HashAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | KeyDerivationAlgorithm | Name | PBKDF2WithHmacSHA256 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:288:65:288:86 | KeyDerivationAlgorithm | RawName | PBKDF2WithHmacSHA256 | jca/SymmetricAlgorithm.java:288:65:288:86 | jca/SymmetricAlgorithm.java:288:65:288:86 | +| jca/SymmetricAlgorithm.java:289:26:289:53 | Key | KeyType | Symmetric | jca/SymmetricAlgorithm.java:289:26:289:53 | jca/SymmetricAlgorithm.java:289:26:289:53 | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | Iterations | Constant:10000 | jca/SymmetricAlgorithm.java:287:75:287:79 | jca/SymmetricAlgorithm.java:287:75:287:79 | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | KeySize | Constant:256 | jca/SymmetricAlgorithm.java:287:82:287:84 | jca/SymmetricAlgorithm.java:287:82:287:84 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | ModeOfOperation | Name | GCM | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | ModeOfOperation | RawName | GCM | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:295:44:295:62 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricAlgorithm.java:295:44:295:62 | jca/SymmetricAlgorithm.java:295:44:295:62 | +| jca/SymmetricAlgorithm.java:297:38:297:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:297:38:297:39 | jca/SymmetricAlgorithm.java:297:38:297:39 | +| jca/SymmetricAlgorithm.java:298:42:298:47 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:298:42:298:47 | jca/SymmetricAlgorithm.java:298:42:298:47 | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricAlgorithm.java:299:29:299:53 | jca/SymmetricAlgorithm.java:299:29:299:53 | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HMACAlgorithm | Name | HMAC | jca/SymmetricAlgorithm.java:301:35:301:46 | jca/SymmetricAlgorithm.java:301:35:301:46 | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HMACAlgorithm | RawName | HmacSHA256 | jca/SymmetricAlgorithm.java:301:35:301:46 | jca/SymmetricAlgorithm.java:301:35:301:46 | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | DigestSize | 256 | jca/SymmetricAlgorithm.java:301:35:301:46 | jca/SymmetricAlgorithm.java:301:35:301:46 | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | Name | SHA2 | jca/SymmetricAlgorithm.java:301:35:301:46 | jca/SymmetricAlgorithm.java:301:35:301:46 | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | RawName | HmacSHA256 | jca/SymmetricAlgorithm.java:301:35:301:46 | jca/SymmetricAlgorithm.java:301:35:301:46 | +| jca/SymmetricAlgorithm.java:302:18:302:30 | Key | KeyType | Unknown | jca/SymmetricAlgorithm.java:302:18:302:30 | jca/SymmetricAlgorithm.java:302:18:302:30 | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | KeyOperationSubtype | Mac | jca/SymmetricAlgorithm.java:303:30:303:52 | jca/SymmetricAlgorithm.java:303:30:303:52 | +| jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/SymmetricAlgorithm.java:332:17:332:19 | jca/SymmetricAlgorithm.java:332:17:332:19 | +| jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | Name | AES | jca/SymmetricAlgorithm.java:331:52:331:56 | jca/SymmetricAlgorithm.java:331:52:331:56 | +| jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | RawName | AES | jca/SymmetricAlgorithm.java:331:52:331:56 | jca/SymmetricAlgorithm.java:331:52:331:56 | +| jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricAlgorithm.java:331:52:331:56 | jca/SymmetricAlgorithm.java:331:52:331:56 | +| jca/SymmetricAlgorithm.java:332:17:332:19 | Constant | Description | 256 | jca/SymmetricAlgorithm.java:332:17:332:19 | jca/SymmetricAlgorithm.java:332:17:332:19 | +| jca/SymmetricAlgorithm.java:333:16:333:31 | Key | KeyType | Symmetric | jca/SymmetricAlgorithm.java:333:16:333:31 | jca/SymmetricAlgorithm.java:333:16:333:31 | +| jca/SymmetricAlgorithm.java:345:38:345:41 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricAlgorithm.java:345:38:345:41 | jca/SymmetricAlgorithm.java:345:38:345:41 | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | KeySize | Constant:128 | jca/SymmetricModesTest.java:53:17:53:19 | jca/SymmetricModesTest.java:53:17:53:19 | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/SymmetricModesTest.java:49:17:49:19 | jca/SymmetricModesTest.java:49:17:49:19 | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | Name | AES | jca/SymmetricModesTest.java:48:52:48:56 | jca/SymmetricModesTest.java:48:52:48:56 | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | RawName | AES | jca/SymmetricModesTest.java:48:52:48:56 | jca/SymmetricModesTest.java:48:52:48:56 | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricModesTest.java:48:52:48:56 | jca/SymmetricModesTest.java:48:52:48:56 | +| jca/SymmetricModesTest.java:49:17:49:19 | Constant | Description | 256 | jca/SymmetricModesTest.java:49:17:49:19 | jca/SymmetricModesTest.java:49:17:49:19 | +| jca/SymmetricModesTest.java:50:33:50:48 | Key | KeyType | Symmetric | jca/SymmetricModesTest.java:50:33:50:48 | jca/SymmetricModesTest.java:50:33:50:48 | +| jca/SymmetricModesTest.java:53:17:53:19 | Constant | Description | 128 | jca/SymmetricModesTest.java:53:17:53:19 | jca/SymmetricModesTest.java:53:17:53:19 | +| jca/SymmetricModesTest.java:54:31:54:46 | Key | KeyType | Symmetric | jca/SymmetricModesTest.java:54:31:54:46 | jca/SymmetricModesTest.java:54:31:54:46 | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | Name | AES | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | RawName | AES/KWP/NoPadding | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:57:44:57:62 | ModeOfOperation | RawName | KWP | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:57:44:57:62 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:57:44:57:62 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricModesTest.java:57:44:57:62 | jca/SymmetricModesTest.java:57:44:57:62 | +| jca/SymmetricModesTest.java:58:39:58:49 | Key | KeyType | Unknown | jca/SymmetricModesTest.java:58:39:58:49 | jca/SymmetricModesTest.java:58:39:58:49 | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | KeyOperationSubtype | Wrap | jca/SymmetricModesTest.java:59:29:59:50 | jca/SymmetricModesTest.java:59:29:59:50 | +| jca/SymmetricModesTest.java:78:43:78:55 | Parameter | Description | key | jca/SymmetricModesTest.java:78:43:78:55 | jca/SymmetricModesTest.java:78:43:78:55 | +| jca/SymmetricModesTest.java:78:58:78:73 | Parameter | Description | plaintext | jca/SymmetricModesTest.java:78:58:78:73 | jca/SymmetricModesTest.java:78:58:78:73 | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | Name | AES | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | RawName | AES/OFB8/NoPadding | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:79:44:79:63 | ModeOfOperation | RawName | OFB8 | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:79:44:79:63 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:79:44:79:63 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricModesTest.java:79:44:79:63 | jca/SymmetricModesTest.java:79:44:79:63 | +| jca/SymmetricModesTest.java:81:38:81:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/SymmetricModesTest.java:81:38:81:39 | jca/SymmetricModesTest.java:81:38:81:39 | +| jca/SymmetricModesTest.java:83:42:83:44 | Key | KeyType | Unknown | jca/SymmetricModesTest.java:83:42:83:44 | jca/SymmetricModesTest.java:83:42:83:44 | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricModesTest.java:84:29:84:53 | jca/SymmetricModesTest.java:84:29:84:53 | +| jca/SymmetricModesTest.java:104:45:104:57 | Parameter | Description | key | jca/SymmetricModesTest.java:104:45:104:57 | jca/SymmetricModesTest.java:104:45:104:57 | +| jca/SymmetricModesTest.java:104:60:104:75 | Parameter | Description | plaintext | jca/SymmetricModesTest.java:104:60:104:75 | jca/SymmetricModesTest.java:104:60:104:75 | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | Name | AES | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | RawName | AES/OFB8/NoPadding | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:105:44:105:63 | ModeOfOperation | RawName | OFB8 | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:105:44:105:63 | PaddingAlgorithm | Name | UnknownPadding | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:105:44:105:63 | PaddingAlgorithm | RawName | NoPadding | jca/SymmetricModesTest.java:105:44:105:63 | jca/SymmetricModesTest.java:105:44:105:63 | +| jca/SymmetricModesTest.java:109:42:109:44 | Key | KeyType | Unknown | jca/SymmetricModesTest.java:109:42:109:44 | jca/SymmetricModesTest.java:109:42:109:44 | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/SymmetricModesTest.java:110:29:110:53 | jca/SymmetricModesTest.java:110:29:110:53 | +| jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/SymmetricModesTest.java:128:17:128:19 | jca/SymmetricModesTest.java:128:17:128:19 | +| jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | Name | AES | jca/SymmetricModesTest.java:127:52:127:56 | jca/SymmetricModesTest.java:127:52:127:56 | +| jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | RawName | AES | jca/SymmetricModesTest.java:127:52:127:56 | jca/SymmetricModesTest.java:127:52:127:56 | +| jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | Structure | Block | jca/SymmetricModesTest.java:127:52:127:56 | jca/SymmetricModesTest.java:127:52:127:56 | +| jca/SymmetricModesTest.java:128:17:128:19 | Constant | Description | 256 | jca/SymmetricModesTest.java:128:17:128:19 | jca/SymmetricModesTest.java:128:17:128:19 | +| jca/SymmetricModesTest.java:129:16:129:31 | Key | KeyType | Symmetric | jca/SymmetricModesTest.java:129:16:129:31 | jca/SymmetricModesTest.java:129:16:129:31 | +| jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/UniversalFlowTest.java:26:21:26:23 | jca/UniversalFlowTest.java:26:21:26:23 | +| jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | Name | AES | jca/UniversalFlowTest.java:19:28:19:32 | jca/UniversalFlowTest.java:19:28:19:32 | +| jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | RawName | AES | jca/UniversalFlowTest.java:19:28:19:32 | jca/UniversalFlowTest.java:19:28:19:32 | +| jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | Structure | Block | jca/UniversalFlowTest.java:19:28:19:32 | jca/UniversalFlowTest.java:19:28:19:32 | +| jca/UniversalFlowTest.java:26:21:26:23 | Constant | Description | 256 | jca/UniversalFlowTest.java:26:21:26:23 | jca/UniversalFlowTest.java:26:21:26:23 | +| jca/UniversalFlowTest.java:27:25:27:44 | Key | KeyType | Symmetric | jca/UniversalFlowTest.java:27:25:27:44 | jca/UniversalFlowTest.java:27:25:27:44 | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | Name | AES | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | RawName | AES/GCM/NoPadding | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | Structure | Block | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | ModeOfOperation | Name | GCM | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | ModeOfOperation | RawName | GCM | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | PaddingAlgorithm | Name | UnknownPadding | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:28:29:28:47 | PaddingAlgorithm | RawName | NoPadding | jca/UniversalFlowTest.java:28:29:28:47 | jca/UniversalFlowTest.java:28:29:28:47 | +| jca/UniversalFlowTest.java:31:38:31:39 | RandomNumberGeneration | Description | java.security.SecureRandom | jca/UniversalFlowTest.java:31:38:31:39 | jca/UniversalFlowTest.java:31:38:31:39 | +| jca/UniversalFlowTest.java:33:42:33:44 | Key | KeyType | Unknown | jca/UniversalFlowTest.java:33:42:33:44 | jca/UniversalFlowTest.java:33:42:33:44 | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | KeyOperationSubtype | Encrypt | jca/UniversalFlowTest.java:34:32:34:74 | jca/UniversalFlowTest.java:34:32:34:74 | +| jca/UniversalFlowTest.java:34:47:34:62 | Constant | Description | "Sensitive Data" | jca/UniversalFlowTest.java:34:47:34:62 | jca/UniversalFlowTest.java:34:47:34:62 | +| jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | KeySize | Constant:256 | jca/UniversalFlowTest.java:26:21:26:23 | jca/UniversalFlowTest.java:26:21:26:23 | +| jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | Name | AES | jca/UniversalFlowTest.java:46:20:46:24 | jca/UniversalFlowTest.java:46:20:46:24 | +| jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | RawName | AES | jca/UniversalFlowTest.java:46:20:46:24 | jca/UniversalFlowTest.java:46:20:46:24 | +| jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | Structure | Block | jca/UniversalFlowTest.java:46:20:46:24 | jca/UniversalFlowTest.java:46:20:46:24 | diff --git a/java/ql/test/experimental/library-tests/quantum/node_properties.ql b/java/ql/test/experimental/library-tests/quantum/node_properties.ql new file mode 100644 index 00000000000..79514611e67 --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/node_properties.ql @@ -0,0 +1,6 @@ +import java +import experimental.quantum.Language + +from Crypto::NodeBase n, string key, string value, Location location +where n.properties(key, value, location) +select n, key, value, location diff --git a/java/ql/test/experimental/library-tests/quantum/nodes.expected b/java/ql/test/experimental/library-tests/quantum/nodes.expected new file mode 100644 index 00000000000..b9661aaf64f --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/nodes.expected @@ -0,0 +1,1510 @@ +| jca/AesWrapAndPBEWith.java:58:52:58:56 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:59:17:59:19 | Constant | +| jca/AesWrapAndPBEWith.java:60:33:60:48 | Key | +| jca/AesWrapAndPBEWith.java:60:33:60:48 | KeyGeneration | +| jca/AesWrapAndPBEWith.java:62:17:62:19 | Constant | +| jca/AesWrapAndPBEWith.java:63:31:63:46 | Key | +| jca/AesWrapAndPBEWith.java:63:31:63:46 | KeyGeneration | +| jca/AesWrapAndPBEWith.java:65:44:65:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:66:39:66:49 | Key | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:67:29:67:50 | WrapOperation | +| jca/AesWrapAndPBEWith.java:67:41:67:49 | Message | +| jca/AesWrapAndPBEWith.java:83:52:83:56 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:84:17:84:19 | Constant | +| jca/AesWrapAndPBEWith.java:85:31:85:46 | Key | +| jca/AesWrapAndPBEWith.java:85:31:85:46 | KeyGeneration | +| jca/AesWrapAndPBEWith.java:87:44:87:52 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:88:39:88:49 | Key | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:89:29:89:50 | WrapOperation | +| jca/AesWrapAndPBEWith.java:89:41:89:49 | Message | +| jca/AesWrapAndPBEWith.java:106:34:106:37 | Constant | +| jca/AesWrapAndPBEWith.java:107:42:107:63 | Message | +| jca/AesWrapAndPBEWith.java:107:66:107:69 | Salt | +| jca/AesWrapAndPBEWith.java:107:72:107:75 | Constant | +| jca/AesWrapAndPBEWith.java:107:78:107:79 | Constant | +| jca/AesWrapAndPBEWith.java:108:65:108:82 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | Key | +| jca/AesWrapAndPBEWith.java:109:27:109:54 | KeyDerivation | +| jca/AesWrapAndPBEWith.java:122:38:122:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:123:42:123:63 | Message | +| jca/AesWrapAndPBEWith.java:123:66:123:69 | Salt | +| jca/AesWrapAndPBEWith.java:123:72:123:76 | Constant | +| jca/AesWrapAndPBEWith.java:123:79:123:81 | Constant | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HMACAlgorithm | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | HashAlgorithm | +| jca/AesWrapAndPBEWith.java:124:65:124:86 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | Key | +| jca/AesWrapAndPBEWith.java:125:27:125:54 | KeyDerivation | +| jca/AesWrapAndPBEWith.java:140:38:140:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:141:42:141:63 | Message | +| jca/AesWrapAndPBEWith.java:141:66:141:69 | Salt | +| jca/AesWrapAndPBEWith.java:141:72:141:76 | Constant | +| jca/AesWrapAndPBEWith.java:141:79:141:81 | Constant | +| jca/AesWrapAndPBEWith.java:142:65:142:98 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | Key | +| jca/AesWrapAndPBEWith.java:143:28:143:55 | KeyDerivation | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | ModeOfOperation | +| jca/AesWrapAndPBEWith.java:146:44:146:65 | PaddingAlgorithm | +| jca/AesWrapAndPBEWith.java:148:38:148:39 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:150:42:150:47 | Key | +| jca/AesWrapAndPBEWith.java:150:50:150:55 | Nonce | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | EncryptOperation | +| jca/AesWrapAndPBEWith.java:151:29:151:64 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:151:44:151:63 | Message | +| jca/AesWrapAndPBEWith.java:167:38:167:41 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:168:42:168:63 | Message | +| jca/AesWrapAndPBEWith.java:168:66:168:69 | Salt | +| jca/AesWrapAndPBEWith.java:168:72:168:76 | Constant | +| jca/AesWrapAndPBEWith.java:168:79:168:81 | Constant | +| jca/AesWrapAndPBEWith.java:169:65:169:96 | KeyDerivationAlgorithm | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | Key | +| jca/AesWrapAndPBEWith.java:170:28:170:55 | KeyDerivation | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | KeyOperationAlgorithm | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | ModeOfOperation | +| jca/AesWrapAndPBEWith.java:173:44:173:65 | PaddingAlgorithm | +| jca/AesWrapAndPBEWith.java:175:38:175:39 | RandomNumberGeneration | +| jca/AesWrapAndPBEWith.java:177:42:177:47 | Key | +| jca/AesWrapAndPBEWith.java:177:50:177:55 | Nonce | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | EncryptOperation | +| jca/AesWrapAndPBEWith.java:178:29:178:64 | KeyOperationOutput | +| jca/AesWrapAndPBEWith.java:178:44:178:63 | Message | +| jca/AesWrapAndPBEWith.java:200:55:200:69 | Parameter | +| jca/AesWrapAndPBEWith.java:200:72:200:87 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:86:47:86:57 | EllipticCurve | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:87:16:87:36 | KeyGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:94:61:94:68 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:95:24:95:26 | Constant | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:96:16:96:36 | KeyGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:109:17:109:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:110:20:110:28 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | KeyAgreementOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:111:16:111:34 | SharedSecret | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:123:58:123:66 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | Digest | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:23:124:42 | HashOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:124:37:124:41 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:145:61:145:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:146:24:146:27 | Constant | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:147:16:147:36 | KeyGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:154:61:154:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:155:24:155:27 | Constant | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:156:16:156:36 | KeyGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:166:47:166:85 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:167:42:167:58 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:34:168:55 | WrapOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:168:49:168:54 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:171:38:171:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:172:47:172:65 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:45:173:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:173:53:173:81 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | EncryptOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:29:174:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:174:47:174:55 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:190:47:190:68 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:191:42:191:58 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:34:192:55 | WrapOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:192:49:192:54 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:195:47:195:65 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:45:196:50 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:196:53:196:86 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | EncryptOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:29:197:56 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:197:47:197:55 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:215:91:215:96 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:220:38:220:39 | RandomNumberGeneration | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:221:44:221:62 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:42:222:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:222:50:222:78 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | EncryptOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:29:223:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:223:44:223:52 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:239:95:239:100 | KeyAgreementAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | ModeOfOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:244:44:244:62 | PaddingAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:42:245:47 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:245:50:245:83 | Nonce | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | EncryptOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:29:246:53 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:246:44:246:52 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:271:58:271:73 | Parameter | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HMACAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:295:35:295:46 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:297:18:297:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:16:298:46 | MACOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:298:28:298:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HMACAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:306:35:306:44 | HashAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:308:18:308:26 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | KeyOperationOutput | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:16:309:46 | MACOperation | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:309:28:309:45 | Message | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:320:52:320:56 | KeyOperationAlgorithm | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:321:17:321:19 | Constant | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | Key | +| jca/AsymmetricEncryptionMacHybridCryptosystem.java:322:16:322:31 | KeyGeneration | +| jca/ChainedEncryptionTest.java:19:44:19:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:19:44:19:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:19:44:19:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:21:38:21:39 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:23:42:23:44 | Key | +| jca/ChainedEncryptionTest.java:23:47:23:50 | Nonce | +| jca/ChainedEncryptionTest.java:24:29:24:53 | EncryptOperation | +| jca/ChainedEncryptionTest.java:24:29:24:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:24:44:24:52 | Message | +| jca/ChainedEncryptionTest.java:32:44:32:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:32:44:32:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:32:44:32:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:34:42:34:44 | Key | +| jca/ChainedEncryptionTest.java:34:47:34:50 | Nonce | +| jca/ChainedEncryptionTest.java:35:16:35:41 | DecryptOperation | +| jca/ChainedEncryptionTest.java:35:16:35:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:35:31:35:40 | Message | +| jca/ChainedEncryptionTest.java:40:44:40:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:42:38:42:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:43:42:43:44 | Key | +| jca/ChainedEncryptionTest.java:43:47:43:72 | Nonce | +| jca/ChainedEncryptionTest.java:44:29:44:53 | EncryptOperation | +| jca/ChainedEncryptionTest.java:44:29:44:53 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:44:44:44:52 | Message | +| jca/ChainedEncryptionTest.java:52:44:52:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:53:42:53:44 | Key | +| jca/ChainedEncryptionTest.java:53:47:53:72 | Nonce | +| jca/ChainedEncryptionTest.java:54:16:54:41 | DecryptOperation | +| jca/ChainedEncryptionTest.java:54:16:54:41 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:54:31:54:40 | Message | +| jca/ChainedEncryptionTest.java:75:46:75:61 | Parameter | +| jca/ChainedEncryptionTest.java:79:56:79:60 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:80:21:80:23 | Constant | +| jca/ChainedEncryptionTest.java:81:30:81:49 | Key | +| jca/ChainedEncryptionTest.java:81:30:81:49 | KeyGeneration | +| jca/ChainedEncryptionTest.java:83:59:83:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:84:24:84:26 | Constant | +| jca/ChainedEncryptionTest.java:85:30:85:52 | Key | +| jca/ChainedEncryptionTest.java:85:30:85:52 | KeyGeneration | +| jca/ChainedEncryptionTest.java:89:38:89:42 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:90:47:90:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:90:47:90:65 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:90:47:90:65 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:92:45:92:52 | Key | +| jca/ChainedEncryptionTest.java:92:55:92:61 | Nonce | +| jca/ChainedEncryptionTest.java:93:34:93:62 | EncryptOperation | +| jca/ChainedEncryptionTest.java:93:34:93:62 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:93:52:93:61 | Message | +| jca/ChainedEncryptionTest.java:97:38:97:48 | RandomNumberGeneration | +| jca/ChainedEncryptionTest.java:98:50:98:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:99:48:99:55 | Key | +| jca/ChainedEncryptionTest.java:99:58:99:89 | Nonce | +| jca/ChainedEncryptionTest.java:100:34:100:70 | EncryptOperation | +| jca/ChainedEncryptionTest.java:100:34:100:70 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:100:55:100:69 | Message | +| jca/ChainedEncryptionTest.java:103:47:103:65 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:104:45:104:52 | Key | +| jca/ChainedEncryptionTest.java:104:55:104:86 | Nonce | +| jca/ChainedEncryptionTest.java:105:43:105:76 | DecryptOperation | +| jca/ChainedEncryptionTest.java:105:43:105:76 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:105:61:105:75 | Message | +| jca/ChainedEncryptionTest.java:108:44:108:62 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:108:44:108:62 | ModeOfOperation | +| jca/ChainedEncryptionTest.java:108:44:108:62 | PaddingAlgorithm | +| jca/ChainedEncryptionTest.java:109:42:109:49 | Key | +| jca/ChainedEncryptionTest.java:109:52:109:83 | Nonce | +| jca/ChainedEncryptionTest.java:110:37:110:76 | DecryptOperation | +| jca/ChainedEncryptionTest.java:110:37:110:76 | KeyOperationOutput | +| jca/ChainedEncryptionTest.java:110:52:110:75 | Message | +| jca/ChainedEncryptionTest.java:117:56:117:60 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:118:21:118:23 | Constant | +| jca/ChainedEncryptionTest.java:119:28:119:47 | Key | +| jca/ChainedEncryptionTest.java:119:28:119:47 | KeyGeneration | +| jca/ChainedEncryptionTest.java:122:59:122:68 | KeyOperationAlgorithm | +| jca/ChainedEncryptionTest.java:123:24:123:26 | Constant | +| jca/ChainedEncryptionTest.java:124:31:124:53 | Key | +| jca/ChainedEncryptionTest.java:124:31:124:53 | KeyGeneration | +| jca/ChainedEncryptionTest.java:126:31:126:57 | Constant | +| jca/Digest.java:54:58:54:66 | HashAlgorithm | +| jca/Digest.java:55:23:55:66 | Digest | +| jca/Digest.java:55:23:55:66 | HashOperation | +| jca/Digest.java:55:37:55:54 | Constant | +| jca/Digest.java:55:37:55:65 | Message | +| jca/Digest.java:64:61:64:65 | HashAlgorithm | +| jca/Digest.java:65:23:65:70 | Digest | +| jca/Digest.java:65:23:65:70 | HashOperation | +| jca/Digest.java:65:40:65:58 | Constant | +| jca/Digest.java:65:40:65:69 | Message | +| jca/Digest.java:73:49:73:63 | Parameter | +| jca/Digest.java:74:64:74:72 | HashAlgorithm | +| jca/Digest.java:75:23:75:62 | Digest | +| jca/Digest.java:75:23:75:62 | HashOperation | +| jca/Digest.java:75:43:75:61 | Message | +| jca/Digest.java:83:37:83:51 | Parameter | +| jca/Digest.java:85:58:85:66 | HashAlgorithm | +| jca/Digest.java:86:23:86:26 | Message | +| jca/Digest.java:87:23:87:56 | Digest | +| jca/Digest.java:87:23:87:56 | HashOperation | +| jca/Digest.java:87:37:87:55 | Message | +| jca/Digest.java:95:37:95:51 | Parameter | +| jca/Digest.java:97:42:97:63 | Message | +| jca/Digest.java:97:66:97:69 | Salt | +| jca/Digest.java:97:72:97:76 | Constant | +| jca/Digest.java:97:79:97:81 | Constant | +| jca/Digest.java:98:65:98:86 | HMACAlgorithm | +| jca/Digest.java:98:65:98:86 | HashAlgorithm | +| jca/Digest.java:98:65:98:86 | KeyDerivationAlgorithm | +| jca/Digest.java:99:23:99:50 | Key | +| jca/Digest.java:99:23:99:50 | KeyDerivation | +| jca/Digest.java:107:40:107:51 | Parameter | +| jca/Digest.java:108:62:108:68 | HashAlgorithm | +| jca/Digest.java:109:23:109:57 | Digest | +| jca/Digest.java:109:23:109:57 | HashOperation | +| jca/Digest.java:109:41:109:56 | Message | +| jca/Digest.java:117:35:117:46 | Parameter | +| jca/Digest.java:117:49:117:58 | Parameter | +| jca/Digest.java:118:36:118:47 | HMACAlgorithm | +| jca/Digest.java:118:36:118:47 | HashAlgorithm | +| jca/Digest.java:120:19:120:27 | Key | +| jca/Digest.java:121:23:121:52 | KeyOperationOutput | +| jca/Digest.java:121:23:121:52 | MACOperation | +| jca/Digest.java:121:36:121:51 | Message | +| jca/Digest.java:140:44:140:62 | KeyOperationAlgorithm | +| jca/Digest.java:140:44:140:62 | ModeOfOperation | +| jca/Digest.java:140:44:140:62 | PaddingAlgorithm | +| jca/Digest.java:141:42:141:44 | Key | +| jca/Digest.java:142:32:142:74 | EncryptOperation | +| jca/Digest.java:142:32:142:74 | KeyOperationOutput | +| jca/Digest.java:142:47:142:62 | Constant | +| jca/Digest.java:142:47:142:73 | Message | +| jca/Digest.java:155:39:155:51 | Parameter | +| jca/Digest.java:171:50:171:62 | Parameter | +| jca/Digest.java:176:42:176:71 | Message | +| jca/Digest.java:176:74:176:77 | Salt | +| jca/Digest.java:176:80:176:84 | Constant | +| jca/Digest.java:176:87:176:89 | Constant | +| jca/Digest.java:177:65:177:86 | HMACAlgorithm | +| jca/Digest.java:177:65:177:86 | HashAlgorithm | +| jca/Digest.java:177:65:177:86 | KeyDerivationAlgorithm | +| jca/Digest.java:178:30:178:57 | Key | +| jca/Digest.java:178:30:178:57 | KeyDerivation | +| jca/Digest.java:186:44:186:62 | KeyOperationAlgorithm | +| jca/Digest.java:186:44:186:62 | ModeOfOperation | +| jca/Digest.java:186:44:186:62 | PaddingAlgorithm | +| jca/Digest.java:187:42:187:54 | Key | +| jca/Digest.java:188:29:188:78 | EncryptOperation | +| jca/Digest.java:188:29:188:78 | KeyOperationOutput | +| jca/Digest.java:188:44:188:66 | Constant | +| jca/Digest.java:188:44:188:77 | Message | +| jca/Digest.java:191:35:191:46 | HMACAlgorithm | +| jca/Digest.java:191:35:191:46 | HashAlgorithm | +| jca/Digest.java:192:18:192:23 | Key | +| jca/Digest.java:193:30:193:52 | KeyOperationOutput | +| jca/Digest.java:193:30:193:52 | MACOperation | +| jca/Digest.java:193:42:193:51 | Message | +| jca/Digest.java:210:44:210:62 | KeyOperationAlgorithm | +| jca/Digest.java:210:44:210:62 | ModeOfOperation | +| jca/Digest.java:210:44:210:62 | PaddingAlgorithm | +| jca/Digest.java:212:42:212:44 | Key | +| jca/Digest.java:213:32:213:51 | EncryptOperation | +| jca/Digest.java:213:32:213:51 | KeyOperationOutput | +| jca/Digest.java:213:47:213:50 | Message | +| jca/Digest.java:239:56:239:60 | KeyOperationAlgorithm | +| jca/Digest.java:240:21:240:23 | Constant | +| jca/Digest.java:241:16:241:35 | Key | +| jca/Digest.java:241:16:241:35 | KeyGeneration | +| jca/Digest.java:253:38:253:41 | RandomNumberGeneration | +| jca/EllipticCurve1.java:46:66:46:76 | EllipticCurve | +| jca/EllipticCurve1.java:47:16:47:36 | Key | +| jca/EllipticCurve1.java:47:16:47:36 | KeyGeneration | +| jca/EllipticCurve1.java:56:66:56:76 | EllipticCurve | +| jca/EllipticCurve1.java:57:16:57:36 | Key | +| jca/EllipticCurve1.java:57:16:57:36 | KeyGeneration | +| jca/EllipticCurve1.java:66:66:66:82 | EllipticCurve | +| jca/EllipticCurve1.java:67:16:67:36 | Key | +| jca/EllipticCurve1.java:67:16:67:36 | KeyGeneration | +| jca/EllipticCurve1.java:74:61:74:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:76:16:76:36 | Key | +| jca/EllipticCurve1.java:76:16:76:36 | KeyGeneration | +| jca/EllipticCurve1.java:83:61:83:66 | KeyAgreementAlgorithm | +| jca/EllipticCurve1.java:84:16:84:36 | Key | +| jca/EllipticCurve1.java:84:16:84:36 | KeyGeneration | +| jca/EllipticCurve1.java:94:66:94:76 | EllipticCurve | +| jca/EllipticCurve1.java:95:16:95:36 | Key | +| jca/EllipticCurve1.java:95:16:95:36 | KeyGeneration | +| jca/EllipticCurve1.java:105:66:105:76 | Constant | +| jca/EllipticCurve1.java:106:16:106:36 | Key | +| jca/EllipticCurve1.java:106:16:106:36 | KeyGeneration | +| jca/EllipticCurve1.java:114:61:114:69 | KeyOperationAlgorithm | +| jca/EllipticCurve1.java:115:16:115:36 | Key | +| jca/EllipticCurve1.java:115:16:115:36 | KeyGeneration | +| jca/EllipticCurve2.java:46:47:46:57 | EllipticCurve | +| jca/EllipticCurve2.java:47:16:47:36 | Key | +| jca/EllipticCurve2.java:47:16:47:36 | KeyGeneration | +| jca/EllipticCurve2.java:55:47:55:57 | EllipticCurve | +| jca/EllipticCurve2.java:56:16:56:36 | Key | +| jca/EllipticCurve2.java:56:16:56:36 | KeyGeneration | +| jca/EllipticCurve2.java:64:47:64:63 | EllipticCurve | +| jca/EllipticCurve2.java:65:16:65:36 | Key | +| jca/EllipticCurve2.java:65:16:65:36 | KeyGeneration | +| jca/EllipticCurve2.java:72:61:72:68 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:73:16:73:36 | Key | +| jca/EllipticCurve2.java:73:16:73:36 | KeyGeneration | +| jca/EllipticCurve2.java:80:61:80:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:81:16:81:36 | Key | +| jca/EllipticCurve2.java:81:16:81:36 | KeyGeneration | +| jca/EllipticCurve2.java:105:52:105:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:106:17:106:36 | Key | +| jca/EllipticCurve2.java:107:20:107:36 | Key | +| jca/EllipticCurve2.java:108:16:108:34 | KeyAgreementOperation | +| jca/EllipticCurve2.java:108:16:108:34 | SharedSecret | +| jca/EllipticCurve2.java:119:52:119:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:120:17:120:37 | Key | +| jca/EllipticCurve2.java:121:20:121:39 | Key | +| jca/EllipticCurve2.java:122:16:122:34 | KeyAgreementOperation | +| jca/EllipticCurve2.java:122:16:122:34 | SharedSecret | +| jca/EllipticCurve2.java:136:53:136:69 | HashAlgorithm | +| jca/EllipticCurve2.java:136:53:136:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:137:28:137:42 | Key | +| jca/EllipticCurve2.java:138:26:138:32 | Message | +| jca/EllipticCurve2.java:139:16:139:31 | SignOperation | +| jca/EllipticCurve2.java:139:16:139:31 | SignatureOutput | +| jca/EllipticCurve2.java:151:53:151:69 | HashAlgorithm | +| jca/EllipticCurve2.java:151:53:151:69 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:152:30:152:43 | Key | +| jca/EllipticCurve2.java:153:26:153:32 | Message | +| jca/EllipticCurve2.java:154:16:154:47 | VerifyOperation | +| jca/EllipticCurve2.java:154:33:154:46 | SignatureInput | +| jca/EllipticCurve2.java:166:53:166:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:167:28:167:42 | Key | +| jca/EllipticCurve2.java:168:26:168:32 | Message | +| jca/EllipticCurve2.java:169:16:169:31 | SignOperation | +| jca/EllipticCurve2.java:169:16:169:31 | SignatureOutput | +| jca/EllipticCurve2.java:181:53:181:61 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:182:30:182:43 | Key | +| jca/EllipticCurve2.java:183:26:183:32 | Message | +| jca/EllipticCurve2.java:184:16:184:47 | VerifyOperation | +| jca/EllipticCurve2.java:184:33:184:46 | SignatureInput | +| jca/EllipticCurve2.java:206:52:206:57 | KeyAgreementAlgorithm | +| jca/EllipticCurve2.java:207:17:207:37 | Key | +| jca/EllipticCurve2.java:208:20:208:41 | Key | +| jca/EllipticCurve2.java:209:31:209:49 | KeyAgreementOperation | +| jca/EllipticCurve2.java:209:31:209:49 | SharedSecret | +| jca/EllipticCurve2.java:213:58:213:66 | HashAlgorithm | +| jca/EllipticCurve2.java:214:29:214:55 | Digest | +| jca/EllipticCurve2.java:214:29:214:55 | HashOperation | +| jca/EllipticCurve2.java:214:43:214:54 | Message | +| jca/EllipticCurve2.java:219:44:219:62 | KeyOperationAlgorithm | +| jca/EllipticCurve2.java:219:44:219:62 | ModeOfOperation | +| jca/EllipticCurve2.java:219:44:219:62 | PaddingAlgorithm | +| jca/EllipticCurve2.java:221:38:221:39 | RandomNumberGeneration | +| jca/EllipticCurve2.java:223:42:223:47 | Key | +| jca/EllipticCurve2.java:223:50:223:53 | Nonce | +| jca/EllipticCurve2.java:224:29:224:53 | EncryptOperation | +| jca/EllipticCurve2.java:224:29:224:53 | KeyOperationOutput | +| jca/EllipticCurve2.java:224:44:224:52 | Message | +| jca/EllipticCurve2.java:245:30:245:53 | Constant | +| jca/EllipticCurve2.java:258:62:258:83 | Constant | +| jca/Encryption1.java:60:56:60:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:61:21:61:23 | Constant | +| jca/Encryption1.java:62:25:62:44 | Key | +| jca/Encryption1.java:62:25:62:44 | KeyGeneration | +| jca/Encryption1.java:63:44:63:62 | KeyOperationAlgorithm | +| jca/Encryption1.java:63:44:63:62 | ModeOfOperation | +| jca/Encryption1.java:63:44:63:62 | PaddingAlgorithm | +| jca/Encryption1.java:65:38:65:39 | RandomNumberGeneration | +| jca/Encryption1.java:67:42:67:44 | Key | +| jca/Encryption1.java:67:47:67:53 | Nonce | +| jca/Encryption1.java:68:32:68:74 | EncryptOperation | +| jca/Encryption1.java:68:32:68:74 | KeyOperationOutput | +| jca/Encryption1.java:68:47:68:62 | Constant | +| jca/Encryption1.java:68:47:68:73 | Message | +| jca/Encryption1.java:83:56:83:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:84:21:84:23 | Constant | +| jca/Encryption1.java:85:25:85:44 | Key | +| jca/Encryption1.java:85:25:85:44 | KeyGeneration | +| jca/Encryption1.java:88:44:88:62 | KeyOperationAlgorithm | +| jca/Encryption1.java:88:44:88:62 | ModeOfOperation | +| jca/Encryption1.java:88:44:88:62 | PaddingAlgorithm | +| jca/Encryption1.java:89:42:89:44 | Key | +| jca/Encryption1.java:90:32:90:74 | EncryptOperation | +| jca/Encryption1.java:90:32:90:74 | KeyOperationOutput | +| jca/Encryption1.java:90:47:90:62 | Constant | +| jca/Encryption1.java:90:47:90:73 | Message | +| jca/Encryption1.java:104:35:104:53 | Parameter | +| jca/Encryption1.java:104:56:104:66 | Parameter | +| jca/Encryption1.java:105:44:105:82 | HashAlgorithm | +| jca/Encryption1.java:105:44:105:82 | KeyOperationAlgorithm | +| jca/Encryption1.java:105:44:105:82 | ModeOfOperation | +| jca/Encryption1.java:105:44:105:82 | PaddingAlgorithm | +| jca/Encryption1.java:106:42:106:50 | Key | +| jca/Encryption1.java:107:32:107:62 | EncryptOperation | +| jca/Encryption1.java:107:32:107:62 | KeyOperationOutput | +| jca/Encryption1.java:107:47:107:61 | Message | +| jca/Encryption1.java:119:35:119:55 | Parameter | +| jca/Encryption1.java:119:58:119:77 | Parameter | +| jca/Encryption1.java:120:44:120:82 | HashAlgorithm | +| jca/Encryption1.java:120:44:120:82 | KeyOperationAlgorithm | +| jca/Encryption1.java:120:44:120:82 | ModeOfOperation | +| jca/Encryption1.java:120:44:120:82 | PaddingAlgorithm | +| jca/Encryption1.java:121:42:121:51 | Key | +| jca/Encryption1.java:122:32:122:60 | DecryptOperation | +| jca/Encryption1.java:122:32:122:60 | KeyOperationOutput | +| jca/Encryption1.java:122:47:122:59 | Message | +| jca/Encryption1.java:136:34:136:55 | Parameter | +| jca/Encryption1.java:137:56:137:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:138:21:138:23 | Constant | +| jca/Encryption1.java:139:28:139:47 | Key | +| jca/Encryption1.java:139:28:139:47 | KeyGeneration | +| jca/Encryption1.java:141:47:141:85 | HashAlgorithm | +| jca/Encryption1.java:141:47:141:85 | KeyOperationAlgorithm | +| jca/Encryption1.java:141:47:141:85 | ModeOfOperation | +| jca/Encryption1.java:141:47:141:85 | PaddingAlgorithm | +| jca/Encryption1.java:142:45:142:56 | Key | +| jca/Encryption1.java:143:34:143:71 | EncryptOperation | +| jca/Encryption1.java:143:34:143:71 | KeyOperationOutput | +| jca/Encryption1.java:143:52:143:70 | Message | +| jca/Encryption1.java:159:34:159:55 | Parameter | +| jca/Encryption1.java:159:58:159:68 | Parameter | +| jca/Encryption1.java:161:56:161:60 | KeyOperationAlgorithm | +| jca/Encryption1.java:162:21:162:23 | Constant | +| jca/Encryption1.java:163:28:163:47 | Key | +| jca/Encryption1.java:163:28:163:47 | KeyGeneration | +| jca/Encryption1.java:166:47:166:85 | HashAlgorithm | +| jca/Encryption1.java:166:47:166:85 | KeyOperationAlgorithm | +| jca/Encryption1.java:166:47:166:85 | ModeOfOperation | +| jca/Encryption1.java:166:47:166:85 | PaddingAlgorithm | +| jca/Encryption1.java:167:45:167:56 | Key | +| jca/Encryption1.java:168:34:168:71 | EncryptOperation | +| jca/Encryption1.java:168:34:168:71 | KeyOperationOutput | +| jca/Encryption1.java:168:52:168:70 | Message | +| jca/Encryption1.java:171:47:171:65 | KeyOperationAlgorithm | +| jca/Encryption1.java:171:47:171:65 | ModeOfOperation | +| jca/Encryption1.java:171:47:171:65 | PaddingAlgorithm | +| jca/Encryption1.java:173:38:173:39 | RandomNumberGeneration | +| jca/Encryption1.java:175:45:175:50 | Key | +| jca/Encryption1.java:175:53:175:59 | Nonce | +| jca/Encryption1.java:176:32:176:65 | EncryptOperation | +| jca/Encryption1.java:176:32:176:65 | KeyOperationOutput | +| jca/Encryption1.java:176:50:176:64 | Message | +| jca/Encryption2.java:55:60:55:70 | EllipticCurve | +| jca/Encryption2.java:56:16:56:49 | Key | +| jca/Encryption2.java:56:16:56:49 | KeyGeneration | +| jca/Encryption2.java:71:62:71:67 | KeyAgreementAlgorithm | +| jca/Encryption2.java:72:27:72:36 | Key | +| jca/Encryption2.java:73:30:73:38 | Key | +| jca/Encryption2.java:74:16:74:44 | KeyAgreementOperation | +| jca/Encryption2.java:74:16:74:44 | SharedSecret | +| jca/Encryption2.java:90:38:90:65 | Parameter | +| jca/Encryption2.java:90:68:90:78 | Parameter | +| jca/Encryption2.java:99:58:99:66 | HashAlgorithm | +| jca/Encryption2.java:100:30:100:56 | Digest | +| jca/Encryption2.java:100:30:100:56 | HashOperation | +| jca/Encryption2.java:100:44:100:55 | Message | +| jca/Encryption2.java:105:47:105:65 | KeyOperationAlgorithm | +| jca/Encryption2.java:105:47:105:65 | ModeOfOperation | +| jca/Encryption2.java:105:47:105:65 | PaddingAlgorithm | +| jca/Encryption2.java:107:38:107:39 | RandomNumberGeneration | +| jca/Encryption2.java:109:45:109:50 | Key | +| jca/Encryption2.java:109:53:109:59 | Nonce | +| jca/Encryption2.java:110:32:110:65 | EncryptOperation | +| jca/Encryption2.java:110:32:110:65 | KeyOperationOutput | +| jca/Encryption2.java:110:50:110:64 | Message | +| jca/Encryption2.java:132:45:132:65 | Parameter | +| jca/Encryption2.java:132:68:132:88 | Parameter | +| jca/Encryption2.java:145:47:145:65 | KeyOperationAlgorithm | +| jca/Encryption2.java:145:47:145:65 | ModeOfOperation | +| jca/Encryption2.java:145:47:145:65 | PaddingAlgorithm | +| jca/Encryption2.java:147:38:147:39 | RandomNumberGeneration | +| jca/Encryption2.java:149:45:149:50 | Key | +| jca/Encryption2.java:149:53:149:59 | Nonce | +| jca/Encryption2.java:150:32:150:98 | EncryptOperation | +| jca/Encryption2.java:150:32:150:98 | KeyOperationOutput | +| jca/Encryption2.java:150:50:150:86 | Constant | +| jca/Encryption2.java:150:50:150:97 | Message | +| jca/Encryption2.java:173:36:173:47 | HMACAlgorithm | +| jca/Encryption2.java:173:36:173:47 | HashAlgorithm | +| jca/Encryption2.java:175:19:175:27 | Key | +| jca/Encryption2.java:176:31:176:52 | KeyOperationOutput | +| jca/Encryption2.java:176:31:176:52 | MACOperation | +| jca/Encryption2.java:176:44:176:51 | Message | +| jca/Hash.java:75:58:75:66 | HashAlgorithm | +| jca/Hash.java:76:23:76:66 | Digest | +| jca/Hash.java:76:23:76:66 | HashOperation | +| jca/Hash.java:76:37:76:54 | Constant | +| jca/Hash.java:76:37:76:65 | Message | +| jca/Hash.java:88:61:88:65 | HashAlgorithm | +| jca/Hash.java:89:23:89:70 | Digest | +| jca/Hash.java:89:23:89:70 | HashOperation | +| jca/Hash.java:89:40:89:58 | Constant | +| jca/Hash.java:89:40:89:69 | Message | +| jca/Hash.java:133:29:133:40 | Parameter | +| jca/Hash.java:133:43:133:63 | Parameter | +| jca/Hash.java:134:53:134:67 | HashAlgorithm | +| jca/Hash.java:134:53:134:67 | KeyOperationAlgorithm | +| jca/Hash.java:135:28:135:37 | Key | +| jca/Hash.java:136:26:136:41 | Message | +| jca/Hash.java:137:29:137:44 | SignOperation | +| jca/Hash.java:137:29:137:44 | SignatureOutput | +| jca/Hash.java:154:40:154:51 | Parameter | +| jca/Hash.java:154:54:154:70 | Parameter | +| jca/Hash.java:154:73:154:91 | Parameter | +| jca/Hash.java:155:53:155:67 | HashAlgorithm | +| jca/Hash.java:155:53:155:67 | KeyOperationAlgorithm | +| jca/Hash.java:156:30:156:38 | Key | +| jca/Hash.java:157:26:157:41 | Message | +| jca/Hash.java:158:16:158:43 | VerifyOperation | +| jca/Hash.java:158:33:158:42 | SignatureInput | +| jca/Hash.java:172:43:172:53 | Parameter | +| jca/Hash.java:173:58:173:66 | HashAlgorithm | +| jca/Hash.java:174:23:174:52 | Digest | +| jca/Hash.java:174:23:174:52 | HashOperation | +| jca/Hash.java:174:37:174:51 | Message | +| jca/Hash.java:190:43:190:54 | Parameter | +| jca/Hash.java:191:31:192:48 | Constant | +| jca/Hash.java:191:32:191:38 | HashAlgorithm | +| jca/Hash.java:191:41:191:49 | HashAlgorithm | +| jca/Hash.java:191:52:191:60 | HashAlgorithm | +| jca/Hash.java:191:63:191:71 | HashAlgorithm | +| jca/Hash.java:191:74:191:82 | HashAlgorithm | +| jca/Hash.java:191:85:191:94 | HashAlgorithm | +| jca/Hash.java:191:97:191:106 | HashAlgorithm | +| jca/Hash.java:192:13:192:25 | HashAlgorithm | +| jca/Hash.java:192:43:192:47 | HashAlgorithm | +| jca/Hash.java:195:27:195:57 | Digest | +| jca/Hash.java:195:27:195:57 | HashOperation | +| jca/Hash.java:195:41:195:56 | Message | +| jca/Hash.java:211:43:211:54 | Parameter | +| jca/Hash.java:211:57:211:66 | Parameter | +| jca/Hash.java:212:31:212:116 | Constant | +| jca/Hash.java:212:32:212:41 | HMACAlgorithm | +| jca/Hash.java:212:32:212:41 | HashAlgorithm | +| jca/Hash.java:212:44:212:55 | HMACAlgorithm | +| jca/Hash.java:212:44:212:55 | HashAlgorithm | +| jca/Hash.java:212:58:212:69 | HMACAlgorithm | +| jca/Hash.java:212:58:212:69 | HashAlgorithm | +| jca/Hash.java:212:72:212:83 | HMACAlgorithm | +| jca/Hash.java:212:72:212:83 | HashAlgorithm | +| jca/Hash.java:212:86:212:99 | HMACAlgorithm | +| jca/Hash.java:212:86:212:99 | HashAlgorithm | +| jca/Hash.java:212:102:212:115 | HMACAlgorithm | +| jca/Hash.java:212:102:212:115 | HashAlgorithm | +| jca/Hash.java:216:22:216:30 | Key | +| jca/Hash.java:217:27:217:55 | KeyOperationOutput | +| jca/Hash.java:217:27:217:55 | MACOperation | +| jca/Hash.java:217:39:217:54 | Message | +| jca/Hash.java:232:40:232:54 | Parameter | +| jca/Hash.java:235:42:235:63 | Message | +| jca/Hash.java:235:66:235:69 | Salt | +| jca/Hash.java:235:72:235:76 | Constant | +| jca/Hash.java:235:79:235:81 | Constant | +| jca/Hash.java:236:65:236:86 | HMACAlgorithm | +| jca/Hash.java:236:65:236:86 | HashAlgorithm | +| jca/Hash.java:236:65:236:86 | KeyDerivationAlgorithm | +| jca/Hash.java:237:23:237:50 | Key | +| jca/Hash.java:237:23:237:50 | KeyDerivation | +| jca/Hash.java:252:23:252:70 | Digest | +| jca/Hash.java:252:23:252:70 | HashOperation | +| jca/Hash.java:252:37:252:58 | Constant | +| jca/Hash.java:252:37:252:69 | Message | +| jca/Hash.java:266:31:266:76 | Constant | +| jca/Hash.java:266:32:266:40 | HashAlgorithm | +| jca/Hash.java:266:43:266:51 | HashAlgorithm | +| jca/Hash.java:266:54:266:63 | HashAlgorithm | +| jca/Hash.java:266:66:266:75 | HashAlgorithm | +| jca/Hash.java:269:27:269:38 | Constant | +| jca/Hash.java:270:27:270:30 | Message | +| jca/Hash.java:271:40:271:54 | Digest | +| jca/Hash.java:271:40:271:54 | HashOperation | +| jca/Hash.java:294:16:294:66 | Constant | +| jca/Hash.java:294:16:294:66 | LocalData | +| jca/Hash.java:294:57:294:65 | HashAlgorithm | +| jca/Hash.java:310:38:310:41 | RandomNumberGeneration | +| jca/IVArtifact.java:30:44:30:65 | KeyOperationAlgorithm | +| jca/IVArtifact.java:30:44:30:65 | ModeOfOperation | +| jca/IVArtifact.java:30:44:30:65 | PaddingAlgorithm | +| jca/IVArtifact.java:31:42:31:44 | Key | +| jca/IVArtifact.java:31:47:31:52 | Nonce | +| jca/IVArtifact.java:32:29:32:73 | EncryptOperation | +| jca/IVArtifact.java:32:29:32:73 | KeyOperationOutput | +| jca/IVArtifact.java:32:44:32:61 | Constant | +| jca/IVArtifact.java:32:44:32:72 | Message | +| jca/IVArtifact.java:38:42:38:44 | Key | +| jca/IVArtifact.java:38:47:38:52 | Nonce | +| jca/IVArtifact.java:39:29:39:53 | EncryptOperation | +| jca/IVArtifact.java:39:29:39:53 | KeyOperationOutput | +| jca/IVArtifact.java:39:44:39:52 | Message | +| jca/IVArtifact.java:49:27:49:42 | Constant | +| jca/IVArtifact.java:70:16:70:81 | Constant | +| jca/IVArtifact.java:70:16:70:81 | LocalData | +| jca/IVArtifact.java:70:59:70:80 | KeyOperationAlgorithm | +| jca/IVArtifact.java:70:59:70:80 | ModeOfOperation | +| jca/IVArtifact.java:70:59:70:80 | PaddingAlgorithm | +| jca/IVArtifact.java:74:56:74:60 | KeyOperationAlgorithm | +| jca/IVArtifact.java:75:21:75:23 | Constant | +| jca/IVArtifact.java:76:16:76:35 | Key | +| jca/IVArtifact.java:76:16:76:35 | KeyGeneration | +| jca/IVArtifact.java:81:38:81:39 | RandomNumberGeneration | +| jca/IVArtifact.java:87:32:87:33 | RandomNumberGeneration | +| jca/IVArtifact.java:105:44:105:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:105:44:105:62 | ModeOfOperation | +| jca/IVArtifact.java:105:44:105:62 | PaddingAlgorithm | +| jca/IVArtifact.java:108:42:108:44 | Key | +| jca/IVArtifact.java:108:47:108:50 | Nonce | +| jca/IVArtifact.java:109:16:109:40 | EncryptOperation | +| jca/IVArtifact.java:109:16:109:40 | KeyOperationOutput | +| jca/IVArtifact.java:109:31:109:39 | Message | +| jca/IVArtifact.java:116:31:116:34 | Constant | +| jca/IVArtifact.java:130:42:130:49 | RandomNumberGeneration | +| jca/IVArtifact.java:132:44:132:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:132:44:132:62 | ModeOfOperation | +| jca/IVArtifact.java:132:44:132:62 | PaddingAlgorithm | +| jca/IVArtifact.java:134:42:134:44 | Key | +| jca/IVArtifact.java:134:47:134:50 | Nonce | +| jca/IVArtifact.java:135:16:135:40 | EncryptOperation | +| jca/IVArtifact.java:135:16:135:40 | KeyOperationOutput | +| jca/IVArtifact.java:135:31:135:39 | Message | +| jca/IVArtifact.java:153:58:153:66 | HashAlgorithm | +| jca/IVArtifact.java:154:31:154:78 | Digest | +| jca/IVArtifact.java:154:31:154:78 | HashOperation | +| jca/IVArtifact.java:154:45:154:59 | Constant | +| jca/IVArtifact.java:154:45:154:77 | Message | +| jca/IVArtifact.java:156:44:156:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:156:44:156:62 | ModeOfOperation | +| jca/IVArtifact.java:156:44:156:62 | PaddingAlgorithm | +| jca/IVArtifact.java:158:42:158:44 | Key | +| jca/IVArtifact.java:158:47:158:50 | Nonce | +| jca/IVArtifact.java:159:16:159:40 | EncryptOperation | +| jca/IVArtifact.java:159:16:159:40 | KeyOperationOutput | +| jca/IVArtifact.java:159:31:159:39 | Message | +| jca/IVArtifact.java:177:38:177:39 | RandomNumberGeneration | +| jca/IVArtifact.java:180:48:180:66 | KeyOperationAlgorithm | +| jca/IVArtifact.java:180:48:180:66 | ModeOfOperation | +| jca/IVArtifact.java:180:48:180:66 | PaddingAlgorithm | +| jca/IVArtifact.java:182:46:182:48 | Key | +| jca/IVArtifact.java:182:51:182:54 | Nonce | +| jca/IVArtifact.java:183:30:183:58 | EncryptOperation | +| jca/IVArtifact.java:183:30:183:58 | KeyOperationOutput | +| jca/IVArtifact.java:183:45:183:57 | Message | +| jca/IVArtifact.java:198:44:198:62 | KeyOperationAlgorithm | +| jca/IVArtifact.java:198:44:198:62 | ModeOfOperation | +| jca/IVArtifact.java:198:44:198:62 | PaddingAlgorithm | +| jca/IVArtifact.java:201:42:201:44 | Key | +| jca/IVArtifact.java:201:47:201:50 | Nonce | +| jca/IVArtifact.java:202:16:202:40 | EncryptOperation | +| jca/IVArtifact.java:202:16:202:40 | KeyOperationOutput | +| jca/IVArtifact.java:202:31:202:39 | Message | +| jca/IVArtifact.java:215:53:215:65 | Parameter | +| jca/IVArtifact.java:215:68:215:83 | Parameter | +| jca/IVArtifact.java:235:60:235:72 | Parameter | +| jca/IVArtifact.java:235:75:235:90 | Parameter | +| jca/IVArtifact.java:253:56:253:60 | KeyOperationAlgorithm | +| jca/IVArtifact.java:254:21:254:23 | Constant | +| jca/IVArtifact.java:255:29:255:44 | Key | +| jca/IVArtifact.java:255:29:255:44 | KeyGeneration | +| jca/IVArtifact.java:256:32:256:47 | Constant | +| jca/IVArtifact.java:275:34:275:46 | Constant | +| jca/IVArtifact.java:275:60:275:72 | Constant | +| jca/IVArtifact.java:275:86:275:100 | Constant | +| jca/KeyAgreementHybridCryptosystem.java:50:47:50:57 | EllipticCurve | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:51:16:51:36 | KeyGeneration | +| jca/KeyAgreementHybridCryptosystem.java:58:61:58:68 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:59:24:59:26 | Constant | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | Key | +| jca/KeyAgreementHybridCryptosystem.java:60:16:60:36 | KeyGeneration | +| jca/KeyAgreementHybridCryptosystem.java:68:17:68:26 | Key | +| jca/KeyAgreementHybridCryptosystem.java:69:20:69:28 | Key | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | KeyAgreementOperation | +| jca/KeyAgreementHybridCryptosystem.java:70:16:70:34 | SharedSecret | +| jca/KeyAgreementHybridCryptosystem.java:78:58:78:66 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:79:23:79:42 | HashOperation | +| jca/KeyAgreementHybridCryptosystem.java:79:37:79:41 | Message | +| jca/KeyAgreementHybridCryptosystem.java:104:90:104:95 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:108:44:108:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:110:38:110:39 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:112:42:112:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:112:50:112:53 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | EncryptOperation | +| jca/KeyAgreementHybridCryptosystem.java:113:29:113:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:113:44:113:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:125:95:125:100 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:130:44:130:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:132:42:132:47 | Key | +| jca/KeyAgreementHybridCryptosystem.java:132:50:132:53 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | EncryptOperation | +| jca/KeyAgreementHybridCryptosystem.java:133:29:133:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:133:44:133:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:149:91:149:98 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | Digest | +| jca/KeyAgreementHybridCryptosystem.java:150:33:150:89 | HashOperation | +| jca/KeyAgreementHybridCryptosystem.java:150:59:150:67 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:150:77:150:88 | Message | +| jca/KeyAgreementHybridCryptosystem.java:153:44:153:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:155:38:155:42 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:156:42:156:50 | Key | +| jca/KeyAgreementHybridCryptosystem.java:156:53:156:78 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | EncryptOperation | +| jca/KeyAgreementHybridCryptosystem.java:157:29:157:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:157:44:157:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:169:95:169:102 | KeyAgreementAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:174:44:174:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:175:42:175:50 | Key | +| jca/KeyAgreementHybridCryptosystem.java:175:53:175:83 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | EncryptOperation | +| jca/KeyAgreementHybridCryptosystem.java:176:29:176:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:176:44:176:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:188:58:188:73 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:212:58:212:70 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:212:73:212:88 | Parameter | +| jca/KeyAgreementHybridCryptosystem.java:215:42:215:66 | Message | +| jca/KeyAgreementHybridCryptosystem.java:215:69:215:72 | Salt | +| jca/KeyAgreementHybridCryptosystem.java:215:75:215:79 | Constant | +| jca/KeyAgreementHybridCryptosystem.java:215:82:215:84 | Constant | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HMACAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:216:65:216:86 | KeyDerivationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | Key | +| jca/KeyAgreementHybridCryptosystem.java:217:26:217:53 | KeyDerivation | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | ModeOfOperation | +| jca/KeyAgreementHybridCryptosystem.java:223:44:223:62 | PaddingAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:225:38:225:39 | RandomNumberGeneration | +| jca/KeyAgreementHybridCryptosystem.java:227:42:227:54 | Key | +| jca/KeyAgreementHybridCryptosystem.java:227:57:227:63 | Nonce | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | EncryptOperation | +| jca/KeyAgreementHybridCryptosystem.java:228:29:228:53 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:228:44:228:52 | Message | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HMACAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:230:35:230:46 | HashAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:231:18:231:30 | Key | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | KeyOperationOutput | +| jca/KeyAgreementHybridCryptosystem.java:232:30:232:52 | MACOperation | +| jca/KeyAgreementHybridCryptosystem.java:232:42:232:51 | Message | +| jca/KeyAgreementHybridCryptosystem.java:259:52:259:56 | KeyOperationAlgorithm | +| jca/KeyAgreementHybridCryptosystem.java:260:17:260:19 | Constant | +| jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | Key | +| jca/KeyAgreementHybridCryptosystem.java:261:16:261:31 | KeyGeneration | +| jca/KeyAgreementHybridCryptosystem.java:269:38:269:41 | RandomNumberGeneration | +| jca/KeyArtifact.java:18:56:18:60 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:19:21:19:23 | Constant | +| jca/KeyArtifact.java:20:31:20:50 | Key | +| jca/KeyArtifact.java:20:31:20:50 | KeyGeneration | +| jca/KeyArtifact.java:23:43:23:47 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:24:21:24:23 | Constant | +| jca/KeyArtifact.java:25:30:25:49 | Key | +| jca/KeyArtifact.java:25:30:25:49 | KeyGeneration | +| jca/KeyArtifact.java:30:68:30:72 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:31:31:31:34 | Constant | +| jca/KeyArtifact.java:32:30:32:57 | Key | +| jca/KeyArtifact.java:32:30:32:57 | KeyGeneration | +| jca/KeyArtifact.java:35:51:35:55 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:36:31:36:34 | Constant | +| jca/KeyArtifact.java:37:29:37:56 | Key | +| jca/KeyArtifact.java:37:29:37:56 | KeyGeneration | +| jca/KeyArtifact.java:41:31:41:33 | Constant | +| jca/KeyArtifact.java:42:26:42:53 | Key | +| jca/KeyArtifact.java:42:26:42:53 | KeyGeneration | +| jca/KeyArtifact.java:62:28:62:73 | Constant | +| jca/KeyArtifact.java:62:28:62:73 | LocalData | +| jca/KeyArtifact.java:62:68:62:72 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:65:21:65:23 | Constant | +| jca/KeyArtifact.java:66:32:66:51 | Key | +| jca/KeyArtifact.java:66:32:66:51 | KeyGeneration | +| jca/KeyArtifact.java:72:31:72:34 | Constant | +| jca/KeyArtifact.java:73:16:73:43 | Key | +| jca/KeyArtifact.java:73:16:73:43 | KeyGeneration | +| jca/KeyArtifact.java:78:31:78:54 | Constant | +| jca/KeyArtifact.java:78:32:78:36 | KeyOperationAlgorithm | +| jca/KeyArtifact.java:78:45:78:53 | KeyOperationAlgorithm | +| jca/KeyDerivation1.java:78:39:78:53 | Parameter | +| jca/KeyDerivation1.java:80:42:80:63 | Message | +| jca/KeyDerivation1.java:80:66:80:69 | Salt | +| jca/KeyDerivation1.java:80:72:80:76 | Constant | +| jca/KeyDerivation1.java:80:79:80:81 | Constant | +| jca/KeyDerivation1.java:81:65:81:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:81:65:81:86 | HashAlgorithm | +| jca/KeyDerivation1.java:81:65:81:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:82:22:82:49 | Key | +| jca/KeyDerivation1.java:82:22:82:49 | KeyDerivation | +| jca/KeyDerivation1.java:92:36:92:50 | Parameter | +| jca/KeyDerivation1.java:94:42:94:63 | Message | +| jca/KeyDerivation1.java:94:66:94:69 | Salt | +| jca/KeyDerivation1.java:94:72:94:73 | Constant | +| jca/KeyDerivation1.java:94:76:94:78 | Constant | +| jca/KeyDerivation1.java:95:65:95:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:95:65:95:86 | HashAlgorithm | +| jca/KeyDerivation1.java:95:65:95:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:96:22:96:49 | Key | +| jca/KeyDerivation1.java:96:22:96:49 | KeyDerivation | +| jca/KeyDerivation1.java:106:37:106:51 | Parameter | +| jca/KeyDerivation1.java:108:42:108:63 | Message | +| jca/KeyDerivation1.java:108:66:108:69 | Salt | +| jca/KeyDerivation1.java:108:72:108:80 | Constant | +| jca/KeyDerivation1.java:108:83:108:85 | Constant | +| jca/KeyDerivation1.java:109:65:109:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:109:65:109:86 | HashAlgorithm | +| jca/KeyDerivation1.java:109:65:109:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:110:22:110:49 | Key | +| jca/KeyDerivation1.java:110:22:110:49 | KeyDerivation | +| jca/KeyDerivation1.java:120:32:120:46 | Parameter | +| jca/KeyDerivation1.java:122:42:122:63 | Message | +| jca/KeyDerivation1.java:122:66:122:69 | Salt | +| jca/KeyDerivation1.java:122:72:122:76 | Constant | +| jca/KeyDerivation1.java:122:79:122:81 | Constant | +| jca/KeyDerivation1.java:123:65:123:84 | HMACAlgorithm | +| jca/KeyDerivation1.java:123:65:123:84 | HashAlgorithm | +| jca/KeyDerivation1.java:123:65:123:84 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:124:22:124:49 | Key | +| jca/KeyDerivation1.java:124:22:124:49 | KeyDerivation | +| jca/KeyDerivation1.java:134:34:134:48 | Parameter | +| jca/KeyDerivation1.java:136:42:136:63 | Message | +| jca/KeyDerivation1.java:136:66:136:69 | Salt | +| jca/KeyDerivation1.java:136:72:136:77 | Constant | +| jca/KeyDerivation1.java:136:80:136:82 | Constant | +| jca/KeyDerivation1.java:137:65:137:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:137:65:137:86 | HashAlgorithm | +| jca/KeyDerivation1.java:137:65:137:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:138:22:138:49 | Key | +| jca/KeyDerivation1.java:138:22:138:49 | KeyDerivation | +| jca/KeyDerivation1.java:154:28:154:42 | Parameter | +| jca/KeyDerivation1.java:157:42:157:63 | Message | +| jca/KeyDerivation1.java:157:66:157:69 | Salt | +| jca/KeyDerivation1.java:157:72:157:75 | Constant | +| jca/KeyDerivation1.java:157:78:157:80 | Constant | +| jca/KeyDerivation1.java:158:65:158:72 | Constant | +| jca/KeyDerivation1.java:159:22:159:49 | Key | +| jca/KeyDerivation1.java:159:22:159:49 | KeyDerivation | +| jca/KeyDerivation1.java:169:30:169:44 | Parameter | +| jca/KeyDerivation1.java:172:42:172:63 | Message | +| jca/KeyDerivation1.java:172:66:172:69 | Salt | +| jca/KeyDerivation1.java:172:72:172:76 | Constant | +| jca/KeyDerivation1.java:172:79:172:81 | Constant | +| jca/KeyDerivation1.java:173:65:173:72 | Constant | +| jca/KeyDerivation1.java:174:22:174:49 | Key | +| jca/KeyDerivation1.java:174:22:174:49 | KeyDerivation | +| jca/KeyDerivation1.java:242:45:242:56 | Parameter | +| jca/KeyDerivation1.java:243:58:243:66 | HashAlgorithm | +| jca/KeyDerivation1.java:244:29:244:59 | Digest | +| jca/KeyDerivation1.java:244:29:244:59 | HashOperation | +| jca/KeyDerivation1.java:244:43:244:58 | Message | +| jca/KeyDerivation1.java:249:70:249:88 | KeyOperationAlgorithm | +| jca/KeyDerivation1.java:249:70:249:88 | ModeOfOperation | +| jca/KeyDerivation1.java:249:70:249:88 | PaddingAlgorithm | +| jca/KeyDerivation1.java:250:55:250:57 | Key | +| jca/KeyDerivation1.java:251:29:251:74 | EncryptOperation | +| jca/KeyDerivation1.java:251:29:251:74 | KeyOperationOutput | +| jca/KeyDerivation1.java:251:44:251:62 | Constant | +| jca/KeyDerivation1.java:251:44:251:73 | Message | +| jca/KeyDerivation1.java:269:32:269:41 | Parameter | +| jca/KeyDerivation1.java:283:43:283:57 | Parameter | +| jca/KeyDerivation1.java:283:60:283:78 | Parameter | +| jca/KeyDerivation1.java:302:37:302:51 | Parameter | +| jca/KeyDerivation1.java:309:25:309:76 | Constant | +| jca/KeyDerivation1.java:309:25:309:76 | LocalData | +| jca/KeyDerivation1.java:309:54:309:75 | HMACAlgorithm | +| jca/KeyDerivation1.java:309:54:309:75 | HashAlgorithm | +| jca/KeyDerivation1.java:309:54:309:75 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:310:43:310:86 | Constant | +| jca/KeyDerivation1.java:310:43:310:86 | LocalData | +| jca/KeyDerivation1.java:311:40:311:78 | Constant | +| jca/KeyDerivation1.java:311:40:311:78 | LocalData | +| jca/KeyDerivation1.java:314:42:314:63 | Message | +| jca/KeyDerivation1.java:314:66:314:69 | Salt | +| jca/KeyDerivation1.java:316:26:316:53 | Key | +| jca/KeyDerivation1.java:316:26:316:53 | KeyDerivation | +| jca/KeyDerivation1.java:333:42:333:63 | Message | +| jca/KeyDerivation1.java:333:66:333:69 | Salt | +| jca/KeyDerivation1.java:333:72:333:76 | Constant | +| jca/KeyDerivation1.java:333:79:333:81 | Constant | +| jca/KeyDerivation1.java:334:65:334:86 | HMACAlgorithm | +| jca/KeyDerivation1.java:334:65:334:86 | HashAlgorithm | +| jca/KeyDerivation1.java:334:65:334:86 | KeyDerivationAlgorithm | +| jca/KeyDerivation1.java:335:16:335:43 | Key | +| jca/KeyDerivation1.java:335:16:335:43 | KeyDerivation | +| jca/KeyDerivation1.java:345:36:345:47 | HMACAlgorithm | +| jca/KeyDerivation1.java:345:36:345:47 | HashAlgorithm | +| jca/KeyDerivation1.java:347:19:347:27 | Key | +| jca/KeyDerivation1.java:348:22:348:38 | KeyOperationOutput | +| jca/KeyDerivation1.java:348:22:348:38 | MACOperation | +| jca/KeyDerivation1.java:348:35:348:37 | Message | +| jca/KeyDerivation1.java:352:19:352:54 | Key | +| jca/KeyDerivation1.java:353:22:353:62 | KeyOperationOutput | +| jca/KeyDerivation1.java:353:22:353:62 | MACOperation | +| jca/KeyDerivation1.java:353:35:353:50 | Constant | +| jca/KeyDerivation1.java:353:35:353:61 | Message | +| jca/KeyDerivation1.java:365:38:365:41 | RandomNumberGeneration | +| jca/KeyEncapsulation.java:60:56:60:60 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:61:21:61:23 | Constant | +| jca/KeyEncapsulation.java:62:28:62:47 | Key | +| jca/KeyEncapsulation.java:62:28:62:47 | KeyGeneration | +| jca/KeyEncapsulation.java:67:47:67:85 | HashAlgorithm | +| jca/KeyEncapsulation.java:67:47:67:85 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:67:47:67:85 | ModeOfOperation | +| jca/KeyEncapsulation.java:67:47:67:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:68:45:68:50 | Key | +| jca/KeyEncapsulation.java:69:29:69:66 | EncryptOperation | +| jca/KeyEncapsulation.java:69:29:69:66 | KeyOperationOutput | +| jca/KeyEncapsulation.java:69:47:69:65 | Message | +| jca/KeyEncapsulation.java:73:47:73:65 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:73:47:73:65 | ModeOfOperation | +| jca/KeyEncapsulation.java:73:47:73:65 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:75:38:75:39 | RandomNumberGeneration | +| jca/KeyEncapsulation.java:77:45:77:50 | Key | +| jca/KeyEncapsulation.java:77:53:77:59 | Nonce | +| jca/KeyEncapsulation.java:78:29:78:80 | EncryptOperation | +| jca/KeyEncapsulation.java:78:29:78:80 | KeyOperationOutput | +| jca/KeyEncapsulation.java:78:47:78:68 | Constant | +| jca/KeyEncapsulation.java:78:47:78:79 | Message | +| jca/KeyEncapsulation.java:91:37:91:54 | Parameter | +| jca/KeyEncapsulation.java:91:57:91:73 | Parameter | +| jca/KeyEncapsulation.java:92:47:92:85 | HashAlgorithm | +| jca/KeyEncapsulation.java:92:47:92:85 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:92:47:92:85 | ModeOfOperation | +| jca/KeyEncapsulation.java:92:47:92:85 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:93:45:93:51 | Key | +| jca/KeyEncapsulation.java:94:30:94:58 | DecryptOperation | +| jca/KeyEncapsulation.java:94:30:94:58 | KeyOperationOutput | +| jca/KeyEncapsulation.java:94:48:94:57 | Message | +| jca/KeyEncapsulation.java:117:47:117:57 | EllipticCurve | +| jca/KeyEncapsulation.java:118:31:118:51 | Key | +| jca/KeyEncapsulation.java:118:31:118:51 | KeyGeneration | +| jca/KeyEncapsulation.java:121:52:121:57 | KeyAgreementAlgorithm | +| jca/KeyEncapsulation.java:122:17:122:40 | Key | +| jca/KeyEncapsulation.java:123:20:123:24 | Key | +| jca/KeyEncapsulation.java:124:31:124:49 | KeyAgreementOperation | +| jca/KeyEncapsulation.java:124:31:124:49 | SharedSecret | +| jca/KeyEncapsulation.java:133:47:133:65 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:133:47:133:65 | ModeOfOperation | +| jca/KeyEncapsulation.java:133:47:133:65 | PaddingAlgorithm | +| jca/KeyEncapsulation.java:135:38:135:39 | RandomNumberGeneration | +| jca/KeyEncapsulation.java:136:45:136:50 | Key | +| jca/KeyEncapsulation.java:136:53:136:81 | Nonce | +| jca/KeyEncapsulation.java:137:29:137:73 | EncryptOperation | +| jca/KeyEncapsulation.java:137:29:137:73 | KeyOperationOutput | +| jca/KeyEncapsulation.java:137:47:137:61 | Constant | +| jca/KeyEncapsulation.java:137:47:137:72 | Message | +| jca/KeyEncapsulation.java:186:47:186:57 | EllipticCurve | +| jca/KeyEncapsulation.java:187:31:187:51 | Key | +| jca/KeyEncapsulation.java:187:31:187:51 | KeyGeneration | +| jca/KeyEncapsulation.java:188:52:188:57 | KeyAgreementAlgorithm | +| jca/KeyEncapsulation.java:189:17:189:40 | Key | +| jca/KeyEncapsulation.java:190:20:190:34 | Key | +| jca/KeyEncapsulation.java:191:31:191:49 | KeyAgreementOperation | +| jca/KeyEncapsulation.java:191:31:191:49 | SharedSecret | +| jca/KeyEncapsulation.java:207:64:207:68 | KeyOperationAlgorithm | +| jca/KeyEncapsulation.java:208:27:208:30 | Constant | +| jca/KeyEncapsulation.java:209:25:209:48 | Key | +| jca/KeyEncapsulation.java:209:25:209:48 | KeyGeneration | +| jca/KeyEncapsulation.java:214:49:214:59 | EllipticCurve | +| jca/KeyEncapsulation.java:215:24:215:46 | Key | +| jca/KeyEncapsulation.java:215:24:215:46 | KeyGeneration | +| jca/KeyEncapsulation.java:226:31:226:53 | Key | +| jca/KeyEncapsulation.java:226:31:226:53 | KeyGeneration | +| jca/KeyExchange.java:52:63:52:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:53:26:53:29 | Constant | +| jca/KeyExchange.java:54:16:54:38 | Key | +| jca/KeyExchange.java:54:16:54:38 | KeyGeneration | +| jca/KeyExchange.java:67:63:67:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:69:26:69:28 | Constant | +| jca/KeyExchange.java:70:16:70:38 | Key | +| jca/KeyExchange.java:70:16:70:38 | KeyGeneration | +| jca/KeyExchange.java:83:63:83:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:84:26:84:29 | Constant | +| jca/KeyExchange.java:85:16:85:38 | Key | +| jca/KeyExchange.java:85:16:85:38 | KeyGeneration | +| jca/KeyExchange.java:99:52:99:55 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:100:17:100:26 | Key | +| jca/KeyExchange.java:101:20:101:28 | Key | +| jca/KeyExchange.java:102:16:102:34 | KeyAgreementOperation | +| jca/KeyExchange.java:102:16:102:34 | SharedSecret | +| jca/KeyExchange.java:121:49:121:59 | EllipticCurve | +| jca/KeyExchange.java:122:16:122:38 | Key | +| jca/KeyExchange.java:122:16:122:38 | KeyGeneration | +| jca/KeyExchange.java:136:52:136:57 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:137:17:137:26 | Key | +| jca/KeyExchange.java:138:20:138:28 | Key | +| jca/KeyExchange.java:139:16:139:34 | KeyAgreementOperation | +| jca/KeyExchange.java:139:16:139:34 | SharedSecret | +| jca/KeyExchange.java:156:61:156:68 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:158:24:158:26 | Constant | +| jca/KeyExchange.java:159:16:159:36 | Key | +| jca/KeyExchange.java:159:16:159:36 | KeyGeneration | +| jca/KeyExchange.java:173:52:173:59 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:174:17:174:26 | Key | +| jca/KeyExchange.java:175:20:175:28 | Key | +| jca/KeyExchange.java:176:16:176:34 | KeyAgreementOperation | +| jca/KeyExchange.java:176:16:176:34 | SharedSecret | +| jca/KeyExchange.java:193:61:193:66 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:195:24:195:26 | Constant | +| jca/KeyExchange.java:196:16:196:36 | Key | +| jca/KeyExchange.java:196:16:196:36 | KeyGeneration | +| jca/KeyExchange.java:210:52:210:57 | KeyAgreementAlgorithm | +| jca/KeyExchange.java:211:17:211:26 | Key | +| jca/KeyExchange.java:212:20:212:28 | Key | +| jca/KeyExchange.java:213:16:213:34 | KeyAgreementOperation | +| jca/KeyExchange.java:213:16:213:34 | SharedSecret | +| jca/MACOperation.java:59:36:59:49 | Parameter | +| jca/MACOperation.java:59:52:59:61 | Parameter | +| jca/MACOperation.java:60:35:60:46 | HMACAlgorithm | +| jca/MACOperation.java:60:35:60:46 | HashAlgorithm | +| jca/MACOperation.java:62:18:62:26 | Key | +| jca/MACOperation.java:63:16:63:46 | KeyOperationOutput | +| jca/MACOperation.java:63:16:63:46 | MACOperation | +| jca/MACOperation.java:63:28:63:45 | Message | +| jca/MACOperation.java:70:34:70:47 | Parameter | +| jca/MACOperation.java:70:50:70:59 | Parameter | +| jca/MACOperation.java:71:35:71:48 | HMACAlgorithm | +| jca/MACOperation.java:71:35:71:48 | HashAlgorithm | +| jca/MACOperation.java:73:18:73:26 | Key | +| jca/MACOperation.java:74:16:74:46 | KeyOperationOutput | +| jca/MACOperation.java:74:16:74:46 | MACOperation | +| jca/MACOperation.java:74:28:74:45 | Message | +| jca/MACOperation.java:81:34:81:47 | Parameter | +| jca/MACOperation.java:81:50:81:59 | Parameter | +| jca/MACOperation.java:82:35:82:44 | KeyOperationAlgorithm | +| jca/MACOperation.java:84:18:84:26 | Key | +| jca/MACOperation.java:85:16:85:46 | KeyOperationOutput | +| jca/MACOperation.java:85:16:85:46 | MACOperation | +| jca/MACOperation.java:85:28:85:45 | Message | +| jca/MACOperation.java:92:30:92:43 | Parameter | +| jca/MACOperation.java:92:46:92:55 | Parameter | +| jca/MACOperation.java:94:35:94:40 | KeyOperationAlgorithm | +| jca/MACOperation.java:98:18:98:26 | Key | +| jca/MACOperation.java:99:16:99:46 | KeyOperationOutput | +| jca/MACOperation.java:99:16:99:46 | MACOperation | +| jca/MACOperation.java:99:28:99:45 | Message | +| jca/MACOperation.java:106:30:106:43 | Parameter | +| jca/MACOperation.java:106:46:106:55 | Parameter | +| jca/MACOperation.java:107:35:107:43 | Constant | +| jca/MACOperation.java:109:18:109:26 | Key | +| jca/MACOperation.java:110:16:110:46 | KeyOperationOutput | +| jca/MACOperation.java:110:16:110:46 | MACOperation | +| jca/MACOperation.java:110:28:110:45 | Message | +| jca/MACOperation.java:117:36:117:49 | Parameter | +| jca/MACOperation.java:117:52:117:61 | Parameter | +| jca/MACOperation.java:118:35:118:44 | HMACAlgorithm | +| jca/MACOperation.java:118:35:118:44 | HashAlgorithm | +| jca/MACOperation.java:120:18:120:26 | Key | +| jca/MACOperation.java:121:16:121:46 | KeyOperationOutput | +| jca/MACOperation.java:121:16:121:46 | MACOperation | +| jca/MACOperation.java:121:28:121:45 | Message | +| jca/MACOperation.java:133:34:133:49 | Parameter | +| jca/MACOperation.java:136:44:136:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:136:44:136:62 | ModeOfOperation | +| jca/MACOperation.java:136:44:136:62 | PaddingAlgorithm | +| jca/MACOperation.java:137:42:137:44 | Key | +| jca/MACOperation.java:138:32:138:74 | EncryptOperation | +| jca/MACOperation.java:138:32:138:74 | KeyOperationOutput | +| jca/MACOperation.java:138:47:138:62 | Constant | +| jca/MACOperation.java:138:47:138:73 | Message | +| jca/MACOperation.java:150:36:150:51 | Parameter | +| jca/MACOperation.java:166:47:166:62 | Parameter | +| jca/MACOperation.java:170:42:170:68 | Message | +| jca/MACOperation.java:170:71:170:74 | Salt | +| jca/MACOperation.java:170:77:170:81 | Constant | +| jca/MACOperation.java:170:84:170:86 | Constant | +| jca/MACOperation.java:171:65:171:86 | HMACAlgorithm | +| jca/MACOperation.java:171:65:171:86 | HashAlgorithm | +| jca/MACOperation.java:171:65:171:86 | KeyDerivationAlgorithm | +| jca/MACOperation.java:172:30:172:57 | Key | +| jca/MACOperation.java:172:30:172:57 | KeyDerivation | +| jca/MACOperation.java:180:44:180:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:180:44:180:62 | ModeOfOperation | +| jca/MACOperation.java:180:44:180:62 | PaddingAlgorithm | +| jca/MACOperation.java:181:42:181:54 | Key | +| jca/MACOperation.java:182:29:182:78 | EncryptOperation | +| jca/MACOperation.java:182:29:182:78 | KeyOperationOutput | +| jca/MACOperation.java:182:44:182:66 | Constant | +| jca/MACOperation.java:182:44:182:77 | Message | +| jca/MACOperation.java:185:35:185:46 | HMACAlgorithm | +| jca/MACOperation.java:185:35:185:46 | HashAlgorithm | +| jca/MACOperation.java:186:18:186:30 | Key | +| jca/MACOperation.java:187:30:187:52 | KeyOperationOutput | +| jca/MACOperation.java:187:30:187:52 | MACOperation | +| jca/MACOperation.java:187:42:187:51 | Message | +| jca/MACOperation.java:216:44:216:62 | KeyOperationAlgorithm | +| jca/MACOperation.java:216:44:216:62 | ModeOfOperation | +| jca/MACOperation.java:216:44:216:62 | PaddingAlgorithm | +| jca/MACOperation.java:218:42:218:44 | Key | +| jca/MACOperation.java:219:32:219:51 | EncryptOperation | +| jca/MACOperation.java:219:32:219:51 | KeyOperationOutput | +| jca/MACOperation.java:219:47:219:50 | Message | +| jca/MACOperation.java:232:56:232:60 | KeyOperationAlgorithm | +| jca/MACOperation.java:233:21:233:23 | Constant | +| jca/MACOperation.java:234:16:234:35 | Key | +| jca/MACOperation.java:234:16:234:35 | KeyGeneration | +| jca/MACOperation.java:246:38:246:41 | RandomNumberGeneration | +| jca/Nonce.java:24:35:24:46 | HMACAlgorithm | +| jca/Nonce.java:24:35:24:46 | HashAlgorithm | +| jca/Nonce.java:25:18:25:20 | Key | +| jca/Nonce.java:26:20:26:24 | Message | +| jca/Nonce.java:27:28:27:69 | KeyOperationOutput | +| jca/Nonce.java:27:28:27:69 | MACOperation | +| jca/Nonce.java:27:40:27:57 | Constant | +| jca/Nonce.java:27:40:27:68 | Message | +| jca/Nonce.java:35:24:35:41 | Constant | +| jca/Nonce.java:37:35:37:46 | HMACAlgorithm | +| jca/Nonce.java:37:35:37:46 | HashAlgorithm | +| jca/Nonce.java:38:18:38:20 | Key | +| jca/Nonce.java:39:20:39:24 | Message | +| jca/Nonce.java:40:28:40:67 | KeyOperationOutput | +| jca/Nonce.java:40:28:40:67 | MACOperation | +| jca/Nonce.java:40:40:40:55 | Constant | +| jca/Nonce.java:40:40:40:66 | Message | +| jca/Nonce.java:47:39:47:51 | Parameter | +| jca/Nonce.java:47:54:47:69 | Parameter | +| jca/Nonce.java:50:44:50:62 | KeyOperationAlgorithm | +| jca/Nonce.java:50:44:50:62 | ModeOfOperation | +| jca/Nonce.java:50:44:50:62 | PaddingAlgorithm | +| jca/Nonce.java:51:42:51:44 | Key | +| jca/Nonce.java:51:47:51:53 | Nonce | +| jca/Nonce.java:52:29:52:53 | EncryptOperation | +| jca/Nonce.java:52:29:52:53 | KeyOperationOutput | +| jca/Nonce.java:52:44:52:52 | Message | +| jca/Nonce.java:58:37:58:49 | Parameter | +| jca/Nonce.java:58:52:58:67 | Parameter | +| jca/Nonce.java:61:44:61:62 | KeyOperationAlgorithm | +| jca/Nonce.java:61:44:61:62 | ModeOfOperation | +| jca/Nonce.java:61:44:61:62 | PaddingAlgorithm | +| jca/Nonce.java:62:42:62:44 | Key | +| jca/Nonce.java:62:47:62:53 | Nonce | +| jca/Nonce.java:63:29:63:53 | EncryptOperation | +| jca/Nonce.java:63:29:63:53 | KeyOperationOutput | +| jca/Nonce.java:63:44:63:52 | Message | +| jca/Nonce.java:70:53:70:64 | HMACAlgorithm | +| jca/Nonce.java:70:53:70:64 | HashAlgorithm | +| jca/Nonce.java:78:18:78:20 | Key | +| jca/Nonce.java:79:20:79:24 | Message | +| jca/Nonce.java:80:28:80:67 | KeyOperationOutput | +| jca/Nonce.java:80:28:80:67 | MACOperation | +| jca/Nonce.java:80:40:80:55 | Constant | +| jca/Nonce.java:80:40:80:66 | Message | +| jca/Nonce.java:92:56:92:67 | Constant | +| jca/Nonce.java:93:16:93:35 | Key | +| jca/Nonce.java:93:16:93:35 | KeyGeneration | +| jca/Nonce.java:98:38:98:42 | RandomNumberGeneration | +| jca/Nonce.java:104:32:104:36 | RandomNumberGeneration | +| jca/Nonce.java:112:16:112:33 | Constant | +| jca/PrngTest.java:152:56:152:60 | KeyOperationAlgorithm | +| jca/PrngTest.java:153:21:153:23 | Constant | +| jca/PrngTest.java:154:16:154:35 | Key | +| jca/PrngTest.java:154:16:154:35 | KeyGeneration | +| jca/SignEncryptCombinations.java:52:49:52:59 | EllipticCurve | +| jca/SignEncryptCombinations.java:53:16:53:38 | Key | +| jca/SignEncryptCombinations.java:53:16:53:38 | KeyGeneration | +| jca/SignEncryptCombinations.java:61:53:61:69 | HashAlgorithm | +| jca/SignEncryptCombinations.java:61:53:61:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:62:28:62:34 | Key | +| jca/SignEncryptCombinations.java:63:26:63:29 | Message | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignOperation | +| jca/SignEncryptCombinations.java:64:16:64:31 | SignatureOutput | +| jca/SignEncryptCombinations.java:68:53:68:69 | HashAlgorithm | +| jca/SignEncryptCombinations.java:68:53:68:69 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:69:30:69:35 | Key | +| jca/SignEncryptCombinations.java:70:26:70:29 | Message | +| jca/SignEncryptCombinations.java:71:16:71:47 | VerifyOperation | +| jca/SignEncryptCombinations.java:71:33:71:46 | SignatureInput | +| jca/SignEncryptCombinations.java:82:52:82:56 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:83:17:83:19 | Constant | +| jca/SignEncryptCombinations.java:84:16:84:31 | Key | +| jca/SignEncryptCombinations.java:84:16:84:31 | KeyGeneration | +| jca/SignEncryptCombinations.java:92:44:92:62 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:92:44:92:62 | ModeOfOperation | +| jca/SignEncryptCombinations.java:92:44:92:62 | PaddingAlgorithm | +| jca/SignEncryptCombinations.java:94:26:94:27 | RandomNumberGeneration | +| jca/SignEncryptCombinations.java:96:42:96:44 | Key | +| jca/SignEncryptCombinations.java:96:47:96:50 | Nonce | +| jca/SignEncryptCombinations.java:97:29:97:53 | EncryptOperation | +| jca/SignEncryptCombinations.java:97:29:97:53 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:97:44:97:52 | Message | +| jca/SignEncryptCombinations.java:111:44:111:62 | KeyOperationAlgorithm | +| jca/SignEncryptCombinations.java:111:44:111:62 | ModeOfOperation | +| jca/SignEncryptCombinations.java:111:44:111:62 | PaddingAlgorithm | +| jca/SignEncryptCombinations.java:112:42:112:44 | Key | +| jca/SignEncryptCombinations.java:112:47:112:75 | Nonce | +| jca/SignEncryptCombinations.java:113:16:113:41 | DecryptOperation | +| jca/SignEncryptCombinations.java:113:16:113:41 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:113:31:113:40 | Message | +| jca/SignEncryptCombinations.java:121:35:121:46 | HMACAlgorithm | +| jca/SignEncryptCombinations.java:121:35:121:46 | HashAlgorithm | +| jca/SignEncryptCombinations.java:122:18:122:20 | Key | +| jca/SignEncryptCombinations.java:123:16:123:32 | KeyOperationOutput | +| jca/SignEncryptCombinations.java:123:16:123:32 | MACOperation | +| jca/SignEncryptCombinations.java:123:28:123:31 | Message | +| jca/SignEncryptCombinations.java:335:26:335:47 | Constant | +| jca/SignatureOperation.java:52:61:52:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:53:24:53:27 | Constant | +| jca/SignatureOperation.java:54:16:54:36 | Key | +| jca/SignatureOperation.java:54:16:54:36 | KeyGeneration | +| jca/SignatureOperation.java:63:53:63:74 | HashAlgorithm | +| jca/SignatureOperation.java:63:53:63:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:64:28:64:37 | Key | +| jca/SignatureOperation.java:65:26:65:29 | Message | +| jca/SignatureOperation.java:66:16:66:31 | SignOperation | +| jca/SignatureOperation.java:66:16:66:31 | SignatureOutput | +| jca/SignatureOperation.java:75:53:75:74 | HashAlgorithm | +| jca/SignatureOperation.java:75:53:75:74 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:76:30:76:38 | Key | +| jca/SignatureOperation.java:77:26:77:29 | Message | +| jca/SignatureOperation.java:78:16:78:41 | VerifyOperation | +| jca/SignatureOperation.java:78:33:78:40 | SignatureInput | +| jca/SignatureOperation.java:93:49:93:59 | EllipticCurve | +| jca/SignatureOperation.java:94:16:94:38 | Key | +| jca/SignatureOperation.java:94:16:94:38 | KeyGeneration | +| jca/SignatureOperation.java:103:53:103:69 | HashAlgorithm | +| jca/SignatureOperation.java:103:53:103:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:104:28:104:37 | Key | +| jca/SignatureOperation.java:105:26:105:29 | Message | +| jca/SignatureOperation.java:106:16:106:31 | SignOperation | +| jca/SignatureOperation.java:106:16:106:31 | SignatureOutput | +| jca/SignatureOperation.java:115:53:115:69 | HashAlgorithm | +| jca/SignatureOperation.java:115:53:115:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:116:30:116:38 | Key | +| jca/SignatureOperation.java:117:26:117:29 | Message | +| jca/SignatureOperation.java:118:16:118:41 | VerifyOperation | +| jca/SignatureOperation.java:118:33:118:40 | SignatureInput | +| jca/SignatureOperation.java:132:61:132:69 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:133:16:133:36 | Key | +| jca/SignatureOperation.java:133:16:133:36 | KeyGeneration | +| jca/SignatureOperation.java:142:53:142:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:143:28:143:37 | Key | +| jca/SignatureOperation.java:144:26:144:29 | Message | +| jca/SignatureOperation.java:145:16:145:31 | SignOperation | +| jca/SignatureOperation.java:145:16:145:31 | SignatureOutput | +| jca/SignatureOperation.java:154:53:154:61 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:155:30:155:38 | Key | +| jca/SignatureOperation.java:156:26:156:29 | Message | +| jca/SignatureOperation.java:157:16:157:41 | VerifyOperation | +| jca/SignatureOperation.java:157:33:157:40 | SignatureInput | +| jca/SignatureOperation.java:173:61:173:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:174:24:174:27 | Constant | +| jca/SignatureOperation.java:175:16:175:36 | Key | +| jca/SignatureOperation.java:175:16:175:36 | KeyGeneration | +| jca/SignatureOperation.java:185:53:185:65 | HashAlgorithm | +| jca/SignatureOperation.java:185:53:185:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:186:28:186:37 | Key | +| jca/SignatureOperation.java:187:26:187:29 | Message | +| jca/SignatureOperation.java:188:16:188:31 | SignOperation | +| jca/SignatureOperation.java:188:16:188:31 | SignatureOutput | +| jca/SignatureOperation.java:198:53:198:65 | HashAlgorithm | +| jca/SignatureOperation.java:198:53:198:65 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:199:30:199:38 | Key | +| jca/SignatureOperation.java:200:26:200:29 | Message | +| jca/SignatureOperation.java:201:16:201:41 | VerifyOperation | +| jca/SignatureOperation.java:201:33:201:40 | SignatureInput | +| jca/SignatureOperation.java:231:26:231:44 | Constant | +| jca/SignatureOperation.java:236:27:236:30 | Constant | +| jca/SignatureOperation.java:266:47:266:68 | HashAlgorithm | +| jca/SignatureOperation.java:266:47:266:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:269:47:269:63 | HashAlgorithm | +| jca/SignatureOperation.java:269:47:269:63 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:272:47:272:55 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:275:47:275:59 | HashAlgorithm | +| jca/SignatureOperation.java:275:47:275:59 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:279:47:279:68 | HashAlgorithm | +| jca/SignatureOperation.java:279:47:279:68 | KeyOperationAlgorithm | +| jca/SignatureOperation.java:282:26:282:49 | Constant | +| jca/SignatureOperation.java:283:28:283:42 | Key | +| jca/SignatureOperation.java:284:26:284:32 | Message | +| jca/SignatureOperation.java:285:27:285:42 | SignOperation | +| jca/SignatureOperation.java:285:27:285:42 | SignatureOutput | +| jca/SignatureOperation.java:287:30:287:43 | Key | +| jca/SignatureOperation.java:288:26:288:32 | Message | +| jca/SignatureOperation.java:289:28:289:53 | VerifyOperation | +| jca/SignatureOperation.java:289:45:289:52 | SignatureInput | +| jca/SignatureOperation.java:311:26:311:49 | Constant | +| jca/SymmetricAlgorithm.java:51:44:51:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:51:44:51:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:51:44:51:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:53:38:53:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:55:42:55:44 | Key | +| jca/SymmetricAlgorithm.java:55:47:55:50 | Nonce | +| jca/SymmetricAlgorithm.java:56:29:56:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:56:29:56:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:56:44:56:52 | Message | +| jca/SymmetricAlgorithm.java:72:39:72:51 | Parameter | +| jca/SymmetricAlgorithm.java:72:54:72:69 | Parameter | +| jca/SymmetricAlgorithm.java:73:44:73:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:73:44:73:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:73:44:73:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:76:42:76:44 | Key | +| jca/SymmetricAlgorithm.java:76:47:76:50 | Nonce | +| jca/SymmetricAlgorithm.java:77:29:77:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:77:29:77:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:77:44:77:52 | Message | +| jca/SymmetricAlgorithm.java:94:44:94:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:94:44:94:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:94:44:94:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:96:38:96:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:98:42:98:44 | Key | +| jca/SymmetricAlgorithm.java:98:47:98:52 | Nonce | +| jca/SymmetricAlgorithm.java:99:29:99:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:99:29:99:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:99:44:99:52 | Message | +| jca/SymmetricAlgorithm.java:116:44:116:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:116:44:116:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:116:44:116:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:117:42:117:44 | Key | +| jca/SymmetricAlgorithm.java:118:16:118:40 | EncryptOperation | +| jca/SymmetricAlgorithm.java:118:16:118:40 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:118:31:118:39 | Message | +| jca/SymmetricAlgorithm.java:131:44:131:48 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:132:42:132:44 | Key | +| jca/SymmetricAlgorithm.java:133:16:133:40 | EncryptOperation | +| jca/SymmetricAlgorithm.java:133:16:133:40 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:133:31:133:39 | Message | +| jca/SymmetricAlgorithm.java:145:36:145:48 | Parameter | +| jca/SymmetricAlgorithm.java:145:51:145:66 | Parameter | +| jca/SymmetricAlgorithm.java:146:44:146:65 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:146:44:146:65 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:146:44:146:65 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:148:38:148:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:150:42:150:44 | Key | +| jca/SymmetricAlgorithm.java:150:47:150:52 | Nonce | +| jca/SymmetricAlgorithm.java:151:29:151:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:151:29:151:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:151:44:151:52 | Message | +| jca/SymmetricAlgorithm.java:167:42:167:54 | Parameter | +| jca/SymmetricAlgorithm.java:167:57:167:72 | Parameter | +| jca/SymmetricAlgorithm.java:168:44:168:68 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:168:44:168:68 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:168:44:168:68 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:170:38:170:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:172:42:172:44 | Key | +| jca/SymmetricAlgorithm.java:172:47:172:52 | Nonce | +| jca/SymmetricAlgorithm.java:173:29:173:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:173:29:173:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:173:44:173:52 | Message | +| jca/SymmetricAlgorithm.java:190:44:190:53 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:192:38:192:42 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:194:42:194:44 | Key | +| jca/SymmetricAlgorithm.java:194:47:194:72 | Nonce | +| jca/SymmetricAlgorithm.java:195:29:195:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:195:29:195:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:195:44:195:52 | Message | +| jca/SymmetricAlgorithm.java:212:35:212:47 | Parameter | +| jca/SymmetricAlgorithm.java:212:50:212:65 | Parameter | +| jca/SymmetricAlgorithm.java:213:36:213:44 | Constant | +| jca/SymmetricAlgorithm.java:214:19:214:21 | Key | +| jca/SymmetricAlgorithm.java:215:29:215:51 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:215:29:215:51 | MACOperation | +| jca/SymmetricAlgorithm.java:215:42:215:50 | Message | +| jca/SymmetricAlgorithm.java:218:44:218:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:218:44:218:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:218:44:218:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:220:38:220:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:222:42:222:51 | Key | +| jca/SymmetricAlgorithm.java:222:54:222:57 | Nonce | +| jca/SymmetricAlgorithm.java:223:29:223:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:223:29:223:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:223:44:223:52 | Message | +| jca/SymmetricAlgorithm.java:244:64:244:76 | Parameter | +| jca/SymmetricAlgorithm.java:244:79:244:94 | Parameter | +| jca/SymmetricAlgorithm.java:284:58:284:70 | Parameter | +| jca/SymmetricAlgorithm.java:284:73:284:88 | Parameter | +| jca/SymmetricAlgorithm.java:287:42:287:66 | Message | +| jca/SymmetricAlgorithm.java:287:69:287:72 | Salt | +| jca/SymmetricAlgorithm.java:287:75:287:79 | Constant | +| jca/SymmetricAlgorithm.java:287:82:287:84 | Constant | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HMACAlgorithm | +| jca/SymmetricAlgorithm.java:288:65:288:86 | HashAlgorithm | +| jca/SymmetricAlgorithm.java:288:65:288:86 | KeyDerivationAlgorithm | +| jca/SymmetricAlgorithm.java:289:26:289:53 | Key | +| jca/SymmetricAlgorithm.java:289:26:289:53 | KeyDerivation | +| jca/SymmetricAlgorithm.java:295:44:295:62 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:295:44:295:62 | ModeOfOperation | +| jca/SymmetricAlgorithm.java:295:44:295:62 | PaddingAlgorithm | +| jca/SymmetricAlgorithm.java:297:38:297:39 | RandomNumberGeneration | +| jca/SymmetricAlgorithm.java:298:42:298:47 | Key | +| jca/SymmetricAlgorithm.java:298:50:298:78 | Nonce | +| jca/SymmetricAlgorithm.java:299:29:299:53 | EncryptOperation | +| jca/SymmetricAlgorithm.java:299:29:299:53 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:299:44:299:52 | Message | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HMACAlgorithm | +| jca/SymmetricAlgorithm.java:301:35:301:46 | HashAlgorithm | +| jca/SymmetricAlgorithm.java:302:18:302:30 | Key | +| jca/SymmetricAlgorithm.java:303:30:303:52 | KeyOperationOutput | +| jca/SymmetricAlgorithm.java:303:30:303:52 | MACOperation | +| jca/SymmetricAlgorithm.java:303:42:303:51 | Message | +| jca/SymmetricAlgorithm.java:331:52:331:56 | KeyOperationAlgorithm | +| jca/SymmetricAlgorithm.java:332:17:332:19 | Constant | +| jca/SymmetricAlgorithm.java:333:16:333:31 | Key | +| jca/SymmetricAlgorithm.java:333:16:333:31 | KeyGeneration | +| jca/SymmetricAlgorithm.java:345:38:345:41 | RandomNumberGeneration | +| jca/SymmetricModesTest.java:48:52:48:56 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:49:17:49:19 | Constant | +| jca/SymmetricModesTest.java:50:33:50:48 | Key | +| jca/SymmetricModesTest.java:50:33:50:48 | KeyGeneration | +| jca/SymmetricModesTest.java:53:17:53:19 | Constant | +| jca/SymmetricModesTest.java:54:31:54:46 | Key | +| jca/SymmetricModesTest.java:54:31:54:46 | KeyGeneration | +| jca/SymmetricModesTest.java:57:44:57:62 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:57:44:57:62 | ModeOfOperation | +| jca/SymmetricModesTest.java:57:44:57:62 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:58:39:58:49 | Key | +| jca/SymmetricModesTest.java:59:29:59:50 | KeyOperationOutput | +| jca/SymmetricModesTest.java:59:29:59:50 | WrapOperation | +| jca/SymmetricModesTest.java:59:41:59:49 | Message | +| jca/SymmetricModesTest.java:78:43:78:55 | Parameter | +| jca/SymmetricModesTest.java:78:58:78:73 | Parameter | +| jca/SymmetricModesTest.java:79:44:79:63 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:79:44:79:63 | ModeOfOperation | +| jca/SymmetricModesTest.java:79:44:79:63 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:81:38:81:39 | RandomNumberGeneration | +| jca/SymmetricModesTest.java:83:42:83:44 | Key | +| jca/SymmetricModesTest.java:83:47:83:52 | Nonce | +| jca/SymmetricModesTest.java:84:29:84:53 | EncryptOperation | +| jca/SymmetricModesTest.java:84:29:84:53 | KeyOperationOutput | +| jca/SymmetricModesTest.java:84:44:84:52 | Message | +| jca/SymmetricModesTest.java:104:45:104:57 | Parameter | +| jca/SymmetricModesTest.java:104:60:104:75 | Parameter | +| jca/SymmetricModesTest.java:105:44:105:63 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:105:44:105:63 | ModeOfOperation | +| jca/SymmetricModesTest.java:105:44:105:63 | PaddingAlgorithm | +| jca/SymmetricModesTest.java:109:42:109:44 | Key | +| jca/SymmetricModesTest.java:109:47:109:52 | Nonce | +| jca/SymmetricModesTest.java:110:29:110:53 | EncryptOperation | +| jca/SymmetricModesTest.java:110:29:110:53 | KeyOperationOutput | +| jca/SymmetricModesTest.java:110:44:110:52 | Message | +| jca/SymmetricModesTest.java:127:52:127:56 | KeyOperationAlgorithm | +| jca/SymmetricModesTest.java:128:17:128:19 | Constant | +| jca/SymmetricModesTest.java:129:16:129:31 | Key | +| jca/SymmetricModesTest.java:129:16:129:31 | KeyGeneration | +| jca/UniversalFlowTest.java:19:28:19:32 | KeyOperationAlgorithm | +| jca/UniversalFlowTest.java:26:21:26:23 | Constant | +| jca/UniversalFlowTest.java:27:25:27:44 | Key | +| jca/UniversalFlowTest.java:27:25:27:44 | KeyGeneration | +| jca/UniversalFlowTest.java:28:29:28:47 | KeyOperationAlgorithm | +| jca/UniversalFlowTest.java:28:29:28:47 | ModeOfOperation | +| jca/UniversalFlowTest.java:28:29:28:47 | PaddingAlgorithm | +| jca/UniversalFlowTest.java:31:38:31:39 | RandomNumberGeneration | +| jca/UniversalFlowTest.java:33:42:33:44 | Key | +| jca/UniversalFlowTest.java:33:47:33:53 | Nonce | +| jca/UniversalFlowTest.java:34:32:34:74 | EncryptOperation | +| jca/UniversalFlowTest.java:34:32:34:74 | KeyOperationOutput | +| jca/UniversalFlowTest.java:34:47:34:62 | Constant | +| jca/UniversalFlowTest.java:34:47:34:73 | Message | +| jca/UniversalFlowTest.java:46:20:46:24 | KeyOperationAlgorithm | diff --git a/java/ql/test/experimental/library-tests/quantum/nodes.ql b/java/ql/test/experimental/library-tests/quantum/nodes.ql new file mode 100644 index 00000000000..e080ce7297a --- /dev/null +++ b/java/ql/test/experimental/library-tests/quantum/nodes.ql @@ -0,0 +1,5 @@ +import java +import experimental.quantum.Language + +from Crypto::NodeBase n +select n diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.expected b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.expected new file mode 100644 index 00000000000..ba74f3dffce --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.expected @@ -0,0 +1,36 @@ +#select +| BadMacUse.java:152:42:152:51 | ciphertext | BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:152:42:152:51 | ciphertext | Incorrect decryption and MAC order: Decryption of cipher text occurs before validation of MAC on cipher text. | +edges +| BadMacUse.java:84:42:84:53 | bytes : byte[] | BadMacUse.java:92:31:92:35 | bytes : byte[] | provenance | | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:100:39:100:48 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:100:39:100:48 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:108:39:108:47 | plaintext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:108:39:108:47 | plaintext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:118:52:118:60 | plaintext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:118:52:118:60 | plaintext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:146:48:146:57 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:146:48:146:57 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:99:39:99:55 | ciphertext : byte[] | BadMacUse.java:100:39:100:48 | ciphertext : byte[] | provenance | | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:108:39:108:47 | plaintext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:118:52:118:60 | plaintext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] | BadMacUse.java:99:39:99:55 | ciphertext : byte[] | provenance | | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] | BadMacUse.java:152:42:152:51 | ciphertext | provenance | | +nodes +| BadMacUse.java:84:42:84:53 | bytes : byte[] | semmle.label | bytes : byte[] | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | semmle.label | bytes : byte[] | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | semmle.label | bytes : byte[] | +| BadMacUse.java:99:39:99:55 | ciphertext : byte[] | semmle.label | ciphertext : byte[] | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] | semmle.label | ciphertext : byte[] | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] | semmle.label | ciphertext : byte[] | +| BadMacUse.java:108:39:108:47 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:118:52:118:60 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] | semmle.label | ciphertext : byte[] | +| BadMacUse.java:152:42:152:51 | ciphertext | semmle.label | ciphertext | +subpaths +testFailures +| BadMacUse.java:50:56:50:65 | // $Source | Missing result: Source | +| BadMacUse.java:63:118:63:127 | // $Source | Missing result: Source | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | Unexpected result: Source | +| BadMacUse.java:146:95:146:104 | // $Source | Missing result: Source | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.qlref b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.qlref new file mode 100644 index 00000000000..811a6cbac13 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptThenMac.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/BadMacOrderDecryptThenMac.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.expected b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.expected new file mode 100644 index 00000000000..f73f0f25e0a --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.expected @@ -0,0 +1,37 @@ +#select +| BadMacUse.java:56:42:56:50 | plaintext | BadMacUse.java:50:28:50:53 | doFinal(...) : byte[] | BadMacUse.java:56:42:56:50 | plaintext | Incorrect decryption and MAC order: decryption output plaintext flows to MAC message input. | +| BadMacUse.java:124:42:124:51 | ciphertext | BadMacUse.java:92:16:92:36 | doFinal(...) : byte[] | BadMacUse.java:124:42:124:51 | ciphertext | Incorrect decryption and MAC order: decryption output plaintext flows to MAC message input. | +edges +| BadMacUse.java:27:29:27:53 | doFinal(...) : byte[] | BadMacUse.java:32:42:32:51 | ciphertext | provenance | | +| BadMacUse.java:50:28:50:53 | doFinal(...) : byte[] | BadMacUse.java:56:42:56:50 | plaintext | provenance | | +| BadMacUse.java:84:83:84:91 | iv : byte[] | BadMacUse.java:90:63:90:64 | iv : byte[] | provenance | | +| BadMacUse.java:90:43:90:65 | new IvParameterSpec(...) : IvParameterSpec | BadMacUse.java:91:42:91:56 | ivParameterSpec | provenance | Sink:MaD:1 | +| BadMacUse.java:90:63:90:64 | iv : byte[] | BadMacUse.java:90:43:90:65 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| BadMacUse.java:90:63:90:64 | iv : byte[] | BadMacUse.java:90:43:90:65 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| BadMacUse.java:92:16:92:36 | doFinal(...) : byte[] | BadMacUse.java:118:29:118:106 | cipherOperationWrapper(...) : byte[] | provenance | | +| BadMacUse.java:117:38:117:39 | iv : byte[] | BadMacUse.java:118:83:118:84 | iv : byte[] | provenance | | +| BadMacUse.java:118:29:118:106 | cipherOperationWrapper(...) : byte[] | BadMacUse.java:124:42:124:51 | ciphertext | provenance | | +| BadMacUse.java:118:83:118:84 | iv : byte[] | BadMacUse.java:84:83:84:91 | iv : byte[] | provenance | | +models +| 1 | Sink: javax.crypto; Cipher; true; init; (int,Key,AlgorithmParameterSpec); ; Argument[2]; encryption-iv; manual | +| 2 | Summary: javax.crypto.spec; IvParameterSpec; true; IvParameterSpec; ; ; Argument[0]; Argument[this]; taint; manual | +nodes +| BadMacUse.java:27:29:27:53 | doFinal(...) : byte[] | semmle.label | doFinal(...) : byte[] | +| BadMacUse.java:32:42:32:51 | ciphertext | semmle.label | ciphertext | +| BadMacUse.java:50:28:50:53 | doFinal(...) : byte[] | semmle.label | doFinal(...) : byte[] | +| BadMacUse.java:56:42:56:50 | plaintext | semmle.label | plaintext | +| BadMacUse.java:84:83:84:91 | iv : byte[] | semmle.label | iv : byte[] | +| BadMacUse.java:90:43:90:65 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| BadMacUse.java:90:63:90:64 | iv : byte[] | semmle.label | iv : byte[] | +| BadMacUse.java:91:42:91:56 | ivParameterSpec | semmle.label | ivParameterSpec | +| BadMacUse.java:92:16:92:36 | doFinal(...) : byte[] | semmle.label | doFinal(...) : byte[] | +| BadMacUse.java:117:38:117:39 | iv : byte[] | semmle.label | iv : byte[] | +| BadMacUse.java:118:29:118:106 | cipherOperationWrapper(...) : byte[] | semmle.label | cipherOperationWrapper(...) : byte[] | +| BadMacUse.java:118:83:118:84 | iv : byte[] | semmle.label | iv : byte[] | +| BadMacUse.java:124:42:124:51 | ciphertext | semmle.label | ciphertext | +subpaths +testFailures +| BadMacUse.java:63:118:63:127 | // $Source | Missing result: Source | +| BadMacUse.java:92:16:92:36 | doFinal(...) : byte[] | Unexpected result: Source | +| BadMacUse.java:124:42:124:51 | ciphertext | Unexpected result: Alert | +| BadMacUse.java:146:95:146:104 | // $Source | Missing result: Source | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.qlref b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.qlref new file mode 100644 index 00000000000..6ee58d93681 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/BadMacOrderDecryptToMac.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.expected b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.expected new file mode 100644 index 00000000000..ea427361361 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.expected @@ -0,0 +1,51 @@ +#select +| BadMacUse.java:76:44:76:52 | plaintext | BadMacUse.java:63:82:63:97 | plaintext : byte[] | BadMacUse.java:76:44:76:52 | plaintext | Incorrect MAC usage: Encryption plaintext also used for MAC. Flow shows plaintext to final use through intermediate mac or encryption operation here $@ | BadMacUse.java:71:42:71:50 | plaintext | plaintext | +| BadMacUse.java:152:42:152:51 | ciphertext | BadMacUse.java:139:79:139:90 | input : byte[] | BadMacUse.java:152:42:152:51 | ciphertext | Incorrect MAC usage: Encryption plaintext also used for MAC. Flow shows plaintext to final use through intermediate mac or encryption operation here $@ | BadMacUse.java:92:31:92:35 | bytes | bytes | +edges +| BadMacUse.java:63:82:63:97 | plaintext : byte[] | BadMacUse.java:71:42:71:50 | plaintext : byte[] | provenance | | +| BadMacUse.java:71:42:71:50 | plaintext : byte[] | BadMacUse.java:71:42:71:50 | plaintext : byte[] | provenance | Config | +| BadMacUse.java:71:42:71:50 | plaintext : byte[] | BadMacUse.java:76:44:76:52 | plaintext | provenance | | +| BadMacUse.java:84:42:84:53 | bytes : byte[] | BadMacUse.java:92:31:92:35 | bytes : byte[] | provenance | | +| BadMacUse.java:84:42:84:53 | bytes : byte[] [[]] : Object | BadMacUse.java:92:31:92:35 | bytes : byte[] [[]] : Object | provenance | | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | BadMacUse.java:146:48:146:57 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:92:31:92:35 | bytes : byte[] [[]] : Object | BadMacUse.java:146:48:146:57 | ciphertext : byte[] | provenance | Config | +| BadMacUse.java:99:39:99:55 | ciphertext : byte[] [[]] : Object | BadMacUse.java:100:39:100:48 | ciphertext : byte[] [[]] : Object | provenance | | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] [[]] : Object | BadMacUse.java:84:42:84:53 | bytes : byte[] [[]] : Object | provenance | | +| BadMacUse.java:107:39:107:54 | plaintext : byte[] | BadMacUse.java:108:39:108:47 | plaintext : byte[] | provenance | | +| BadMacUse.java:108:39:108:47 | plaintext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:114:92:114:107 | plaintext : byte[] | BadMacUse.java:118:52:118:60 | plaintext : byte[] | provenance | | +| BadMacUse.java:118:52:118:60 | plaintext : byte[] | BadMacUse.java:84:42:84:53 | bytes : byte[] | provenance | | +| BadMacUse.java:139:79:139:90 | input : byte[] | BadMacUse.java:142:48:142:52 | input : byte[] | provenance | | +| BadMacUse.java:142:29:142:82 | copyOfRange(...) : byte[] [[]] : Object | BadMacUse.java:146:48:146:57 | ciphertext : byte[] [[]] : Object | provenance | | +| BadMacUse.java:142:48:142:52 | input : byte[] | BadMacUse.java:142:29:142:82 | copyOfRange(...) : byte[] [[]] : Object | provenance | MaD:1 | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] | BadMacUse.java:152:42:152:51 | ciphertext | provenance | | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] [[]] : Object | BadMacUse.java:99:39:99:55 | ciphertext : byte[] [[]] : Object | provenance | | +models +| 1 | Summary: java.util; Arrays; false; copyOfRange; ; ; Argument[0].ArrayElement; ReturnValue.ArrayElement; value; manual | +nodes +| BadMacUse.java:63:82:63:97 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:71:42:71:50 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:71:42:71:50 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:76:44:76:52 | plaintext | semmle.label | plaintext | +| BadMacUse.java:84:42:84:53 | bytes : byte[] | semmle.label | bytes : byte[] | +| BadMacUse.java:84:42:84:53 | bytes : byte[] [[]] : Object | semmle.label | bytes : byte[] [[]] : Object | +| BadMacUse.java:92:31:92:35 | bytes : byte[] | semmle.label | bytes : byte[] | +| BadMacUse.java:92:31:92:35 | bytes : byte[] [[]] : Object | semmle.label | bytes : byte[] [[]] : Object | +| BadMacUse.java:99:39:99:55 | ciphertext : byte[] [[]] : Object | semmle.label | ciphertext : byte[] [[]] : Object | +| BadMacUse.java:100:39:100:48 | ciphertext : byte[] [[]] : Object | semmle.label | ciphertext : byte[] [[]] : Object | +| BadMacUse.java:107:39:107:54 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:108:39:108:47 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:114:92:114:107 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:118:52:118:60 | plaintext : byte[] | semmle.label | plaintext : byte[] | +| BadMacUse.java:139:79:139:90 | input : byte[] | semmle.label | input : byte[] | +| BadMacUse.java:142:29:142:82 | copyOfRange(...) : byte[] [[]] : Object | semmle.label | copyOfRange(...) : byte[] [[]] : Object | +| BadMacUse.java:142:48:142:52 | input : byte[] | semmle.label | input : byte[] | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] | semmle.label | ciphertext : byte[] | +| BadMacUse.java:146:48:146:57 | ciphertext : byte[] [[]] : Object | semmle.label | ciphertext : byte[] [[]] : Object | +| BadMacUse.java:152:42:152:51 | ciphertext | semmle.label | ciphertext | +subpaths +testFailures +| BadMacUse.java:50:56:50:65 | // $Source | Missing result: Source | +| BadMacUse.java:139:79:139:90 | input : byte[] | Unexpected result: Source | +| BadMacUse.java:146:95:146:104 | // $Source | Missing result: Source | +| BadMacUse.java:152:42:152:51 | ciphertext | Unexpected result: Alert | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.qlref b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.qlref new file mode 100644 index 00000000000..f094aa14a46 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/BadMacOrderMacOnEncryptPlaintext.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacUse.java b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacUse.java new file mode 100644 index 00000000000..5c442d4bca7 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacUse.java @@ -0,0 +1,158 @@ + +import java.security.*; +import java.util.Arrays; +import javax.crypto.Cipher; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +class BadMacUse { + + private byte[] generateSalt(int length) { + byte[] salt = new byte[length]; + new SecureRandom().nextBytes(salt); + return salt; + } + + public void CipherThenMac(byte[] encryptionKeyBytes, byte[] macKeyBytes) throws Exception { + // Create keys directly from provided byte arrays + SecretKey encryptionKey = new SecretKeySpec(encryptionKeyBytes, "AES"); + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + // Encrypt some sample data using the encryption key + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new SecureRandom()); + byte[] plaintext = "Further Use Test Data".getBytes(); + byte[] ciphertext = cipher.doFinal(plaintext); + + // Compute HMAC over the ciphertext using the MAC key + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(ciphertext); + + // Concatenate ciphertext and MAC + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + } + + public void BadDecryptThenMacOnPlaintextVerify(byte[] encryptionKeyBytes, byte[] macKeyBytes, byte[] input) throws Exception { + // Split input into ciphertext and MAC + int macLength = 32; // HMAC-SHA256 output length + byte[] ciphertext = Arrays.copyOfRange(input, 0, input.length - macLength); + byte[] receivedMac = Arrays.copyOfRange(input, input.length - macLength, input.length); + + // Decrypt first (unsafe) + SecretKey encryptionKey = new SecretKeySpec(encryptionKeyBytes, "AES"); + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, encryptionKey, new SecureRandom()); + byte[] plaintext = cipher.doFinal(ciphertext); // $Source + + // Now verify MAC (too late) + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(plaintext); // $Alert[java/quantum/examples/bad-mac-order-decrypt-to-mac] + + if (!MessageDigest.isEqual(receivedMac, computedMac)) { + throw new SecurityException("MAC verification failed"); + } + } + + public void BadMacOnPlaintext(byte[] encryptionKeyBytes, byte[] macKeyBytes, byte[] plaintext) throws Exception {// $Source + // Create keys directly from provided byte arrays + SecretKey encryptionKey = new SecretKeySpec(encryptionKeyBytes, "AES"); + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + + // BAD Compute MAC over plaintext (not ciphertext) + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(plaintext); // Integrity not tied to encrypted data + + // Encrypt the plaintext + Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); + cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new SecureRandom()); + byte[] ciphertext = cipher.doFinal(plaintext); // $Alert[java/quantum/examples/bad-mac-order-encrypt-plaintext-also-in-mac] + + // Concatenate ciphertext and MAC + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + } + + public byte[] cipherOperationWrapper(byte[] bytes, byte[] encryptionKeyBytes, byte[] iv, int mode) + throws Exception { + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKeySpec secretKeySpec = new SecretKeySpec(encryptionKeyBytes, "AES"); + + IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); + cipher.init(mode, secretKeySpec, ivParameterSpec); + return cipher.doFinal(bytes); + } + + /** + * A use of the cipher operation wrapper for decryption to throw off the + * analysis + */ + public byte[] decryptUsingWrapper(byte[] ciphertext, byte[] encryptionKeyBytes, byte[] iv) throws Exception { + return cipherOperationWrapper(ciphertext, encryptionKeyBytes, iv, Cipher.DECRYPT_MODE); + } + + /** + * A use of the cipher operation wrapper for encryption to throw off the + * analysis + */ + public byte[] encryptUsingWrapper(byte[] plaintext, byte[] encryptionKeyBytes, byte[] iv) throws Exception { + return cipherOperationWrapper(plaintext, encryptionKeyBytes, iv, Cipher.ENCRYPT_MODE); + } + + /** + * Encrypt then mac using the wrapper function + */ + public byte[] falsePositiveDecryptToMac(byte[] encryptionKeyBytes, byte[] macKeyBytes, byte[] plaintext) throws Exception { + // Encrypt the plaintext + byte[] iv = new byte[16]; + new SecureRandom().nextBytes(iv); + byte[] ciphertext = cipherOperationWrapper(plaintext, encryptionKeyBytes, iv, Cipher.ENCRYPT_MODE); + + // Compute HMAC over the ciphertext using the MAC key + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(ciphertext); // False Positive + + // Concatenate ciphertext and MAC + byte[] output = new byte[ciphertext.length + computedMac.length]; + System.arraycopy(ciphertext, 0, output, 0, ciphertext.length); + System.arraycopy(computedMac, 0, output, ciphertext.length, computedMac.length); + return output; + } + + + /** + * Correct inputs to a decrypt and MAC operation, but the ordering is unsafe. + * The function decrypts THEN computes the MAC on the plaintext. + * It should have the MAC computed on the ciphertext first. + */ + public void decryptThenMac(byte[] encryptionKeyBytes, byte[] macKeyBytes, byte[] input) throws Exception { + // Split input into ciphertext and MAC + int macLength = 32; // HMAC-SHA256 output length + byte[] ciphertext = Arrays.copyOfRange(input, 0, input.length - macLength); + byte[] receivedMac = Arrays.copyOfRange(input, input.length - macLength, input.length); + + // Decrypt first (unsafe) + byte[] plaintext = decryptUsingWrapper(ciphertext, encryptionKeyBytes, new byte[16]); // $Source + + // Now verify MAC (too late) + SecretKey macKey = new SecretKeySpec(macKeyBytes, "HmacSHA256"); + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(macKey); + byte[] computedMac = mac.doFinal(ciphertext); // $Alert[java/quantum/examples/bad-mac-order-decrypt-then-mac], False positive for Plaintext reuse + + if (!MessageDigest.isEqual(receivedMac, computedMac)) { + throw new SecurityException("MAC verification failed"); + } + } +} diff --git a/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.expected b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.expected new file mode 100644 index 00000000000..3ad1b08e476 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.expected @@ -0,0 +1,130 @@ +#select +| InsecureIVorNonceSource.java:20:51:20:56 | ivSpec | InsecureIVorNonceSource.java:14:21:14:81 | {...} : byte[] | InsecureIVorNonceSource.java:20:51:20:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:14:21:14:81 | Constant | Constant | InsecureIVorNonceSource.java:20:51:20:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:49:51:49:56 | ivSpec | InsecureIVorNonceSource.java:42:21:42:21 | 1 : Number | InsecureIVorNonceSource.java:49:51:49:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:42:21:42:21 | Constant | Constant | InsecureIVorNonceSource.java:49:51:49:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | InsecureIVorNonceSource.java:57:13:57:62 | {...} : byte[] | InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:57:13:57:62 | Constant | Constant | InsecureIVorNonceSource.java:65:51:65:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | InsecureIVorNonceSource.java:58:13:58:63 | {...} : byte[] | InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:58:13:58:63 | Constant | Constant | InsecureIVorNonceSource.java:65:51:65:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | InsecureIVorNonceSource.java:73:13:73:73 | {...} : byte[] | InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:73:13:73:73 | Constant | Constant | InsecureIVorNonceSource.java:81:51:81:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | InsecureIVorNonceSource.java:74:13:74:74 | {...} : byte[] | InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | Nonce or IV uses constant source $@ | InsecureIVorNonceSource.java:74:13:74:74 | Constant | Constant | InsecureIVorNonceSource.java:81:51:81:56 | Nonce | Nonce | +| InsecureIVorNonceSource.java:206:51:206:56 | ivSpec | InsecureIVorNonceSource.java:194:26:194:30 | bytes : byte[] | InsecureIVorNonceSource.java:206:51:206:56 | ivSpec | Nonce or IV uses insecure source $@ at encryption operation $@ | InsecureIVorNonceSource.java:194:26:194:30 | RandomNumberGeneration | RandomNumberGeneration | InsecureIVorNonceSource.java:208:16:208:31 | EncryptOperation | EncryptOperation | +edges +| InsecureIVorNonceSource.java:14:21:14:81 | {...} : byte[] | InsecureIVorNonceSource.java:16:61:16:62 | iv : byte[] | provenance | | +| InsecureIVorNonceSource.java:16:35:16:63 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:20:51:20:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:16:61:16:62 | iv : byte[] | InsecureIVorNonceSource.java:16:35:16:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:16:61:16:62 | iv : byte[] | InsecureIVorNonceSource.java:16:35:16:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | MaD:4 | +| InsecureIVorNonceSource.java:42:13:42:14 | iv [post update] : byte[] [[]] : Number | InsecureIVorNonceSource.java:45:54:45:55 | iv : byte[] [[]] : Number | provenance | | +| InsecureIVorNonceSource.java:42:21:42:21 | 1 : Number | InsecureIVorNonceSource.java:42:13:42:14 | iv [post update] : byte[] [[]] : Number | provenance | | +| InsecureIVorNonceSource.java:45:34:45:56 | new IvParameterSpec(...) : IvParameterSpec | InsecureIVorNonceSource.java:49:51:49:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:45:54:45:55 | iv : byte[] [[]] : Number | InsecureIVorNonceSource.java:45:34:45:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:56:30:59:9 | {...} : byte[][] [[]] : byte[] | InsecureIVorNonceSource.java:61:61:61:69 | staticIvs : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:57:13:57:62 | {...} : byte[] | InsecureIVorNonceSource.java:56:30:59:9 | {...} : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:58:13:58:63 | {...} : byte[] | InsecureIVorNonceSource.java:56:30:59:9 | {...} : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:61:35:61:73 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:61:61:61:69 | staticIvs : byte[][] [[]] : byte[] | InsecureIVorNonceSource.java:61:61:61:72 | ...[...] : byte[] | provenance | | +| InsecureIVorNonceSource.java:61:61:61:72 | ...[...] : byte[] | InsecureIVorNonceSource.java:61:35:61:73 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:61:61:61:72 | ...[...] : byte[] | InsecureIVorNonceSource.java:61:35:61:73 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | MaD:4 | +| InsecureIVorNonceSource.java:72:30:75:9 | {...} : byte[][] [[]] : byte[] | InsecureIVorNonceSource.java:77:61:77:69 | staticIvs : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:73:13:73:73 | {...} : byte[] | InsecureIVorNonceSource.java:72:30:75:9 | {...} : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:74:13:74:74 | {...} : byte[] | InsecureIVorNonceSource.java:72:30:75:9 | {...} : byte[][] [[]] : byte[] | provenance | | +| InsecureIVorNonceSource.java:77:35:77:73 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:77:61:77:69 | staticIvs : byte[][] [[]] : byte[] | InsecureIVorNonceSource.java:77:61:77:72 | ...[...] : byte[] | provenance | | +| InsecureIVorNonceSource.java:77:61:77:72 | ...[...] : byte[] | InsecureIVorNonceSource.java:77:35:77:73 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:77:61:77:72 | ...[...] : byte[] | InsecureIVorNonceSource.java:77:35:77:73 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | MaD:4 | +| InsecureIVorNonceSource.java:107:26:107:27 | iv : byte[] | InsecureIVorNonceSource.java:109:61:109:62 | iv : byte[] | provenance | | +| InsecureIVorNonceSource.java:109:35:109:63 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:113:51:113:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:109:61:109:62 | iv : byte[] | InsecureIVorNonceSource.java:109:35:109:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:109:61:109:62 | iv : byte[] | InsecureIVorNonceSource.java:109:35:109:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | MaD:4 | +| InsecureIVorNonceSource.java:123:13:123:14 | iv [post update] : byte[] [[]] : Number | InsecureIVorNonceSource.java:126:61:126:62 | iv : byte[] [[]] : Number | provenance | | +| InsecureIVorNonceSource.java:123:21:123:43 | (...)... : Number | InsecureIVorNonceSource.java:123:13:123:14 | iv [post update] : byte[] [[]] : Number | provenance | | +| InsecureIVorNonceSource.java:123:28:123:43 | nextInt(...) : Number | InsecureIVorNonceSource.java:123:21:123:43 | (...)... : Number | provenance | | +| InsecureIVorNonceSource.java:126:35:126:63 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:130:51:130:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:126:61:126:62 | iv : byte[] [[]] : Number | InsecureIVorNonceSource.java:126:35:126:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:138:52:138:62 | randomBytes : byte[] | InsecureIVorNonceSource.java:141:26:141:36 | randomBytes : byte[] | provenance | | +| InsecureIVorNonceSource.java:141:26:141:36 | randomBytes : byte[] | InsecureIVorNonceSource.java:141:42:141:43 | iv [post update] : byte[] | provenance | MaD:2 | +| InsecureIVorNonceSource.java:141:42:141:43 | iv [post update] : byte[] | InsecureIVorNonceSource.java:143:61:143:62 | iv : byte[] | provenance | | +| InsecureIVorNonceSource.java:143:35:143:63 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:147:51:147:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:143:61:143:62 | iv : byte[] | InsecureIVorNonceSource.java:143:35:143:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:143:61:143:62 | iv : byte[] | InsecureIVorNonceSource.java:143:35:143:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | MaD:4 | +| InsecureIVorNonceSource.java:155:52:155:62 | randomBytes : byte[] | InsecureIVorNonceSource.java:158:28:158:38 | randomBytes : byte[] | provenance | | +| InsecureIVorNonceSource.java:158:14:158:43 | copyOf(...) : byte[] [[]] : Object | InsecureIVorNonceSource.java:160:61:160:62 | iv : byte[] [[]] : Object | provenance | | +| InsecureIVorNonceSource.java:158:28:158:38 | randomBytes : byte[] | InsecureIVorNonceSource.java:158:14:158:43 | copyOf(...) : byte[] [[]] : Object | provenance | MaD:3 | +| InsecureIVorNonceSource.java:160:35:160:63 | new GCMParameterSpec(...) : GCMParameterSpec | InsecureIVorNonceSource.java:164:51:164:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:160:61:160:62 | iv : byte[] [[]] : Object | InsecureIVorNonceSource.java:160:35:160:63 | new GCMParameterSpec(...) : GCMParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:174:52:174:62 | randomBytes : byte[] | InsecureIVorNonceSource.java:175:16:175:26 | randomBytes : byte[] | provenance | | +| InsecureIVorNonceSource.java:175:16:175:26 | randomBytes : byte[] | InsecureIVorNonceSource.java:180:21:180:32 | generate(...) : byte[] | provenance | | +| InsecureIVorNonceSource.java:180:21:180:32 | generate(...) : byte[] | InsecureIVorNonceSource.java:182:54:182:55 | iv : byte[] | provenance | | +| InsecureIVorNonceSource.java:182:34:182:56 | new IvParameterSpec(...) : IvParameterSpec | InsecureIVorNonceSource.java:186:51:186:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:182:54:182:55 | iv : byte[] | InsecureIVorNonceSource.java:182:34:182:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:182:54:182:55 | iv : byte[] | InsecureIVorNonceSource.java:182:34:182:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:5 | +| InsecureIVorNonceSource.java:194:26:194:30 | bytes : byte[] | InsecureIVorNonceSource.java:195:16:195:20 | bytes : byte[] | provenance | | +| InsecureIVorNonceSource.java:195:16:195:20 | bytes : byte[] | InsecureIVorNonceSource.java:200:21:200:51 | generateInsecureRandomBytes(...) : byte[] | provenance | | +| InsecureIVorNonceSource.java:200:21:200:51 | generateInsecureRandomBytes(...) : byte[] | InsecureIVorNonceSource.java:202:54:202:55 | iv : byte[] | provenance | | +| InsecureIVorNonceSource.java:202:34:202:56 | new IvParameterSpec(...) : IvParameterSpec | InsecureIVorNonceSource.java:206:51:206:56 | ivSpec | provenance | Sink:MaD:1 | +| InsecureIVorNonceSource.java:202:54:202:55 | iv : byte[] | InsecureIVorNonceSource.java:202:34:202:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| InsecureIVorNonceSource.java:202:54:202:55 | iv : byte[] | InsecureIVorNonceSource.java:202:34:202:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:5 | +models +| 1 | Sink: javax.crypto; Cipher; true; init; (int,Key,AlgorithmParameterSpec); ; Argument[2]; encryption-iv; manual | +| 2 | Summary: java.lang; System; false; arraycopy; ; ; Argument[0]; Argument[2]; taint; manual | +| 3 | Summary: java.util; Arrays; false; copyOf; ; ; Argument[0].ArrayElement; ReturnValue.ArrayElement; value; manual | +| 4 | Summary: javax.crypto.spec; GCMParameterSpec; true; GCMParameterSpec; ; ; Argument[1]; Argument[this]; taint; manual | +| 5 | Summary: javax.crypto.spec; IvParameterSpec; true; IvParameterSpec; ; ; Argument[0]; Argument[this]; taint; manual | +nodes +| InsecureIVorNonceSource.java:14:21:14:81 | {...} : byte[] | semmle.label | {...} : byte[] | +| InsecureIVorNonceSource.java:16:35:16:63 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:16:61:16:62 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:20:51:20:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:42:13:42:14 | iv [post update] : byte[] [[]] : Number | semmle.label | iv [post update] : byte[] [[]] : Number | +| InsecureIVorNonceSource.java:42:21:42:21 | 1 : Number | semmle.label | 1 : Number | +| InsecureIVorNonceSource.java:45:34:45:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| InsecureIVorNonceSource.java:45:54:45:55 | iv : byte[] [[]] : Number | semmle.label | iv : byte[] [[]] : Number | +| InsecureIVorNonceSource.java:49:51:49:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:56:30:59:9 | {...} : byte[][] [[]] : byte[] | semmle.label | {...} : byte[][] [[]] : byte[] | +| InsecureIVorNonceSource.java:57:13:57:62 | {...} : byte[] | semmle.label | {...} : byte[] | +| InsecureIVorNonceSource.java:58:13:58:63 | {...} : byte[] | semmle.label | {...} : byte[] | +| InsecureIVorNonceSource.java:61:35:61:73 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:61:61:61:69 | staticIvs : byte[][] [[]] : byte[] | semmle.label | staticIvs : byte[][] [[]] : byte[] | +| InsecureIVorNonceSource.java:61:61:61:72 | ...[...] : byte[] | semmle.label | ...[...] : byte[] | +| InsecureIVorNonceSource.java:65:51:65:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:72:30:75:9 | {...} : byte[][] [[]] : byte[] | semmle.label | {...} : byte[][] [[]] : byte[] | +| InsecureIVorNonceSource.java:73:13:73:73 | {...} : byte[] | semmle.label | {...} : byte[] | +| InsecureIVorNonceSource.java:74:13:74:74 | {...} : byte[] | semmle.label | {...} : byte[] | +| InsecureIVorNonceSource.java:77:35:77:73 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:77:61:77:69 | staticIvs : byte[][] [[]] : byte[] | semmle.label | staticIvs : byte[][] [[]] : byte[] | +| InsecureIVorNonceSource.java:77:61:77:72 | ...[...] : byte[] | semmle.label | ...[...] : byte[] | +| InsecureIVorNonceSource.java:81:51:81:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:107:26:107:27 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:109:35:109:63 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:109:61:109:62 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:113:51:113:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:123:13:123:14 | iv [post update] : byte[] [[]] : Number | semmle.label | iv [post update] : byte[] [[]] : Number | +| InsecureIVorNonceSource.java:123:21:123:43 | (...)... : Number | semmle.label | (...)... : Number | +| InsecureIVorNonceSource.java:123:28:123:43 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | +| InsecureIVorNonceSource.java:126:35:126:63 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:126:61:126:62 | iv : byte[] [[]] : Number | semmle.label | iv : byte[] [[]] : Number | +| InsecureIVorNonceSource.java:130:51:130:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:138:52:138:62 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:141:26:141:36 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:141:42:141:43 | iv [post update] : byte[] | semmle.label | iv [post update] : byte[] | +| InsecureIVorNonceSource.java:143:35:143:63 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:143:61:143:62 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:147:51:147:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:155:52:155:62 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:158:14:158:43 | copyOf(...) : byte[] [[]] : Object | semmle.label | copyOf(...) : byte[] [[]] : Object | +| InsecureIVorNonceSource.java:158:28:158:38 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:160:35:160:63 | new GCMParameterSpec(...) : GCMParameterSpec | semmle.label | new GCMParameterSpec(...) : GCMParameterSpec | +| InsecureIVorNonceSource.java:160:61:160:62 | iv : byte[] [[]] : Object | semmle.label | iv : byte[] [[]] : Object | +| InsecureIVorNonceSource.java:164:51:164:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:174:52:174:62 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:175:16:175:26 | randomBytes : byte[] | semmle.label | randomBytes : byte[] | +| InsecureIVorNonceSource.java:180:21:180:32 | generate(...) : byte[] | semmle.label | generate(...) : byte[] | +| InsecureIVorNonceSource.java:182:34:182:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| InsecureIVorNonceSource.java:182:54:182:55 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:186:51:186:56 | ivSpec | semmle.label | ivSpec | +| InsecureIVorNonceSource.java:194:26:194:30 | bytes : byte[] | semmle.label | bytes : byte[] | +| InsecureIVorNonceSource.java:195:16:195:20 | bytes : byte[] | semmle.label | bytes : byte[] | +| InsecureIVorNonceSource.java:200:21:200:51 | generateInsecureRandomBytes(...) : byte[] | semmle.label | generateInsecureRandomBytes(...) : byte[] | +| InsecureIVorNonceSource.java:202:34:202:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| InsecureIVorNonceSource.java:202:54:202:55 | iv : byte[] | semmle.label | iv : byte[] | +| InsecureIVorNonceSource.java:206:51:206:56 | ivSpec | semmle.label | ivSpec | +subpaths +testFailures +| InsecureIVorNonceSource.java:42:21:42:21 | 1 : Number | Unexpected result: Source | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.java b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.java new file mode 100644 index 00000000000..549c56dbd98 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.java @@ -0,0 +1,210 @@ +import javax.crypto.Cipher; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.util.Random; + +import java.security.SecureRandom; +import java.util.Arrays; + +public class InsecureIVorNonceSource { + + // BAD: AES-GCM with static IV from a byte array + public byte[] encryptWithStaticIvByteArrayWithInitializer(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 }; // $Source + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/insecure-iv-or-nonce] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // BAD: AES-GCM with static IV from zero-initialized byte array + public byte[] encryptWithZeroStaticIvByteArray(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = new byte[16]; + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/unknown-iv-or-nonce-source] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // BAD: AES-CBC with static IV from 1-initialized byte array + public byte[] encryptWithStaticIvByteArray(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = new byte[16]; + for (byte i = 0; i < iv.length; i++) { + iv[i] = 1; + } + + IvParameterSpec ivSpec = new IvParameterSpec(iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/insecure-iv-or-nonce] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // BAD: AES-GCM with static IV from a multidimensional byte array + public byte[] encryptWithOneOfStaticIvs01(byte[] key, byte[] plaintext) throws Exception { + byte[][] staticIvs = new byte[][] { + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 }, // $Source + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 42 } // $Source + }; + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, staticIvs[1]); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/insecure-iv-or-nonce] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // BAD: AES-GCM with static IV from a multidimensional byte array + public byte[] encryptWithOneOfStaticIvs02(byte[] key, byte[] plaintext) throws Exception { + byte[][] staticIvs = new byte[][] { + new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5 }, // $Source + new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 42 } // $Source + }; + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, staticIvs[1]); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/insecure-iv-or-nonce] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // BAD: AES-GCM with static IV from a zero-initialized multidimensional byte array + public byte[] encryptWithOneOfStaticZeroIvs(byte[] key, byte[] plaintext) throws Exception { + byte[][] ivs = new byte[][] { + new byte[8], + new byte[16] + }; + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, ivs[1]); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/unknown-iv-or-nonce-source] + cipher.update(plaintext); + return cipher.doFinal(); + } + + // GOOD: AES-GCM with a random IV + public byte[] encryptWithRandomIv(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = new byte[16]; + + SecureRandom random = SecureRandom.getInstanceStrong(); + random.nextBytes(iv); + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + cipher.update(plaintext); + return cipher.doFinal(); + } + + // GOOD: AES-GCM with a random IV + public byte[] encryptWithRandomIvByteByByte(byte[] key, byte[] plaintext) throws Exception { + SecureRandom random = SecureRandom.getInstanceStrong(); + byte[] iv = new byte[16]; + for (int i = 0; i < iv.length; i++) { + iv[i] = (byte) random.nextInt(); + } + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + cipher.update(plaintext); + return cipher.doFinal(); + } + + // GOOD: AES-GCM with a random IV + public byte[] encryptWithRandomIvWithSystemArrayCopy(byte[] key, byte[] plaintext) throws Exception { + byte[] randomBytes = new byte[16]; + SecureRandom.getInstanceStrong().nextBytes(randomBytes); + + byte[] iv = new byte[16]; + System.arraycopy(randomBytes, 0, iv, 0, 16); + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + cipher.update(plaintext); + return cipher.doFinal(); + } + + // GOOD: AES-GCM with a random IV + public byte[] encryptWithRandomIvWithArraysCopy(byte[] key, byte[] plaintext) throws Exception { + byte[] randomBytes = new byte[16]; + SecureRandom.getInstanceStrong().nextBytes(randomBytes); + + byte[] iv = new byte[16]; + iv = Arrays.copyOf(randomBytes, 16); + + GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/GCM/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + cipher.update(plaintext); + return cipher.doFinal(); + } + + public byte[] generate(int size) throws Exception { + if (size == 0) { + return new byte[0]; + } + byte[] randomBytes = new byte[size]; + SecureRandom.getInstanceStrong().nextBytes(randomBytes); + return randomBytes; + } + + // GOOD: AES-CBC with a random IV + public byte[] encryptWithGeneratedIvByteArray(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = generate(16); + + IvParameterSpec ivSpec = new IvParameterSpec(iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); + cipher.update(plaintext); + return cipher.doFinal(); + } + + public byte[] generateInsecureRandomBytes(int numBytes) { + Random random = new Random(); + byte[] bytes = new byte[numBytes]; + random.nextBytes(bytes); // $Source + return bytes; + } + + // BAD: AES-CBC with an insecure random IV + public byte[] encryptWithGeneratedIvByteArrayInsecure(byte[] key, byte[] plaintext) throws Exception { + byte[] iv = generateInsecureRandomBytes(16); + + IvParameterSpec ivSpec = new IvParameterSpec(iv); + SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); // $Alert[java/quantum/examples/insecure-iv-or-nonce]] + cipher.update(plaintext); + return cipher.doFinal(); + } +} diff --git a/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.qlref b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.qlref new file mode 100644 index 00000000000..1b26475bb35 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/InsecureIVorNonceSource.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/InsecureIVorNonceSource.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.expected b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.expected new file mode 100644 index 00000000000..3759e19826b --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.expected @@ -0,0 +1,2 @@ +| InsecureIVorNonceSource.java:33:51:33:56 | Nonce | Unknown IV/Nonce initialization source at encryption operation $@ | InsecureIVorNonceSource.java:35:16:35:31 | EncryptOperation | EncryptOperation | +| InsecureIVorNonceSource.java:97:51:97:56 | Nonce | Unknown IV/Nonce initialization source at encryption operation $@ | InsecureIVorNonceSource.java:99:16:99:31 | EncryptOperation | EncryptOperation | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.qlref b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.qlref new file mode 100644 index 00000000000..8bdc38026ad --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/InsecureOrUnknownNonceSource/UnknownIVorNonceSource.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/UnknownIVorNonceSource.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.expected b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.expected new file mode 100644 index 00000000000..ab2ca44ada4 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.expected @@ -0,0 +1,94 @@ +#select +| Test.java:40:47:40:52 | ivSpec | Test.java:19:38:19:40 | val : byte[] | Test.java:40:47:40:52 | ivSpec | Nonce source is reused, see alternate sink $@ | Test.java:49:47:49:52 | Nonce | Nonce | +| Test.java:49:47:49:52 | ivSpec | Test.java:19:38:19:40 | val : byte[] | Test.java:49:47:49:52 | ivSpec | Nonce source is reused, see alternate sink $@ | Test.java:40:47:40:52 | Nonce | Nonce | +| Test.java:76:48:76:54 | ivSpec1 | Test.java:19:38:19:40 | val : byte[] | Test.java:76:48:76:54 | ivSpec1 | Nonce source is reused, see alternate sink $@ | Test.java:82:49:82:55 | Nonce | Nonce | +| Test.java:82:49:82:55 | ivSpec2 | Test.java:19:38:19:40 | val : byte[] | Test.java:82:49:82:55 | ivSpec2 | Nonce source is reused, see alternate sink $@ | Test.java:76:48:76:54 | Nonce | Nonce | +edges +| Test.java:19:38:19:40 | val : byte[] | Test.java:20:16:20:18 | val : byte[] | provenance | | +| Test.java:20:16:20:18 | val : byte[] | Test.java:25:15:25:33 | getRandomWrapper1(...) : byte[] | provenance | | +| Test.java:20:16:20:18 | val : byte[] | Test.java:32:15:32:33 | getRandomWrapper1(...) : byte[] | provenance | | +| Test.java:25:15:25:33 | getRandomWrapper1(...) : byte[] | Test.java:26:16:26:18 | val : byte[] | provenance | | +| Test.java:25:15:25:33 | getRandomWrapper1(...) : byte[] | Test.java:27:16:27:18 | val : byte[] | provenance | | +| Test.java:26:16:26:18 | val : byte[] | Test.java:36:32:36:40 | iv : byte[] | provenance | | +| Test.java:27:16:27:18 | val : byte[] | Test.java:45:21:45:40 | getRandomWrapper2A(...) : byte[] | provenance | | +| Test.java:32:15:32:33 | getRandomWrapper1(...) : byte[] | Test.java:33:16:33:18 | val : byte[] | provenance | | +| Test.java:33:16:33:18 | val : byte[] | Test.java:54:21:54:40 | getRandomWrapper2b(...) : byte[] | provenance | | +| Test.java:33:16:33:18 | val : byte[] | Test.java:63:21:63:40 | getRandomWrapper2b(...) : byte[] | provenance | | +| Test.java:33:16:33:18 | val : byte[] | Test.java:72:21:72:40 | getRandomWrapper2b(...) : byte[] | provenance | | +| Test.java:36:32:36:40 | iv : byte[] | Test.java:37:54:37:55 | iv : byte[] | provenance | | +| Test.java:37:34:37:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:40:47:40:52 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:37:54:37:55 | iv : byte[] | Test.java:37:34:37:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:37:54:37:55 | iv : byte[] | Test.java:37:34:37:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:45:21:45:40 | getRandomWrapper2A(...) : byte[] | Test.java:46:54:46:55 | iv : byte[] | provenance | | +| Test.java:46:34:46:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:49:47:49:52 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:46:54:46:55 | iv : byte[] | Test.java:46:34:46:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:46:54:46:55 | iv : byte[] | Test.java:46:34:46:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:54:21:54:40 | getRandomWrapper2b(...) : byte[] | Test.java:55:54:55:55 | iv : byte[] | provenance | | +| Test.java:55:34:55:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:58:47:58:52 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:55:54:55:55 | iv : byte[] | Test.java:55:34:55:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:55:54:55:55 | iv : byte[] | Test.java:55:34:55:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:63:21:63:40 | getRandomWrapper2b(...) : byte[] | Test.java:64:54:64:55 | iv : byte[] | provenance | | +| Test.java:64:34:64:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:67:47:67:52 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:64:54:64:55 | iv : byte[] | Test.java:64:34:64:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:64:54:64:55 | iv : byte[] | Test.java:64:34:64:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:72:21:72:40 | getRandomWrapper2b(...) : byte[] | Test.java:73:55:73:56 | iv : byte[] | provenance | | +| Test.java:73:35:73:57 | new IvParameterSpec(...) : IvParameterSpec | Test.java:76:48:76:54 | ivSpec1 | provenance | Sink:MaD:1 | +| Test.java:73:55:73:56 | iv : byte[] | Test.java:73:35:73:57 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:73:55:73:56 | iv : byte[] | Test.java:73:35:73:57 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:73:55:73:56 | iv : byte[] | Test.java:79:55:79:56 | iv : byte[] | provenance | | +| Test.java:79:35:79:57 | new IvParameterSpec(...) : IvParameterSpec | Test.java:82:49:82:55 | ivSpec2 | provenance | Sink:MaD:1 | +| Test.java:79:55:79:56 | iv : byte[] | Test.java:79:35:79:57 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:79:55:79:56 | iv : byte[] | Test.java:79:35:79:57 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:88:38:88:39 | iv : byte[] | Test.java:89:54:89:55 | iv : byte[] | provenance | | +| Test.java:89:34:89:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:93:51:93:56 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:89:34:89:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:96:51:96:56 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:89:54:89:55 | iv : byte[] | Test.java:89:34:89:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:89:54:89:55 | iv : byte[] | Test.java:89:34:89:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +| Test.java:103:38:103:39 | iv : byte[] | Test.java:104:54:104:55 | iv : byte[] | provenance | | +| Test.java:104:34:104:56 | new IvParameterSpec(...) : IvParameterSpec | Test.java:107:47:107:52 | ivSpec | provenance | Sink:MaD:1 | +| Test.java:104:54:104:55 | iv : byte[] | Test.java:104:34:104:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | Config | +| Test.java:104:54:104:55 | iv : byte[] | Test.java:104:34:104:56 | new IvParameterSpec(...) : IvParameterSpec | provenance | MaD:2 | +models +| 1 | Sink: javax.crypto; Cipher; true; init; (int,Key,AlgorithmParameterSpec); ; Argument[2]; encryption-iv; manual | +| 2 | Summary: javax.crypto.spec; IvParameterSpec; true; IvParameterSpec; ; ; Argument[0]; Argument[this]; taint; manual | +nodes +| Test.java:19:38:19:40 | val : byte[] | semmle.label | val : byte[] | +| Test.java:20:16:20:18 | val : byte[] | semmle.label | val : byte[] | +| Test.java:25:15:25:33 | getRandomWrapper1(...) : byte[] | semmle.label | getRandomWrapper1(...) : byte[] | +| Test.java:26:16:26:18 | val : byte[] | semmle.label | val : byte[] | +| Test.java:27:16:27:18 | val : byte[] | semmle.label | val : byte[] | +| Test.java:32:15:32:33 | getRandomWrapper1(...) : byte[] | semmle.label | getRandomWrapper1(...) : byte[] | +| Test.java:33:16:33:18 | val : byte[] | semmle.label | val : byte[] | +| Test.java:36:32:36:40 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:37:34:37:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:37:54:37:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:40:47:40:52 | ivSpec | semmle.label | ivSpec | +| Test.java:45:21:45:40 | getRandomWrapper2A(...) : byte[] | semmle.label | getRandomWrapper2A(...) : byte[] | +| Test.java:46:34:46:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:46:54:46:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:49:47:49:52 | ivSpec | semmle.label | ivSpec | +| Test.java:54:21:54:40 | getRandomWrapper2b(...) : byte[] | semmle.label | getRandomWrapper2b(...) : byte[] | +| Test.java:55:34:55:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:55:54:55:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:58:47:58:52 | ivSpec | semmle.label | ivSpec | +| Test.java:63:21:63:40 | getRandomWrapper2b(...) : byte[] | semmle.label | getRandomWrapper2b(...) : byte[] | +| Test.java:64:34:64:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:64:54:64:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:67:47:67:52 | ivSpec | semmle.label | ivSpec | +| Test.java:72:21:72:40 | getRandomWrapper2b(...) : byte[] | semmle.label | getRandomWrapper2b(...) : byte[] | +| Test.java:73:35:73:57 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:73:55:73:56 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:76:48:76:54 | ivSpec1 | semmle.label | ivSpec1 | +| Test.java:79:35:79:57 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:79:55:79:56 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:82:49:82:55 | ivSpec2 | semmle.label | ivSpec2 | +| Test.java:88:38:88:39 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:89:34:89:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:89:54:89:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:93:51:93:56 | ivSpec | semmle.label | ivSpec | +| Test.java:96:51:96:56 | ivSpec | semmle.label | ivSpec | +| Test.java:103:38:103:39 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:104:34:104:56 | new IvParameterSpec(...) : IvParameterSpec | semmle.label | new IvParameterSpec(...) : IvParameterSpec | +| Test.java:104:54:104:55 | iv : byte[] | semmle.label | iv : byte[] | +| Test.java:107:47:107:52 | ivSpec | semmle.label | ivSpec | +subpaths diff --git a/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.qlref b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.qlref new file mode 100644 index 00000000000..9658a376bb9 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/NonceReuse.qlref @@ -0,0 +1,2 @@ +query: experimental/quantum/Examples/ReusedNonce.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/Test.java b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/Test.java new file mode 100644 index 00000000000..e384143db08 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/NonceReuse/Test.java @@ -0,0 +1,123 @@ +package com.example.crypto.artifacts; + +import java.security.*; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; + +public class Test { + + public static SecretKey generateAESKey() throws Exception { + KeyGenerator keyGen = KeyGenerator.getInstance("AES"); + keyGen.init(256); + return keyGen.generateKey(); + } + + private static byte[] getRandomWrapper1() throws Exception { + byte[] val = new byte[16]; + new SecureRandom().nextBytes(val); + return val; + } + + private static byte[] getRandomWrapper2A() throws Exception { + byte[] val; + val = getRandomWrapper1(); + funcA1(val); + return val; + } + + private static byte[] getRandomWrapper2b() throws Exception { + byte[] val; + val = getRandomWrapper1(); + return val; + } + + private static void funcA1(byte[] iv) throws Exception { + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // BAD: Reuse of `iv` in funcB1 + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + + private static void funcB1() throws Exception { + byte[] iv = getRandomWrapper2A(); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // BAD: Reuse of `iv` in funcA1 + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + + private static void funcA2() throws Exception { + byte[] iv = getRandomWrapper2b(); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // GOOD + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + + private static void funcB2() throws Exception { + byte[] iv = getRandomWrapper2b(); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // GOOD + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + + private static void funcA3() throws Exception { + byte[] iv = getRandomWrapper2b(); + IvParameterSpec ivSpec1 = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key1 = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key1, ivSpec1); // BAD: reuse of `iv` below + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + + IvParameterSpec ivSpec2 = new IvParameterSpec(iv); + Cipher cipher2 = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key2 = generateAESKey(); + cipher2.init(Cipher.ENCRYPT_MODE, key2, ivSpec2); // BAD: Reuse of `iv` above + byte[] ciphertext2 = cipher2.doFinal("Simple Test Data".getBytes()); + } + + public void falsePositive1() throws Exception { + byte[] iv = null; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + if (iv != null) { + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // GOOD + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } else if(iv.length > 0) { + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // GOOD + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + } + } + + public void falsePositive2() throws Exception { + byte[] iv = null; + new SecureRandom().nextBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKey key = generateAESKey(); + cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec); // GOOD + byte[] ciphertext = cipher.doFinal("Simple Test Data".getBytes()); + + cipher.init(Cipher.DECRYPT_MODE, key, ivSpec); // GOOD + byte[] decryptedData = cipher.doFinal(ciphertext); + } + + public static void main(String[] args) { + try { + funcA2(); + funcB1(); + funcB2(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/InsufficientAsymmetricKeySize.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/InsufficientAsymmetricKeySize.java new file mode 100644 index 00000000000..c330bf82a05 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/InsufficientAsymmetricKeySize.java @@ -0,0 +1,28 @@ +import java.security.*; +public class InsufficientAsymmetricKeySize{ + public static void test() throws Exception{ + KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("RSA"); + keyPairGen1.initialize(1024); // $Alert[java/quantum/examples/weak-asymmetric-key-gen-size] + keyPairGen1.generateKeyPair(); + + KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("DSA"); + keyPairGen2.initialize(1024); // $Alert[java/quantum/examples/weak-asymmetric-key-gen-size] + keyPairGen2.generateKeyPair(); + + KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("DH"); + keyPairGen3.initialize(1024); // $Alert[java/quantum/examples/weak-asymmetric-key-gen-size] + keyPairGen3.generateKeyPair(); + + KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("RSA"); + keyPairGen4.initialize(2048); // GOOD + keyPairGen4.generateKeyPair(); + + KeyPairGenerator keyPairGen5 = KeyPairGenerator.getInstance("DSA"); + keyPairGen5.initialize(2048); // GOOD + keyPairGen5.generateKeyPair(); + + KeyPairGenerator keyPairGen6 = KeyPairGenerator.getInstance("DH"); + keyPairGen6.initialize(2048); // GOOD + keyPairGen6.generateKeyPair(); + } +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.expected new file mode 100644 index 00000000000..26dc1bfad24 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.expected @@ -0,0 +1,13 @@ +edges +nodes +| InsufficientAsymmetricKeySize.java:5:32:5:35 | 1024 | semmle.label | 1024 | +| InsufficientAsymmetricKeySize.java:9:32:9:35 | 1024 | semmle.label | 1024 | +| InsufficientAsymmetricKeySize.java:13:32:13:35 | 1024 | semmle.label | 1024 | +| InsufficientAsymmetricKeySize.java:17:32:17:35 | 2048 | semmle.label | 2048 | +| InsufficientAsymmetricKeySize.java:21:32:21:35 | 2048 | semmle.label | 2048 | +| InsufficientAsymmetricKeySize.java:25:32:25:35 | 2048 | semmle.label | 2048 | +subpaths +#select +| InsufficientAsymmetricKeySize.java:5:32:5:35 | 1024 | InsufficientAsymmetricKeySize.java:5:32:5:35 | 1024 | InsufficientAsymmetricKeySize.java:5:32:5:35 | 1024 | Use of weak asymmetric key size (1024 bits) for algorithm $@ | InsufficientAsymmetricKeySize.java:4:69:4:73 | KeyOperationAlgorithm | RSA | +| InsufficientAsymmetricKeySize.java:9:32:9:35 | 1024 | InsufficientAsymmetricKeySize.java:9:32:9:35 | 1024 | InsufficientAsymmetricKeySize.java:9:32:9:35 | 1024 | Use of weak asymmetric key size (1024 bits) for algorithm $@ | InsufficientAsymmetricKeySize.java:8:69:8:73 | KeyOperationAlgorithm | DSA | +| InsufficientAsymmetricKeySize.java:13:32:13:35 | 1024 | InsufficientAsymmetricKeySize.java:13:32:13:35 | 1024 | InsufficientAsymmetricKeySize.java:13:32:13:35 | 1024 | Use of weak asymmetric key size (1024 bits) for algorithm $@ | InsufficientAsymmetricKeySize.java:12:69:12:72 | KeyAgreementAlgorithm | DH | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.qlref new file mode 100644 index 00000000000..085cf3e0b2a --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownAsymmetricKeySize/WeakAsymmetricKeyGenSize.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakAsymmetricKeyGenSize.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/Test.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/Test.java new file mode 100644 index 00000000000..0c8b3b6691d --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/Test.java @@ -0,0 +1,57 @@ +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; + +public class Test { + public static void main(String[] args) throws Exception { + SecretKey key = KeyGenerator.getInstance("AES").generateKey(); + IvParameterSpec iv = new IvParameterSpec(new byte[16]); + byte[] data = "SensitiveData".getBytes(); + + // Insecure block mode: ECB + Cipher cipherECB = Cipher.getInstance("AES/ECB/PKCS5Padding"); // $Alert + cipherECB.init(Cipher.ENCRYPT_MODE, key); + byte[] ecbEncrypted = cipherECB.doFinal(data); + System.out.println("ECB encrypted: " + bytesToHex(ecbEncrypted)); + + // Insecure block mode: CFB + Cipher cipherCFB = Cipher.getInstance("AES/CFB/PKCS5Padding"); // $Alert + cipherCFB.init(Cipher.ENCRYPT_MODE, key, iv); + byte[] cfbEncrypted = cipherCFB.doFinal(data); + System.out.println("CFB encrypted: " + bytesToHex(cfbEncrypted)); + + // Insecure block mode: OFB + Cipher cipherOFB = Cipher.getInstance("AES/OFB/PKCS5Padding"); // $Alert + cipherOFB.init(Cipher.ENCRYPT_MODE, key, iv); + byte[] ofbEncrypted = cipherOFB.doFinal(data); + System.out.println("OFB encrypted: " + bytesToHex(ofbEncrypted)); + + // Insecure block mode: CTR + Cipher cipherCTR = Cipher.getInstance("AES/CTR/NoPadding"); // $Alert + cipherCTR.init(Cipher.ENCRYPT_MODE, key, iv); + byte[] ctrEncrypted = cipherCTR.doFinal(data); + System.out.println("CTR encrypted: " + bytesToHex(ctrEncrypted)); + + // Secure block mode: CBC with random IV + IvParameterSpec randomIv = new IvParameterSpec(KeyGenerator.getInstance("AES").generateKey().getEncoded()); + Cipher cipherCBCRandomIV = Cipher.getInstance("AES/CBC/PKCS5Padding"); + cipherCBCRandomIV.init(Cipher.ENCRYPT_MODE, key, randomIv); + byte[] cbcRandomIVEncrypted = cipherCBCRandomIV.doFinal(data); + System.out.println("CBC (random IV) encrypted: " + bytesToHex(cbcRandomIVEncrypted)); + + // Secure block mode: GCM (authenticated encryption) + IvParameterSpec gcmIv = new IvParameterSpec(new byte[12]); + Cipher cipherGCM = Cipher.getInstance("AES/GCM/NoPadding"); + cipherGCM.init(Cipher.ENCRYPT_MODE, key, gcmIv); + byte[] gcmEncrypted = cipherGCM.doFinal(data); + System.out.println("GCM encrypted: " + bytesToHex(gcmEncrypted)); + } + + private static String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) + sb.append(String.format("%02x", b)); + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.expected new file mode 100644 index 00000000000..859a138d3eb --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.expected @@ -0,0 +1,4 @@ +| Test.java:13:47:13:68 | KeyOperationAlgorithm | Weak AES block mode instance $@. | Test.java:13:47:13:68 | ModeOfOperation | ModeOfOperation | +| Test.java:19:47:19:68 | KeyOperationAlgorithm | Weak AES block mode instance $@. | Test.java:19:47:19:68 | ModeOfOperation | ModeOfOperation | +| Test.java:25:47:25:68 | KeyOperationAlgorithm | Weak AES block mode instance $@. | Test.java:25:47:25:68 | ModeOfOperation | ModeOfOperation | +| Test.java:31:47:31:65 | KeyOperationAlgorithm | Weak AES block mode instance $@. | Test.java:31:47:31:65 | ModeOfOperation | ModeOfOperation | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.qlref new file mode 100644 index 00000000000..ec8500ddda7 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownBlockMode/WeakBlockMode.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakBlockModes.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.expected new file mode 100644 index 00000000000..77eadf06cd3 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.expected @@ -0,0 +1,4 @@ +| WeakHashing.java:15:55:15:83 | HashAlgorithm | Use of unapproved hash algorithm or API: MD5. | +| WeakHashing.java:18:56:18:95 | HashAlgorithm | Use of unapproved hash algorithm or API: MD5. | +| WeakHashing.java:21:86:21:90 | HashAlgorithm | Use of unapproved hash algorithm or API: MD5. | +| WeakHashing.java:24:56:24:62 | HashAlgorithm | Use of unapproved hash algorithm or API: SHA1. | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.qlref new file mode 100644 index 00000000000..c5faee88aba --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHash.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakHash.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHashing.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHashing.java new file mode 100644 index 00000000000..cc3b9a859d1 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/WeakHashing.java @@ -0,0 +1,50 @@ +package test.cwe327.semmle.tests; + +import java.util.Properties; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class WeakHashing { + void hashing() throws NoSuchAlgorithmException, IOException { + java.util.Properties props = new java.util.Properties(); + props.load(new FileInputStream("example.properties")); + + // BAD: Using a weak hashing algorithm even with a secure default + MessageDigest bad = MessageDigest.getInstance(props.getProperty("hashAlg1")); // $Alert[java/quantum/examples/weak-hash] + + // BAD: Using a weak hashing algorithm even with a secure default + MessageDigest bad2 = MessageDigest.getInstance(props.getProperty("hashAlg1", "SHA-256")); // $Alert[java/quantum/examples/weak-hash] + + // BAD: Using a strong hashing algorithm but with a weak default + MessageDigest bad3 = MessageDigest.getInstance(props.getProperty("hashAlg2", "MD5")); // $Alert[java/quantum/examples/weak-hash] + + // BAD: Using a weak hash + MessageDigest bad4 = MessageDigest.getInstance("SHA-1"); // $Alert[java/quantum/examples/weak-hash] + + // BAD: Property does not exist and default (used value) is unknown + MessageDigest bad5 = MessageDigest.getInstance(props.getProperty("non-existent_property", "non-existent_default")); // $Alert[java/quantum/examples/unknown-hash] + + java.util.Properties props2 = new java.util.Properties(); + + props2.load(new FileInputStream("unobserved-file.properties")); + + // BAD: "hashAlg2" is not visible in the file loaded for props2, should be an unknown + // FALSE NEGATIVE for unknown hash + MessageDigest bad6 = MessageDigest.getInstance(props2.getProperty("hashAlg2", "SHA-256")); // $Alert[java/quantum/examples/unknown-hash] + + // GOOD: Using a strong hashing algorithm + MessageDigest ok = MessageDigest.getInstance(props.getProperty("hashAlg2")); + + // BAD?: Property does not exist (considered unknown) and but default is secure + MessageDigest ok2 = MessageDigest.getInstance(props.getProperty("non-existent-property", "SHA-256")); // $Alert[java/quantum/examples/unknown-hash] + + // GOOD: Using a strong hashing algorithm + MessageDigest ok3 = MessageDigest.getInstance("SHA3-512"); + + // GOOD: Using a strong hashing algorithm + MessageDigest ok4 = MessageDigest.getInstance("SHA384"); + + } +} diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/example.properties b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/example.properties new file mode 100644 index 00000000000..512e8090bee --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownHash/example.properties @@ -0,0 +1,2 @@ +hashAlg1=MD5 +hashAlg2=SHA-256 \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/Test.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/Test.java new file mode 100644 index 00000000000..13f6d03ec72 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/Test.java @@ -0,0 +1,63 @@ +import java.io.FileInputStream; +import java.io.IOException; +import java.security.MessageDigest; +import java.security.SecureRandom; +import java.util.Arrays; +import java.util.Base64; +import java.util.Properties; +import javax.crypto.Mac; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.SecretKeySpec; + +public class Test { + + public static byte[] generateSalt(int length) { + SecureRandom random = new SecureRandom(); + byte[] salt = new byte[length]; + random.nextBytes(salt); + return salt; + } + + /** + * PBKDF2 derivation with a very low iteration count. + * + * SAST/CBOM: - Parent: PBKDF2. - Iteration count is only 10, which is far + * below acceptable security standards. - Flagged as insecure. + */ + public void pbkdf2LowIteration(String password) throws Exception { + byte[] salt = generateSalt(16); + int iterationCount = 10; // $Source + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterationCount, 256); // $Alert[java/quantum/examples/weak-kdf-iteration-count] + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + } + + /** + * PBKDF2 derivation with a very low iteration count. + * + * SAST/CBOM: - Parent: PBKDF2. - Iteration count is only 10, which is far + * below acceptable security standards. - Flagged as insecure. + */ + public void pbkdf2LowIteration(String password, int iterationCount) throws Exception { // $Source + byte[] salt = generateSalt(16); + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterationCount, 256); // $Alert[java/quantum/examples/unknown-kdf-iteration-count] + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + } + + /** + * PBKDF2 derivation with a high iteration count. + * + * SAST/CBOM: - Parent: PBKDF2. - Uses 1,000,000 iterations; this is secure + * but may impact performance. + */ + public void pbkdf2HighIteration(String password) throws Exception { + byte[] salt = generateSalt(16); + int iterationCount = 1_000_000; + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterationCount, 256); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + } +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.expected new file mode 100644 index 00000000000..472d7909049 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.expected @@ -0,0 +1,5 @@ +#select +| Test.java:47:22:47:49 | KeyDerivation | Key derivation operation with unknown iteration: $@ | Test.java:43:53:43:70 | iterationCount | iterationCount | +testFailures +| Test.java:45:94:45:153 | // $Alert[java/quantum/examples/unknown-kdf-iteration-count] | Missing result: Alert[java/quantum/examples/unknown-kdf-iteration-count] | +| Test.java:47:22:47:49 | Key derivation operation with unknown iteration: $@ | Unexpected result: Alert | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.qlref new file mode 100644 index 00000000000..a285aac54ad --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/UnknownKDFIterationCount.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.expected new file mode 100644 index 00000000000..3567afd0322 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.expected @@ -0,0 +1,16 @@ +#select +| Test.java:32:72:32:85 | iterationCount | Test.java:31:30:31:31 | 10 : Number | Test.java:32:72:32:85 | iterationCount | Key derivation operation configures iteration count below 100k: $@ | Test.java:31:30:31:31 | 10 | 10 | +edges +| Test.java:31:30:31:31 | 10 : Number | Test.java:32:72:32:85 | iterationCount | provenance | | +| Test.java:43:53:43:70 | iterationCount : Number | Test.java:45:72:45:85 | iterationCount | provenance | | +| Test.java:58:30:58:38 | 1_000_000 : Number | Test.java:59:72:59:85 | iterationCount | provenance | | +nodes +| Test.java:31:30:31:31 | 10 : Number | semmle.label | 10 : Number | +| Test.java:32:72:32:85 | iterationCount | semmle.label | iterationCount | +| Test.java:43:53:43:70 | iterationCount : Number | semmle.label | iterationCount : Number | +| Test.java:45:72:45:85 | iterationCount | semmle.label | iterationCount | +| Test.java:58:30:58:38 | 1_000_000 : Number | semmle.label | 1_000_000 : Number | +| Test.java:59:72:59:85 | iterationCount | semmle.label | iterationCount | +subpaths +testFailures +| Test.java:43:92:43:101 | // $Source | Missing result: Source | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.qlref new file mode 100644 index 00000000000..1145083bf0d --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakKDFIterationCount.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/Test.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/Test.java new file mode 100644 index 00000000000..21619c8c574 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/Test.java @@ -0,0 +1,42 @@ +import java.security.SecureRandom; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; + +public class Test { + + public static byte[] generateSalt(int length) { + SecureRandom random = new SecureRandom(); + byte[] salt = new byte[length]; + random.nextBytes(salt); + return salt; + } + + /** + * PBKDF2 derivation with a weak key size. + * + * SAST/CBOM: - Parent: PBKDF2. - Key size is only 64 bits, which is far below acceptable security standards. + * - Flagged as insecure. + */ + public void pbkdf2WeakKeySize(String password) throws Exception { + byte[] salt = generateSalt(16); + int iterationCount = 100_000; + int keySize = 64; // $Source + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterationCount, keySize); // $Alert[java/quantum/examples/weak-kdf-key-size] + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + } + + /** + * PBKDF2 derivation with a secure key size. + * + * SAST/CBOM: - Parent: PBKDF2. - Key size is 256 bits, which meets modern security standards. + */ + public void pbkdf2SecureKeySize(String password) throws Exception { + byte[] salt = generateSalt(16); + int iterationCount = 100_000; + int keySize = 256; + PBEKeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterationCount, keySize); + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + byte[] key = factory.generateSecret(spec).getEncoded(); + } +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.expected new file mode 100644 index 00000000000..63df79a9f9b --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.expected @@ -0,0 +1,11 @@ +#select +| Test.java:24:88:24:94 | keySize | Test.java:23:23:23:24 | 64 : Number | Test.java:24:88:24:94 | keySize | Key derivation operation configures output key length below 256: $@ | Test.java:23:23:23:24 | 64 | 64 | +edges +| Test.java:23:23:23:24 | 64 : Number | Test.java:24:88:24:94 | keySize | provenance | | +| Test.java:37:23:37:25 | 256 : Number | Test.java:38:88:38:94 | keySize | provenance | | +nodes +| Test.java:23:23:23:24 | 64 : Number | semmle.label | 64 : Number | +| Test.java:24:88:24:94 | keySize | semmle.label | keySize | +| Test.java:37:23:37:25 | 256 : Number | semmle.label | 256 : Number | +| Test.java:38:88:38:94 | keySize | semmle.label | keySize | +subpaths diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.qlref new file mode 100644 index 00000000000..2b2b1228de2 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFKeySize/WeakKDFKeySize.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakKDFKeySize.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/Test.java b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/Test.java new file mode 100644 index 00000000000..fde9f9a24d1 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/Test.java @@ -0,0 +1,81 @@ +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import javax.crypto.SecretKeyFactory; + +public class Test { + public static void main(String[] args) throws Exception { + byte[] data = "Sensitive Data".getBytes(); + + // BAD: DES (unsafe) + KeyGenerator desKeyGen = KeyGenerator.getInstance("DES"); // $Alert + SecretKey desKey = desKeyGen.generateKey(); + Cipher desCipher = Cipher.getInstance("DES"); // $Alert + desCipher.init(Cipher.ENCRYPT_MODE, desKey); + byte[] desEncrypted = desCipher.doFinal(data); + + // BAD: DESede (Triple DES, considered weak) + KeyGenerator desedeKeyGen = KeyGenerator.getInstance("DESede"); // $Alert + SecretKey desedeKey = desedeKeyGen.generateKey(); + Cipher desedeCipher = Cipher.getInstance("DESede"); // $Alert + desedeCipher.init(Cipher.ENCRYPT_MODE, desedeKey); + byte[] desedeEncrypted = desedeCipher.doFinal(data); + + // BAD: Blowfish (considered weak) + KeyGenerator blowfishKeyGen = KeyGenerator.getInstance("Blowfish"); // $Alert + SecretKey blowfishKey = blowfishKeyGen.generateKey(); + Cipher blowfishCipher = Cipher.getInstance("Blowfish"); // $Alert + blowfishCipher.init(Cipher.ENCRYPT_MODE, blowfishKey); + byte[] blowfishEncrypted = blowfishCipher.doFinal(data); + + // BAD: RC2 (unsafe) + KeyGenerator rc2KeyGen = KeyGenerator.getInstance("RC2"); // $Alert + SecretKey rc2Key = rc2KeyGen.generateKey(); + Cipher rc2Cipher = Cipher.getInstance("RC2"); // $Alert + rc2Cipher.init(Cipher.ENCRYPT_MODE, rc2Key); + byte[] rc2Encrypted = rc2Cipher.doFinal(data); + + // BAD: RC4 (stream cipher, unsafe) + KeyGenerator rc4KeyGen = KeyGenerator.getInstance("RC4"); // $Alert + SecretKey rc4Key = rc4KeyGen.generateKey(); + Cipher rc4Cipher = Cipher.getInstance("RC4"); // $Alert + rc4Cipher.init(Cipher.ENCRYPT_MODE, rc4Key); + byte[] rc4Encrypted = rc4Cipher.doFinal(data); + + // BAD: IDEA (considered weak) + KeyGenerator ideaKeyGen = KeyGenerator.getInstance("IDEA"); // $Alert + SecretKey ideaKey = ideaKeyGen.generateKey(); + Cipher ideaCipher = Cipher.getInstance("IDEA"); // $Alert + ideaCipher.init(Cipher.ENCRYPT_MODE, ideaKey); + byte[] ideaEncrypted = ideaCipher.doFinal(data); + + // BAD: Skipjack (unsafe) + KeyGenerator skipjackKeyGen = KeyGenerator.getInstance("Skipjack"); // $Alert + SecretKey skipjackKey = skipjackKeyGen.generateKey(); + Cipher skipjackCipher = Cipher.getInstance("Skipjack"); // $Alert + skipjackCipher.init(Cipher.ENCRYPT_MODE, skipjackKey); + byte[] skipjackEncrypted = skipjackCipher.doFinal(data); + + // GOOD: AES (safe) + KeyGenerator aesKeyGen = KeyGenerator.getInstance("AES"); + SecretKey aesKey = aesKeyGen.generateKey(); + Cipher aesCipher = Cipher.getInstance("AES"); + aesCipher.init(Cipher.ENCRYPT_MODE, aesKey); + byte[] aesEncrypted = aesCipher.doFinal(data); + + // GOOD: AES with CBC mode and PKCS5Padding + Cipher aesCbcCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + aesCbcCipher.init(Cipher.ENCRYPT_MODE, aesKey); + byte[] aesCbcEncrypted = aesCbcCipher.doFinal(data); + + // GOOD: AES with GCM mode (authenticated encryption) + Cipher aesGcmCipher = Cipher.getInstance("AES/GCM/NoPadding"); + aesGcmCipher.init(Cipher.ENCRYPT_MODE, aesKey); + byte[] aesGcmEncrypted = aesGcmCipher.doFinal(data); + + // GOOD: not a symmetric cipher (Sanity check) + SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256"); + } +} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.expected b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.expected new file mode 100644 index 00000000000..3ba5071e026 --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.expected @@ -0,0 +1,14 @@ +| Test.java:13:59:13:63 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: DES. | +| Test.java:15:47:15:51 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: DES. | +| Test.java:20:62:20:69 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: DES. | +| Test.java:22:50:22:57 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: DES. | +| Test.java:27:64:27:73 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: Blowfish. | +| Test.java:29:52:29:61 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: Blowfish. | +| Test.java:34:59:34:63 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: RC2. | +| Test.java:36:47:36:51 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: RC2. | +| Test.java:41:59:41:63 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: RC4. | +| Test.java:43:47:43:51 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: RC4. | +| Test.java:48:60:48:65 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: IDEA. | +| Test.java:50:48:50:53 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: IDEA. | +| Test.java:55:64:55:73 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: Skipjack. | +| Test.java:57:52:57:61 | KeyOperationAlgorithm | Use of unapproved symmetric cipher algorithm or API: Skipjack. | diff --git a/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.qlref b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.qlref new file mode 100644 index 00000000000..d27fed11bfc --- /dev/null +++ b/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownSymmetricCipher/WeakSymmetricCipher.qlref @@ -0,0 +1,4 @@ +query: experimental/quantum/Examples/WeakSymmetricCipher.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.expected b/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.expected deleted file mode 100644 index 48630293985..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.expected +++ /dev/null @@ -1 +0,0 @@ -| pom.xml:29:9:32:22 | dependency | Insecure configuration of Spring Boot Actuator exposes sensitive endpoints. | diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.qlref b/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.qlref deleted file mode 100644 index 9cd12d5e4fb..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-016/InsecureSpringActuatorConfig.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/SensitiveInfo.java b/java/ql/test/experimental/query-tests/security/CWE-016/SensitiveInfo.java deleted file mode 100644 index a3ff69c1b81..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-016/SensitiveInfo.java +++ /dev/null @@ -1,13 +0,0 @@ -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -public class SensitiveInfo { - @RequestMapping - public void handleLogin(@RequestParam String username, @RequestParam String password) throws Exception { - if (!username.equals("") && password.equals("")) { - //Blank processing - } - } -} \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/application.properties b/java/ql/test/experimental/query-tests/security/CWE-016/application.properties deleted file mode 100644 index 797906a3ca3..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-016/application.properties +++ /dev/null @@ -1,14 +0,0 @@ -#management.endpoints.web.base-path=/admin - -# vulnerable configuration (spring boot 1.0 - 1.4): exposes actuators by default - -# vulnerable configuration (spring boot 1.5+): requires value false to expose sensitive actuators -management.security.enabled=false - -# vulnerable configuration (spring boot 2+): exposes health and info only by default, here overridden to expose everything -management.endpoints.web.exposure.include=* -management.endpoints.web.exposure.exclude=beans - -management.endpoint.shutdown.enabled=true - -management.endpoint.health.show-details=when_authorized \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref b/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref deleted file mode 100644 index 9c7ce3d6329..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref +++ /dev/null @@ -1,2 +0,0 @@ -query: experimental/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql -postprocess: utils/test/PrettyPrintModels.ql diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/options b/java/ql/test/experimental/query-tests/security/CWE-1004/options deleted file mode 100644 index 00e92689af5..00000000000 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/jsr311-api-1.1.1:${testdir}/../../../../stubs/springframework-5.8.x diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected new file mode 100644 index 00000000000..05db00aa26d --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.expected @@ -0,0 +1 @@ +| Test.java:0:0:0:0 | Test | Test.java:1:1:1:1 | Test | Compact source file 'Test' contains implicit class 'Test' | diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql new file mode 100644 index 00000000000..ae6700f64cd --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceAnalysis.ql @@ -0,0 +1,9 @@ +import java + +from CompilationUnit cu, Class c +where + cu.isCompactSourceFile() and + c.getCompilationUnit() = cu and + c.isImplicit() +select cu, c, + "Compact source file '" + cu.getName() + "' contains implicit class '" + c.getName() + "'" diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected new file mode 100644 index 00000000000..0aebdddfb87 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.expected @@ -0,0 +1 @@ +| Test.java:0:0:0:0 | Test | diff --git a/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql new file mode 100644 index 00000000000..3cf2633c897 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/CompactSourceDetection.ql @@ -0,0 +1,5 @@ +import java + +from CompilationUnit cu +where cu.isCompactSourceFile() +select cu diff --git a/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected new file mode 100644 index 00000000000..61dcdd8a17f --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.expected @@ -0,0 +1,2 @@ +| Test.java:1:1:1:1 | Test | implicit | +| Test.java:25:7:25:16 | NotCompact | not implicit | diff --git a/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql new file mode 100644 index 00000000000..f1c6b4a27c7 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/ImplicitClassDetection.ql @@ -0,0 +1,7 @@ +import java + +from Class c, string res +where + exists(c.getCompilationUnit().getRelativePath()) and + if c.isImplicit() then res = "implicit" else res = "not implicit" +select c, res diff --git a/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected new file mode 100644 index 00000000000..3c7b45f500e --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.expected @@ -0,0 +1,7 @@ +| Test.java:1:1:1:1 | | in compact source | +| Test.java:1:1:1:1 | | in compact source | +| Test.java:5:6:5:9 | main | in compact source | +| Test.java:11:6:11:16 | processData | in compact source | +| Test.java:16:14:16:31 | updatePrivateField | in compact source | +| Test.java:21:13:21:28 | testStaticAccess | in compact source | +| Test.java:27:10:27:25 | methodNotCompact | NOT in compact source | diff --git a/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql new file mode 100644 index 00000000000..c5e5bbc80e0 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/MethodInCompactSource.ql @@ -0,0 +1,8 @@ +import java + +from Method m, Class c, string res +where + c = m.getDeclaringType() and + exists(c.getCompilationUnit().getRelativePath()) and + if c.isImplicit() then res = "in compact source" else res = "NOT in compact source" +select m, res diff --git a/java/ql/test/library-tests/compact-source-files/PrintAst.expected b/java/ql/test/library-tests/compact-source-files/PrintAst.expected new file mode 100644 index 00000000000..7f39470ff0c --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/PrintAst.expected @@ -0,0 +1,45 @@ +Test.java: +# 0| [CompilationUnit] Test +# 1| 1: [Class] Test +# 1| 4: [FieldDeclaration] int instanceField; +# 1| -1: [TypeAccess] int +# 1| 0: [IntegerLiteral] 10 +# 2| 5: [FieldDeclaration] int STATIC_CONSTANT; +# 2| -1: [TypeAccess] int +# 2| 0: [IntegerLiteral] 42 +# 3| 6: [FieldDeclaration] String privateField; +# 3| -1: [TypeAccess] String +# 3| 0: [StringLiteral] "data" +# 5| 7: [Method] main +# 5| 3: [TypeAccess] void +# 5| 5: [BlockStmt] { ... } +# 6| 0: [ExprStmt] ; +# 6| 0: [MethodCall] processData(...) +# 7| 1: [ExprStmt] ; +# 7| 0: [MethodCall] testStaticAccess(...) +# 11| 8: [Method] processData +# 11| 3: [TypeAccess] void +# 11| 5: [BlockStmt] { ... } +# 12| 0: [ExprStmt] ; +# 12| 0: [PostIncExpr] ...++ +# 12| 0: [VarAccess] instanceField +# 13| 1: [ExprStmt] ; +# 13| 0: [MethodCall] updatePrivateField(...) +# 16| 9: [Method] updatePrivateField +# 16| 3: [TypeAccess] void +# 16| 5: [BlockStmt] { ... } +# 17| 0: [ExprStmt] ; +# 17| 0: [AssignExpr] ...=... +# 17| 0: [VarAccess] privateField +# 17| 1: [StringLiteral] "updated" +# 21| 10: [Method] testStaticAccess +# 21| 3: [TypeAccess] void +# 21| 5: [BlockStmt] { ... } +# 22| 0: [ExprStmt] ; +# 22| 0: [MethodCall] println(...) +# 22| -1: [TypeAccess] IO +# 22| 0: [StringLiteral] "Static access test" +# 25| 11: [Class] NotCompact +# 27| 2: [Method] methodNotCompact +# 27| 3: [TypeAccess] void +# 27| 5: [BlockStmt] { ... } diff --git a/java/ql/test/library-tests/compact-source-files/PrintAst.qlref b/java/ql/test/library-tests/compact-source-files/PrintAst.qlref new file mode 100644 index 00000000000..f391eb5e463 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/PrintAst.qlref @@ -0,0 +1 @@ +semmle/code/java/PrintAst.ql diff --git a/java/ql/test/library-tests/compact-source-files/Test.java b/java/ql/test/library-tests/compact-source-files/Test.java new file mode 100644 index 00000000000..6159073c216 --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/Test.java @@ -0,0 +1,29 @@ +int instanceField = 10; +static final int STATIC_CONSTANT = 42; +private String privateField = "data"; + +void main() { + processData(); + testStaticAccess(); +} + +// Test instance methods +void processData() { + instanceField++; + updatePrivateField(); +} + +private void updatePrivateField() { + privateField = "updated"; +} + +// Test static method access +static void testStaticAccess() { + IO.println("Static access test"); +} + +class NotCompact { +//Test explict class + void methodNotCompact() { + } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/compact-source-files/options b/java/ql/test/library-tests/compact-source-files/options new file mode 100644 index 00000000000..db1dc01e53b --- /dev/null +++ b/java/ql/test/library-tests/compact-source-files/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --release 25 --enable-preview diff --git a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.java b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.java index 983cb72ffb2..52d26974373 100644 --- a/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.java +++ b/java/ql/test/library-tests/dataflow/entrypoint-types/EntryPointTypesTest.java @@ -41,6 +41,10 @@ public class EntryPointTypesTest { public String safeField; } + static class ArrayElemObject { + public String field; + } + private static void sink(String sink) {} public static void test(TestObject source) { @@ -70,4 +74,8 @@ public class EntryPointTypesTest { UnrelatedObject unrelated = (UnrelatedObject) subtypeSource.getField8(); sink(unrelated.safeField); // Safe } + + public static void testArray(ArrayElemObject[] source) { + sink(source[0].field); // $hasTaintFlow + } } diff --git a/java/ql/test/library-tests/dataflow/kdf/KDFDataflowTest.java b/java/ql/test/library-tests/dataflow/kdf/KDFDataflowTest.java new file mode 100644 index 00000000000..460cb2b309f --- /dev/null +++ b/java/ql/test/library-tests/dataflow/kdf/KDFDataflowTest.java @@ -0,0 +1,87 @@ +import javax.crypto.KDF; +import javax.crypto.spec.HKDFParameterSpec; + +public class KDFDataflowTest { + public static String source(String label) { + return "tainted"; + } + + public static void sink(Object o) {} + + public static void main(String[] args) throws Exception { + String userInput = source(""); + byte[] taintedBytes = userInput.getBytes(); + + testBuilderPattern(taintedBytes); + testSeparateBuilder(taintedBytes); + testKDFWithSalt(taintedBytes); + testStaticParameterSpec(taintedBytes); + testCleanUsage(); + } + + public static void testBuilderPattern(byte[] taintedIKM) throws Exception { + HKDFParameterSpec.Builder builder = HKDFParameterSpec.ofExtract(); + builder.addIKM(taintedIKM); + HKDFParameterSpec spec = builder.thenExpand("info".getBytes(), 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] result = kdf.deriveData(spec); + sink(result); // $ hasTaintFlow + } + + public static void testSeparateBuilder(byte[] taintedIKM) throws Exception { + HKDFParameterSpec.Builder builder1 = HKDFParameterSpec.ofExtract(); + HKDFParameterSpec.Builder builder2 = builder1.addIKM(taintedIKM); + HKDFParameterSpec spec = builder2.thenExpand("info".getBytes(), 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] result = kdf.deriveData(spec); + sink(result); // $ hasTaintFlow + } + + public static void testKDFWithSalt(byte[] taintedIKM) throws Exception { + HKDFParameterSpec.Builder builder = HKDFParameterSpec.ofExtract(); + builder.addIKM(taintedIKM); + builder.addSalt("sensitive-salt".getBytes()); + HKDFParameterSpec spec = builder.thenExpand("info".getBytes(), 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] result = kdf.deriveData(spec); + sink(result); // $ hasTaintFlow + } + + public static void testStaticParameterSpec(byte[] taintedIKM) throws Exception { + javax.crypto.spec.SecretKeySpec secretKey = new javax.crypto.spec.SecretKeySpec(taintedIKM, "AES"); + HKDFParameterSpec spec = HKDFParameterSpec.expandOnly( + secretKey, "info".getBytes(), 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] result = kdf.deriveData(spec); + sink(result); // $ hasTaintFlow + } + + public static void testCleanUsage() throws Exception { + byte[] cleanKeyMaterial = "static-key-material".getBytes(); + + HKDFParameterSpec.Builder builder = HKDFParameterSpec.ofExtract(); + builder.addIKM(cleanKeyMaterial); + HKDFParameterSpec spec = builder.thenExpand("info".getBytes(), 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] cleanResult = kdf.deriveData(spec); + sink(cleanResult); // Safe - no taint + } + + public static void testThenExpand(byte[] cleanIKM) throws Exception { + String userInput = source(""); + byte[] taintedInfo = userInput.getBytes(); + + HKDFParameterSpec.Builder builder = HKDFParameterSpec.ofExtract(); + builder.addIKM(cleanIKM); + HKDFParameterSpec spec = builder.thenExpand(taintedInfo, 32); + + KDF kdf = KDF.getInstance("HKDF-SHA256"); + byte[] result = kdf.deriveData(spec); + sink(result); // $ hasTaintFlow + } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/kdf/options b/java/ql/test/library-tests/dataflow/kdf/options new file mode 100644 index 00000000000..f4edc64c017 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/kdf/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --enable-preview --release 25 \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/kdf/test.expected b/java/ql/test/library-tests/dataflow/kdf/test.expected new file mode 100644 index 00000000000..cab9b4bc054 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/kdf/test.expected @@ -0,0 +1,105 @@ +models +| 1 | Summary: java.lang; String; false; getBytes; ; ; Argument[this]; ReturnValue; taint; manual | +| 2 | Summary: javax.crypto.spec; HKDFParameterSpec$Builder; true; addIKM; (byte[]); ; Argument[0]; Argument[this]; taint; manual | +| 3 | Summary: javax.crypto.spec; HKDFParameterSpec$Builder; true; addIKM; (byte[]); ; Argument[this]; ReturnValue; value; manual | +| 4 | Summary: javax.crypto.spec; HKDFParameterSpec$Builder; true; thenExpand; (byte[],int); ; Argument[0]; ReturnValue; taint; manual | +| 5 | Summary: javax.crypto.spec; HKDFParameterSpec$Builder; true; thenExpand; (byte[],int); ; Argument[this]; ReturnValue; taint; manual | +| 6 | Summary: javax.crypto.spec; HKDFParameterSpec; false; expandOnly; (SecretKey,byte[],int); ; Argument[0]; ReturnValue; taint; manual | +| 7 | Summary: javax.crypto.spec; SecretKeySpec; false; SecretKeySpec; (byte[],String); ; Argument[0]; Argument[this]; taint; manual | +| 8 | Summary: javax.crypto; KDF; true; deriveData; (AlgorithmParameterSpec); ; Argument[0]; ReturnValue; taint; manual | +edges +| KDFDataflowTest.java:12:28:12:37 | source(...) : String | KDFDataflowTest.java:13:31:13:39 | userInput : String | provenance | | +| KDFDataflowTest.java:13:31:13:39 | userInput : String | KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | provenance | MaD:1 | +| KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | KDFDataflowTest.java:15:28:15:39 | taintedBytes : byte[] | provenance | | +| KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | KDFDataflowTest.java:16:29:16:40 | taintedBytes : byte[] | provenance | | +| KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | KDFDataflowTest.java:17:25:17:36 | taintedBytes : byte[] | provenance | | +| KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | KDFDataflowTest.java:18:33:18:44 | taintedBytes : byte[] | provenance | | +| KDFDataflowTest.java:15:28:15:39 | taintedBytes : byte[] | KDFDataflowTest.java:22:43:22:59 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:16:29:16:40 | taintedBytes : byte[] | KDFDataflowTest.java:32:44:32:60 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:17:25:17:36 | taintedBytes : byte[] | KDFDataflowTest.java:42:40:42:56 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:18:33:18:44 | taintedBytes : byte[] | KDFDataflowTest.java:53:48:53:64 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:22:43:22:59 | taintedIKM : byte[] | KDFDataflowTest.java:24:24:24:33 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:24:9:24:15 | builder [post update] : Builder | KDFDataflowTest.java:25:34:25:40 | builder : Builder | provenance | | +| KDFDataflowTest.java:24:24:24:33 | taintedIKM : byte[] | KDFDataflowTest.java:24:9:24:15 | builder [post update] : Builder | provenance | MaD:2 | +| KDFDataflowTest.java:25:34:25:40 | builder : Builder | KDFDataflowTest.java:25:34:25:74 | thenExpand(...) : ExtractThenExpand | provenance | MaD:5 | +| KDFDataflowTest.java:25:34:25:74 | thenExpand(...) : ExtractThenExpand | KDFDataflowTest.java:28:40:28:43 | spec : ExtractThenExpand | provenance | | +| KDFDataflowTest.java:28:25:28:44 | deriveData(...) : byte[] | KDFDataflowTest.java:29:14:29:19 | result | provenance | | +| KDFDataflowTest.java:28:40:28:43 | spec : ExtractThenExpand | KDFDataflowTest.java:28:25:28:44 | deriveData(...) : byte[] | provenance | MaD:8 | +| KDFDataflowTest.java:32:44:32:60 | taintedIKM : byte[] | KDFDataflowTest.java:34:62:34:71 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:34:46:34:72 | addIKM(...) : Builder | KDFDataflowTest.java:35:34:35:41 | builder2 : Builder | provenance | | +| KDFDataflowTest.java:34:62:34:71 | taintedIKM : byte[] | KDFDataflowTest.java:34:46:34:72 | addIKM(...) : Builder | provenance | MaD:2+MaD:3 | +| KDFDataflowTest.java:35:34:35:41 | builder2 : Builder | KDFDataflowTest.java:35:34:35:75 | thenExpand(...) : ExtractThenExpand | provenance | MaD:5 | +| KDFDataflowTest.java:35:34:35:75 | thenExpand(...) : ExtractThenExpand | KDFDataflowTest.java:38:40:38:43 | spec : ExtractThenExpand | provenance | | +| KDFDataflowTest.java:38:25:38:44 | deriveData(...) : byte[] | KDFDataflowTest.java:39:14:39:19 | result | provenance | | +| KDFDataflowTest.java:38:40:38:43 | spec : ExtractThenExpand | KDFDataflowTest.java:38:25:38:44 | deriveData(...) : byte[] | provenance | MaD:8 | +| KDFDataflowTest.java:42:40:42:56 | taintedIKM : byte[] | KDFDataflowTest.java:44:24:44:33 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:44:9:44:15 | builder [post update] : Builder | KDFDataflowTest.java:46:34:46:40 | builder : Builder | provenance | | +| KDFDataflowTest.java:44:24:44:33 | taintedIKM : byte[] | KDFDataflowTest.java:44:9:44:15 | builder [post update] : Builder | provenance | MaD:2 | +| KDFDataflowTest.java:46:34:46:40 | builder : Builder | KDFDataflowTest.java:46:34:46:74 | thenExpand(...) : ExtractThenExpand | provenance | MaD:5 | +| KDFDataflowTest.java:46:34:46:74 | thenExpand(...) : ExtractThenExpand | KDFDataflowTest.java:49:40:49:43 | spec : ExtractThenExpand | provenance | | +| KDFDataflowTest.java:49:25:49:44 | deriveData(...) : byte[] | KDFDataflowTest.java:50:14:50:19 | result | provenance | | +| KDFDataflowTest.java:49:40:49:43 | spec : ExtractThenExpand | KDFDataflowTest.java:49:25:49:44 | deriveData(...) : byte[] | provenance | MaD:8 | +| KDFDataflowTest.java:53:48:53:64 | taintedIKM : byte[] | KDFDataflowTest.java:54:89:54:98 | taintedIKM : byte[] | provenance | | +| KDFDataflowTest.java:54:53:54:106 | new SecretKeySpec(...) : SecretKeySpec | KDFDataflowTest.java:56:13:56:21 | secretKey : SecretKeySpec | provenance | | +| KDFDataflowTest.java:54:89:54:98 | taintedIKM : byte[] | KDFDataflowTest.java:54:53:54:106 | new SecretKeySpec(...) : SecretKeySpec | provenance | MaD:7 | +| KDFDataflowTest.java:55:34:56:45 | expandOnly(...) : Expand | KDFDataflowTest.java:59:40:59:43 | spec : Expand | provenance | | +| KDFDataflowTest.java:56:13:56:21 | secretKey : SecretKeySpec | KDFDataflowTest.java:55:34:56:45 | expandOnly(...) : Expand | provenance | MaD:6 | +| KDFDataflowTest.java:59:25:59:44 | deriveData(...) : byte[] | KDFDataflowTest.java:60:14:60:19 | result | provenance | | +| KDFDataflowTest.java:59:40:59:43 | spec : Expand | KDFDataflowTest.java:59:25:59:44 | deriveData(...) : byte[] | provenance | MaD:8 | +| KDFDataflowTest.java:76:28:76:37 | source(...) : String | KDFDataflowTest.java:77:30:77:38 | userInput : String | provenance | | +| KDFDataflowTest.java:77:30:77:38 | userInput : String | KDFDataflowTest.java:77:30:77:49 | getBytes(...) : byte[] | provenance | MaD:1 | +| KDFDataflowTest.java:77:30:77:49 | getBytes(...) : byte[] | KDFDataflowTest.java:81:53:81:63 | taintedInfo : byte[] | provenance | | +| KDFDataflowTest.java:81:34:81:68 | thenExpand(...) : ExtractThenExpand | KDFDataflowTest.java:84:40:84:43 | spec : ExtractThenExpand | provenance | | +| KDFDataflowTest.java:81:53:81:63 | taintedInfo : byte[] | KDFDataflowTest.java:81:34:81:68 | thenExpand(...) : ExtractThenExpand | provenance | MaD:4 | +| KDFDataflowTest.java:84:25:84:44 | deriveData(...) : byte[] | KDFDataflowTest.java:85:14:85:19 | result | provenance | | +| KDFDataflowTest.java:84:40:84:43 | spec : ExtractThenExpand | KDFDataflowTest.java:84:25:84:44 | deriveData(...) : byte[] | provenance | MaD:8 | +nodes +| KDFDataflowTest.java:12:28:12:37 | source(...) : String | semmle.label | source(...) : String | +| KDFDataflowTest.java:13:31:13:39 | userInput : String | semmle.label | userInput : String | +| KDFDataflowTest.java:13:31:13:50 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | +| KDFDataflowTest.java:15:28:15:39 | taintedBytes : byte[] | semmle.label | taintedBytes : byte[] | +| KDFDataflowTest.java:16:29:16:40 | taintedBytes : byte[] | semmle.label | taintedBytes : byte[] | +| KDFDataflowTest.java:17:25:17:36 | taintedBytes : byte[] | semmle.label | taintedBytes : byte[] | +| KDFDataflowTest.java:18:33:18:44 | taintedBytes : byte[] | semmle.label | taintedBytes : byte[] | +| KDFDataflowTest.java:22:43:22:59 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:24:9:24:15 | builder [post update] : Builder | semmle.label | builder [post update] : Builder | +| KDFDataflowTest.java:24:24:24:33 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:25:34:25:40 | builder : Builder | semmle.label | builder : Builder | +| KDFDataflowTest.java:25:34:25:74 | thenExpand(...) : ExtractThenExpand | semmle.label | thenExpand(...) : ExtractThenExpand | +| KDFDataflowTest.java:28:25:28:44 | deriveData(...) : byte[] | semmle.label | deriveData(...) : byte[] | +| KDFDataflowTest.java:28:40:28:43 | spec : ExtractThenExpand | semmle.label | spec : ExtractThenExpand | +| KDFDataflowTest.java:29:14:29:19 | result | semmle.label | result | +| KDFDataflowTest.java:32:44:32:60 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:34:46:34:72 | addIKM(...) : Builder | semmle.label | addIKM(...) : Builder | +| KDFDataflowTest.java:34:62:34:71 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:35:34:35:41 | builder2 : Builder | semmle.label | builder2 : Builder | +| KDFDataflowTest.java:35:34:35:75 | thenExpand(...) : ExtractThenExpand | semmle.label | thenExpand(...) : ExtractThenExpand | +| KDFDataflowTest.java:38:25:38:44 | deriveData(...) : byte[] | semmle.label | deriveData(...) : byte[] | +| KDFDataflowTest.java:38:40:38:43 | spec : ExtractThenExpand | semmle.label | spec : ExtractThenExpand | +| KDFDataflowTest.java:39:14:39:19 | result | semmle.label | result | +| KDFDataflowTest.java:42:40:42:56 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:44:9:44:15 | builder [post update] : Builder | semmle.label | builder [post update] : Builder | +| KDFDataflowTest.java:44:24:44:33 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:46:34:46:40 | builder : Builder | semmle.label | builder : Builder | +| KDFDataflowTest.java:46:34:46:74 | thenExpand(...) : ExtractThenExpand | semmle.label | thenExpand(...) : ExtractThenExpand | +| KDFDataflowTest.java:49:25:49:44 | deriveData(...) : byte[] | semmle.label | deriveData(...) : byte[] | +| KDFDataflowTest.java:49:40:49:43 | spec : ExtractThenExpand | semmle.label | spec : ExtractThenExpand | +| KDFDataflowTest.java:50:14:50:19 | result | semmle.label | result | +| KDFDataflowTest.java:53:48:53:64 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:54:53:54:106 | new SecretKeySpec(...) : SecretKeySpec | semmle.label | new SecretKeySpec(...) : SecretKeySpec | +| KDFDataflowTest.java:54:89:54:98 | taintedIKM : byte[] | semmle.label | taintedIKM : byte[] | +| KDFDataflowTest.java:55:34:56:45 | expandOnly(...) : Expand | semmle.label | expandOnly(...) : Expand | +| KDFDataflowTest.java:56:13:56:21 | secretKey : SecretKeySpec | semmle.label | secretKey : SecretKeySpec | +| KDFDataflowTest.java:59:25:59:44 | deriveData(...) : byte[] | semmle.label | deriveData(...) : byte[] | +| KDFDataflowTest.java:59:40:59:43 | spec : Expand | semmle.label | spec : Expand | +| KDFDataflowTest.java:60:14:60:19 | result | semmle.label | result | +| KDFDataflowTest.java:76:28:76:37 | source(...) : String | semmle.label | source(...) : String | +| KDFDataflowTest.java:77:30:77:38 | userInput : String | semmle.label | userInput : String | +| KDFDataflowTest.java:77:30:77:49 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | +| KDFDataflowTest.java:81:34:81:68 | thenExpand(...) : ExtractThenExpand | semmle.label | thenExpand(...) : ExtractThenExpand | +| KDFDataflowTest.java:81:53:81:63 | taintedInfo : byte[] | semmle.label | taintedInfo : byte[] | +| KDFDataflowTest.java:84:25:84:44 | deriveData(...) : byte[] | semmle.label | deriveData(...) : byte[] | +| KDFDataflowTest.java:84:40:84:43 | spec : ExtractThenExpand | semmle.label | spec : ExtractThenExpand | +| KDFDataflowTest.java:85:14:85:19 | result | semmle.label | result | +subpaths +testFailures diff --git a/java/ql/test/library-tests/dataflow/kdf/test.ql b/java/ql/test/library-tests/dataflow/kdf/test.ql new file mode 100644 index 00000000000..b2ffe7d9a67 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/kdf/test.ql @@ -0,0 +1,3 @@ +import utils.test.InlineFlowTest +import TaintFlowTest +import TaintFlow::PathGraph diff --git a/java/ql/test/library-tests/dataflow/scoped-values/ScopedValueFlowTest.java b/java/ql/test/library-tests/dataflow/scoped-values/ScopedValueFlowTest.java new file mode 100644 index 00000000000..2df07ae2f32 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/scoped-values/ScopedValueFlowTest.java @@ -0,0 +1,44 @@ +import java.lang.ScopedValue; + +public class ScopedValueFlowTest { + private static final ScopedValue USER_CONTEXT = ScopedValue.newInstance(); + private static final ScopedValue SESSION_ID = ScopedValue.newInstance(); + + public static String source(String label) { + return "tainted"; + } + + public static void sink(String value) {} + + public static void main(String[] args) { + String userInput = source(""); + + // Test 1: Basic scoped value binding and retrieval + ScopedValue.where(USER_CONTEXT, userInput) + .run(() -> { + String value = USER_CONTEXT.get(); + sink(value); // $ hasTaintFlow + }); + + // Test 2: Multiple scoped value bindings with chaining + ScopedValue.where(USER_CONTEXT, userInput) + .where(SESSION_ID, "safe-one") + .run(() -> { + String user = USER_CONTEXT.get(); + String session = SESSION_ID.get(); + sink(user); // $ hasTaintFlow + sink(session); // safe - should NOT have taint flow + }); + + ScopedValue.where(USER_CONTEXT, userInput) + .run(() -> { + String outer = USER_CONTEXT.get(); + ScopedValue.where(USER_CONTEXT, "safe-two") + .run(() -> { + String inner = USER_CONTEXT.get(); + sink(inner); // $ SPURIOUS: hasTaintFlow + }); + sink(outer); // $ hasTaintFlow + }); + } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/scoped-values/options b/java/ql/test/library-tests/dataflow/scoped-values/options new file mode 100644 index 00000000000..c793109355a --- /dev/null +++ b/java/ql/test/library-tests/dataflow/scoped-values/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -source 25 -target 25 --enable-preview \ No newline at end of file diff --git a/java/ql/test/library-tests/dataflow/scoped-values/test.expected b/java/ql/test/library-tests/dataflow/scoped-values/test.expected new file mode 100644 index 00000000000..a617a94188e --- /dev/null +++ b/java/ql/test/library-tests/dataflow/scoped-values/test.expected @@ -0,0 +1,48 @@ +models +| 1 | Summary: java.lang; ScopedValue; false; where; (ScopedValue,Object); ; Argument[1]; Argument[0].SyntheticField[java.lang.ScopedValue.boundValue]; value; manual | +| 2 | Summary: java.lang; ScopedValue; true; get; (); ; Argument[this].SyntheticField[java.lang.ScopedValue.boundValue]; ReturnValue; value; manual | +edges +| ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:19:32:19:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:27:31:27:42 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:35:32:35:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:38:40:38:51 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:14:28:14:37 | source(...) : String | ScopedValueFlowTest.java:17:41:17:49 | userInput : String | provenance | | +| ScopedValueFlowTest.java:14:28:14:37 | source(...) : String | ScopedValueFlowTest.java:24:41:24:49 | userInput : String | provenance | | +| ScopedValueFlowTest.java:14:28:14:37 | source(...) : String | ScopedValueFlowTest.java:33:41:33:49 | userInput : String | provenance | | +| ScopedValueFlowTest.java:17:27:17:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:17:41:17:49 | userInput : String | ScopedValueFlowTest.java:17:27:17:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | MaD:1 | +| ScopedValueFlowTest.java:19:32:19:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:19:32:19:49 | get(...) : String | provenance | MaD:2 | +| ScopedValueFlowTest.java:19:32:19:49 | get(...) : String | ScopedValueFlowTest.java:20:22:20:26 | value | provenance | | +| ScopedValueFlowTest.java:24:27:24:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:24:41:24:49 | userInput : String | ScopedValueFlowTest.java:24:27:24:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | MaD:1 | +| ScopedValueFlowTest.java:27:31:27:42 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:27:31:27:48 | get(...) : String | provenance | MaD:2 | +| ScopedValueFlowTest.java:27:31:27:48 | get(...) : String | ScopedValueFlowTest.java:29:22:29:25 | user | provenance | | +| ScopedValueFlowTest.java:33:27:33:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | | +| ScopedValueFlowTest.java:33:41:33:49 | userInput : String | ScopedValueFlowTest.java:33:27:33:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | provenance | MaD:1 | +| ScopedValueFlowTest.java:35:32:35:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:35:32:35:49 | get(...) : String | provenance | MaD:2 | +| ScopedValueFlowTest.java:35:32:35:49 | get(...) : String | ScopedValueFlowTest.java:41:22:41:26 | outer | provenance | | +| ScopedValueFlowTest.java:38:40:38:51 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | ScopedValueFlowTest.java:38:40:38:57 | get(...) : String | provenance | MaD:2 | +| ScopedValueFlowTest.java:38:40:38:57 | get(...) : String | ScopedValueFlowTest.java:39:30:39:34 | inner | provenance | | +nodes +| ScopedValueFlowTest.java:4:46:4:57 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:14:28:14:37 | source(...) : String | semmle.label | source(...) : String | +| ScopedValueFlowTest.java:17:27:17:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:17:41:17:49 | userInput : String | semmle.label | userInput : String | +| ScopedValueFlowTest.java:19:32:19:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:19:32:19:49 | get(...) : String | semmle.label | get(...) : String | +| ScopedValueFlowTest.java:20:22:20:26 | value | semmle.label | value | +| ScopedValueFlowTest.java:24:27:24:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:24:41:24:49 | userInput : String | semmle.label | userInput : String | +| ScopedValueFlowTest.java:27:31:27:42 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:27:31:27:48 | get(...) : String | semmle.label | get(...) : String | +| ScopedValueFlowTest.java:29:22:29:25 | user | semmle.label | user | +| ScopedValueFlowTest.java:33:27:33:38 | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT [post update] : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:33:41:33:49 | userInput : String | semmle.label | userInput : String | +| ScopedValueFlowTest.java:35:32:35:43 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:35:32:35:49 | get(...) : String | semmle.label | get(...) : String | +| ScopedValueFlowTest.java:38:40:38:51 | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | semmle.label | USER_CONTEXT : ScopedValue [java.lang.ScopedValue.boundValue] : String | +| ScopedValueFlowTest.java:38:40:38:57 | get(...) : String | semmle.label | get(...) : String | +| ScopedValueFlowTest.java:39:30:39:34 | inner | semmle.label | inner | +| ScopedValueFlowTest.java:41:22:41:26 | outer | semmle.label | outer | +subpaths +testFailures diff --git a/java/ql/test/library-tests/dataflow/scoped-values/test.ql b/java/ql/test/library-tests/dataflow/scoped-values/test.ql new file mode 100644 index 00000000000..14dfc550b73 --- /dev/null +++ b/java/ql/test/library-tests/dataflow/scoped-values/test.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import TaintFlowTest +import TaintFlow::PathGraph diff --git a/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java b/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java new file mode 100644 index 00000000000..bcd9a26f7b1 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/FlexibleConstructors.java @@ -0,0 +1,95 @@ +class A { + A(String msg) { + System.out.println("A: " + msg); + } +} + +class B extends A { + B(String input) { + var msg = input.trim().toUpperCase(); + super(msg); + } +} + +class C { + private final int x; + + C(int x) { + if (x < 0) throw new IllegalArgumentException(); + super(); + this.x = x; + } +} + +record R(String name, int score) { + public R(String name) { + var score = name.length(); + this(name, score); + } +} + +class Outer { + private final String prefix = "outer"; + + class Inner { + private String full; + + Inner(String suffix) { + var combined = prefix + "_" + suffix; + super(); + this.full = combined; + } + } +} + +class D { + private final String value; + private final int length; + + D(String input) { + var processed = input.toLowerCase(); + value = processed; + this.length = processed.length(); + super(); + } +} + +class E extends A { + private boolean isValid; + private String processed; + + E(String data) { + var temp = data != null ? data.trim() : ""; + this.processed = temp; + isValid = !temp.isEmpty(); + super(temp); + } +} + +class F { + private int x; + private final int y; + private int sum; + + F(int a, int b) { + x = a; + this.y = b; + this.sum = a + b; + super(); + } +} + +class G { + private String instance_val; + + { + instance_val = "instance"; + } + + G(String input) { + var tmp = input != null ? input : "default"; + var string = tmp + "_initialized"; + super(); + this.instance_val = string; + } +} diff --git a/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected new file mode 100644 index 00000000000..75a112fe208 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.expected @@ -0,0 +1,2 @@ +| FlexibleConstructors.java:31:7:31:11 | ; | 1 | | Instance initializer call at index 1 | +| FlexibleConstructors.java:89:5:89:5 | ; | 3 | | Instance initializer call at index 3 | diff --git a/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql new file mode 100644 index 00000000000..286137fc452 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/InstanceInitializerCalls.ql @@ -0,0 +1,8 @@ +import java + +from MethodCall call, Method m +where + call.getMethod() = m and + m.getName() = "" +select call.getEnclosingStmt(), call.getEnclosingStmt().getIndex(), call.getMethod().getName(), + "Instance initializer call at index " + call.getEnclosingStmt().getIndex() diff --git a/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected new file mode 100644 index 00000000000..d90e8b8f831 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.expected @@ -0,0 +1,125 @@ +| FlexibleConstructors.java:1:7:1:7 | A | 0 | class A { | +| FlexibleConstructors.java:1:7:1:7 | A | 1 | A(String msg) { | +| FlexibleConstructors.java:1:7:1:7 | A | 2 | super(); | +| FlexibleConstructors.java:1:7:1:7 | A | 3 | System.out.println("A: " + msg); | +| FlexibleConstructors.java:1:7:1:7 | A | 4 | } | +| FlexibleConstructors.java:1:7:1:7 | A | 5 | } | +| FlexibleConstructors.java:7:7:7:7 | B | 0 | class B { | +| FlexibleConstructors.java:7:7:7:7 | B | 1 | B(String input) { | +| FlexibleConstructors.java:7:7:7:7 | B | 2 | var msg = input.trim().toUpperCase(); | +| FlexibleConstructors.java:7:7:7:7 | B | 3 | super(msg); | +| FlexibleConstructors.java:7:7:7:7 | B | 4 | } | +| FlexibleConstructors.java:7:7:7:7 | B | 5 | } | +| FlexibleConstructors.java:14:7:14:7 | C | 0 | class C { | +| FlexibleConstructors.java:14:7:14:7 | C | 1 | private final int x; | +| FlexibleConstructors.java:14:7:14:7 | C | 2 | | +| FlexibleConstructors.java:14:7:14:7 | C | 3 | C(int x) { | +| FlexibleConstructors.java:14:7:14:7 | C | 4 | if (x < 0) | +| FlexibleConstructors.java:14:7:14:7 | C | 5 | throw new IllegalArgumentException(); | +| FlexibleConstructors.java:14:7:14:7 | C | 6 | super(); | +| FlexibleConstructors.java:14:7:14:7 | C | 7 | this.x = x; | +| FlexibleConstructors.java:14:7:14:7 | C | 8 | } | +| FlexibleConstructors.java:14:7:14:7 | C | 9 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 0 | final class R { | +| FlexibleConstructors.java:24:8:24:8 | R | 1 | public final boolean equals(Object p0) { } | +| FlexibleConstructors.java:24:8:24:8 | R | 2 | | +| FlexibleConstructors.java:24:8:24:8 | R | 3 | public final int hashCode() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 4 | | +| FlexibleConstructors.java:24:8:24:8 | R | 5 | public String name() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 6 | | +| FlexibleConstructors.java:24:8:24:8 | R | 7 | public int score() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 8 | | +| FlexibleConstructors.java:24:8:24:8 | R | 9 | public final String toString() { } | +| FlexibleConstructors.java:24:8:24:8 | R | 10 | | +| FlexibleConstructors.java:24:8:24:8 | R | 11 | R(String name, int score) { | +| FlexibleConstructors.java:24:8:24:8 | R | 12 | super(); | +| FlexibleConstructors.java:24:8:24:8 | R | 13 | this.name = name; | +| FlexibleConstructors.java:24:8:24:8 | R | 14 | this.score = score; | +| FlexibleConstructors.java:24:8:24:8 | R | 15 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 16 | | +| FlexibleConstructors.java:24:8:24:8 | R | 17 | private final String name; | +| FlexibleConstructors.java:24:8:24:8 | R | 18 | | +| FlexibleConstructors.java:24:8:24:8 | R | 19 | private final int score; | +| FlexibleConstructors.java:24:8:24:8 | R | 20 | | +| FlexibleConstructors.java:24:8:24:8 | R | 21 | public R(String name) { | +| FlexibleConstructors.java:24:8:24:8 | R | 22 | var score = name.length(); | +| FlexibleConstructors.java:24:8:24:8 | R | 23 | this(name, score); | +| FlexibleConstructors.java:24:8:24:8 | R | 24 | } | +| FlexibleConstructors.java:24:8:24:8 | R | 25 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 0 | class Outer { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 1 | private void () { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 2 | prefix = "outer"; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 3 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 4 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 5 | Outer() { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 6 | super(); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 7 | (); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 8 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 9 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 10 | private final String prefix; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 11 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 12 | class Inner { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 13 | private String full; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 14 | | +| FlexibleConstructors.java:31:7:31:11 | Outer | 15 | Inner(String suffix) { | +| FlexibleConstructors.java:31:7:31:11 | Outer | 16 | var combined = prefix + "_" + suffix; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 17 | super(); | +| FlexibleConstructors.java:31:7:31:11 | Outer | 18 | this.full = combined; | +| FlexibleConstructors.java:31:7:31:11 | Outer | 19 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 20 | } | +| FlexibleConstructors.java:31:7:31:11 | Outer | 21 | } | +| FlexibleConstructors.java:45:7:45:7 | D | 0 | class D { | +| FlexibleConstructors.java:45:7:45:7 | D | 1 | private final String value; | +| FlexibleConstructors.java:45:7:45:7 | D | 2 | | +| FlexibleConstructors.java:45:7:45:7 | D | 3 | private final int length; | +| FlexibleConstructors.java:45:7:45:7 | D | 4 | | +| FlexibleConstructors.java:45:7:45:7 | D | 5 | D(String input) { | +| FlexibleConstructors.java:45:7:45:7 | D | 6 | var processed = input.toLowerCase(); | +| FlexibleConstructors.java:45:7:45:7 | D | 7 | value = processed; | +| FlexibleConstructors.java:45:7:45:7 | D | 8 | this.length = processed.length(); | +| FlexibleConstructors.java:45:7:45:7 | D | 9 | super(); | +| FlexibleConstructors.java:45:7:45:7 | D | 10 | } | +| FlexibleConstructors.java:45:7:45:7 | D | 11 | } | +| FlexibleConstructors.java:57:7:57:7 | E | 0 | class E { | +| FlexibleConstructors.java:57:7:57:7 | E | 1 | private boolean isValid; | +| FlexibleConstructors.java:57:7:57:7 | E | 2 | | +| FlexibleConstructors.java:57:7:57:7 | E | 3 | private String processed; | +| FlexibleConstructors.java:57:7:57:7 | E | 4 | | +| FlexibleConstructors.java:57:7:57:7 | E | 5 | E(String data) { | +| FlexibleConstructors.java:57:7:57:7 | E | 6 | var temp = data != null ? data.trim() : ""; | +| FlexibleConstructors.java:57:7:57:7 | E | 7 | this.processed = temp; | +| FlexibleConstructors.java:57:7:57:7 | E | 8 | isValid = !temp.isEmpty(); | +| FlexibleConstructors.java:57:7:57:7 | E | 9 | super(temp); | +| FlexibleConstructors.java:57:7:57:7 | E | 10 | } | +| FlexibleConstructors.java:57:7:57:7 | E | 11 | } | +| FlexibleConstructors.java:69:7:69:7 | F | 0 | class F { | +| FlexibleConstructors.java:69:7:69:7 | F | 1 | private int x; | +| FlexibleConstructors.java:69:7:69:7 | F | 2 | | +| FlexibleConstructors.java:69:7:69:7 | F | 3 | private final int y; | +| FlexibleConstructors.java:69:7:69:7 | F | 4 | | +| FlexibleConstructors.java:69:7:69:7 | F | 5 | private int sum; | +| FlexibleConstructors.java:69:7:69:7 | F | 6 | | +| FlexibleConstructors.java:69:7:69:7 | F | 7 | F(int a, int b) { | +| FlexibleConstructors.java:69:7:69:7 | F | 8 | x = a; | +| FlexibleConstructors.java:69:7:69:7 | F | 9 | this.y = b; | +| FlexibleConstructors.java:69:7:69:7 | F | 10 | this.sum = a + b; | +| FlexibleConstructors.java:69:7:69:7 | F | 11 | super(); | +| FlexibleConstructors.java:69:7:69:7 | F | 12 | } | +| FlexibleConstructors.java:69:7:69:7 | F | 13 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 0 | class G { | +| FlexibleConstructors.java:82:7:82:7 | G | 1 | private void () { | +| FlexibleConstructors.java:82:7:82:7 | G | 2 | { | +| FlexibleConstructors.java:82:7:82:7 | G | 3 | instance_val = "instance"; | +| FlexibleConstructors.java:82:7:82:7 | G | 4 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 5 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 6 | | +| FlexibleConstructors.java:82:7:82:7 | G | 7 | private String instance_val; | +| FlexibleConstructors.java:82:7:82:7 | G | 8 | | +| FlexibleConstructors.java:82:7:82:7 | G | 9 | G(String input) { | +| FlexibleConstructors.java:82:7:82:7 | G | 10 | var tmp = input != null ? input : "default"; | +| FlexibleConstructors.java:82:7:82:7 | G | 11 | var string = tmp + "_initialized"; | +| FlexibleConstructors.java:82:7:82:7 | G | 12 | super(); | +| FlexibleConstructors.java:82:7:82:7 | G | 13 | (); | +| FlexibleConstructors.java:82:7:82:7 | G | 14 | this.instance_val = string; | +| FlexibleConstructors.java:82:7:82:7 | G | 15 | } | +| FlexibleConstructors.java:82:7:82:7 | G | 16 | } | diff --git a/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql new file mode 100644 index 00000000000..59ae62effd1 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrettyPrint.ql @@ -0,0 +1,5 @@ +import semmle.code.java.PrettyPrintAst + +from ClassOrInterface cori, string s, int line +where pp(cori, s, line) and cori.fromSource() +select cori, line, s diff --git a/java/ql/test/library-tests/flexible-constructors/PrintAst.expected b/java/ql/test/library-tests/flexible-constructors/PrintAst.expected new file mode 100644 index 00000000000..e8071db72f7 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrintAst.expected @@ -0,0 +1,213 @@ +FlexibleConstructors.java: +# 0| [CompilationUnit] FlexibleConstructors +# 1| 1: [Class] A +# 2| 1: [Constructor] A +#-----| 4: (Parameters) +# 2| 0: [Parameter] msg +# 2| 0: [TypeAccess] String +# 2| 5: [BlockStmt] { ... } +# 3| 1: [ExprStmt] ; +# 3| 0: [MethodCall] println(...) +# 3| -1: [VarAccess] System.out +# 3| -1: [TypeAccess] System +# 3| 0: [AddExpr] ... + ... +# 3| 0: [StringLiteral] "A: " +# 3| 1: [VarAccess] msg +# 7| 2: [Class] B +#-----| -1: (Base Types) +# 7| -1: [TypeAccess] A +# 8| 1: [Constructor] B +#-----| 4: (Parameters) +# 8| 0: [Parameter] input +# 8| 0: [TypeAccess] String +# 8| 5: [BlockStmt] { ... } +# 9| 0: [LocalVariableDeclStmt] var ...; +# 9| 1: [LocalVariableDeclExpr] msg +# 9| 0: [MethodCall] toUpperCase(...) +# 9| -1: [MethodCall] trim(...) +# 9| -1: [VarAccess] input +# 10| 1: [SuperConstructorInvocationStmt] super(...) +# 10| 0: [VarAccess] msg +# 14| 3: [Class] C +# 15| 1: [FieldDeclaration] int x; +# 15| -1: [TypeAccess] int +# 17| 2: [Constructor] C +#-----| 4: (Parameters) +# 17| 0: [Parameter] x +# 17| 0: [TypeAccess] int +# 17| 5: [BlockStmt] { ... } +# 18| 0: [IfStmt] if (...) +# 18| 0: [LTExpr] ... < ... +# 18| 0: [VarAccess] x +# 18| 1: [IntegerLiteral] 0 +# 18| 1: [ThrowStmt] throw ... +# 18| 0: [ClassInstanceExpr] new IllegalArgumentException(...) +# 18| -3: [TypeAccess] IllegalArgumentException +# 19| 1: [SuperConstructorInvocationStmt] super(...) +# 20| 2: [ExprStmt] ; +# 20| 0: [AssignExpr] ...=... +# 20| 0: [VarAccess] this.x +# 20| -1: [ThisAccess] this +# 20| 1: [VarAccess] x +# 24| 4: [Class] R +# 24| 2: [FieldDeclaration] String name; +# 24| 3: [FieldDeclaration] int score; +# 25| 4: [Constructor] R +#-----| 4: (Parameters) +# 25| 0: [Parameter] name +# 25| 0: [TypeAccess] String +# 25| 5: [BlockStmt] { ... } +# 26| 0: [LocalVariableDeclStmt] var ...; +# 26| 1: [LocalVariableDeclExpr] score +# 26| 0: [MethodCall] length(...) +# 26| -1: [VarAccess] name +# 27| 1: [ThisConstructorInvocationStmt] this(...) +# 27| 0: [VarAccess] name +# 27| 1: [VarAccess] score +# 31| 5: [Class] Outer +# 32| 3: [FieldDeclaration] String prefix; +# 32| -1: [TypeAccess] String +# 32| 0: [StringLiteral] "outer" +# 34| 4: [Class] Inner +# 35| 1: [FieldDeclaration] String full; +# 35| -1: [TypeAccess] String +# 37| 2: [Constructor] Inner +#-----| 4: (Parameters) +# 37| 0: [Parameter] suffix +# 37| 0: [TypeAccess] String +# 37| 5: [BlockStmt] { ... } +# 38| 0: [LocalVariableDeclStmt] var ...; +# 38| 1: [LocalVariableDeclExpr] combined +# 38| 0: [AddExpr] ... + ... +# 38| 0: [AddExpr] ... + ... +# 38| 0: [VarAccess] prefix +# 38| 1: [StringLiteral] "_" +# 38| 1: [VarAccess] suffix +# 39| 1: [SuperConstructorInvocationStmt] super(...) +# 40| 2: [ExprStmt] ; +# 40| 0: [AssignExpr] ...=... +# 40| 0: [VarAccess] this.full +# 40| -1: [ThisAccess] this +# 40| 1: [VarAccess] combined +# 45| 6: [Class] D +# 46| 1: [FieldDeclaration] String value; +# 46| -1: [TypeAccess] String +# 47| 2: [FieldDeclaration] int length; +# 47| -1: [TypeAccess] int +# 49| 3: [Constructor] D +#-----| 4: (Parameters) +# 49| 0: [Parameter] input +# 49| 0: [TypeAccess] String +# 49| 5: [BlockStmt] { ... } +# 50| 0: [LocalVariableDeclStmt] var ...; +# 50| 1: [LocalVariableDeclExpr] processed +# 50| 0: [MethodCall] toLowerCase(...) +# 50| -1: [VarAccess] input +# 51| 1: [ExprStmt] ; +# 51| 0: [AssignExpr] ...=... +# 51| 0: [VarAccess] value +# 51| 1: [VarAccess] processed +# 52| 2: [ExprStmt] ; +# 52| 0: [AssignExpr] ...=... +# 52| 0: [VarAccess] this.length +# 52| -1: [ThisAccess] this +# 52| 1: [MethodCall] length(...) +# 52| -1: [VarAccess] processed +# 53| 3: [SuperConstructorInvocationStmt] super(...) +# 57| 7: [Class] E +#-----| -1: (Base Types) +# 57| -1: [TypeAccess] A +# 58| 1: [FieldDeclaration] boolean isValid; +# 58| -1: [TypeAccess] boolean +# 59| 2: [FieldDeclaration] String processed; +# 59| -1: [TypeAccess] String +# 61| 3: [Constructor] E +#-----| 4: (Parameters) +# 61| 0: [Parameter] data +# 61| 0: [TypeAccess] String +# 61| 5: [BlockStmt] { ... } +# 62| 0: [LocalVariableDeclStmt] var ...; +# 62| 1: [LocalVariableDeclExpr] temp +# 62| 0: [ConditionalExpr] ...?...:... +# 62| 0: [NEExpr] ... != ... +# 62| 0: [VarAccess] data +# 62| 1: [NullLiteral] null +# 62| 1: [MethodCall] trim(...) +# 62| -1: [VarAccess] data +# 62| 2: [StringLiteral] "" +# 63| 1: [ExprStmt] ; +# 63| 0: [AssignExpr] ...=... +# 63| 0: [VarAccess] this.processed +# 63| -1: [ThisAccess] this +# 63| 1: [VarAccess] temp +# 64| 2: [ExprStmt] ; +# 64| 0: [AssignExpr] ...=... +# 64| 0: [VarAccess] isValid +# 64| 1: [LogNotExpr] !... +# 64| 0: [MethodCall] isEmpty(...) +# 64| -1: [VarAccess] temp +# 65| 3: [SuperConstructorInvocationStmt] super(...) +# 65| 0: [VarAccess] temp +# 69| 8: [Class] F +# 70| 1: [FieldDeclaration] int x; +# 70| -1: [TypeAccess] int +# 71| 2: [FieldDeclaration] int y; +# 71| -1: [TypeAccess] int +# 72| 3: [FieldDeclaration] int sum; +# 72| -1: [TypeAccess] int +# 74| 4: [Constructor] F +#-----| 4: (Parameters) +# 74| 0: [Parameter] a +# 74| 0: [TypeAccess] int +# 74| 1: [Parameter] b +# 74| 0: [TypeAccess] int +# 74| 5: [BlockStmt] { ... } +# 75| 0: [ExprStmt] ; +# 75| 0: [AssignExpr] ...=... +# 75| 0: [VarAccess] x +# 75| 1: [VarAccess] a +# 76| 1: [ExprStmt] ; +# 76| 0: [AssignExpr] ...=... +# 76| 0: [VarAccess] this.y +# 76| -1: [ThisAccess] this +# 76| 1: [VarAccess] b +# 77| 2: [ExprStmt] ; +# 77| 0: [AssignExpr] ...=... +# 77| 0: [VarAccess] this.sum +# 77| -1: [ThisAccess] this +# 77| 1: [AddExpr] ... + ... +# 77| 0: [VarAccess] a +# 77| 1: [VarAccess] b +# 78| 3: [SuperConstructorInvocationStmt] super(...) +# 82| 9: [Class] G +# 83| 2: [FieldDeclaration] String instance_val; +# 83| -1: [TypeAccess] String +# 85| 3: [BlockStmt] { ... } +# 86| 0: [ExprStmt] ; +# 86| 0: [AssignExpr] ...=... +# 86| 0: [VarAccess] instance_val +# 86| 1: [StringLiteral] "instance" +# 89| 4: [Constructor] G +#-----| 4: (Parameters) +# 89| 0: [Parameter] input +# 89| 0: [TypeAccess] String +# 89| 5: [BlockStmt] { ... } +# 90| 0: [LocalVariableDeclStmt] var ...; +# 90| 1: [LocalVariableDeclExpr] tmp +# 90| 0: [ConditionalExpr] ...?...:... +# 90| 0: [NEExpr] ... != ... +# 90| 0: [VarAccess] input +# 90| 1: [NullLiteral] null +# 90| 1: [VarAccess] input +# 90| 2: [StringLiteral] "default" +# 91| 1: [LocalVariableDeclStmt] var ...; +# 91| 1: [LocalVariableDeclExpr] string +# 91| 0: [AddExpr] ... + ... +# 91| 0: [VarAccess] tmp +# 91| 1: [StringLiteral] "_initialized" +# 92| 2: [SuperConstructorInvocationStmt] super(...) +# 93| 4: [ExprStmt] ; +# 93| 0: [AssignExpr] ...=... +# 93| 0: [VarAccess] this.instance_val +# 93| -1: [ThisAccess] this +# 93| 1: [VarAccess] string diff --git a/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref b/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref new file mode 100644 index 00000000000..c7fd5faf239 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/PrintAst.qlref @@ -0,0 +1 @@ +semmle/code/java/PrintAst.ql \ No newline at end of file diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected new file mode 100644 index 00000000000..dba8b4acf98 --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected @@ -0,0 +1,7 @@ +| FlexibleConstructors.java:10:15:10:17 | msg | FlexibleConstructors.java:10:9:10:19 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:18:13:18:17 | ... < ... | FlexibleConstructors.java:19:9:19:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:38:17:38:48 | combined | FlexibleConstructors.java:39:13:39:20 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:52:9:52:40 | ...=... | FlexibleConstructors.java:53:9:53:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:65:15:65:18 | temp | FlexibleConstructors.java:65:9:65:20 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:77:9:77:24 | ...=... | FlexibleConstructors.java:78:9:78:16 | super(...) | predecessor of explicit super() | +| FlexibleConstructors.java:91:13:91:41 | string | FlexibleConstructors.java:92:9:92:16 | super(...) | predecessor of explicit super() | diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql new file mode 100644 index 00000000000..2a291c5e82a --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql @@ -0,0 +1,11 @@ +import java + +from ControlFlowNode pred, ControlFlowNode supNode, SuperConstructorInvocationStmt sc +where + supNode.asStmt() = sc and + pred.getASuccessor() = supNode and + pred != supNode and + not pred.asStmt() instanceof BlockStmt and + exists(sc.getEnclosingCallable().getFile().getRelativePath()) and + sc.getLocation().getEndColumn() > sc.getLocation().getStartColumn() +select pred, sc, "predecessor of explicit super()" diff --git a/java/ql/test/library-tests/flexible-constructors/options b/java/ql/test/library-tests/flexible-constructors/options new file mode 100644 index 00000000000..db1dc01e53b --- /dev/null +++ b/java/ql/test/library-tests/flexible-constructors/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --release 25 --enable-preview diff --git a/java/ql/test/library-tests/guards/Guards.java b/java/ql/test/library-tests/guards/Guards.java index aca64d6f64d..689795038c6 100644 --- a/java/ql/test/library-tests/guards/Guards.java +++ b/java/ql/test/library-tests/guards/Guards.java @@ -26,7 +26,7 @@ public class Guards { } int sz = a != null ? a.length : 0; for (int i = 0; i < sz; i++) { - chk(); // $ guarded='a != null:true' guarded='i < sz:true' guarded='sz:not 0' guarded='...?...:...:not 0' guarded='a.length:not 0' guarded='a:not null' + chk(); // $ guarded='a != null:true' guarded='i < sz:true' guarded='sz:Lower bound 1' guarded='...?...:...:Lower bound 1' guarded='a.length:Lower bound 1' guarded='a:not null' int e = a[i]; if (e > 2) break; } @@ -136,11 +136,11 @@ public class Guards { found = true; } if (found) { - chk(); // $ guarded=found:true guarded='i < a.length:true' + chk(); // $ guarded=found:true guarded='i < a.length:true' guarded='a.length:Lower bound 1' } } if (found) { - chk(); // $ guarded=found:true guarded='i < a.length:false' + chk(); // $ guarded=found:true guarded='i < a.length:false' guarded='i:Lower bound 0' } } diff --git a/java/ql/test/library-tests/guards/GuardsInline.expected b/java/ql/test/library-tests/guards/GuardsInline.expected index a76e2629cde..b0bd3b04c62 100644 --- a/java/ql/test/library-tests/guards/GuardsInline.expected +++ b/java/ql/test/library-tests/guards/GuardsInline.expected @@ -8,12 +8,12 @@ | Guards.java:25:7:25:11 | chk(...) | b:false | | Guards.java:25:7:25:11 | chk(...) | g(1):true | | Guards.java:25:7:25:11 | chk(...) | g(2):false | -| Guards.java:29:7:29:11 | chk(...) | '...?...:...:not 0' | +| Guards.java:29:7:29:11 | chk(...) | '...?...:...:Lower bound 1' | | Guards.java:29:7:29:11 | chk(...) | 'a != null:true' | -| Guards.java:29:7:29:11 | chk(...) | 'a.length:not 0' | +| Guards.java:29:7:29:11 | chk(...) | 'a.length:Lower bound 1' | | Guards.java:29:7:29:11 | chk(...) | 'a:not null' | | Guards.java:29:7:29:11 | chk(...) | 'i < sz:true' | -| Guards.java:29:7:29:11 | chk(...) | 'sz:not 0' | +| Guards.java:29:7:29:11 | chk(...) | 'sz:Lower bound 1' | | Guards.java:39:9:39:13 | chk(...) | 's:bar' | | Guards.java:39:9:39:13 | chk(...) | 's:match "bar"' | | Guards.java:42:9:42:13 | chk(...) | 's:foo' | @@ -85,9 +85,11 @@ | Guards.java:127:7:127:11 | chk(...) | 'o != null:false' | | Guards.java:127:7:127:11 | chk(...) | 'o:null' | | Guards.java:127:7:127:11 | chk(...) | g(1):false | +| Guards.java:139:9:139:13 | chk(...) | 'a.length:Lower bound 1' | | Guards.java:139:9:139:13 | chk(...) | 'i < a.length:true' | | Guards.java:139:9:139:13 | chk(...) | found:true | | Guards.java:143:7:143:11 | chk(...) | 'i < a.length:false' | +| Guards.java:143:7:143:11 | chk(...) | 'i:Lower bound 0' | | Guards.java:143:7:143:11 | chk(...) | found:true | | Guards.java:173:7:173:11 | chk(...) | 's:not null' | | Guards.java:173:7:173:11 | chk(...) | testNotNull1(...):true | diff --git a/java/ql/test/library-tests/guards/guardspreconditions.expected b/java/ql/test/library-tests/guards/guardspreconditions.expected index 2d4597f0282..042fc2a05bf 100644 --- a/java/ql/test/library-tests/guards/guardspreconditions.expected +++ b/java/ql/test/library-tests/guards/guardspreconditions.expected @@ -1,35 +1,19 @@ | Preconditions.java:8:9:8:31 | assertTrue(...) | exception | Preconditions.java:7:10:7:14 | Exceptional Exit | | Preconditions.java:8:9:8:31 | assertTrue(...) | no exception | Preconditions.java:9:9:9:18 | ; | -| Preconditions.java:13:9:13:32 | assertTrue(...) | exception | Preconditions.java:12:10:12:14 | Exceptional Exit | -| Preconditions.java:13:9:13:32 | assertTrue(...) | no exception | Preconditions.java:14:9:14:18 | ; | | Preconditions.java:18:9:18:33 | assertFalse(...) | exception | Preconditions.java:17:10:17:14 | Exceptional Exit | | Preconditions.java:18:9:18:33 | assertFalse(...) | no exception | Preconditions.java:19:9:19:18 | ; | -| Preconditions.java:23:9:23:32 | assertFalse(...) | exception | Preconditions.java:22:10:22:14 | Exceptional Exit | -| Preconditions.java:23:9:23:32 | assertFalse(...) | no exception | Preconditions.java:24:9:24:18 | ; | | Preconditions.java:28:9:28:41 | assertTrue(...) | exception | Preconditions.java:27:10:27:14 | Exceptional Exit | | Preconditions.java:28:9:28:41 | assertTrue(...) | no exception | Preconditions.java:29:9:29:18 | ; | -| Preconditions.java:33:9:33:42 | assertTrue(...) | exception | Preconditions.java:32:10:32:14 | Exceptional Exit | -| Preconditions.java:33:9:33:42 | assertTrue(...) | no exception | Preconditions.java:34:9:34:18 | ; | | Preconditions.java:38:9:38:43 | assertFalse(...) | exception | Preconditions.java:37:10:37:14 | Exceptional Exit | | Preconditions.java:38:9:38:43 | assertFalse(...) | no exception | Preconditions.java:39:9:39:18 | ; | -| Preconditions.java:43:9:43:42 | assertFalse(...) | exception | Preconditions.java:42:10:42:14 | Exceptional Exit | -| Preconditions.java:43:9:43:42 | assertFalse(...) | no exception | Preconditions.java:44:9:44:18 | ; | | Preconditions.java:48:9:48:35 | assertTrue(...) | exception | Preconditions.java:47:10:47:14 | Exceptional Exit | | Preconditions.java:48:9:48:35 | assertTrue(...) | no exception | Preconditions.java:49:9:49:18 | ; | -| Preconditions.java:53:9:53:36 | assertTrue(...) | exception | Preconditions.java:52:10:52:15 | Exceptional Exit | -| Preconditions.java:53:9:53:36 | assertTrue(...) | no exception | Preconditions.java:54:9:54:18 | ; | | Preconditions.java:58:9:58:37 | assertFalse(...) | exception | Preconditions.java:57:10:57:15 | Exceptional Exit | | Preconditions.java:58:9:58:37 | assertFalse(...) | no exception | Preconditions.java:59:9:59:18 | ; | -| Preconditions.java:63:9:63:36 | assertFalse(...) | exception | Preconditions.java:62:10:62:15 | Exceptional Exit | -| Preconditions.java:63:9:63:36 | assertFalse(...) | no exception | Preconditions.java:64:9:64:18 | ; | | Preconditions.java:68:9:68:45 | assertTrue(...) | exception | Preconditions.java:67:10:67:15 | Exceptional Exit | | Preconditions.java:68:9:68:45 | assertTrue(...) | no exception | Preconditions.java:69:9:69:18 | ; | -| Preconditions.java:73:9:73:46 | assertTrue(...) | exception | Preconditions.java:72:10:72:15 | Exceptional Exit | -| Preconditions.java:73:9:73:46 | assertTrue(...) | no exception | Preconditions.java:74:9:74:18 | ; | | Preconditions.java:78:9:78:47 | assertFalse(...) | exception | Preconditions.java:77:10:77:15 | Exceptional Exit | | Preconditions.java:78:9:78:47 | assertFalse(...) | no exception | Preconditions.java:79:9:79:18 | ; | -| Preconditions.java:83:9:83:46 | assertFalse(...) | exception | Preconditions.java:82:10:82:15 | Exceptional Exit | -| Preconditions.java:83:9:83:46 | assertFalse(...) | no exception | Preconditions.java:84:9:84:18 | ; | | Preconditions.java:88:9:88:15 | t(...) | exception | Preconditions.java:87:10:87:15 | Exceptional Exit | | Preconditions.java:88:9:88:15 | t(...) | no exception | Preconditions.java:89:9:89:18 | ; | | Preconditions.java:93:9:93:16 | t(...) | exception | Preconditions.java:92:10:92:15 | Exceptional Exit | diff --git a/java/ql/test/library-tests/module-import-declarations/ImportedPackage.expected b/java/ql/test/library-tests/module-import-declarations/ImportedPackage.expected new file mode 100644 index 00000000000..64eef687011 --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/ImportedPackage.expected @@ -0,0 +1,61 @@ +| java.base | java.io | +| java.base | java.lang | +| java.base | java.lang.annotation | +| java.base | java.lang.classfile | +| java.base | java.lang.classfile.attribute | +| java.base | java.lang.classfile.constantpool | +| java.base | java.lang.classfile.instruction | +| java.base | java.lang.constant | +| java.base | java.lang.foreign | +| java.base | java.lang.invoke | +| java.base | java.lang.module | +| java.base | java.lang.ref | +| java.base | java.lang.reflect | +| java.base | java.lang.runtime | +| java.base | java.math | +| java.base | java.net | +| java.base | java.net.spi | +| java.base | java.nio | +| java.base | java.nio.channels | +| java.base | java.nio.channels.spi | +| java.base | java.nio.charset | +| java.base | java.nio.charset.spi | +| java.base | java.nio.file | +| java.base | java.nio.file.attribute | +| java.base | java.nio.file.spi | +| java.base | java.security | +| java.base | java.security.cert | +| java.base | java.security.interfaces | +| java.base | java.security.spec | +| java.base | java.text | +| java.base | java.text.spi | +| java.base | java.time | +| java.base | java.time.chrono | +| java.base | java.time.format | +| java.base | java.time.temporal | +| java.base | java.time.zone | +| java.base | java.util | +| java.base | java.util.concurrent | +| java.base | java.util.concurrent.atomic | +| java.base | java.util.concurrent.locks | +| java.base | java.util.function | +| java.base | java.util.jar | +| java.base | java.util.random | +| java.base | java.util.regex | +| java.base | java.util.spi | +| java.base | java.util.stream | +| java.base | java.util.zip | +| java.base | javax.crypto | +| java.base | javax.crypto.interfaces | +| java.base | javax.crypto.spec | +| java.base | javax.net | +| java.base | javax.net.ssl | +| java.base | javax.security.auth | +| java.base | javax.security.auth.callback | +| java.base | javax.security.auth.login | +| java.base | javax.security.auth.spi | +| java.base | javax.security.auth.x500 | +| java.base | javax.security.cert | +| java.base | jdk.internal.event | +| java.base | jdk.internal.javac | +| java.base | jdk.internal.vm.vector | diff --git a/java/ql/test/library-tests/module-import-declarations/ImportedPackage.ql b/java/ql/test/library-tests/module-import-declarations/ImportedPackage.ql new file mode 100644 index 00000000000..797cabfd546 --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/ImportedPackage.ql @@ -0,0 +1,4 @@ +import java + +from ModuleImportDeclaration mid +select mid.getModuleName(), mid.getAnImportedPackage().getName() diff --git a/java/ql/test/library-tests/module-import-declarations/ImportedType.expected b/java/ql/test/library-tests/module-import-declarations/ImportedType.expected new file mode 100644 index 00000000000..cf9064b6052 --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/ImportedType.expected @@ -0,0 +1,1513 @@ +| java.base | java.io.BufferedReader | +| java.base | java.io.BufferedWriter | +| java.base | java.io.Closeable | +| java.base | java.io.File | +| java.base | java.io.FileDescriptor | +| java.base | java.io.FileFilter | +| java.base | java.io.FileNotFoundException | +| java.base | java.io.FilenameFilter | +| java.base | java.io.FilterOutputStream | +| java.base | java.io.Flushable | +| java.base | java.io.IOException | +| java.base | java.io.InputStream | +| java.base | java.io.InvalidObjectException | +| java.base | java.io.ObjectStreamException | +| java.base | java.io.OutputStream | +| java.base | java.io.PrintStream | +| java.base | java.io.PrintWriter | +| java.base | java.io.Reader | +| java.base | java.io.Serializable | +| java.base | java.io.SyncFailedException | +| java.base | java.io.UnsupportedEncodingException | +| java.base | java.io.Writer | +| java.base | java.lang.A | +| java.base | java.lang.AbstractStringBuilder | +| java.base | java.lang.Appendable | +| java.base | java.lang.AutoCloseable | +| java.base | java.lang.Boolean | +| java.base | java.lang.CharSequence | +| java.base | java.lang.Character | +| java.base | java.lang.Class | +| java.base | java.lang.Class<> | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.Class | +| java.base | java.lang.ClassFormatError | +| java.base | java.lang.ClassLoader | +| java.base | java.lang.ClassNotFoundException | +| java.base | java.lang.CloneNotSupportedException | +| java.base | java.lang.Cloneable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable<> | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable> | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable> | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Comparable | +| java.base | java.lang.Deprecated | +| java.base | java.lang.Double | +| java.base | java.lang.E | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc<> | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum$EnumDesc | +| java.base | java.lang.Enum<> | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Enum | +| java.base | java.lang.Error | +| java.base | java.lang.Exception | +| java.base | java.lang.Float | +| java.base | java.lang.FunctionalInterface | +| java.base | java.lang.IllegalAccessException | +| java.base | java.lang.IllegalArgumentException | +| java.base | java.lang.IllegalStateException | +| java.base | java.lang.InstantiationException | +| java.base | java.lang.Integer | +| java.base | java.lang.InterruptedException | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable<> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable> | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.Iterable | +| java.base | java.lang.LinkageError | +| java.base | java.lang.Long | +| java.base | java.lang.Module | +| java.base | java.lang.ModuleLayer | +| java.base | java.lang.ModuleLayer$Controller | +| java.base | java.lang.NamedPackage | +| java.base | java.lang.NoSuchFieldException | +| java.base | java.lang.NoSuchMethodException | +| java.base | java.lang.Number | +| java.base | java.lang.NumberFormatException | +| java.base | java.lang.Object | +| java.base | java.lang.Package | +| java.base | java.lang.Process | +| java.base | java.lang.ProcessHandle | +| java.base | java.lang.ProcessHandle$Info | +| java.base | java.lang.R | +| java.base | java.lang.Readable | +| java.base | java.lang.Record | +| java.base | java.lang.ReflectiveOperationException | +| java.base | java.lang.Runnable | +| java.base | java.lang.Runtime | +| java.base | java.lang.Runtime$Version | +| java.base | java.lang.RuntimeException | +| java.base | java.lang.SafeVarargs | +| java.base | java.lang.SecurityException | +| java.base | java.lang.StackTraceElement | +| java.base | java.lang.String | +| java.base | java.lang.StringBuffer | +| java.base | java.lang.StringBuilder | +| java.base | java.lang.T | +| java.base | java.lang.Thread | +| java.base | java.lang.Thread$Builder | +| java.base | java.lang.Thread$Builder$OfPlatform | +| java.base | java.lang.Thread$Builder$OfVirtual | +| java.base | java.lang.Thread$State | +| java.base | java.lang.Thread$UncaughtExceptionHandler | +| java.base | java.lang.ThreadBuilders | +| java.base | java.lang.ThreadBuilders$BaseThreadBuilder | +| java.base | java.lang.ThreadBuilders$PlatformThreadBuilder | +| java.base | java.lang.ThreadBuilders$VirtualThreadBuilder | +| java.base | java.lang.ThreadGroup | +| java.base | java.lang.Throwable | +| java.base | java.lang.TypeNotPresentException | +| java.base | java.lang.U | +| java.base | java.lang.Void | +| java.base | java.lang.annotation.Annotation | +| java.base | java.lang.annotation.Documented | +| java.base | java.lang.annotation.ElementType | +| java.base | java.lang.annotation.Retention | +| java.base | java.lang.annotation.RetentionPolicy | +| java.base | java.lang.annotation.Target | +| java.base | java.lang.constant.AsTypeMethodHandleDesc | +| java.base | java.lang.constant.ClassDesc | +| java.base | java.lang.constant.Constable | +| java.base | java.lang.constant.ConstantDesc | +| java.base | java.lang.constant.DirectMethodHandleDesc | +| java.base | java.lang.constant.DirectMethodHandleDesc$Kind | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc<> | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc> | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.DynamicConstantDesc | +| java.base | java.lang.constant.MethodHandleDesc | +| java.base | java.lang.constant.MethodTypeDesc | +| java.base | java.lang.constant.T | +| java.base | java.lang.foreign.AddressLayout | +| java.base | java.lang.foreign.Arena | +| java.base | java.lang.foreign.GroupLayout | +| java.base | java.lang.foreign.MemoryLayout | +| java.base | java.lang.foreign.MemoryLayout$PathElement | +| java.base | java.lang.foreign.MemorySegment | +| java.base | java.lang.foreign.MemorySegment$Scope | +| java.base | java.lang.foreign.PaddingLayout | +| java.base | java.lang.foreign.SegmentAllocator | +| java.base | java.lang.foreign.SequenceLayout | +| java.base | java.lang.foreign.StructLayout | +| java.base | java.lang.foreign.UnionLayout | +| java.base | java.lang.foreign.ValueLayout | +| java.base | java.lang.foreign.ValueLayout$OfBoolean | +| java.base | java.lang.foreign.ValueLayout$OfByte | +| java.base | java.lang.foreign.ValueLayout$OfChar | +| java.base | java.lang.foreign.ValueLayout$OfDouble | +| java.base | java.lang.foreign.ValueLayout$OfFloat | +| java.base | java.lang.foreign.ValueLayout$OfInt | +| java.base | java.lang.foreign.ValueLayout$OfLong | +| java.base | java.lang.foreign.ValueLayout$OfShort | +| java.base | java.lang.invoke.BoundMethodHandle | +| java.base | java.lang.invoke.DelegatingMethodHandle | +| java.base | java.lang.invoke.DirectMethodHandle | +| java.base | java.lang.invoke.DirectMethodHandle$Accessor | +| java.base | java.lang.invoke.DirectMethodHandle$Constructor | +| java.base | java.lang.invoke.DirectMethodHandle$Interface | +| java.base | java.lang.invoke.DirectMethodHandle$Special | +| java.base | java.lang.invoke.DirectMethodHandle$StaticAccessor | +| java.base | java.lang.invoke.F | +| java.base | java.lang.invoke.IndirectVarHandle | +| java.base | java.lang.invoke.LambdaForm | +| java.base | java.lang.invoke.LazyInitializingVarHandle | +| java.base | java.lang.invoke.M | +| java.base | java.lang.invoke.MethodHandle | +| java.base | java.lang.invoke.MethodHandleImpl | +| java.base | java.lang.invoke.MethodHandleImpl$AsVarargsCollector | +| java.base | java.lang.invoke.MethodHandleImpl$CountingWrapper | +| java.base | java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle | +| java.base | java.lang.invoke.MethodHandleImpl$WrappedMember | +| java.base | java.lang.invoke.MethodHandleInfo | +| java.base | java.lang.invoke.MethodHandles | +| java.base | java.lang.invoke.MethodHandles$Lookup | +| java.base | java.lang.invoke.MethodHandles$Lookup$ClassOption | +| java.base | java.lang.invoke.MethodType | +| java.base | java.lang.invoke.NativeMethodHandle | +| java.base | java.lang.invoke.SegmentVarHandle | +| java.base | java.lang.invoke.T | +| java.base | java.lang.invoke.TypeDescriptor | +| java.base | java.lang.invoke.TypeDescriptor$OfField | +| java.base | java.lang.invoke.TypeDescriptor$OfField<> | +| java.base | java.lang.invoke.TypeDescriptor$OfField> | +| java.base | java.lang.invoke.TypeDescriptor$OfField | +| java.base | java.lang.invoke.TypeDescriptor$OfField | +| java.base | java.lang.invoke.TypeDescriptor$OfMethod | +| java.base | java.lang.invoke.TypeDescriptor$OfMethod<> | +| java.base | java.lang.invoke.TypeDescriptor$OfMethod,MethodType> | +| java.base | java.lang.invoke.TypeDescriptor$OfMethod | +| java.base | java.lang.invoke.VarForm | +| java.base | java.lang.invoke.VarHandle | +| java.base | java.lang.invoke.VarHandle$AccessMode | +| java.base | java.lang.invoke.VarHandle$VarHandleDesc | +| java.base | java.lang.invoke.VarHandleBooleans | +| java.base | java.lang.invoke.VarHandleBooleans$Array | +| java.base | java.lang.invoke.VarHandleBooleans$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleBooleans$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleBooleans$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleBooleans$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleByteArrayAsChars | +| java.base | java.lang.invoke.VarHandleByteArrayAsChars$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsChars$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsChars$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsDoubles | +| java.base | java.lang.invoke.VarHandleByteArrayAsDoubles$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsDoubles$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsFloats | +| java.base | java.lang.invoke.VarHandleByteArrayAsFloats$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsFloats$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsFloats$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsInts | +| java.base | java.lang.invoke.VarHandleByteArrayAsInts$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsInts$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsInts$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsLongs | +| java.base | java.lang.invoke.VarHandleByteArrayAsLongs$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsLongs$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsLongs$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsShorts | +| java.base | java.lang.invoke.VarHandleByteArrayAsShorts$ArrayHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsShorts$ByteArrayViewVarHandle | +| java.base | java.lang.invoke.VarHandleByteArrayAsShorts$ByteBufferHandle | +| java.base | java.lang.invoke.VarHandleByteArrayBase | +| java.base | java.lang.invoke.VarHandleBytes | +| java.base | java.lang.invoke.VarHandleBytes$Array | +| java.base | java.lang.invoke.VarHandleBytes$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleBytes$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleBytes$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleBytes$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleChars | +| java.base | java.lang.invoke.VarHandleChars$Array | +| java.base | java.lang.invoke.VarHandleChars$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleChars$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleChars$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleChars$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleDoubles | +| java.base | java.lang.invoke.VarHandleDoubles$Array | +| java.base | java.lang.invoke.VarHandleDoubles$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleDoubles$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleDoubles$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleDoubles$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleFloats | +| java.base | java.lang.invoke.VarHandleFloats$Array | +| java.base | java.lang.invoke.VarHandleFloats$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleFloats$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleFloats$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleFloats$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleInts | +| java.base | java.lang.invoke.VarHandleInts$Array | +| java.base | java.lang.invoke.VarHandleInts$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleInts$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleInts$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleInts$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleLongs | +| java.base | java.lang.invoke.VarHandleLongs$Array | +| java.base | java.lang.invoke.VarHandleLongs$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleLongs$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleLongs$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleLongs$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleReferences | +| java.base | java.lang.invoke.VarHandleReferences$Array | +| java.base | java.lang.invoke.VarHandleReferences$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleReferences$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleReferences$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleReferences$FieldStaticReadWrite | +| java.base | java.lang.invoke.VarHandleShorts | +| java.base | java.lang.invoke.VarHandleShorts$Array | +| java.base | java.lang.invoke.VarHandleShorts$FieldInstanceReadOnly | +| java.base | java.lang.invoke.VarHandleShorts$FieldInstanceReadWrite | +| java.base | java.lang.invoke.VarHandleShorts$FieldStaticReadOnly | +| java.base | java.lang.invoke.VarHandleShorts$FieldStaticReadWrite | +| java.base | java.lang.module.Configuration | +| java.base | java.lang.module.ModuleDescriptor | +| java.base | java.lang.module.ModuleDescriptor$Builder | +| java.base | java.lang.module.ModuleDescriptor$Exports | +| java.base | java.lang.module.ModuleDescriptor$Exports$Modifier | +| java.base | java.lang.module.ModuleDescriptor$Modifier | +| java.base | java.lang.module.ModuleDescriptor$Opens | +| java.base | java.lang.module.ModuleDescriptor$Opens$Modifier | +| java.base | java.lang.module.ModuleDescriptor$Provides | +| java.base | java.lang.module.ModuleDescriptor$Requires | +| java.base | java.lang.module.ModuleDescriptor$Requires$Modifier | +| java.base | java.lang.module.ModuleDescriptor$Version | +| java.base | java.lang.module.ModuleFinder | +| java.base | java.lang.module.ModuleReader | +| java.base | java.lang.module.ModuleReference | +| java.base | java.lang.module.ResolvedModule | +| java.base | java.lang.ref.Cleaner | +| java.base | java.lang.ref.Cleaner$Cleanable | +| java.base | java.lang.reflect.AccessFlag | +| java.base | java.lang.reflect.AccessFlag$Location | +| java.base | java.lang.reflect.AccessibleObject | +| java.base | java.lang.reflect.AnnotatedElement | +| java.base | java.lang.reflect.AnnotatedType | +| java.base | java.lang.reflect.ClassFileFormatVersion | +| java.base | java.lang.reflect.Constructor | +| java.base | java.lang.reflect.Constructor<> | +| java.base | java.lang.reflect.Constructor | +| java.base | java.lang.reflect.Constructor | +| java.base | java.lang.reflect.D | +| java.base | java.lang.reflect.Executable | +| java.base | java.lang.reflect.Field | +| java.base | java.lang.reflect.GenericDeclaration | +| java.base | java.lang.reflect.InvocationTargetException | +| java.base | java.lang.reflect.Member | +| java.base | java.lang.reflect.Method | +| java.base | java.lang.reflect.Parameter | +| java.base | java.lang.reflect.RecordComponent | +| java.base | java.lang.reflect.T | +| java.base | java.lang.reflect.Type | +| java.base | java.lang.reflect.TypeVariable | +| java.base | java.lang.reflect.TypeVariable<> | +| java.base | java.lang.reflect.TypeVariable | +| java.base | java.lang.reflect.TypeVariable | +| java.base | java.lang.reflect.TypeVariable | +| java.base | java.lang.reflect.TypeVariable | +| java.base | java.math.BigInteger | +| java.base | java.net.ContentHandler | +| java.base | java.net.ContentHandlerFactory | +| java.base | java.net.FileNameMap | +| java.base | java.net.Inet4Address | +| java.base | java.net.Inet6Address | +| java.base | java.net.InetAddress | +| java.base | java.net.InterfaceAddress | +| java.base | java.net.MalformedURLException | +| java.base | java.net.NetworkInterface | +| java.base | java.net.Proxy | +| java.base | java.net.Proxy$Type | +| java.base | java.net.SocketAddress | +| java.base | java.net.SocketException | +| java.base | java.net.URI | +| java.base | java.net.URISyntaxException | +| java.base | java.net.URL | +| java.base | java.net.URLConnection | +| java.base | java.net.URLStreamHandler | +| java.base | java.net.URLStreamHandlerFactory | +| java.base | java.net.UnknownHostException | +| java.base | java.nio.Buffer | +| java.base | java.nio.ByteBuffer | +| java.base | java.nio.ByteBufferAsCharBufferB | +| java.base | java.nio.ByteBufferAsCharBufferL | +| java.base | java.nio.ByteBufferAsCharBufferRB | +| java.base | java.nio.ByteBufferAsCharBufferRL | +| java.base | java.nio.ByteBufferAsDoubleBufferB | +| java.base | java.nio.ByteBufferAsDoubleBufferL | +| java.base | java.nio.ByteBufferAsDoubleBufferRB | +| java.base | java.nio.ByteBufferAsDoubleBufferRL | +| java.base | java.nio.ByteBufferAsFloatBufferB | +| java.base | java.nio.ByteBufferAsFloatBufferL | +| java.base | java.nio.ByteBufferAsFloatBufferRB | +| java.base | java.nio.ByteBufferAsFloatBufferRL | +| java.base | java.nio.ByteBufferAsIntBufferB | +| java.base | java.nio.ByteBufferAsIntBufferL | +| java.base | java.nio.ByteBufferAsIntBufferRB | +| java.base | java.nio.ByteBufferAsIntBufferRL | +| java.base | java.nio.ByteBufferAsLongBufferB | +| java.base | java.nio.ByteBufferAsLongBufferL | +| java.base | java.nio.ByteBufferAsLongBufferRB | +| java.base | java.nio.ByteBufferAsLongBufferRL | +| java.base | java.nio.ByteBufferAsShortBufferB | +| java.base | java.nio.ByteBufferAsShortBufferL | +| java.base | java.nio.ByteBufferAsShortBufferRB | +| java.base | java.nio.ByteBufferAsShortBufferRL | +| java.base | java.nio.ByteOrder | +| java.base | java.nio.CharBuffer | +| java.base | java.nio.DirectByteBuffer | +| java.base | java.nio.DirectByteBufferR | +| java.base | java.nio.DirectCharBufferRS | +| java.base | java.nio.DirectCharBufferRU | +| java.base | java.nio.DirectCharBufferS | +| java.base | java.nio.DirectCharBufferU | +| java.base | java.nio.DirectDoubleBufferRS | +| java.base | java.nio.DirectDoubleBufferRU | +| java.base | java.nio.DirectDoubleBufferS | +| java.base | java.nio.DirectDoubleBufferU | +| java.base | java.nio.DirectFloatBufferRS | +| java.base | java.nio.DirectFloatBufferRU | +| java.base | java.nio.DirectFloatBufferS | +| java.base | java.nio.DirectFloatBufferU | +| java.base | java.nio.DirectIntBufferRS | +| java.base | java.nio.DirectIntBufferRU | +| java.base | java.nio.DirectIntBufferS | +| java.base | java.nio.DirectIntBufferU | +| java.base | java.nio.DirectLongBufferRS | +| java.base | java.nio.DirectLongBufferRU | +| java.base | java.nio.DirectLongBufferS | +| java.base | java.nio.DirectLongBufferU | +| java.base | java.nio.DirectShortBufferRS | +| java.base | java.nio.DirectShortBufferRU | +| java.base | java.nio.DirectShortBufferS | +| java.base | java.nio.DirectShortBufferU | +| java.base | java.nio.DoubleBuffer | +| java.base | java.nio.FloatBuffer | +| java.base | java.nio.HeapByteBuffer | +| java.base | java.nio.HeapByteBufferR | +| java.base | java.nio.HeapCharBuffer | +| java.base | java.nio.HeapCharBufferR | +| java.base | java.nio.HeapDoubleBuffer | +| java.base | java.nio.HeapDoubleBufferR | +| java.base | java.nio.HeapFloatBuffer | +| java.base | java.nio.HeapFloatBufferR | +| java.base | java.nio.HeapIntBuffer | +| java.base | java.nio.HeapIntBufferR | +| java.base | java.nio.HeapLongBuffer | +| java.base | java.nio.HeapLongBufferR | +| java.base | java.nio.HeapShortBuffer | +| java.base | java.nio.HeapShortBufferR | +| java.base | java.nio.IntBuffer | +| java.base | java.nio.LongBuffer | +| java.base | java.nio.MappedByteBuffer | +| java.base | java.nio.ShortBuffer | +| java.base | java.nio.StringCharBuffer | +| java.base | java.nio.channels.A | +| java.base | java.nio.channels.AsynchronousChannel | +| java.base | java.nio.channels.AsynchronousCloseException | +| java.base | java.nio.channels.AsynchronousFileChannel | +| java.base | java.nio.channels.ByteChannel | +| java.base | java.nio.channels.Channel | +| java.base | java.nio.channels.ClosedChannelException | +| java.base | java.nio.channels.CompletionHandler | +| java.base | java.nio.channels.CompletionHandler<> | +| java.base | java.nio.channels.CompletionHandler | +| java.base | java.nio.channels.CompletionHandler | +| java.base | java.nio.channels.FileChannel | +| java.base | java.nio.channels.FileChannel$MapMode | +| java.base | java.nio.channels.FileLock | +| java.base | java.nio.channels.GatheringByteChannel | +| java.base | java.nio.channels.InterruptibleChannel | +| java.base | java.nio.channels.ReadableByteChannel | +| java.base | java.nio.channels.ScatteringByteChannel | +| java.base | java.nio.channels.SeekableByteChannel | +| java.base | java.nio.channels.V | +| java.base | java.nio.channels.WritableByteChannel | +| java.base | java.nio.channels.spi.AbstractInterruptibleChannel | +| java.base | java.nio.charset.CharacterCodingException | +| java.base | java.nio.charset.Charset | +| java.base | java.nio.charset.CharsetDecoder | +| java.base | java.nio.charset.CharsetEncoder | +| java.base | java.nio.charset.CoderResult | +| java.base | java.nio.charset.CodingErrorAction | +| java.base | java.nio.file.AccessMode | +| java.base | java.nio.file.CopyOption | +| java.base | java.nio.file.DirectoryStream | +| java.base | java.nio.file.DirectoryStream$Filter | +| java.base | java.nio.file.DirectoryStream$Filter | +| java.base | java.nio.file.DirectoryStream<> | +| java.base | java.nio.file.DirectoryStream | +| java.base | java.nio.file.FileStore | +| java.base | java.nio.file.FileSystem | +| java.base | java.nio.file.LinkOption | +| java.base | java.nio.file.OpenOption | +| java.base | java.nio.file.Path | +| java.base | java.nio.file.PathMatcher | +| java.base | java.nio.file.T | +| java.base | java.nio.file.V | +| java.base | java.nio.file.WatchEvent | +| java.base | java.nio.file.WatchEvent$Kind | +| java.base | java.nio.file.WatchEvent$Kind<> | +| java.base | java.nio.file.WatchEvent$Kind | +| java.base | java.nio.file.WatchEvent$Kind | +| java.base | java.nio.file.WatchEvent$Modifier | +| java.base | java.nio.file.WatchEvent | +| java.base | java.nio.file.WatchKey | +| java.base | java.nio.file.WatchService | +| java.base | java.nio.file.Watchable | +| java.base | java.nio.file.attribute.AttributeView | +| java.base | java.nio.file.attribute.BasicFileAttributes | +| java.base | java.nio.file.attribute.FileAttribute | +| java.base | java.nio.file.attribute.FileAttribute | +| java.base | java.nio.file.attribute.FileAttributeView | +| java.base | java.nio.file.attribute.FileStoreAttributeView | +| java.base | java.nio.file.attribute.FileTime | +| java.base | java.nio.file.attribute.GroupPrincipal | +| java.base | java.nio.file.attribute.T | +| java.base | java.nio.file.attribute.UserPrincipal | +| java.base | java.nio.file.attribute.UserPrincipalLookupService | +| java.base | java.nio.file.spi.A | +| java.base | java.nio.file.spi.FileSystemProvider | +| java.base | java.nio.file.spi.V | +| java.base | java.security.AccessControlContext | +| java.base | java.security.AccessControlException | +| java.base | java.security.AlgorithmParameters | +| java.base | java.security.AlgorithmParametersSpi | +| java.base | java.security.AsymmetricKey | +| java.base | java.security.CodeSigner | +| java.base | java.security.CodeSource | +| java.base | java.security.DEREncodable | +| java.base | java.security.DomainCombiner | +| java.base | java.security.GeneralSecurityException | +| java.base | java.security.Guard | +| java.base | java.security.InvalidAlgorithmParameterException | +| java.base | java.security.InvalidKeyException | +| java.base | java.security.Key | +| java.base | java.security.KeyException | +| java.base | java.security.KeyPair | +| java.base | java.security.NoSuchAlgorithmException | +| java.base | java.security.NoSuchProviderException | +| java.base | java.security.PEMRecord | +| java.base | java.security.Permission | +| java.base | java.security.PermissionCollection | +| java.base | java.security.Principal | +| java.base | java.security.PrivateKey | +| java.base | java.security.PrivilegedAction | +| java.base | java.security.PrivilegedAction<> | +| java.base | java.security.PrivilegedAction | +| java.base | java.security.PrivilegedActionException | +| java.base | java.security.PrivilegedExceptionAction | +| java.base | java.security.PrivilegedExceptionAction<> | +| java.base | java.security.PrivilegedExceptionAction | +| java.base | java.security.ProtectionDomain | +| java.base | java.security.Provider | +| java.base | java.security.Provider$Service | +| java.base | java.security.PublicKey | +| java.base | java.security.SecureRandom | +| java.base | java.security.SecureRandomParameters | +| java.base | java.security.SecureRandomSpi | +| java.base | java.security.SignatureException | +| java.base | java.security.T | +| java.base | java.security.Timestamp | +| java.base | java.security.cert.CRL | +| java.base | java.security.cert.CRLException | +| java.base | java.security.cert.CRLReason | +| java.base | java.security.cert.CertPath | +| java.base | java.security.cert.Certificate | +| java.base | java.security.cert.CertificateEncodingException | +| java.base | java.security.cert.CertificateException | +| java.base | java.security.cert.CertificateExpiredException | +| java.base | java.security.cert.CertificateNotYetValidException | +| java.base | java.security.cert.CertificateParsingException | +| java.base | java.security.cert.X509CRL | +| java.base | java.security.cert.X509CRLEntry | +| java.base | java.security.cert.X509Certificate | +| java.base | java.security.cert.X509Extension | +| java.base | java.security.spec.AlgorithmParameterSpec | +| java.base | java.security.spec.EncodedKeySpec | +| java.base | java.security.spec.InvalidKeySpecException | +| java.base | java.security.spec.InvalidParameterSpecException | +| java.base | java.security.spec.KeySpec | +| java.base | java.security.spec.PKCS8EncodedKeySpec | +| java.base | java.security.spec.X509EncodedKeySpec | +| java.base | java.text.AttributedCharacterIterator | +| java.base | java.text.AttributedCharacterIterator$Attribute | +| java.base | java.text.CharacterIterator | +| java.base | java.text.FieldPosition | +| java.base | java.text.Format | +| java.base | java.text.Format$Field | +| java.base | java.text.ParseException | +| java.base | java.text.ParsePosition | +| java.base | java.time.Clock | +| java.base | java.time.DayOfWeek | +| java.base | java.time.Duration | +| java.base | java.time.Instant | +| java.base | java.time.InstantSource | +| java.base | java.time.LocalDate | +| java.base | java.time.LocalDateTime | +| java.base | java.time.LocalTime | +| java.base | java.time.Month | +| java.base | java.time.OffsetDateTime | +| java.base | java.time.OffsetTime | +| java.base | java.time.Period | +| java.base | java.time.R | +| java.base | java.time.ZoneId | +| java.base | java.time.ZoneOffset | +| java.base | java.time.ZoneRegion | +| java.base | java.time.ZonedDateTime | +| java.base | java.time.chrono.AbstractChronology | +| java.base | java.time.chrono.ChronoLocalDate | +| java.base | java.time.chrono.ChronoLocalDateTime | +| java.base | java.time.chrono.ChronoLocalDateTime<> | +| java.base | java.time.chrono.ChronoLocalDateTime | +| java.base | java.time.chrono.ChronoLocalDateTime | +| java.base | java.time.chrono.ChronoLocalDateTime | +| java.base | java.time.chrono.ChronoLocalDateTime | +| java.base | java.time.chrono.ChronoPeriod | +| java.base | java.time.chrono.ChronoZonedDateTime | +| java.base | java.time.chrono.ChronoZonedDateTime<> | +| java.base | java.time.chrono.ChronoZonedDateTime | +| java.base | java.time.chrono.ChronoZonedDateTime | +| java.base | java.time.chrono.ChronoZonedDateTime | +| java.base | java.time.chrono.ChronoZonedDateTime | +| java.base | java.time.chrono.Chronology | +| java.base | java.time.chrono.D | +| java.base | java.time.chrono.Era | +| java.base | java.time.chrono.IsoChronology | +| java.base | java.time.chrono.IsoEra | +| java.base | java.time.chrono.R | +| java.base | java.time.format.DateTimeFormatter | +| java.base | java.time.format.DecimalStyle | +| java.base | java.time.format.FormatStyle | +| java.base | java.time.format.ResolverStyle | +| java.base | java.time.format.T | +| java.base | java.time.format.TextStyle | +| java.base | java.time.temporal.ChronoField | +| java.base | java.time.temporal.ChronoUnit | +| java.base | java.time.temporal.R | +| java.base | java.time.temporal.Temporal | +| java.base | java.time.temporal.TemporalAccessor | +| java.base | java.time.temporal.TemporalAdjuster | +| java.base | java.time.temporal.TemporalAmount | +| java.base | java.time.temporal.TemporalField | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalQuery<> | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalQuery | +| java.base | java.time.temporal.TemporalUnit | +| java.base | java.time.temporal.ValueRange | +| java.base | java.time.zone.ZoneOffsetTransition | +| java.base | java.time.zone.ZoneOffsetTransitionRule | +| java.base | java.time.zone.ZoneOffsetTransitionRule$TimeDefinition | +| java.base | java.time.zone.ZoneRules | +| java.base | java.util.Collection | +| java.base | java.util.Collection<> | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection> | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Collection | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator<> | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator> | +| java.base | java.util.Comparator> | +| java.base | java.util.Comparator> | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Comparator | +| java.base | java.util.Date | +| java.base | java.util.Dictionary | +| java.base | java.util.Dictionary | +| java.base | java.util.Dictionary | +| java.base | java.util.DoubleSummaryStatistics | +| java.base | java.util.E | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration<> | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Enumeration | +| java.base | java.util.Hashtable | +| java.base | java.util.Hashtable | +| java.base | java.util.IntSummaryStatistics | +| java.base | java.util.InvalidPropertiesFormatException | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator<> | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.Iterator | +| java.base | java.util.K | +| java.base | java.util.List | +| java.base | java.util.List<> | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List> | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List> | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List> | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.List | +| java.base | java.util.ListIterator | +| java.base | java.util.ListIterator<> | +| java.base | java.util.ListIterator | +| java.base | java.util.Locale | +| java.base | java.util.Locale$Category | +| java.base | java.util.Locale$FilteringMode | +| java.base | java.util.Locale$IsoCountryCode | +| java.base | java.util.Locale$IsoCountryCode$1 | +| java.base | java.util.Locale$IsoCountryCode$2 | +| java.base | java.util.Locale$IsoCountryCode$3 | +| java.base | java.util.Locale$LanguageRange | +| java.base | java.util.LongSummaryStatistics | +| java.base | java.util.Map | +| java.base | java.util.Map$Entry | +| java.base | java.util.Map$Entry<> | +| java.base | java.util.Map$Entry | +| java.base | java.util.Map$Entry | +| java.base | java.util.Map$Entry | +| java.base | java.util.Map<> | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map> | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.Map | +| java.base | java.util.MissingResourceException | +| java.base | java.util.Optional | +| java.base | java.util.Optional<> | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional> | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.Optional | +| java.base | java.util.OptionalDouble | +| java.base | java.util.OptionalInt | +| java.base | java.util.OptionalLong | +| java.base | java.util.PrimitiveIterator | +| java.base | java.util.PrimitiveIterator$OfDouble | +| java.base | java.util.PrimitiveIterator$OfInt | +| java.base | java.util.PrimitiveIterator$OfLong | +| java.base | java.util.PrimitiveIterator | +| java.base | java.util.PrimitiveIterator | +| java.base | java.util.PrimitiveIterator | +| java.base | java.util.Properties | +| java.base | java.util.Random | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection<> | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection> | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection> | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection> | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection> | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedCollection | +| java.base | java.util.SequencedMap | +| java.base | java.util.SequencedMap<> | +| java.base | java.util.SequencedMap | +| java.base | java.util.SequencedMap | +| java.base | java.util.SequencedSet | +| java.base | java.util.SequencedSet<> | +| java.base | java.util.SequencedSet> | +| java.base | java.util.SequencedSet | +| java.base | java.util.Set | +| java.base | java.util.Set<> | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set> | +| java.base | java.util.Set> | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.Set | +| java.base | java.util.SortedMap | +| java.base | java.util.SortedMap<> | +| java.base | java.util.SortedMap | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator$OfDouble | +| java.base | java.util.Spliterator$OfInt | +| java.base | java.util.Spliterator$OfLong | +| java.base | java.util.Spliterator$OfPrimitive | +| java.base | java.util.Spliterator$OfPrimitive<> | +| java.base | java.util.Spliterator$OfPrimitive | +| java.base | java.util.Spliterator$OfPrimitive | +| java.base | java.util.Spliterator$OfPrimitive | +| java.base | java.util.Spliterator<> | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.Spliterator | +| java.base | java.util.T | +| java.base | java.util.T_CONS | +| java.base | java.util.T_SPLITR | +| java.base | java.util.U | +| java.base | java.util.V | +| java.base | java.util.X | +| java.base | java.util.concurrent.Callable | +| java.base | java.util.concurrent.Callable<> | +| java.base | java.util.concurrent.Callable | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture<> | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletableFuture | +| java.base | java.util.concurrent.CompletionException | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage<> | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.CompletionStage | +| java.base | java.util.concurrent.ExecutionException | +| java.base | java.util.concurrent.Executor | +| java.base | java.util.concurrent.ExecutorService | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future$State | +| java.base | java.util.concurrent.Future<> | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.Future | +| java.base | java.util.concurrent.T | +| java.base | java.util.concurrent.ThreadFactory | +| java.base | java.util.concurrent.TimeUnit | +| java.base | java.util.concurrent.TimeoutException | +| java.base | java.util.concurrent.U | +| java.base | java.util.concurrent.V | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer<> | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer> | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer> | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer | +| java.base | java.util.function.BiConsumer> | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction<> | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction,RuntimeException> | +| java.base | java.util.function.BiFunction,V> | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BiFunction | +| java.base | java.util.function.BinaryOperator | +| java.base | java.util.function.BinaryOperator<> | +| java.base | java.util.function.BinaryOperator | +| java.base | java.util.function.BinaryOperator | +| java.base | java.util.function.BinaryOperator | +| java.base | java.util.function.BinaryOperator | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer<> | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.Consumer | +| java.base | java.util.function.DoubleBinaryOperator | +| java.base | java.util.function.DoubleConsumer | +| java.base | java.util.function.DoubleFunction | +| java.base | java.util.function.DoubleFunction<> | +| java.base | java.util.function.DoubleFunction | +| java.base | java.util.function.DoubleFunction | +| java.base | java.util.function.DoublePredicate | +| java.base | java.util.function.DoubleSupplier | +| java.base | java.util.function.DoubleToIntFunction | +| java.base | java.util.function.DoubleToLongFunction | +| java.base | java.util.function.DoubleUnaryOperator | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function<> | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function> | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function> | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function> | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function> | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.Function | +| java.base | java.util.function.IntBinaryOperator | +| java.base | java.util.function.IntConsumer | +| java.base | java.util.function.IntFunction | +| java.base | java.util.function.IntFunction<> | +| java.base | java.util.function.IntFunction | +| java.base | java.util.function.IntFunction | +| java.base | java.util.function.IntFunction | +| java.base | java.util.function.IntFunction | +| java.base | java.util.function.IntPredicate | +| java.base | java.util.function.IntSupplier | +| java.base | java.util.function.IntToDoubleFunction | +| java.base | java.util.function.IntToLongFunction | +| java.base | java.util.function.IntUnaryOperator | +| java.base | java.util.function.LongBinaryOperator | +| java.base | java.util.function.LongConsumer | +| java.base | java.util.function.LongFunction | +| java.base | java.util.function.LongFunction<> | +| java.base | java.util.function.LongFunction | +| java.base | java.util.function.LongFunction | +| java.base | java.util.function.LongPredicate | +| java.base | java.util.function.LongSupplier | +| java.base | java.util.function.LongToDoubleFunction | +| java.base | java.util.function.LongToIntFunction | +| java.base | java.util.function.LongUnaryOperator | +| java.base | java.util.function.ObjDoubleConsumer | +| java.base | java.util.function.ObjDoubleConsumer<> | +| java.base | java.util.function.ObjDoubleConsumer | +| java.base | java.util.function.ObjIntConsumer | +| java.base | java.util.function.ObjIntConsumer<> | +| java.base | java.util.function.ObjIntConsumer | +| java.base | java.util.function.ObjLongConsumer | +| java.base | java.util.function.ObjLongConsumer<> | +| java.base | java.util.function.ObjLongConsumer | +| java.base | java.util.function.Predicate | +| java.base | java.util.function.Predicate<> | +| java.base | java.util.function.Predicate | +| java.base | java.util.function.Predicate | +| java.base | java.util.function.Predicate | +| java.base | java.util.function.R | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.Supplier<> | +| java.base | java.util.function.Supplier> | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.Supplier> | +| java.base | java.util.function.Supplier | +| java.base | java.util.function.T | +| java.base | java.util.function.ToDoubleFunction | +| java.base | java.util.function.ToDoubleFunction<> | +| java.base | java.util.function.ToDoubleFunction | +| java.base | java.util.function.ToIntFunction | +| java.base | java.util.function.ToIntFunction<> | +| java.base | java.util.function.ToIntFunction | +| java.base | java.util.function.ToLongFunction | +| java.base | java.util.function.ToLongFunction<> | +| java.base | java.util.function.ToLongFunction | +| java.base | java.util.function.U | +| java.base | java.util.function.UnaryOperator | +| java.base | java.util.function.UnaryOperator<> | +| java.base | java.util.function.UnaryOperator | +| java.base | java.util.function.UnaryOperator | +| java.base | java.util.function.UnaryOperator | +| java.base | java.util.function.V | +| java.base | java.util.random.RandomGenerator | +| java.base | java.util.stream.A | +| java.base | java.util.stream.BaseStream | +| java.base | java.util.stream.BaseStream<> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.BaseStream> | +| java.base | java.util.stream.Collector | +| java.base | java.util.stream.Collector$Characteristics | +| java.base | java.util.stream.Collector<> | +| java.base | java.util.stream.Collector | +| java.base | java.util.stream.Collector | +| java.base | java.util.stream.Collector | +| java.base | java.util.stream.DoubleStream | +| java.base | java.util.stream.DoubleStream$Builder | +| java.base | java.util.stream.DoubleStream$DoubleMapMultiConsumer | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.Gatherer$Downstream | +| java.base | java.util.stream.Gatherer$Downstream | +| java.base | java.util.stream.Gatherer$Integrator | +| java.base | java.util.stream.Gatherer$Integrator$Greedy | +| java.base | java.util.stream.Gatherer$Integrator$Greedy<> | +| java.base | java.util.stream.Gatherer$Integrator$Greedy | +| java.base | java.util.stream.Gatherer$Integrator<> | +| java.base | java.util.stream.Gatherer$Integrator | +| java.base | java.util.stream.Gatherer$Integrator | +| java.base | java.util.stream.Gatherer<> | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.Gatherer | +| java.base | java.util.stream.IntStream | +| java.base | java.util.stream.IntStream$Builder | +| java.base | java.util.stream.IntStream$IntMapMultiConsumer | +| java.base | java.util.stream.LongStream | +| java.base | java.util.stream.LongStream$Builder | +| java.base | java.util.stream.LongStream$LongMapMultiConsumer | +| java.base | java.util.stream.R | +| java.base | java.util.stream.RR | +| java.base | java.util.stream.S | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream$Builder | +| java.base | java.util.stream.Stream$Builder<> | +| java.base | java.util.stream.Stream$Builder | +| java.base | java.util.stream.Stream<> | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.Stream | +| java.base | java.util.stream.T | +| java.base | java.util.stream.U | +| java.base | javax.crypto.BadPaddingException | +| java.base | javax.crypto.Cipher | +| java.base | javax.crypto.CipherSpi | +| java.base | javax.crypto.EncryptedPrivateKeyInfo | +| java.base | javax.crypto.ExemptionMechanism | +| java.base | javax.crypto.ExemptionMechanismException | +| java.base | javax.crypto.ExemptionMechanismSpi | +| java.base | javax.crypto.IllegalBlockSizeException | +| java.base | javax.crypto.NoSuchPaddingException | +| java.base | javax.crypto.ShortBufferException | +| java.base | javax.security.auth.DestroyFailedException | +| java.base | javax.security.auth.Destroyable | +| java.base | javax.security.auth.Subject | +| java.base | javax.security.auth.T | +| java.base | javax.security.auth.x500.X500Principal | +| java.base | jdk.internal.javac.Restricted+Annotation | diff --git a/java/ql/test/library-tests/module-import-declarations/ImportedType.ql b/java/ql/test/library-tests/module-import-declarations/ImportedType.ql new file mode 100644 index 00000000000..4dfe43084ec --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/ImportedType.ql @@ -0,0 +1,4 @@ +import java + +from ModuleImportDeclaration mid +select mid.getModuleName(), mid.getAnImportedType().getQualifiedName() diff --git a/java/ql/test/library-tests/module-import-declarations/Test.java b/java/ql/test/library-tests/module-import-declarations/Test.java new file mode 100644 index 00000000000..ed6d3dfe664 --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/Test.java @@ -0,0 +1,6 @@ +import module java.base; + +class Test { + public static void main(String[] args) { + } +} \ No newline at end of file diff --git a/java/ql/test/library-tests/module-import-declarations/options b/java/ql/test/library-tests/module-import-declarations/options new file mode 100644 index 00000000000..b510fdce0df --- /dev/null +++ b/java/ql/test/library-tests/module-import-declarations/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args --release 25 --enable-preview \ No newline at end of file diff --git a/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.expected b/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.expected new file mode 100644 index 00000000000..cad6d0097c7 --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.expected @@ -0,0 +1,6 @@ +| ExampleRuntimeExit.java:22:17:22:44 | exit(...) | Avoid calls to Runtime.exit() as this prevents runtime cleanup and makes code harder to reuse. | +| ExampleRuntimeExit.java:25:17:25:44 | exit(...) | Avoid calls to Runtime.exit() as this prevents runtime cleanup and makes code harder to reuse. | +| ExampleRuntimeHalt.java:18:17:18:44 | halt(...) | Avoid calls to Runtime.halt() as this prevents runtime cleanup and makes code harder to reuse. | +| ExampleRuntimeHalt.java:21:17:21:44 | halt(...) | Avoid calls to Runtime.halt() as this prevents runtime cleanup and makes code harder to reuse. | +| ExampleSystemExit.java:22:17:22:30 | exit(...) | Avoid calls to System.exit() as this prevents runtime cleanup and makes code harder to reuse. | +| ExampleSystemExit.java:25:17:25:30 | exit(...) | Avoid calls to System.exit() as this prevents runtime cleanup and makes code harder to reuse. | diff --git a/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.qlref b/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.qlref new file mode 100644 index 00000000000..4561fcfcfd0 --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/CallsToSystemExit.qlref @@ -0,0 +1,2 @@ +query: Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeExit.java b/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeExit.java new file mode 100644 index 00000000000..13fd53b1141 --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeExit.java @@ -0,0 +1,37 @@ +import java.io.FileOutputStream; +import java.io.IOException; + +public class ExampleRuntimeExit { + + public static void main(String[] args) { + Action action = new Action(); + try { + action.run(); + } catch (Exception e) { + printUsageAndExit(e.getMessage(), 1); + } + Runtime.getRuntime().exit(0); // COMPLIANT + } + + static class Action { + public void run() { + try { + FileOutputStream fos = new FileOutputStream("output.txt"); + fos.write("Hello, World!".getBytes()); + fos.close(); + Runtime.getRuntime().exit(0); // $ Alert + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().exit(1); // $ Alert + } catch (Exception e) { + // re-throw the exception + throw e; + } + } + } + + protected static void printUsageAndExit(final String message, final int exitCode) { + System.err.println("Usage: : " + message); + Runtime.getRuntime().exit(exitCode); // COMPLIANT + } +} diff --git a/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeHalt.java b/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeHalt.java new file mode 100644 index 00000000000..b1d4be04f20 --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/ExampleRuntimeHalt.java @@ -0,0 +1,25 @@ +import java.io.FileOutputStream; +import java.io.IOException; + +public class ExampleRuntimeHalt { + + public static void main(String[] args) { + Action action = new Action(); + action.run(); + Runtime.getRuntime().halt(0); // COMPLIANT + } + + static class Action { + public void run() { + try { + FileOutputStream fos = new FileOutputStream("output.txt"); + fos.write("Hello, World!".getBytes()); + fos.close(); + Runtime.getRuntime().halt(0); // $ Alert + } catch (IOException e) { + e.printStackTrace(); + Runtime.getRuntime().halt(1); // $ Alert + } + } + } +} diff --git a/java/ql/test/query-tests/CallsToSystemExit/ExampleSystemExit.java b/java/ql/test/query-tests/CallsToSystemExit/ExampleSystemExit.java new file mode 100644 index 00000000000..dece6e689ba --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/ExampleSystemExit.java @@ -0,0 +1,37 @@ +import java.io.FileOutputStream; +import java.io.IOException; + +public class ExampleSystemExit { + + public static void main(String[] args) { + Action action = new Action(); + try { + action.run(); + } catch (Exception e) { + printUsageAndExit(e.getMessage(), 1); + } + System.exit(0); // COMPLIANT + } + + static class Action { + public void run() { + try { + FileOutputStream fos = new FileOutputStream("output.txt"); + fos.write("Hello, World!".getBytes()); + fos.close(); + System.exit(0); // $ Alert + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); // $ Alert + } catch (Exception e) { + // re-throw the exception + throw e; + } + } + } + + protected static void printUsageAndExit(final String message, final int exitCode) { + System.err.println("Usage: : " + message); + System.exit(exitCode); // COMPLIANT + } +} diff --git a/java/ql/test/query-tests/CallsToSystemExit/LocalClassInTestMethod.java b/java/ql/test/query-tests/CallsToSystemExit/LocalClassInTestMethod.java new file mode 100644 index 00000000000..459f944d798 --- /dev/null +++ b/java/ql/test/query-tests/CallsToSystemExit/LocalClassInTestMethod.java @@ -0,0 +1,26 @@ +public class LocalClassInTestMethod { + public void testNestedCase() { + class OuterLocalClass { + void func() { + class NestedLocalClass { + void nestedMethod() { + System.exit(4); + Runtime.getRuntime().halt(5); + } + } + } + } + OuterLocalClass outer = new OuterLocalClass(); + outer.func(); + } + public void testNestedCase2() { + class OuterLocalClass { + class NestedLocalClass { + void nestedMethod() { + System.exit(4); + Runtime.getRuntime().halt(5); + } + } + } + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/Escaping/Escaping.expected b/java/ql/test/query-tests/Escaping/Escaping.expected new file mode 100644 index 00000000000..e066b29dae4 --- /dev/null +++ b/java/ql/test/query-tests/Escaping/Escaping.expected @@ -0,0 +1,3 @@ +| Escaping.java:3:7:3:7 | x | The class $@ is marked as thread-safe, but this field is potentially escaping. | Escaping.java:2:14:2:21 | Escaping | Escaping | +| Escaping.java:4:14:4:14 | y | The class $@ is marked as thread-safe, but this field is potentially escaping. | Escaping.java:2:14:2:21 | Escaping | Escaping | +| Escaping.java:9:18:9:18 | b | The class $@ is marked as thread-safe, but this field is potentially escaping. | Escaping.java:2:14:2:21 | Escaping | Escaping | diff --git a/java/ql/test/query-tests/Escaping/Escaping.java b/java/ql/test/query-tests/Escaping/Escaping.java new file mode 100644 index 00000000000..9d3b568369a --- /dev/null +++ b/java/ql/test/query-tests/Escaping/Escaping.java @@ -0,0 +1,17 @@ +@ThreadSafe +public class Escaping { + int x; //$ Alert + public int y = 0; //$ Alert + private int z = 3; + final int w = 0; + public final int u = 4; + private final long a = 5; + protected long b = 0; //$ Alert + protected final long c = 0L; + volatile long d = 3; + protected volatile long e = 3L; + + public void methodLocal() { + int i; + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/Escaping/Escaping.qlref b/java/ql/test/query-tests/Escaping/Escaping.qlref new file mode 100644 index 00000000000..846d88a1e0a --- /dev/null +++ b/java/ql/test/query-tests/Escaping/Escaping.qlref @@ -0,0 +1,2 @@ +query: Likely Bugs/Concurrency/Escaping.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Escaping/ThreadSafe.java b/java/ql/test/query-tests/Escaping/ThreadSafe.java new file mode 100644 index 00000000000..1a4534cc78f --- /dev/null +++ b/java/ql/test/query-tests/Escaping/ThreadSafe.java @@ -0,0 +1,2 @@ +public @interface ThreadSafe { +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/Employee.java b/java/ql/test/query-tests/ExcessivePublicMethodMocking/Employee.java new file mode 100644 index 00000000000..70a0091ec37 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/Employee.java @@ -0,0 +1,10 @@ +/** + * Underlying data type of the ORM class and functions. + */ +public class Employee { + Employee(String name) { + this.name = name; + } + + String name; +} diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeRecord.java b/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeRecord.java new file mode 100644 index 00000000000..4aa40d97ec3 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeRecord.java @@ -0,0 +1,26 @@ +/** + * Sample ORM class for the type `Employee`. + */ +public class EmployeeRecord { + public int add(Employee employee) { + return 1; + } + + public Employee get(String name) { + return new Employee("Sample"); + } + + public int update(Employee employee, String newName) { + return 1; + } + + public int delete(Employee employee) { + return 1; + } + + private void f() { } + + private void g() { } + + private void h() { } +} diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeStatus.java b/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeStatus.java new file mode 100644 index 00000000000..3b581bb39ef --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/EmployeeStatus.java @@ -0,0 +1,9 @@ +/** + * Simple class with a single public method to test the edge case. + * When this single method is mocked, it means ALL public methods are mocked. + */ +public class EmployeeStatus { + public String getStatus() { + return "active"; + } +} diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.expected b/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.expected new file mode 100644 index 00000000000..d3e95329380 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.expected @@ -0,0 +1,2 @@ +| TestORM.java:34:15:34:27 | nonCompliant1 | This test method mocks all public methods of a $@. | EmployeeRecord.java:4:14:4:27 | EmployeeRecord | class or an interface | +| TestORM.java:47:15:47:27 | nonCompliant2 | This test method mocks all public methods of a $@. | EmployeeRecord.java:4:14:4:27 | EmployeeRecord | class or an interface | diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.qlref b/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.qlref new file mode 100644 index 00000000000..81a94913518 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/ExcessivePublicMethodMocking.qlref @@ -0,0 +1,2 @@ +query: Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/TestORM.java b/java/ql/test/query-tests/ExcessivePublicMethodMocking/TestORM.java new file mode 100644 index 00000000000..eadf0151506 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/TestORM.java @@ -0,0 +1,65 @@ +import org.junit.Test; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.doReturn; + +public class TestORM { + /** + * Test of form `when(mockedObject.methodToBeMocked()).thenReturn(someVal)`. + */ + @Test + public void compliant1() { + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // COMPLIANT: Only some of the public methods belonging to the mocked object are used + when(employeeRecordMock.add(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.add + when(employeeRecordMock.update(sampleEmployee, "Jane Doe")).thenReturn(0); // Mocked EmployeeRecord.update + } + + /** + * Test of form `doReturn(someVal).when(mockedObject).methodToBeMocked()`. + */ + @Test + public void compliant2() { + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // COMPLIANT: Only some of the public methods belonging to the mocked object are used + doReturn(0).when(employeeRecordMock).add(sampleEmployee); // Mocked EmployeeRecord.add + doReturn(0).when(employeeRecordMock).get("John Doe"); // Mocked EmployeeRecord.get + doReturn(0).when(employeeRecordMock).delete(sampleEmployee); // Mocked EmployeeRecord.delete + } + + /** + * Test of form `when(mockedObject.methodToBeMocked()).thenReturn(someVal)`. + */ + @Test + public void nonCompliant1() { // $ Alert + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // NON_COMPLIANT: All public methods of the mocked object are used + when(employeeRecordMock.add(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.add + when(employeeRecordMock.get("John Doe")).thenReturn(sampleEmployee); // Mocked EmployeeRecord.get + when(employeeRecordMock.update(sampleEmployee, "Jane Doe")).thenReturn(0); // Mocked EmployeeRecord.update + when(employeeRecordMock.delete(sampleEmployee)).thenReturn(0); // Mocked EmployeeRecord.delete + } + + /** + * Test of form `doReturn(someVal).when(mockedObject).methodToBeMocked()`. + */ + @Test + public void nonCompliant2() { // $ Alert + Employee sampleEmployee = new Employee("John Doe"); + EmployeeRecord employeeRecordMock = mock(EmployeeRecord.class); // NON_COMPLIANT: All public methods of the mocked object are used + doReturn(0).when(employeeRecordMock).add(sampleEmployee); // Mocked EmployeeRecord.add + doReturn(0).when(employeeRecordMock).get("John Doe"); // Mocked EmployeeRecord.get + doReturn(0).when(employeeRecordMock).update(sampleEmployee, "Jane Doe"); // Mocked EmployeeRecord.update + doReturn(0).when(employeeRecordMock).delete(sampleEmployee); // Mocked EmployeeRecord.delete + } + + /** + * Edge case: Class with single public method - should NOT be flagged. + * When there's only one public method, mocking it doesn't indicate a "too big" test. + */ + @Test + public void compliantSingleMethod() { + EmployeeStatus statusMock = mock(EmployeeStatus.class); // COMPLIANT: Single public method, no choice but to mock it if needed + when(statusMock.getStatus()).thenReturn("inactive"); // Mocked EmployeeStatus.getStatus (the only public method, but that's OK) + } +} diff --git a/java/ql/test/query-tests/ExcessivePublicMethodMocking/options b/java/ql/test/query-tests/ExcessivePublicMethodMocking/options new file mode 100644 index 00000000000..8dbd14d41c1 --- /dev/null +++ b/java/ql/test/query-tests/ExcessivePublicMethodMocking/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../stubs/junit-4.13:${testdir}/../../stubs/mockito-5.14 diff --git a/java/ql/test/query-tests/Nullness/A.java b/java/ql/test/query-tests/Nullness/A.java index 2a3f36da4b1..065fffdbd3f 100644 --- a/java/ql/test/query-tests/Nullness/A.java +++ b/java/ql/test/query-tests/Nullness/A.java @@ -301,7 +301,7 @@ public class A { public void assertThatTest() { Object assertThat_ok1 = maybe() ? null : new Object(); assertThat(assertThat_ok1, notNullValue()); - assertThat_ok1.toString(); + assertThat_ok1.toString(); // OK } private boolean m; diff --git a/java/ql/test/query-tests/Nullness/B.java b/java/ql/test/query-tests/Nullness/B.java index 99bd6f4a1ba..1234b53d59b 100644 --- a/java/ql/test/query-tests/Nullness/B.java +++ b/java/ql/test/query-tests/Nullness/B.java @@ -276,7 +276,7 @@ public class B { int[] a = null; if (iters > 0) a = new int[iters]; for (int i = 0; i < iters; ++i) - a[i] = 0; // NPE - false positive + a[i] = 0; // OK if (iters > 0) { String last = null; @@ -289,7 +289,7 @@ public class B { throw new RuntimeException(); } for (int i = 0; i < iters; ++i) { - b[i] = 0; // NPE - false positive + b[i] = 0; // OK } } @@ -331,7 +331,7 @@ public class B { x = new Object(); } if(y instanceof String) { - x.hashCode(); // OK + x.hashCode(); // Spurious NPE - false positive } } @@ -341,7 +341,7 @@ public class B { x = new Object(); } if(!(y instanceof String)) { - x.hashCode(); // OK + x.hashCode(); // Spurious NPE - false positive } } @@ -351,7 +351,7 @@ public class B { x = new Object(); } if(y == z) { - x.hashCode(); // OK + x.hashCode(); // Spurious NPE - false positive } Object x2 = null; @@ -359,7 +359,7 @@ public class B { x2 = new Object(); } if(y != z) { - x2.hashCode(); // OK + x2.hashCode(); // Spurious NPE - false positive } Object x3 = null; @@ -367,7 +367,7 @@ public class B { x3 = new Object(); } if(!(y == z)) { - x3.hashCode(); // OK + x3.hashCode(); // Spurious NPE - false positive } } @@ -417,7 +417,7 @@ public class B { x = null; } if (!b) { - x.hashCode(); // NPE - false negative + x.hashCode(); // NPE } // flow can loop around from one iteration to the next } @@ -436,4 +436,125 @@ public class B { } } } + + public void loopCorrTest1(int[] a) { + boolean ready = a.length > 7; + Object x = new Object(); + for (int i = 0; i < a.length; i++) { + // condition correlates with itself through iterations when ready isn't updated + if (!ready) { + x = null; + } else { + x.hashCode(); // OK + } + if ((a[i] & 1) != 0) { + ready = (a[i] & 2) != 0; + x = new Object(); + } + } + } + + public void loopCorrTest2(boolean[] a) { + Object x = new Object(); + boolean cur = a[0]; + for (int i = 1; i < a.length; i++) { + boolean prev = cur; + cur = a[i]; + if (!prev) { + // correctly guarded by !cur from the _previous_ iteration + x.hashCode(); // Spurious NPE - false positive + } else { + x = new Object(); + } + if (cur) { + x = null; + } + } + } + + public void loopCorrTest3(String[] ss) { + Object x = null; + Object t = null; + for (String s : ss) { + if (t == null) { + t = s; + } else { + if (t instanceof String) { + x = new Object(); + t = new Object(); + } + // correctly guarded by t: null -> String -> Object + x.hashCode(); // Spurious NPE - false positive + } + } + } + + public void initCorr(boolean b) { + Object o2 = b ? null : ""; + if (b) + o2 = ""; + else + o2.hashCode(); // OK + } + + public void complexLoopTest(int[] xs, int[] ys) { + int len = ys != null ? ys.length : 0; + for (int i = 0, j = 0; i < xs.length; i++) { + if (j < len && ys[j] == 42) { // OK + j++; + } else if (j > 0) { + ys[0]++; // OK + } + } + } + + public void trackTest(Object o, int n) { + boolean isnull = o == null; + int c = -1; + if (maybe) { } + if (c == 100) { return; } + o.hashCode(); // NPE + } + + public void testFinally(int[] xs, int[] ys) { + if (xs.length == 0) return; + if (ys.length == 0) return; + String s1 = null; + String s2 = null; + for (int x : xs) { + try { + if (x == 0) { break; } + s1 = "1"; + for (int y : ys) { + if (y == 0) { break; } + s2 = "2"; + } + } finally { + } + s1.hashCode(); // OK + s2.hashCode(); // NPE + } + s1.hashCode(); // NPE - false negative, Java CFG lacks proper edge label + } + + public void lenCheck(int[] xs, int n, int t) { + if (n > 42) return; + if (maybe) {} + if (n > 0 && (xs == null || xs.length < n)) { + return; + } + if (maybe) {} + if (n > 21) return; + if (maybe) {} + for (int i = 0; i < n; ++i) { + xs[i]++; // OK + } + } + + public void rangetest(int n) { + String s = null; + if (n < 0 || n > 10) s = "A"; + if (n > 100) s.hashCode(); // OK + if (n == 42) s.hashCode(); // OK + } } diff --git a/java/ql/test/query-tests/Nullness/C.java b/java/ql/test/query-tests/Nullness/C.java index 9424cbe71f2..881185abd23 100644 --- a/java/ql/test/query-tests/Nullness/C.java +++ b/java/ql/test/query-tests/Nullness/C.java @@ -97,7 +97,7 @@ public class C { arr2 = new int[arr1.length]; } for (int i = 0; i < arr1.length; i++) - arr2[i] = arr1[i]; // NPE - false positive + arr2[i] = arr1[i]; // OK } public void ex8(int x, int lim) { @@ -107,7 +107,7 @@ public class C { while (!stop) { int j = 0; while (!stop && j < lim) { - int step = (j * obj.hashCode()) % 10; // NPE - false positive + int step = (j * obj.hashCode()) % 10; // OK if (step == 0) { obj.hashCode(); i += 1; @@ -134,7 +134,7 @@ public class C { cond = true; } if (cond) { - obj2.hashCode(); // NPE - false positive + obj2.hashCode(); // OK } } @@ -185,7 +185,7 @@ public class C { b = true; } else if (a[i] == 2) { verifyBool(b); - obj.hashCode(); // NPE - false positive + obj.hashCode(); // OK } } } diff --git a/java/ql/test/query-tests/Nullness/NullMaybe.expected b/java/ql/test/query-tests/Nullness/NullMaybe.expected index 9f2920293b0..89209bd3a71 100644 --- a/java/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/java/ql/test/query-tests/Nullness/NullMaybe.expected @@ -15,20 +15,24 @@ | B.java:118:5:118:7 | obj | Variable $@ may be null at this access as suggested by $@ null guard. | B.java:117:27:117:36 | obj | obj | B.java:119:13:119:23 | ... != ... | this | | B.java:133:5:133:7 | obj | Variable $@ may be null at this access because of $@ assignment. | B.java:128:5:128:22 | Object obj | obj | B.java:128:12:128:21 | obj | this | | B.java:190:7:190:7 | o | Variable $@ may be null at this access because of $@ assignment. | B.java:178:5:178:20 | Object o | o | B.java:186:5:186:12 | ...=... | this | -| B.java:279:7:279:7 | a | Variable $@ may be null at this access because of $@ assignment. | B.java:276:5:276:19 | int[] a | a | B.java:276:11:276:18 | a | this | -| B.java:292:7:292:7 | b | Variable $@ may be null at this access because of $@ assignment. | B.java:287:5:287:44 | int[] b | b | B.java:287:11:287:43 | b | this | +| B.java:334:7:334:7 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:329:5:329:20 | Object x | x | B.java:329:12:329:19 | x | this | +| B.java:344:7:344:7 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:339:5:339:20 | Object x | x | B.java:339:12:339:19 | x | this | +| B.java:354:7:354:7 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:349:5:349:20 | Object x | x | B.java:349:12:349:19 | x | this | +| B.java:362:7:362:8 | x2 | Variable $@ may be null at this access because of $@ assignment. | B.java:357:5:357:21 | Object x2 | x2 | B.java:357:12:357:20 | x2 | this | +| B.java:370:7:370:8 | x3 | Variable $@ may be null at this access because of $@ assignment. | B.java:365:5:365:21 | Object x3 | x3 | B.java:365:12:365:20 | x3 | this | | B.java:408:7:408:7 | x | Variable $@ may be null at this access as suggested by $@ null guard. | B.java:374:23:374:30 | x | x | B.java:375:23:375:31 | ... != ... | this | +| B.java:420:9:420:9 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:413:5:413:28 | Object x | x | B.java:417:9:417:16 | ...=... | this | +| B.java:465:9:465:9 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:458:5:458:28 | Object x | x | B.java:470:9:470:16 | ...=... | this | +| B.java:487:9:487:9 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:476:5:476:20 | Object x | x | B.java:476:12:476:19 | x | this | +| B.java:516:5:516:5 | o | Variable $@ may be null at this access as suggested by $@ null guard. | B.java:511:25:511:32 | o | o | B.java:512:22:512:30 | ... == ... | this | +| B.java:535:7:535:8 | s2 | Variable $@ may be null at this access because of $@ assignment. | B.java:523:5:523:21 | String s2 | s2 | B.java:523:12:523:20 | s2 | this | | C.java:9:44:9:45 | a2 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:6:5:6:23 | long[][] a2 | a2 | C.java:7:34:7:54 | ... != ... | this | | C.java:9:44:9:45 | a2 | Variable $@ may be null at this access because of $@ assignment. | C.java:6:5:6:23 | long[][] a2 | a2 | C.java:6:14:6:22 | a2 | this | | C.java:10:17:10:18 | a3 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:8:5:8:21 | long[] a3 | a3 | C.java:9:38:9:58 | ... != ... | this | | C.java:10:17:10:18 | a3 | Variable $@ may be null at this access because of $@ assignment. | C.java:8:5:8:21 | long[] a3 | a3 | C.java:8:12:8:20 | a3 | this | | C.java:21:7:21:8 | s1 | Variable $@ may be null at this access because of $@ assignment. | C.java:14:5:14:30 | String s1 | s1 | C.java:17:7:17:24 | ...=... | this | | C.java:51:7:51:11 | slice | Variable $@ may be null at this access because of $@ assignment. | C.java:43:5:43:30 | List slice | slice | C.java:43:18:43:29 | slice | this | -| C.java:100:7:100:10 | arr2 | Variable $@ may be null at this access because of $@ assignment. | C.java:95:5:95:22 | int[] arr2 | arr2 | C.java:95:11:95:21 | arr2 | this | -| C.java:110:25:110:27 | obj | Variable $@ may be null at this access because of $@ assignment. | C.java:106:5:106:30 | Object obj | obj | C.java:118:13:118:22 | ...=... | this | -| C.java:137:7:137:10 | obj2 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:131:5:131:23 | Object obj2 | obj2 | C.java:132:9:132:20 | ... != ... | this | | C.java:144:15:144:15 | a | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:141:20:141:26 | a | a | C.java:142:13:142:21 | ... == ... | this | -| C.java:188:9:188:11 | obj | Variable $@ may be null at this access because of $@ assignment. | C.java:181:5:181:22 | Object obj | obj | C.java:181:12:181:21 | obj | this | | C.java:219:9:219:10 | o1 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:212:20:212:28 | o1 | o1 | C.java:213:9:213:18 | ... == ... | this | | C.java:233:7:233:8 | xs | Variable $@ may be null at this access because of $@ assignment. | C.java:231:5:231:56 | int[] xs | xs | C.java:231:11:231:55 | xs | this | | F.java:11:5:11:7 | obj | Variable $@ may be null at this access as suggested by $@ null guard. | F.java:8:18:8:27 | obj | obj | F.java:9:9:9:19 | ... == ... | this | diff --git a/java/ql/test/query-tests/SafePublication/SafePublication.expected b/java/ql/test/query-tests/SafePublication/SafePublication.expected new file mode 100644 index 00000000000..fbb54ff7b8c --- /dev/null +++ b/java/ql/test/query-tests/SafePublication/SafePublication.expected @@ -0,0 +1,7 @@ +| SafePublication.java:5:9:5:9 | z | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:6:9:6:9 | w | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:7:9:7:9 | u | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:11:10:11:10 | d | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:12:10:12:10 | e | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:14:11:14:13 | arr | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | +| SafePublication.java:17:10:17:11 | cc | The class $@ is marked as thread-safe, but this field is not safely published. | SafePublication.java:2:14:2:28 | SafePublication | SafePublication | diff --git a/java/ql/test/query-tests/SafePublication/SafePublication.java b/java/ql/test/query-tests/SafePublication/SafePublication.java new file mode 100644 index 00000000000..9c1d031987b --- /dev/null +++ b/java/ql/test/query-tests/SafePublication/SafePublication.java @@ -0,0 +1,29 @@ +@ThreadSafe +public class SafePublication { + int x; + int y = 0; + int z = 3; //$ Alert + int w; //$ Alert + int u; //$ Alert + long a; + long b = 0; + long c = 0L; + long d = 3; //$ Alert + long e = 3L; //$ Alert + + int[] arr = new int[3]; //$ Alert + float f = 0.0f; + double dd = 00.0d; + char cc = 'a'; //$ Alert + char ok = '\u0000'; + + public SafePublication(int a) { + x = 0; + w = 3; // not ok + u = a; // not ok + } + + public void methodLocal() { + int i; + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/SafePublication/SafePublication.qlref b/java/ql/test/query-tests/SafePublication/SafePublication.qlref new file mode 100644 index 00000000000..51bf2ced966 --- /dev/null +++ b/java/ql/test/query-tests/SafePublication/SafePublication.qlref @@ -0,0 +1,2 @@ +query: Likely Bugs/Concurrency/SafePublication.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/SafePublication/ThreadSafe.java b/java/ql/test/query-tests/SafePublication/ThreadSafe.java new file mode 100644 index 00000000000..1a4534cc78f --- /dev/null +++ b/java/ql/test/query-tests/SafePublication/ThreadSafe.java @@ -0,0 +1,2 @@ +public @interface ThreadSafe { +} \ No newline at end of file diff --git a/java/ql/test/query-tests/StartInConstructor/Test.java b/java/ql/test/query-tests/StartInConstructor/Test.java index 4c5a57d8b4b..ae8148af787 100644 --- a/java/ql/test/query-tests/StartInConstructor/Test.java +++ b/java/ql/test/query-tests/StartInConstructor/Test.java @@ -30,4 +30,18 @@ public class Test { } } -} \ No newline at end of file + + public static class AllPrivateConstructors { + Thread myThread; + + private AllPrivateConstructors() { + myThread = new Thread("myThread"); + // OK - class cannot be extended outside this file, and is not in fact extended + myThread.start(); + } + + public static AllPrivateConstructors create() { + return new AllPrivateConstructors(); + } + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/ThreadSafe.expected b/java/ql/test/query-tests/ThreadSafe/ThreadSafe.expected new file mode 100644 index 00000000000..3d73caaffe5 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/ThreadSafe.expected @@ -0,0 +1,45 @@ +| examples/C.java:14:9:14:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:14:9:14:14 | this.y | this expression | +| examples/C.java:15:9:15:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:15:9:15:14 | this.y | this expression | +| examples/C.java:16:9:16:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:16:9:16:14 | this.y | this expression | +| examples/C.java:16:18:16:23 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:16:18:16:23 | this.y | this expression | +| examples/C.java:20:9:20:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:20:9:20:14 | this.y | this expression | +| examples/C.java:21:9:21:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:21:9:21:14 | this.y | this expression | +| examples/C.java:22:9:22:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:22:9:22:14 | this.y | this expression | +| examples/C.java:22:18:22:23 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:22:18:22:23 | this.y | this expression | +| examples/C.java:26:9:26:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:26:9:26:14 | this.y | this expression | +| examples/C.java:30:13:30:13 | y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:30:13:30:13 | y | this expression | +| examples/C.java:33:9:33:9 | y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/C.java:33:9:33:9 | y | this expression | +| examples/DeepPaths.java:8:17:8:17 | y | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/DeepPaths.java:7:14:7:22 | DeepPaths | DeepPaths | +| examples/FaultyTurnstileExample.java:18:5:18:9 | count | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/FaultyTurnstileExample.java:18:5:18:9 | count | this expression | +| examples/FaultyTurnstileExample.java:26:15:26:19 | count | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/FaultyTurnstileExample.java:23:7:23:29 | FaultyTurnstileExample2 | FaultyTurnstileExample2 | +| examples/FlawedSemaphore.java:15:14:15:18 | state | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/FlawedSemaphore.java:15:14:15:18 | state | this expression | +| examples/FlawedSemaphore.java:18:7:18:11 | state | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/FlawedSemaphore.java:18:7:18:11 | state | this expression | +| examples/LockExample.java:18:15:18:20 | length | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/LockExample.java:14:14:14:24 | LockExample | LockExample | +| examples/LockExample.java:19:15:19:31 | notRelatedToOther | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/LockExample.java:14:14:14:24 | LockExample | LockExample | +| examples/LockExample.java:20:17:20:23 | content | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/LockExample.java:14:14:14:24 | LockExample | LockExample | +| examples/LockExample.java:44:5:44:10 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:44:5:44:10 | length | this expression | +| examples/LockExample.java:45:5:45:11 | content | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:45:5:45:11 | content | this expression | +| examples/LockExample.java:45:13:45:18 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:45:13:45:18 | length | this expression | +| examples/LockExample.java:49:5:49:10 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:49:5:49:10 | length | this expression | +| examples/LockExample.java:62:5:62:10 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:62:5:62:10 | length | this expression | +| examples/LockExample.java:65:5:65:11 | content | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:65:5:65:11 | content | this expression | +| examples/LockExample.java:65:13:65:18 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:65:13:65:18 | length | this expression | +| examples/LockExample.java:69:5:69:10 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:69:5:69:10 | length | this expression | +| examples/LockExample.java:71:5:71:11 | content | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:71:5:71:11 | content | this expression | +| examples/LockExample.java:71:13:71:18 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:71:13:71:18 | length | this expression | +| examples/LockExample.java:76:5:76:10 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:76:5:76:10 | length | this expression | +| examples/LockExample.java:79:5:79:11 | content | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:79:5:79:11 | content | this expression | +| examples/LockExample.java:79:13:79:18 | length | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:79:13:79:18 | length | this expression | +| examples/LockExample.java:112:5:112:21 | notRelatedToOther | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:112:5:112:21 | notRelatedToOther | this expression | +| examples/LockExample.java:119:5:119:21 | notRelatedToOther | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:119:5:119:21 | notRelatedToOther | this expression | +| examples/LockExample.java:124:5:124:21 | notRelatedToOther | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:124:5:124:21 | notRelatedToOther | this expression | +| examples/LockExample.java:145:5:145:21 | notRelatedToOther | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:145:5:145:21 | notRelatedToOther | this expression | +| examples/LockExample.java:153:5:153:21 | notRelatedToOther | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/LockExample.java:153:5:153:21 | notRelatedToOther | this expression | +| examples/ManyLocks.java:8:17:8:17 | y | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/ManyLocks.java:7:14:7:22 | ManyLocks | ManyLocks | +| examples/SyncLstExample.java:45:5:45:7 | lst | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/SyncLstExample.java:45:5:45:7 | lst | this expression | +| examples/SyncStackExample.java:37:5:37:7 | stc | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/SyncStackExample.java:37:5:37:7 | stc | this expression | +| examples/SynchronizedAndLock.java:10:17:10:22 | length | This field is not properly synchronized in that no single monitor covers all accesses, but the class $@ is annotated as @ThreadSafe. | examples/SynchronizedAndLock.java:7:14:7:32 | SynchronizedAndLock | SynchronizedAndLock | +| examples/Test.java:52:5:52:10 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:24:5:24:18 | setYPrivate(...) | this expression | +| examples/Test.java:60:5:60:10 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:60:5:60:10 | this.y | this expression | +| examples/Test.java:74:5:74:10 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:74:5:74:10 | this.y | this expression | +| examples/Test.java:74:14:74:14 | y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:74:14:74:14 | y | this expression | diff --git a/java/ql/test/query-tests/ThreadSafe/ThreadSafe.qlref b/java/ql/test/query-tests/ThreadSafe/ThreadSafe.qlref new file mode 100644 index 00000000000..eba9a674554 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/ThreadSafe.qlref @@ -0,0 +1,2 @@ +query: Likely Bugs/Concurrency/ThreadSafe.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/Alias.java b/java/ql/test/query-tests/ThreadSafe/examples/Alias.java new file mode 100644 index 00000000000..802bae2fbb3 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/Alias.java @@ -0,0 +1,21 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class Alias { + private int y; + + private final ReentrantLock lock = new ReentrantLock(); + + public void notMismatch() { + final ReentrantLock lock = this.lock; + lock.lock(); + try { + y = 42; + } finally { + this.lock.unlock(); + } + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/App.java b/java/ql/test/query-tests/ThreadSafe/examples/App.java new file mode 100644 index 00000000000..1c085ee6179 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/App.java @@ -0,0 +1,14 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package examples; + +public class App { + public String getGreeting() { + return "Hello World!"; + } + + public static void main(String[] args) { + System.out.println(new App().getGreeting()); + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/C.java b/java/ql/test/query-tests/ThreadSafe/examples/C.java new file mode 100644 index 00000000000..92c6b82800c --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/C.java @@ -0,0 +1,72 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class C { + + private int y; + private Lock lock = new ReentrantLock(); + private Lock lock2 = new ReentrantLock(); + + public void m() { + this.y = 0; // $ Alert + this.y += 1; // $ Alert + this.y = this.y - 1; // $ Alert + } + + public void n4() { + this.y = 0; // $ Alert + this.y += 1; // $ Alert + this.y = this.y - 1; // $ Alert + } + + public void setY(int y) { + this.y = y; // $ Alert + } + + public void test() { + if (y == 0) { // $ Alert + lock.lock(); + } + y = 0; // $ Alert + lock.unlock(); + } + + public void n() { + this.lock.lock(); + this.y = 0; + this.y += 1; + this.y = this.y - 1; + this.lock.unlock(); + } + + public void callTestLock2() { + lock2.lock(); + setY(1); + lock2.unlock(); + } + + public void n2() { + lock.lock(); + this.y = 0; + this.y += 1; + this.y = this.y - 1; + lock.unlock(); + } + + public void n3() { + lock.lock(); + y = 0; + y += 1; + y = y - 1; + lock.unlock(); + } + + public void callTest() { + lock.lock(); + setY(1); + lock.unlock(); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/DeepPaths.java b/java/ql/test/query-tests/ThreadSafe/examples/DeepPaths.java new file mode 100644 index 00000000000..095087a5018 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/DeepPaths.java @@ -0,0 +1,61 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class DeepPaths { + private int y; // $ Alert + + private final Lock lock1 = new ReentrantLock(); + private final Lock lock2 = new ReentrantLock(); + private final Lock lock3 = new ReentrantLock(); + + public void layer1Locked() { + lock1.lock(); + this.layer2Locked(); + lock1.unlock(); + } + + private void layer2Locked() { + lock2.lock(); + this.layer3Unlocked(); + lock2.unlock(); + } + + private void layer3Locked() { + lock3.lock(); + y++; + lock3.unlock(); + } + + public void layer1Skip() { + lock2.lock(); + this.layer3Locked(); + lock2.unlock(); + } + + public void layer1Indirect() { + this.layer2(); + } + + private void layer2() { + this.layer2Locked(); + } + + public void layer1Unlocked() { + this.layer2Unlocked(); + } + + private void layer2Unlocked() { + this.layer3(); + } + + private void layer3() { + this.layer3Locked(); + } + + private void layer3Unlocked() { + y++; + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/FaultyTurnstileExample.java b/java/ql/test/query-tests/ThreadSafe/examples/FaultyTurnstileExample.java new file mode 100644 index 00000000000..20b258135f6 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/FaultyTurnstileExample.java @@ -0,0 +1,40 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +class FaultyTurnstileExample { + private Lock lock = new ReentrantLock(); + private int count = 0; + + public void inc() { + lock.lock(); + count++; // $ MISSING: Alert + lock.unlock(); + } + + public void dec() { + count--; // $ Alert + } +} + +@ThreadSafe +class FaultyTurnstileExample2 { + private Lock lock1 = new ReentrantLock(); + private Lock lock2 = new ReentrantLock(); + private int count = 0; // $ Alert + + public void inc() { + lock1.lock(); + count++; + lock1.unlock(); + } + + public void dec() { + lock2.lock(); + count--; + lock2.unlock(); + } +} + diff --git a/java/ql/test/query-tests/ThreadSafe/examples/FlawedSemaphore.java b/java/ql/test/query-tests/ThreadSafe/examples/FlawedSemaphore.java new file mode 100644 index 00000000000..a73b45e60ed --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/FlawedSemaphore.java @@ -0,0 +1,30 @@ +package examples; + +@ThreadSafe +public class FlawedSemaphore { + private final int capacity; + private int state; + + public FlawedSemaphore(int c) { + capacity = c; + state = 0; + } + + public void acquire() { + try { + while (state == capacity) { // $ Alert + this.wait(); + } + state++; // $ Alert + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public void release() { + synchronized (this) { + state--; // State can become negative + this.notifyAll(); + } + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/LockCorrect.java b/java/ql/test/query-tests/ThreadSafe/examples/LockCorrect.java new file mode 100644 index 00000000000..9c6c5abce56 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/LockCorrect.java @@ -0,0 +1,51 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class LockCorrect { + private Lock lock1 = new ReentrantLock(); + + private int length = 0; + private int notRelatedToOther = 10; + private int[] content = new int[10]; + private int thisSynchronized = 0; + + public void add(int value) { + lock1.lock(); + length++; + content[length] = value; + lock1.unlock(); + } + + public void removeCorrect() { + lock1.lock(); + content[length] = 0; + length--; + lock1.unlock(); + } + + public void synchronizedOnLock1() { + synchronized(lock1) { + notRelatedToOther++; + } + } + + public void synchronizedOnLock12() { + synchronized(lock1) { + notRelatedToOther++; + } + } + + public synchronized void x() { + thisSynchronized++; + } + + public void x1() { + synchronized(this) { + thisSynchronized++; + } + } + +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/LockExample.java b/java/ql/test/query-tests/ThreadSafe/examples/LockExample.java new file mode 100644 index 00000000000..1e1792d0d2e --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/LockExample.java @@ -0,0 +1,156 @@ +// This example shows that we only get one alert "per concurrency problem": +// For each problematic variable, we get one alert at the earliest conflicting write. +// If the variable is involved in several different monitors, we get an alert for each monitor that +// is not correctly used. +// A single alert can have many related locations, since each conflicting access which is not +// properly synchronized is a related location. +// This leads to many lines in the .expected file. +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class LockExample { + private Lock lock1 = new ReentrantLock(); + private Lock lock2 = new ReentrantLock(); + + private int length = 0; // $ Alert + private int notRelatedToOther = 10; // $ Alert + private int[] content = new int[10]; // $ Alert + + public void add(int value) { + lock1.lock(); + length++; + content[length] = value; + lock1.unlock(); + } + + public void removeCorrect() { + lock1.lock(); + length--; + content[length] = 0; + lock1.unlock(); + } + + public void notTheSameLockAsAdd() { // use locks, but different ones + lock2.lock(); + length--; + content[length] = 0; + lock2.unlock(); + } + + public void noLock() { // no locks + length--; // $ Alert + content[length] = 0; // $ Alert + } + + public void fieldUpdatedOutsideOfLock() { // adjusts length without lock + length--; // $ Alert + + lock1.lock(); + content[length] = 0; + lock1.unlock(); + } + + public synchronized void synchronizedLock() { // no locks, but with synchronized + length--; + content[length] = 0; + } + + public void onlyLocked() { // never unlocked, only locked + length--; // $ Alert + + lock1.lock(); + content[length] = 0; // $ Alert + } + + public void onlyUnlocked() { // never locked, only unlocked + length--; // $ Alert + + content[length] = 0; // $ Alert + lock1.unlock(); + } + + public void notSameLock() { + length--; // $ Alert + + lock2.lock();// Not the same lock + content[length] = 0; // $ Alert + lock1.unlock(); + } + + public void updateCount() { + lock2.lock(); + notRelatedToOther++; + lock2.unlock(); + } + + public void updateCountTwiceCorrect() { + lock2.lock(); + notRelatedToOther++; + lock2.unlock(); + lock1.lock(); + notRelatedToOther++; + lock1.unlock(); + } + + public void updateCountTwiceDifferentLocks() { + lock2.lock(); + notRelatedToOther++; + lock2.unlock(); + lock1.lock(); + notRelatedToOther++; + lock2.unlock(); + } + + public void updateCountTwiceLock() { + lock2.lock(); + notRelatedToOther++; + lock2.unlock(); + lock1.lock(); + notRelatedToOther++; // $ Alert + } + + public void updateCountTwiceUnLock() { + lock2.lock(); + notRelatedToOther++; + lock2.unlock(); + notRelatedToOther++; // $ Alert + lock1.unlock(); + } + + public void synchronizedNonRelatedOutside() { + notRelatedToOther++; // $ Alert + + synchronized(this) { + length++; + } + } + + public void synchronizedNonRelatedOutside2() { + int x = 0; + x++; + + synchronized(this) { + length++; + } + } + + public void synchronizedNonRelatedOutside3() { + synchronized(this) { + length++; + } + + notRelatedToOther = 1; // $ Alert + } + + public void synchronizedNonRelatedOutside4() { + synchronized(lock1) { + length++; + } + + notRelatedToOther = 1; // $ Alert + } + +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/LoopyCallGraph.java b/java/ql/test/query-tests/ThreadSafe/examples/LoopyCallGraph.java new file mode 100644 index 00000000000..caea22ac851 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/LoopyCallGraph.java @@ -0,0 +1,33 @@ +package examples; + +import java.util.Random; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class LoopyCallGraph { + private Lock lock = new ReentrantLock(); + private int count = 0; + private Random random = new Random(); + + public void entry() { + if (random.nextBoolean()) { + increase(); // this could look like an unprotected path to a call to dec() + } else { + lock.lock(); + dec(); + lock.unlock(); + } + } + + private void increase() { + lock.lock(); + count = 10; + lock.unlock(); + entry(); // this could look like an unprotected path to a call to dec() + } + + private void dec() { + count--; + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/ManyLocks.java b/java/ql/test/query-tests/ThreadSafe/examples/ManyLocks.java new file mode 100644 index 00000000000..a7e19b3424b --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/ManyLocks.java @@ -0,0 +1,37 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class ManyLocks { + private int y; // $ Alert + + private final Lock lock1 = new ReentrantLock(); + private final Lock lock2 = new ReentrantLock(); + private final Lock lock3 = new ReentrantLock(); + + public void inc() { + lock1.lock(); + lock2.lock(); + y++; + lock2.unlock(); + lock1.unlock(); + } + + public void dec() { + lock2.lock(); + lock3.lock(); + y--; + lock3.unlock(); + lock2.unlock(); + } + + public void reset() { + lock1.lock(); + lock3.lock(); + y = 0; + lock3.unlock(); + lock1.unlock(); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/SyncLstExample.java b/java/ql/test/query-tests/ThreadSafe/examples/SyncLstExample.java new file mode 100644 index 00000000000..04bc1c3c454 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/SyncLstExample.java @@ -0,0 +1,47 @@ +package examples; + +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class SyncLstExample { + private Lock lock = new ReentrantLock(); + private List lst; + + public SyncLstExample(List lst) { + this.lst = lst; + } + + public void add(T item) { + lock.lock(); + lst.add(item); + lock.unlock(); + } + + public void remove(int i) { + lock.lock(); + lst.remove(i); + lock.unlock(); + } +} + +@ThreadSafe +class FaultySyncLstExample { + private Lock lock = new ReentrantLock(); + private List lst; + + public FaultySyncLstExample(List lst) { + this.lst = lst; + } + + public void add(T item) { + lock.lock(); + lst.add(item); + lock.unlock(); + } + + public void remove(int i) { + lst.remove(i); // $ Alert + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/SyncStackExample.java b/java/ql/test/query-tests/ThreadSafe/examples/SyncStackExample.java new file mode 100644 index 00000000000..31e8cebee3e --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/SyncStackExample.java @@ -0,0 +1,39 @@ +package examples; + +import java.util.Stack; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class SyncStackExample { + private Lock lock = new ReentrantLock(); + private Stack stc = new Stack(); + + public void push(T item) { + lock.lock(); + stc.push(item); + lock.unlock(); + } + + public void pop() { + lock.lock(); + stc.pop(); + lock.unlock(); + } +} + +@ThreadSafe +class FaultySyncStackExample { + private Lock lock = new ReentrantLock(); + private Stack stc = new Stack(); + + public void push(T item) { + lock.lock(); + stc.push(item); + lock.unlock(); + } + + public void pop() { + stc.pop(); // $ Alert + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/SynchronizedAndLock.java b/java/ql/test/query-tests/ThreadSafe/examples/SynchronizedAndLock.java new file mode 100644 index 00000000000..52b35a84bb7 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/SynchronizedAndLock.java @@ -0,0 +1,21 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class SynchronizedAndLock { + private Lock lock = new ReentrantLock(); + + private int length = 0; // $ Alert + + public void add(int value) { + lock.lock(); + length++; + lock.unlock(); + } + + public synchronized void subtract() { + length--; + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/Test.java b/java/ql/test/query-tests/ThreadSafe/examples/Test.java new file mode 100644 index 00000000000..e6b0567ef89 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/Test.java @@ -0,0 +1,76 @@ +package examples; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class Test { + /** + * Escaping field due to public visibility. + */ + int publicField; + + private int y; + final int immutableField = 1; + + // As of the below examples with synchronized as well. Except the incorrectly placed lock. + + private Lock lock = new ReentrantLock(); + + /** + * Calls the a method where y field escapes. + * @param y + */ + public void setYAgainInCorrect(int t) { + setYPrivate(t); + } + + /** + * Locks the method where y field escapes. + * @param y + */ + public void setYAgainCorrect(int y) { + lock.lock(); + setYPrivate(y); + lock.unlock(); + } + + /** + * No escaping y field. Locks the y before assignment. + * @param y + */ + public void setYCorrect(int y) { + lock.lock(); + this.y = y; + lock.unlock(); + } + + /** + * No direct escaping, since it method is private. Only escaping if another public method uses this. + * @param y + */ + private void setYPrivate(int y) { + this.y = y; // $ Alert + } + + /** + * Incorrectly locks y. + * @param y + */ + public void setYWrongLock(int y) { + this.y = y; // $ Alert + lock.lock(); + lock.unlock(); + } + + public synchronized int getImmutableField() { + return immutableField; + } + + public synchronized int getImmutableField2() { + return immutableField; + } + + public void testMethod() { + this.y = y + 2; // $ Alert + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/Test2.java b/java/ql/test/query-tests/ThreadSafe/examples/Test2.java new file mode 100644 index 00000000000..731af5ecf67 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/Test2.java @@ -0,0 +1,22 @@ +package examples; + +import java.util.ArrayList; + +// Note: Not marked as thread-safe +// We inherit from this in Test3Super.java +public class Test2 { + int x; + protected ArrayList lst = new ArrayList<>(); + + public Test2() { + this.x = 0; + } + + public void changeX() { + this.x = x + 1; + } + + public void changeLst() { + lst.add("Hello"); + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/Test3Super.java b/java/ql/test/query-tests/ThreadSafe/examples/Test3Super.java new file mode 100644 index 00000000000..5a48e20bc05 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/Test3Super.java @@ -0,0 +1,17 @@ +package examples; + +@ThreadSafe +public class Test3Super extends Test2 { // We might want an alert here for the inherited unsafe methods. + + public Test3Super() { + super.x = 0; + } + + public void y() { + super.x = 0; //$ MISSING: Alert + } + + public void yLst() { + super.lst.add("Hello!"); //$ MISSING: Alert + } +} diff --git a/java/ql/test/query-tests/ThreadSafe/examples/ThreadSafe.java b/java/ql/test/query-tests/ThreadSafe/examples/ThreadSafe.java new file mode 100644 index 00000000000..fc0a645c442 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/ThreadSafe.java @@ -0,0 +1,4 @@ +package examples; + +public @interface ThreadSafe { +} \ No newline at end of file diff --git a/java/ql/test/query-tests/ThreadSafe/examples/TurnstileExample.java b/java/ql/test/query-tests/ThreadSafe/examples/TurnstileExample.java new file mode 100644 index 00000000000..90ea98a77d9 --- /dev/null +++ b/java/ql/test/query-tests/ThreadSafe/examples/TurnstileExample.java @@ -0,0 +1,23 @@ +package examples; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +@ThreadSafe +public class TurnstileExample { + private Lock lock = new ReentrantLock(); + private int count = 0; + + public void inc() { + Lock l = lock; + l.lock(); + count++; + l.unlock(); + } + + public void dec() { + lock.lock(); + count--; + lock.unlock(); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.expected b/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.expected new file mode 100644 index 00000000000..61f5b0ffc57 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.expected @@ -0,0 +1,17 @@ +| packageone/SourcePackage.java:9:21:9:32 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packageone/SourcePackage.java:10:21:10:32 | Annotated.m2 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:11:26:11:27 | m2 | element | +| packageone/SourcePackage.java:16:18:16:36 | fPublic(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:26:23:26:29 | fPublic | element | +| packageone/SourcePackage.java:17:18:17:39 | fProtected(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:31:26:31:35 | fProtected | element | +| packageone/SourcePackage.java:25:31:25:42 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packageone/SourcePackage.java:26:31:26:42 | Annotated.m2 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:11:26:11:27 | m2 | element | +| packageone/SourcePackage.java:29:28:29:46 | fPublic(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:26:23:26:29 | fPublic | element | +| packageone/SourcePackage.java:30:28:30:49 | fProtected(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:31:26:31:35 | fProtected | element | +| packageone/SourcePackage.java:34:23:34:34 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packageone/SourcePackage.java:35:30:35:41 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packageone/SourcePackage.java:36:31:36:42 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packageone/SourcePackage.java:37:33:37:44 | Annotated.m1 | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:9:29:9:30 | m1 | element | +| packagetwo/Source.java:8:20:8:30 | Annotated.m | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:7:19:7:19 | m | element | +| packagetwo/Source.java:14:17:14:29 | f(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:16:16:16:16 | f | element | +| packagetwo/Source.java:20:28:20:47 | new AnnotatedClass(...) | Access of $@ annotated with VisibleForTesting found in production code. | packageone/AnnotatedClass.java:4:14:4:27 | AnnotatedClass | element | +| packagetwo/Source.java:24:30:24:40 | Annotated.m | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:7:19:7:19 | m | element | +| packagetwo/Source.java:28:27:28:39 | f(...) | Access of $@ annotated with VisibleForTesting found in production code. | packagetwo/Annotated.java:16:16:16:16 | f | element | \ No newline at end of file diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.qlref b/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.qlref new file mode 100644 index 00000000000..57947f80431 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/VisibleForTestingAbuse.qlref @@ -0,0 +1,2 @@ +query: Violations of Best Practice/Implementation Hiding/VisibleForTestingAbuse.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/AnnotatedClass.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/AnnotatedClass.java new file mode 100644 index 00000000000..1fdbea1571e --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/AnnotatedClass.java @@ -0,0 +1,6 @@ +package packageone; + +@VisibleForTesting +public class AnnotatedClass { + public AnnotatedClass() {} +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage.java new file mode 100644 index 00000000000..7826f5e1ee0 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage.java @@ -0,0 +1,38 @@ +package packageone; + +import packagetwo.Annotated; + +public class SourcePackage extends Annotated { + void f() { + // Fields - cross-package access (only accessible ones) + // String s = Annotated.m; // Cannot access package-private from different package + String s1 = Annotated.m1; // $ Alert + String s2 = Annotated.m2; // $ Alert + // String s3 = Annotated.m3; // Cannot access private field + + // Methods - cross-package access (only accessible ones) + // int i = Annotated.f(); // Cannot access package-private from different package + // int i1 = Annotated.fPrivate(); // Cannot access private method + int i2 = Annotated.fPublic(); // $ Alert + int i3 = Annotated.fProtected(); // $ Alert + + // Same package class + AnnotatedClass a = new AnnotatedClass(); // COMPLIANT - same package + + // Lambda usage - cross-package (only accessible members) + Runnable lambda = () -> { + // String lambdaS = Annotated.m; // Cannot access package-private + String lambdaS1 = Annotated.m1; // $ Alert + String lambdaS2 = Annotated.m2; // $ Alert + + // int lambdaI = Annotated.f(); // Cannot access package-private + int lambdaI2 = Annotated.fPublic(); // $ Alert + int lambdaI3 = Annotated.fProtected(); // $ Alert + }; + lambda.run(); + } + String myField1 = Annotated.m1; // $ Alert + public String myField2 = Annotated.m1; // $ Alert + private String myField3 = Annotated.m1; // $ Alert + protected String myField4 = Annotated.m1; // $ Alert +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage1.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage1.java new file mode 100644 index 00000000000..d47aa167b46 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/SourcePackage1.java @@ -0,0 +1,22 @@ +package packageone; + +import packagetwo.Annotated; + +public class SourcePackage1 extends Annotated { + @VisibleForTesting + public void f() { + + String s1 = Annotated.m1; + String s2 = Annotated.m2; + + int i2 = Annotated.fPublic(); + int i3 = Annotated.fProtected(); + + Runnable lambda = () -> { + String lambdaS1 = Annotated.m1; + String lambdaS2 = Annotated.m2; + int lambdaI2 = Annotated.fPublic(); + int lambdaI3 = Annotated.fProtected(); + }; + } +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/VisibleForTesting.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/VisibleForTesting.java new file mode 100644 index 00000000000..28aedbf4e53 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packageone/VisibleForTesting.java @@ -0,0 +1,4 @@ +package packageone; + +public @interface VisibleForTesting { +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Annotated.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Annotated.java new file mode 100644 index 00000000000..ad5dbed3f9b --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Annotated.java @@ -0,0 +1,92 @@ +package packagetwo; + +import packageone.*; + +public class Annotated { + @VisibleForTesting + static String m; + @VisibleForTesting + static protected String m1; + @VisibleForTesting + static public String m2; + @VisibleForTesting + static private String m3; + + @VisibleForTesting + static int f() { + return 1; + } + + @VisibleForTesting + static private int fPrivate() { + return 1; + } + + @VisibleForTesting + static public int fPublic() { + return 1; + } + + @VisibleForTesting + static protected int fProtected() { + return 1; + } + + private static void resetPriorities() { + String priority = m; + String priority1 = m1; + String priority2 = m2; + String priority3 = m3; + + int result = f(); + int resultPrivate = fPrivate(); + int resultPublic = fPublic(); + int resultProtected = fProtected(); + } + + private static void resetPriorities2() { + Runnable task = () -> { + String priority = m; + String priority1 = m1; + String priority2 = m2; + String priority3 = m3; + + int result = f(); + int resultPrivate = fPrivate(); + int resultPublic = fPublic(); + int resultProtected = fProtected(); + }; + task.run(); + } + + private static class InnerClass { + void useVisibleForMembers() { + String field = m; + String field1 = m1; + String field2 = m2; + String field3 = m3; + + int method = f(); + int methodPrivate = fPrivate(); + int methodPublic = fPublic(); + int methodProtected = fProtected(); + } + } + + @VisibleForTesting + static class InnerTestClass { + @VisibleForTesting + int getSize() { + return 42; + } + + @VisibleForTesting + private String data; + } + + private void useInnerClass() { + InnerTestClass inner = new InnerTestClass(); + int size = inner.getSize(); + String value = inner.data; + } +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Source.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Source.java new file mode 100644 index 00000000000..94a5cccfd43 --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Source.java @@ -0,0 +1,34 @@ +package packagetwo; + +import packageone.*; + +public class Source { + void f() { + // Fields + String s = Annotated.m; // $ Alert + String s1 = Annotated.m1; // COMPLIANT - same package + String s2 = Annotated.m2; + // String s3 = Annotated.m3; // Cannot access private field + + // Methods + int i = Annotated.f(); // $ Alert + // int i1 = Annotated.fPrivate(); // Cannot access private method + int i2 = Annotated.fPublic(); + int i3 = Annotated.fProtected(); + + // Other class + AnnotatedClass a = new AnnotatedClass(); // $ Alert + + // Lambda usage + Runnable lambda = () -> { + String lambdaS = Annotated.m; // $ Alert + String lambdaS1 = Annotated.m1; + String lambdaS2 = Annotated.m2; + + int lambdaI = Annotated.f(); // $ Alert + int lambdaI2 = Annotated.fPublic(); + int lambdaI3 = Annotated.fProtected(); + }; + lambda.run(); + } +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Test.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Test.java new file mode 100644 index 00000000000..b861d921e9a --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/Test.java @@ -0,0 +1,34 @@ +package packagetwo; + +import packageone.*; + +public class Test { + void f() { + // Fields + String s = Annotated.m; // COMPLIANT + String s1 = Annotated.m1; // COMPLIANT + String s2 = Annotated.m2; // COMPLIANT + // String s3 = Annotated.m3; // Cannot access private field + + // Methods + int i = Annotated.f(); // COMPLIANT + // int i1 = Annotated.fPrivate(); // Cannot access private method + int i2 = Annotated.fPublic(); // COMPLIANT + int i3 = Annotated.fProtected(); // COMPLIANT + + // Other class + AnnotatedClass a = new AnnotatedClass(); // COMPLIANT + + // Lambda usage + Runnable lambda = () -> { + String lambdaS = Annotated.m; // COMPLIANT + String lambdaS1 = Annotated.m1; // COMPLIANT + String lambdaS2 = Annotated.m2; // COMPLIANT + + int lambdaI = Annotated.f(); // COMPLIANT + int lambdaI2 = Annotated.fPublic(); // COMPLIANT + int lambdaI3 = Annotated.fProtected(); // COMPLIANT + }; + lambda.run(); + } +} diff --git a/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/UseWithinAnnotation.java b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/UseWithinAnnotation.java new file mode 100644 index 00000000000..f6cdb32d53c --- /dev/null +++ b/java/ql/test/query-tests/VisibleForTestingAbuse/packagetwo/UseWithinAnnotation.java @@ -0,0 +1,18 @@ +package packagetwo; + +import packageone.*; + +@interface Range { + int min() default 0; + int max() default 100; +} + +public class UseWithinAnnotation { + @VisibleForTesting + static final int MAX_LISTING_LENGTH_MIN = 1; + @VisibleForTesting + static final int MAX_LISTING_LENGTH_MAX = 1000; + + @Range(min = MAX_LISTING_LENGTH_MIN, max = MAX_LISTING_LENGTH_MAX) + private int maxListingLength = MAX_LISTING_LENGTH_MAX; +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected similarity index 93% rename from java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected rename to java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected index caecb52fe45..f00a00c7258 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected +++ b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.expected @@ -1,3 +1,14 @@ +#select +| SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | This sensitive cookie | +| SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | This sensitive cookie | edges | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:25:39:25:52 | tokenCookieStr : String | provenance | | | SensitiveCookieNotHttpOnly.java:25:28:25:64 | new Cookie(...) : Cookie | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | provenance | Sink:MaD:1 | @@ -53,15 +64,4 @@ nodes | SensitiveCookieNotHttpOnly.java:91:16:91:21 | cookie : Cookie | semmle.label | cookie : Cookie | | SensitiveCookieNotHttpOnly.java:110:25:110:64 | createAuthenticationCookie(...) : Cookie | semmle.label | createAuthenticationCookie(...) : Cookie | | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | semmle.label | cookie | -problems -| SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" : String | SensitiveCookieNotHttpOnly.java:31:28:31:36 | jwtCookie | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:24:33:24:43 | "jwt_token" | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:49 | "token=" | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... : String | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:57 | ... + ... | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:42:42:42:69 | ... + ... | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:52:42:52:124 | toString(...) | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:52:56:52:75 | "session-access-key" | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" : String | SensitiveCookieNotHttpOnly.java:65:42:65:47 | keyStr | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:63:51:63:70 | "session-access-key" | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:35 | "token=" | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:43 | ... + ... | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... : String | SensitiveCookieNotHttpOnly.java:71:42:71:50 | secString | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:70:28:70:55 | ... + ... | This sensitive cookie | -| SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" : String | SensitiveCookieNotHttpOnly.java:111:28:111:33 | cookie | $@ doesn't have the HttpOnly flag set. | SensitiveCookieNotHttpOnly.java:88:35:88:51 | "Presto-UI-Token" | This sensitive cookie | subpaths diff --git a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java similarity index 92% rename from java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java rename to java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java index 627575c8403..91f8f3ad4ce 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java +++ b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.java @@ -21,14 +21,14 @@ class SensitiveCookieNotHttpOnly { // BAD - Tests adding a sensitive cookie without the `HttpOnly` flag set. public void addCookie2(String jwt_token, String userId, HttpServletRequest request, HttpServletResponse response) { - String tokenCookieStr = "jwt_token"; + String tokenCookieStr = "jwt_token"; // $Source Cookie jwtCookie = new Cookie(tokenCookieStr, jwt_token); Cookie userIdCookie = new Cookie("user_id", userId); jwtCookie.setPath("/"); userIdCookie.setPath("/"); jwtCookie.setMaxAge(3600*24*7); userIdCookie.setMaxAge(3600*24*7); - response.addCookie(jwtCookie); + response.addCookie(jwtCookie); // $Alert response.addCookie(userIdCookie); } @@ -39,7 +39,7 @@ class SensitiveCookieNotHttpOnly { // BAD - Tests set a sensitive cookie header without the `HttpOnly` flag set. public void addCookie4(String authId, HttpServletRequest request, HttpServletResponse response) { - response.addHeader("Set-Cookie", "token=" +authId + ";Secure"); + response.addHeader("Set-Cookie", "token=" +authId + ";Secure"); // $Alert } // GOOD - Tests set a sensitive cookie header using the class `javax.ws.rs.core.Cookie` with the `HttpOnly` flag set through string concatenation. @@ -49,7 +49,7 @@ class SensitiveCookieNotHttpOnly { // BAD - Tests set a sensitive cookie header using the class `javax.ws.rs.core.Cookie` without the `HttpOnly` flag set. public void addCookie6(String accessKey, HttpServletRequest request, HttpServletResponse response) { - response.setHeader("Set-Cookie", new NewCookie("session-access-key", accessKey, "/", null, null, 0, true).toString()); + response.setHeader("Set-Cookie", new NewCookie("session-access-key", accessKey, "/", null, null, 0, true).toString()); // $Alert } // GOOD - Tests set a sensitive cookie header using the class `javax.ws.rs.core.Cookie` with the `HttpOnly` flag set through the constructor. @@ -60,15 +60,15 @@ class SensitiveCookieNotHttpOnly { // BAD - Tests set a sensitive cookie header using the class `javax.ws.rs.core.Cookie` without the `HttpOnly` flag set. public void addCookie8(String accessKey, HttpServletRequest request, HttpServletResponse response) { - NewCookie accessKeyCookie = new NewCookie("session-access-key", accessKey, "/", null, 0, null, 86400, true); + NewCookie accessKeyCookie = new NewCookie("session-access-key", accessKey, "/", null, 0, null, 86400, true); // $Source String keyStr = accessKeyCookie.toString(); - response.setHeader("Set-Cookie", keyStr); + response.setHeader("Set-Cookie", keyStr); // $Alert } // BAD - Tests set a sensitive cookie header using a variable without the `HttpOnly` flag set. public void addCookie9(String authId, HttpServletRequest request, HttpServletResponse response) { - String secString = "token=" +authId + ";Secure"; - response.addHeader("Set-Cookie", secString); + String secString = "token=" +authId + ";Secure"; // $Source + response.addHeader("Set-Cookie", secString); // $Alert } // GOOD - Tests set a sensitive cookie header with the `HttpOnly` flag set using `String.format(...)`. @@ -85,7 +85,7 @@ class SensitiveCookieNotHttpOnly { } public Cookie createAuthenticationCookie(HttpServletRequest request, String jwt) { - String PRESTO_UI_COOKIE = "Presto-UI-Token"; + String PRESTO_UI_COOKIE = "Presto-UI-Token"; // $Source Cookie cookie = new Cookie(PRESTO_UI_COOKIE, jwt); cookie.setPath("/ui"); return cookie; @@ -108,7 +108,7 @@ class SensitiveCookieNotHttpOnly { // BAD - Tests set a sensitive cookie header without the `HttpOnly` flag set using a wrapper method. public void addCookie12(HttpServletRequest request, HttpServletResponse response, String jwt) { Cookie cookie = createAuthenticationCookie(request, jwt); - response.addCookie(cookie); + response.addCookie(cookie); // $Alert } // GOOD - Tests remove a sensitive cookie header without the `HttpOnly` flag set using a wrapper method. @@ -141,7 +141,7 @@ class SensitiveCookieNotHttpOnly { // This example is missed because the `cookie.setHttpOnly` call in `createCookie` is thought to maybe set the HTTP-only flag, and the `cookie` // object flows to this `addCookie` call. public void addCookie15(HttpServletRequest request, HttpServletResponse response, String refreshToken) { - response.addCookie(createCookie("refresh_token", refreshToken, false)); + response.addCookie(createCookie("refresh_token", refreshToken, false)); // $MISSING:Alert } // GOOD - CSRF token doesn't need to have the `HttpOnly` flag set. diff --git a/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref new file mode 100644 index 00000000000..fd347f0adf8 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-1004/SensitiveCookieNotHttpOnly.qlref @@ -0,0 +1,4 @@ +query: Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql +postprocess: +- utils/test/InlineExpectationsTestQuery.ql +- utils/test/PrettyPrintModels.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-1004/options b/java/ql/test/query-tests/security/CWE-1004/options new file mode 100644 index 00000000000..0db0b6e7242 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-1004/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/jsr311-api-1.1.1:${testdir}/../../../stubs/springframework-5.8.x diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.expected b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.expected new file mode 100644 index 00000000000..8845d970df2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.expected @@ -0,0 +1,8 @@ +| Version1.0.x-1.4.x/bad/default/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | file://:0:0:0:0 | (none) | configuration | +| Version1.0.x-1.4.x/bad/false/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version1.0.x-1.4.x/bad/false/application.properties:2:1:2:33 | management.security.enabled=false | configuration | +| Version1.5.x/bad/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version1.5.x/bad/application.properties:2:1:2:33 | management.security.enabled=false | configuration | +| Version2.x/bad/expose/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version2.x/bad/expose/application.properties:2:1:2:33 | management.endpoints.web.expose=* | configuration | +| Version2.x/bad/exposure-include/all-exposed/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version2.x/bad/exposure-include/all-exposed/application.properties:2:1:2:43 | management.endpoints.web.exposure.include=* | configuration | +| Version2.x/bad/exposure-include/some-exposed/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version2.x/bad/exposure-include/some-exposed/application.properties:2:1:2:59 | management.endpoints.web.exposure.include=health,info,beans | configuration | +| Version3.x/bad/all-exposed/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version3.x/bad/all-exposed/application.properties:2:1:2:43 | management.endpoints.web.exposure.include=* | configuration | +| Version3.x/bad/some-exposed/pom.xml:29:9:32:22 | dependency | Insecure Spring Boot actuator $@ exposes sensitive endpoints. | Version3.x/bad/some-exposed/application.properties:2:1:2:59 | management.endpoints.web.exposure.include=health,info,beans | configuration | diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qlref b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qlref new file mode 100644 index 00000000000..eec8ba18ae1 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/SpringBootActuatorsConfig.qlref @@ -0,0 +1,2 @@ +query: Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/application.properties new file mode 100644 index 00000000000..a41bbc9fdca --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/application.properties @@ -0,0 +1 @@ +# vulnerable configuration (spring boot 1.0 - 1.4): exposes actuators by default \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/pom_bad.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/pom.xml similarity index 93% rename from java/ql/src/experimental/Security/CWE/CWE-016/pom_bad.xml rename to java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/pom.xml index 9dd5c9c188b..83c7d2685f3 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-016/pom_bad.xml +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/default/pom.xml @@ -17,7 +17,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.8.RELEASE + 1.2.6.RELEASE @@ -29,18 +29,15 @@ org.springframework.boot spring-boot-starter-actuator - + org.springframework.boot spring-boot-devtools - - - org.springframework.boot spring-boot-test diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/application.properties new file mode 100644 index 00000000000..621b859214c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 1.0 - 1.4): exposes actuators by default +management.security.enabled=false \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/pom.xml new file mode 100644 index 00000000000..83c7d2685f3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/bad/false/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 1.2.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/application.properties new file mode 100644 index 00000000000..6cadc4c756d --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/application.properties @@ -0,0 +1,2 @@ +# safe configuration (spring boot 1.0 - 1.4): exposes actuators by default +management.security.enabled=true \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-016/pom_good.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/pom.xml similarity index 94% rename from java/ql/src/experimental/Security/CWE/CWE-016/pom_good.xml rename to java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/pom.xml index 89f577f21e5..452d4b69c35 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-016/pom_good.xml +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.0.x-1.4.x/good/pom.xml @@ -17,7 +17,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.8.RELEASE + 1.2.6.RELEASE @@ -34,13 +34,10 @@ org.springframework.boot spring-boot-devtools - - org.springframework.boot spring-boot-starter-security - org.springframework.boot spring-boot-test diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/application.properties new file mode 100644 index 00000000000..f1e8f6587d0 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/application.properties @@ -0,0 +1,2 @@ +# safe configuration (spring boot 1.5+): requires value false to expose sensitive actuators +management.security.enabled=false \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/pom.xml new file mode 100644 index 00000000000..aa1a4bcaf05 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/bad/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 1.5.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/application.properties new file mode 100644 index 00000000000..bec45a22b82 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 1.5+): requires value false to expose sensitive actuators +management.security.enabled=true \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/pom.xml new file mode 100644 index 00000000000..39b46bef7e4 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version1.5.x/good/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 1.5.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/application.properties new file mode 100644 index 00000000000..338b1fb3a9c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 2.0.0.RC1): exposes health and info only by default, here overridden to expose everything +management.endpoints.web.expose=* \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/pom.xml new file mode 100644 index 00000000000..c22f08d7e7e --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/expose/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/application.properties new file mode 100644 index 00000000000..bbc1915b05e --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 2+): exposes health and info only by default, here overridden to expose everything +management.endpoints.web.exposure.include=* \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/pom.xml new file mode 100644 index 00000000000..c22f08d7e7e --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/all-exposed/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/application.properties new file mode 100644 index 00000000000..1f29407c192 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 2+): exposes health and info only by default, here overridden to also expose beans +management.endpoints.web.exposure.include=health,info,beans \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/pom.xml new file mode 100644 index 00000000000..c22f08d7e7e --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/bad/exposure-include/some-exposed/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/application.properties new file mode 100644 index 00000000000..f7e0c1b43ac --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/application.properties @@ -0,0 +1,2 @@ +# safe configuration (spring boot 2+): exposes health and info only by default +management.endpoints.web.exposure.include=info,health \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/pom.xml new file mode 100644 index 00000000000..e65ebf04701 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version2.x/good/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/application.properties new file mode 100644 index 00000000000..c5570065bae --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 3+): exposes health only by default, here overridden to expose everything +management.endpoints.web.exposure.include=* \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/pom.xml similarity index 95% rename from java/ql/test/experimental/query-tests/security/CWE-016/pom.xml rename to java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/pom.xml index a9d5fa920c8..12dab1d9421 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-016/pom.xml +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/all-exposed/pom.xml @@ -17,7 +17,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.8.RELEASE + 3.3.5 @@ -29,7 +29,7 @@ org.springframework.boot spring-boot-starter-actuator - + org.springframework.boot spring-boot-devtools diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/application.properties new file mode 100644 index 00000000000..27d08eac74f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/application.properties @@ -0,0 +1,2 @@ +# vulnerable configuration (spring boot 3+): exposes health only by default, here overridden to also expose info and beans +management.endpoints.web.exposure.include=health,info,beans \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/pom.xml new file mode 100644 index 00000000000..12dab1d9421 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/bad/some-exposed/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 3.3.5 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/application.properties b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/application.properties new file mode 100644 index 00000000000..8ba56eadc35 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/application.properties @@ -0,0 +1,2 @@ +# safe configuration (spring boot 3+): exposes health only by default. +management.endpoints.web.exposure.include=health \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/pom.xml b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/pom.xml new file mode 100644 index 00000000000..a8103e681e4 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/Version3.x/good/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + spring-boot-actuator-app + spring-boot-actuator-app + 1.0-SNAPSHOT + + + UTF-8 + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-starter-parent + 3.3.5 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-test + + + + \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-016/options b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/options similarity index 62% rename from java/ql/test/experimental/query-tests/security/CWE-016/options rename to java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/options index 2ce7a4743cd..ab29fd4e46f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-016/options +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/SpringBootActuatorsConfig/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.8.x +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../../stubs/springframework-5.8.x diff --git a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java index 03a61cfcf97..f32de324a1d 100644 --- a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java +++ b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java @@ -119,8 +119,26 @@ public class SanitizationTests extends HttpServlet { String unsafeUri10 = String.format("%s://%s:%s%s", "http", "myserver.com", "80", request.getParameter("baduri10")); // $ Source HttpRequest unsafer10 = HttpRequest.newBuilder(new URI(unsafeUri10)).build(); // $ Alert client.send(unsafer10, null); // $ Alert + + // GOOD: sanitisation by regexp validation + String param10 = request.getParameter("uri10"); + if (param10.matches("[a-zA-Z0-9_-]+")) { + HttpRequest r10 = HttpRequest.newBuilder(new URI(param10)).build(); + client.send(r10, null); + } + + String param11 = request.getParameter("uri11"); + validate(param11); + HttpRequest r11 = HttpRequest.newBuilder(new URI(param11)).build(); + client.send(r11, null); } catch (Exception e) { // TODO: handle exception } } + + private void validate(String s) { + if (!s.matches("[a-zA-Z0-9_-]+")) { + throw new IllegalArgumentException("Invalid ID"); + } + } } diff --git a/java/ql/test/stubs/junit-4.13/LICENSE-junit.txt b/java/ql/test/stubs/junit-4.13/LICENSE-junit.txt new file mode 100644 index 00000000000..fb686291a05 --- /dev/null +++ b/java/ql/test/stubs/junit-4.13/LICENSE-junit.txt @@ -0,0 +1,214 @@ +JUnit + +Eclipse Public License - v 1.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial code and + documentation distributed under this Agreement, and + b) in the case of each subsequent Contributor: + + i) changes to the Program, and + + ii) additions to the Program; + + where such changes and/or additions to the Program originate from and are +distributed by that particular Contributor. A Contribution 'originates' from a +Contributor if it was added to the Program by such Contributor itself or anyone +acting on such Contributor's behalf. Contributions do not include additions to +the Program which: (i) are separate modules of software distributed in +conjunction with the Program under their own license agreement, and (ii) are +not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents " mean patent claims licensable by a Contributor which are +necessarily infringed by the use or sale of its Contribution alone or when +combined with the Program. + +"Program" means the Contributions distributed in accordance with this Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, +including all Contributors. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free copyright license to +reproduce, prepare derivative works of, publicly display, publicly perform, +distribute and sublicense the Contribution of such Contributor, if any, and +such derivative works, in source code and object code form. + + b) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free patent license under +Licensed Patents to make, use, sell, offer to sell, import and otherwise +transfer the Contribution of such Contributor, if any, in source code and +object code form. This patent license shall apply to the combination of the +Contribution and the Program if, at the time the Contribution is added by the +Contributor, such addition of the Contribution causes such combination to be +covered by the Licensed Patents. The patent license shall not apply to any +other combinations which include the Contribution. No hardware per se is +licensed hereunder. + + c) Recipient understands that although each Contributor grants the +licenses to its Contributions set forth herein, no assurances are provided by +any Contributor that the Program does not infringe the patent or other +intellectual property rights of any other entity. Each Contributor disclaims +any liability to Recipient for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a condition to +exercising the rights and licenses granted hereunder, each Recipient hereby +assumes sole responsibility to secure any other intellectual property rights +needed, if any. For example, if a third party patent license is required to +allow Recipient to distribute the Program, it is Recipient's responsibility to +acquire that license before distributing the Program. + + d) Each Contributor represents that to its knowledge it has sufficient +copyright rights in its Contribution, if any, to grant the copyright license +set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under +its own license agreement, provided that: + + a) it complies with the terms and conditions of this Agreement; and + + b) its license agreement: + + i) effectively disclaims on behalf of all Contributors all warranties and +conditions, express and implied, including warranties or conditions of title +and non-infringement, and implied warranties or conditions of merchantability +and fitness for a particular purpose; + + ii) effectively excludes on behalf of all Contributors all liability for +damages, including direct, indirect, special, incidental and consequential +damages, such as lost profits; + + iii) states that any provisions which differ from this Agreement are +offered by that Contributor alone and not by any other party; and + + iv) states that source code for the Program is available from such +Contributor, and informs licensees how to obtain it in a reasonable manner on +or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + + a) it must be made available under this Agreement; and + + b) a copy of this Agreement must be included with each copy of the +Program. + +Contributors may not remove or alter any copyright notices contained within the +Program. + +Each Contributor must identify itself as the originator of its Contribution, if +any, in a manner that reasonably allows subsequent Recipients to identify the +originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with +respect to end users, business partners and the like. While this license is +intended to facilitate the commercial use of the Program, the Contributor who +includes the Program in a commercial product offering should do so in a manner +which does not create potential liability for other Contributors. Therefore, if +a Contributor includes the Program in a commercial product offering, such +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify +every other Contributor ("Indemnified Contributor") against any losses, damages +and costs (collectively "Losses") arising from claims, lawsuits and other legal +actions brought by a third party against the Indemnified Contributor to the +extent caused by the acts or omissions of such Commercial Contributor in +connection with its distribution of the Program in a commercial product +offering. The obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In order +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial Contributor +to control, and cooperate with the Commercial Contributor in, the defense and +any related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product +offering, Product X. That Contributor is then a Commercial Contributor. If that +Commercial Contributor then makes performance claims, or offers warranties +related to Product X, those performance claims and warranties are such +Commercial Contributor's responsibility alone. Under this section, the +Commercial Contributor would have to defend claims against the other +Contributors related to those performance claims and warranties, and if a court +requires any other Contributor to pay any damages as a result, the Commercial +Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each +Recipient is solely responsible for determining the appropriateness of using +and distributing the Program and assumes all risks associated with its exercise +of rights under this Agreement, including but not limited to the risks and +costs of program errors, compliance with applicable laws, damage to or loss of +data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS +GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under applicable +law, it shall not affect the validity or enforceability of the remainder of the +terms of this Agreement, and without further action by the parties hereto, such +provision shall be reformed to the minimum extent necessary to make such +provision valid and enforceable. + +If Recipient institutes patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software or +hardware) infringes such Recipient's patent(s), then such Recipient's rights +granted under Section 2(b) shall terminate as of the date such litigation is +filed. + +All Recipient's rights under this Agreement shall terminate if it fails to +comply with any of the material terms or conditions of this Agreement and does +not cure such failure in a reasonable period of time after becoming aware of +such noncompliance. If all Recipient's rights under this Agreement terminate, +Recipient agrees to cease use and distribution of the Program as soon as +reasonably practicable. However, Recipient's obligations under this Agreement +and any licenses granted by Recipient relating to the Program shall continue +and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in +order to avoid inconsistency the Agreement is copyrighted and may only be +modified in the following manner. The Agreement Steward reserves the right to +publish new versions (including revisions) of this Agreement from time to time. +No one other than the Agreement Steward has the right to modify this Agreement. +The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to +serve as the Agreement Steward to a suitable separate entity. Each new version +of the Agreement will be given a distinguishing version number. The Program +(including Contributions) may always be distributed subject to the version of +the Agreement under which it was received. In addition, after a new version of +the Agreement is published, Contributor may elect to distribute the Program +(including its Contributions) under the new version. Except as expressly stated +in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to +the intellectual property of any Contributor under this Agreement, whether +expressly, by implication, estoppel or otherwise. All rights in the Program not +expressly granted under this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the +intellectual property laws of the United States of America. No party to this +Agreement will bring a legal action under this Agreement more than one year +after the cause of action arose. Each party waives its rights to a jury trial +in any resulting litigation. + diff --git a/java/ql/test/stubs/junit-4.13/org/junit/Assert.java b/java/ql/test/stubs/junit-4.13/org/junit/Assert.java new file mode 100644 index 00000000000..cbd86acdb81 --- /dev/null +++ b/java/ql/test/stubs/junit-4.13/org/junit/Assert.java @@ -0,0 +1,472 @@ +package org.junit; + +import org.junit.function.ThrowingRunnable; + +//BSD License +// +//Copyright (c) 2000-2006, www.hamcrest.org +//All rights reserved. +// +//Redistribution and use in source and binary forms, with or without +//modification, are permitted provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of +//conditions and the following disclaimer. Redistributions in binary form must reproduce +//the above copyright notice, this list of conditions and the following disclaimer in +//the documentation and/or other materials provided with the distribution. +// +//Neither the name of Hamcrest nor the names of its contributors may be used to endorse +//or promote products derived from this software without specific prior written +//permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +//WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +//DAMAGE. + +/* + * MODIFIED version of JUnit 4.13 as available at + * https://search.maven.org/remotecontent?filepath=junit/junit/4.13/junit-4.13-sources.jar + * Only parts of this file have been retained for test purposes. + */ + +public class Assert { + /** + * Asserts that a condition is true. If it isn't it throws an + * {@link AssertionError} with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param condition condition to be checked + */ + static public void assertTrue(String message, boolean condition) { + return; + } + + /** + * Asserts that a condition is true. If it isn't it throws an + * {@link AssertionError} without a message. + * + * @param condition condition to be checked + */ + static public void assertTrue(boolean condition) { + return; + } + + /** + * Asserts that a condition is false. If it isn't it throws an + * {@link AssertionError} with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param condition condition to be checked + */ + static public void assertFalse(String message, boolean condition) { + return; + } + + /** + * Asserts that a condition is false. If it isn't it throws an + * {@link AssertionError} without a message. + * + * @param condition condition to be checked + */ + static public void assertFalse(boolean condition) { + return; + } + + /** + * Fails a test with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @see AssertionError + */ + static public void fail(String message) { + if (message == null) { + throw new AssertionError(); + } + throw new AssertionError(message); + } + + /** + * Asserts that an object isn't null. If it is an {@link AssertionError} is + * thrown with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param object Object to check or null + */ + static public void assertNotNull(String message, Object object) { + return; + } + + /** + * Asserts that an object isn't null. If it is an {@link AssertionError} is + * thrown. + * + * @param object Object to check or null + */ + static public void assertNotNull(Object object) { + return; + } + + /** + * Asserts that an object is null. If it is not, an {@link AssertionError} + * is thrown with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param object Object to check or null + */ + static public void assertNull(String message, Object object) { + return; + } + + /** + * Asserts that an object is null. If it isn't an {@link AssertionError} is + * thrown. + * + * @param object Object to check or null + */ + static public void assertNull(Object object) { + return; + } + + private static boolean equalsRegardingNull(Object expected, Object actual) { + if (expected == null) { + return actual == null; + } + + return isEquals(expected, actual); + } + + private static boolean isEquals(Object expected, Object actual) { + return expected.equals(actual); + } + + /** + * Asserts that two doubles are equal to within a positive delta. + * If they are not, an {@link AssertionError} is thrown with the given + * message. If the expected value is infinity then the delta value is + * ignored. NaNs are considered equal: + * assertEquals(Double.NaN, Double.NaN, *) passes + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param expected expected value + * @param actual the value to check against expected + * @param delta the maximum delta between expected and + * actual for which both numbers are still + * considered equal. + */ + public static void assertEquals(String message, double expected, + double actual, double delta) { + return; + } + + private static void failNotEquals(String message, Object expected, + Object actual) { + fail(format(message, expected, actual)); + } + + static String format(String message, Object expected, Object actual) { + String formatted = ""; + if (message != null && !"".equals(message)) { + formatted = message + " "; + } + String expectedString = String.valueOf(expected); + String actualString = String.valueOf(actual); + if (equalsRegardingNull(expectedString, actualString)) { + return formatted + "expected: " + + formatClassAndValue(expected, expectedString) + + " but was: " + formatClassAndValue(actual, actualString); + } else { + return formatted + "expected:<" + expectedString + "> but was:<" + + actualString + ">"; + } + } + + private static String formatClass(Class value) { + String className = value.getCanonicalName(); + return className == null ? value.getName() : className; + } + + private static String formatClassAndValue(Object value, String valueString) { + String className = value == null ? "null" : value.getClass().getName(); + return className + "<" + valueString + ">"; + } + + /** + * Asserts that two floats are equal to within a positive delta. + * If they are not, an {@link AssertionError} is thrown with the given + * message. If the expected value is infinity then the delta value is + * ignored. NaNs are considered equal: + * assertEquals(Float.NaN, Float.NaN, *) passes + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param expected expected value + * @param actual the value to check against expected + * @param delta the maximum delta between expected and + * actual for which both numbers are still + * considered equal. + */ + public static void assertEquals(String message, float expected, float actual, + float delta) { + if (floatIsDifferent(expected, actual, delta)) { + failNotEquals(message, Float.valueOf(expected), Float.valueOf(actual)); + } + } + + private static boolean doubleIsDifferent(double d1, double d2, double delta) { + if (Double.compare(d1, d2) == 0) { + return false; + } + if ((Math.abs(d1 - d2) <= delta)) { + return false; + } + + return true; + } + + private static boolean floatIsDifferent(float f1, float f2, float delta) { + if (Float.compare(f1, f2) == 0) { + return false; + } + if ((Math.abs(f1 - f2) <= delta)) { + return false; + } + + return true; + } + + /** + * Asserts that two longs are equal. If they are not, an + * {@link AssertionError} is thrown. + * + * @param expected expected long value. + * @param actual actual long value + */ + public static void assertEquals(long expected, long actual) { + assertEquals(null, expected, actual); + } + + /** + * Asserts that two longs are equal. If they are not, an + * {@link AssertionError} is thrown with the given message. + * + * @param message the identifying message for the {@link AssertionError} + * (null + * okay) + * @param expected long expected value. + * @param actual long actual value + */ + public static void assertEquals(String message, long expected, long actual) { + if (expected != actual) { + failNotEquals(message, Long.valueOf(expected), Long.valueOf(actual)); + } + } + + /** + * @deprecated Use + * assertEquals(double expected, double actual, double + * delta) instead + */ + @Deprecated + public static void assertEquals(double expected, double actual) { + assertEquals(null, expected, actual); + } + + /** + * @deprecated Use + * assertEquals(String message, double expected, double + * actual, double delta) instead + */ + @Deprecated + public static void assertEquals(String message, double expected, + double actual) { + fail("Use assertEquals(expected, actual, delta) to compare " + + "floating-point numbers"); + } + + /** + * Asserts that two doubles are equal to within a positive delta. + * If they are not, an {@link AssertionError} is thrown. If the expected + * value is infinity then the delta value is ignored.NaNs are considered + * equal: assertEquals(Double.NaN, Double.NaN, *) passes + * + * @param expected expected value + * @param actual the value to check against expected + * @param delta the maximum delta between expected and + * actual for which both numbers are still + * considered equal. + */ + public static void assertEquals(double expected, double actual, + double delta) { + assertEquals(null, expected, actual, delta); + } + + /** + * Asserts that two floats are equal to within a positive delta. + * If they are not, an {@link AssertionError} is thrown. If the expected + * value is infinity then the delta value is ignored. NaNs are considered + * equal: assertEquals(Float.NaN, Float.NaN, *) passes + * + * @param expected expected value + * @param actual the value to check against expected + * @param delta the maximum delta between expected and + * actual for which both numbers are still + * considered equal. + */ + public static void assertEquals(float expected, float actual, float delta) { + assertEquals(null, expected, actual, delta); + } + + /** + * Asserts that two objects are equal. If they are not, an + * {@link AssertionError} without a message is thrown. If + * expected and actual are null, + * they are considered equal. + * + * @param expected expected value + * @param actual the value to check against expected + */ + public static void assertEquals(Object expected, Object actual) { + assertEquals(null, expected, actual); + } + + public static void assertEquals(String message, Object expected, + Object actual) { + } + + public static void assertNotEquals(String message, Object unexpected, Object actual) { + return; + } + + public static void assertNotEquals(Object unexpected, Object actual) { + assertNotEquals(null, unexpected, actual); + } + + public static void assertNotEquals(String message, long unexpected, long actual) { + return; + } + + public static void assertNotEquals(long unexpected, long actual) { + assertNotEquals(null, unexpected, actual); + } + + public static void assertNotEquals(String message, double unexpected, double actual, double delta) { + return; + } + + public static void assertNotEquals(double unexpected, double actual, double delta) { + assertNotEquals(null, unexpected, actual, delta); + } + + public static void assertNotEquals(String message, float unexpected, float actual, float delta) { + return; + } + + public static void assertNotEquals(float unexpected, float actual, float delta) { + assertNotEquals(null, unexpected, actual, delta); + } + + public static void assertNotSame(String message, Object unexpected, Object actual) { + return; + } + + public static void assertNotSame(Object unexpected, Object actual) { + assertNotSame(null, unexpected, actual); + } + + public static void assertSame(String message, Object expected, Object actual) { + return; + } + + public static void assertSame(Object expected, Object actual) { + assertSame(null, expected, actual); + } + + /** + * Asserts that {@code runnable} throws an exception of type {@code expectedThrowable} when + * executed. If it does, the exception object is returned. If it does not throw an exception, an + * {@link AssertionError} is thrown. If it throws the wrong type of exception, an {@code + * AssertionError} is thrown describing the mismatch; the exception that was actually thrown can + * be obtained by calling {@link AssertionError#getCause}. + * + * @param expectedThrowable the expected type of the exception + * @param runnable a function that is expected to throw an exception when executed + * @return the exception thrown by {@code runnable} + * @since 4.13 + */ + public static T assertThrows(Class expectedThrowable, + ThrowingRunnable runnable) { + return assertThrows(null, expectedThrowable, runnable); + } + + /** + * Asserts that {@code runnable} throws an exception of type {@code expectedThrowable} when + * executed. If it does, the exception object is returned. If it does not throw an exception, an + * {@link AssertionError} is thrown. If it throws the wrong type of exception, an {@code + * AssertionError} is thrown describing the mismatch; the exception that was actually thrown can + * be obtained by calling {@link AssertionError#getCause}. + * + * @param message the identifying message for the {@link AssertionError} (null + * okay) + * @param expectedThrowable the expected type of the exception + * @param runnable a function that is expected to throw an exception when executed + * @return the exception thrown by {@code runnable} + * @since 4.13 + */ + public static T assertThrows(String message, Class expectedThrowable, + ThrowingRunnable runnable) { + try { + runnable.run(); + } catch (Throwable actualThrown) { + if (expectedThrowable.isInstance(actualThrown)) { + @SuppressWarnings("unchecked") T retVal = (T) actualThrown; + return retVal; + } else { + String expected = formatClass(expectedThrowable); + Class actualThrowable = actualThrown.getClass(); + String actual = formatClass(actualThrowable); + if (expected.equals(actual)) { + // There must be multiple class loaders. Add the identity hash code so the message + // doesn't say "expected: java.lang.String ..." + expected += "@" + Integer.toHexString(System.identityHashCode(expectedThrowable)); + actual += "@" + Integer.toHexString(System.identityHashCode(actualThrowable)); + } + String mismatchMessage = buildPrefix(message) + + format("unexpected exception type thrown;", expected, actual); + + // The AssertionError(String, Throwable) ctor is only available on JDK7. + AssertionError assertionError = new AssertionError(mismatchMessage); + assertionError.initCause(actualThrown); + throw assertionError; + } + } + String notThrownMessage = buildPrefix(message) + String + .format("expected %s to be thrown, but nothing was thrown", + formatClass(expectedThrowable)); + throw new AssertionError(notThrownMessage); + } + + private static String buildPrefix(String message) { + return message != null && message.length() != 0 ? message + ": " : ""; + } + +} diff --git a/java/ql/test/stubs/junit-4.13/org/junit/Test.java b/java/ql/test/stubs/junit-4.13/org/junit/Test.java new file mode 100644 index 00000000000..8356b546d79 --- /dev/null +++ b/java/ql/test/stubs/junit-4.13/org/junit/Test.java @@ -0,0 +1,28 @@ +/* + * Copyright 2015-2018 the original author or authors. + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v2.0 which + * accompanies this distribution and is available at + * + * http://www.eclipse.org/legal/epl-v20.html + */ + +/* + * MODIFIED version of junit-jupiter-api 5.2.0 as available at + * https://search.maven.org/classic/remotecontent?filepath=org/junit/jupiter/junit-jupiter-api/5.2.0/junit-jupiter-api-5.2.0-sources.jar + * Only parts of this file have been retained for test purposes. + */ + +package org.junit; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Test {} diff --git a/java/ql/test/stubs/junit-4.13/org/junit/function/ThrowingRunnable.java b/java/ql/test/stubs/junit-4.13/org/junit/function/ThrowingRunnable.java new file mode 100644 index 00000000000..d0eb782ccd3 --- /dev/null +++ b/java/ql/test/stubs/junit-4.13/org/junit/function/ThrowingRunnable.java @@ -0,0 +1,14 @@ +package org.junit.function; + +/** + * This interface facilitates the use of + * {@link org.junit.Assert#assertThrows(Class, ThrowingRunnable)} from Java 8. It allows method + * references to void methods (that declare checked exceptions) to be passed directly into + * {@code assertThrows} + * without wrapping. It is not meant to be implemented directly. + * + * @since 4.13 + */ +public interface ThrowingRunnable { + void run() throws Throwable; +} diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/ArgumentMatchers.java b/java/ql/test/stubs/mockito-5.14/org/mockito/ArgumentMatchers.java new file mode 100644 index 00000000000..84004de2ac3 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/ArgumentMatchers.java @@ -0,0 +1,4 @@ +package org.mockito; + +public class ArgumentMatchers { +} diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/MockSettings.java b/java/ql/test/stubs/mockito-5.14/org/mockito/MockSettings.java new file mode 100644 index 00000000000..f6e46d610e7 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/MockSettings.java @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito; + +import java.io.Serializable; + +public interface MockSettings extends Serializable { +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/Mockito.java b/java/ql/test/stubs/mockito-5.14/org/mockito/Mockito.java new file mode 100644 index 00000000000..e4d5a06a247 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/Mockito.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito; + +import org.mockito.ArgumentMatchers; +import org.mockito.MockSettings; +import org.mockito.internal.creation.MockSettingsImpl; +import org.mockito.stubbing.Answer; +import org.mockito.stubbing.OngoingStubbing; +import org.mockito.internal.MockitoCore; +import org.mockito.MockSettings; +import org.mockito.stubbing.Stubber; + +public class Mockito extends ArgumentMatchers { + static final MockitoCore MOCKITO_CORE = new MockitoCore(); + + public static MockSettings withSettings() { + return new MockSettings() { + }; + } + + /** + * Creates a mock object of the requested class or interface. + *

    + * See examples in javadoc for the {@link Mockito} class. + * + * @param reified don't pass any values to it. It's a trick to detect the + * class/interface you + * want to mock. + * @return the mock object. + * @since 4.10.0 + */ + @SafeVarargs + public static T mock(T... reified) { + return mock(withSettings(), reified); + } + + /** + * Creates a mock object of the requested class or interface with the given + * default answer. + *

    + * See examples in javadoc for the {@link Mockito} class. + * + * @param defaultAnswer the default answer to use. + * @param reified don't pass any values to it. It's a trick to detect the + * class/interface you + * want to mock. + * @return the mock object. + * @since 5.1.0 + */ + @SafeVarargs + public static T mock(@SuppressWarnings("rawtypes") Answer defaultAnswer, T... reified) { + return mock(new Answer() { + }, reified); + } + + /** + * Creates a mock object of the requested class or interface with the given + * name. + *

    + * See examples in javadoc for the {@link Mockito} class. + * + * @param name the mock name to use. + * @param reified don't pass any values to it. It's a trick to detect the + * class/interface you + * want to mock. + * @return the mock object. + * @since 5.1.0 + */ + @SafeVarargs + public static T mock(String name, T... reified) { + return mock(withSettings(), reified); + } + + /** + * Creates a mock object of the requested class or interface with the given + * settings. + *

    + * See examples in javadoc for the {@link Mockito} class. + * + * @param settings the mock settings to use. + * @param reified don't pass any values to it. It's a trick to detect the + * class/interface you + * want to mock. + * @return the mock object. + * @since 5.1.0 + */ + @SafeVarargs + public static T mock(MockSettings settings, T... reified) { + if (reified == null || reified.length > 0) { + throw new IllegalArgumentException( + "Please don't pass any values here. Java will detect class automagically."); + } + + return mock(getClassOf(reified), settings); + } + + /** + * Creates mock object of given class or interface. + *

    + * See examples in javadoc for {@link Mockito} class + * + * @param classToMock class or interface to mock + * @return mock object + */ + public static T mock(Class classToMock) { + return mock(classToMock, withSettings()); + } + + /** + * Specifies mock name. Naming mocks can be helpful for debugging - the name is + * used in all verification errors. + *

    + * Beware that naming mocks is not a solution for complex code which uses too + * many mocks or collaborators. + * If you have too many mocks then refactor the code so that it's easy to + * test/debug without necessity of naming mocks. + *

    + * If you use @Mock annotation then you've got naming mocks + * for free! @Mock uses field name as mock name. + * {@link Mock Read more.} + *

    + * + * See examples in javadoc for {@link Mockito} class + * + * @param classToMock class or interface to mock + * @param name of the mock + * @return mock object + */ + public static T mock(Class classToMock, String name) { + return mock(classToMock, new Answer() { + }); + } + + /** + * Creates mock with a specified strategy for its answers to interactions. + * It's quite an advanced feature and typically you don't need it to write + * decent tests. + * However it can be helpful when working with legacy systems. + *

    + * It is the default answer so it will be used only when you don't stub + * the method call. + * + *

    +   * 
    +   *   Foo mock = mock(Foo.class, RETURNS_SMART_NULLS);
    +   *   Foo mockTwo = mock(Foo.class, new YourOwnAnswer());
    +   * 
    +   * 
    + * + *

    + * See examples in javadoc for {@link Mockito} class + *

    + * + * @param classToMock class or interface to mock + * @param defaultAnswer default answer for un-stubbed methods + * + * @return mock object + */ + public static T mock(Class classToMock, Answer defaultAnswer) { + return mock(classToMock, new Answer() { + }); + } + + /** + * Creates a mock with some non-standard settings. + *

    + * The number of configuration points for a mock will grow, + * so we need a fluent way to introduce new configuration without adding more + * and more overloaded Mockito.mock() methods. + * Hence {@link MockSettings}. + * + *

    +   * 
    +   *   Listener mock = mock(Listener.class, withSettings()
    +   *     .name("firstListner").defaultBehavior(RETURNS_SMART_NULLS));
    +   *   );
    +   * 
    +   * 
    + * + * Use it carefully and occasionally. What might be reason your test + * needs non-standard mocks? + * Is the code under test so complicated that it requires non-standard mocks? + * Wouldn't you prefer to refactor the code under test, so that it is testable + * in a simple way? + *

    + * See also {@link Mockito#withSettings()} + *

    + * See examples in javadoc for {@link Mockito} class + * + * @param classToMock class or interface to mock + * @param mockSettings additional mock settings + * @return mock object + */ + public static T mock(Class classToMock, MockSettings mockSettings) { + return MOCKITO_CORE.mock(classToMock, mockSettings); + } + + private static Class getClassOf(T[] array) { + return (Class) array.getClass().getComponentType(); + } + + public static OngoingStubbing when(T methodCall) { + return MOCKITO_CORE.when(methodCall); + } + + public static Stubber doReturn(Object toBeReturned) { + return null; + } + + public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext) { + return null; + } +} diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/MockitoCore.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/MockitoCore.java new file mode 100644 index 00000000000..0ae8790a6d3 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/MockitoCore.java @@ -0,0 +1,28 @@ +package org.mockito.internal; + +import org.mockito.MockSettings; +import org.mockito.internal.creation.MockSettingsImpl; +import org.mockito.internal.progress.MockingProgress; +import org.mockito.stubbing.OngoingStubbing; +import org.mockito.mock.MockCreationSettings; +import static org.mockito.internal.util.MockUtil.createMock; + +public class MockitoCore { + public T mock(Class typeToMock, MockSettings settings) { + MockSettingsImpl impl = (MockSettingsImpl) settings; + MockCreationSettings creationSettings = impl.build(typeToMock); + T mock = createMock(creationSettings); + return mock; + } + + public OngoingStubbing when(T methodCall) { + MockingProgress mockingProgress = new MockingProgress() { + @Override + public OngoingStubbing pullOngoingStubbing() { + return null; + } + }; + OngoingStubbing stubbing = (OngoingStubbing) mockingProgress.pullOngoingStubbing(); + return stubbing; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/creation/MockSettingsImpl.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/creation/MockSettingsImpl.java new file mode 100644 index 00000000000..c1e9083f4de --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/creation/MockSettingsImpl.java @@ -0,0 +1,14 @@ +package org.mockito.internal.creation; + +import org.mockito.MockSettings; +import org.mockito.mock.MockCreationSettings; + +public class MockSettingsImpl implements MockSettings { + public MockCreationSettings build(Class typeToMock) { + return new MockCreationSettings() { + public String getMockMaker() { + return null; + } + }; + } +} diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerFactory.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerFactory.java new file mode 100644 index 00000000000..17dc3dcd618 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerFactory.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.handler; + +import org.mockito.mock.MockCreationSettings; +import org.mockito.invocation.MockHandler; + +public final class MockHandlerFactory { + public static MockHandler createMockHandler(MockCreationSettings settings) { + return new MockHandlerImpl(); + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerImpl.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerImpl.java new file mode 100644 index 00000000000..dd1dfc68dc3 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/handler/MockHandlerImpl.java @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.handler; + +import org.mockito.invocation.MockHandler; + +public class MockHandlerImpl implements MockHandler { +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/progress/MockingProgress.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/progress/MockingProgress.java new file mode 100644 index 00000000000..d52a9631b68 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/progress/MockingProgress.java @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.internal.progress; + +import org.mockito.stubbing.OngoingStubbing; + +public interface MockingProgress { + OngoingStubbing pullOngoingStubbing(); +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/internal/util/MockUtil.java b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/util/MockUtil.java new file mode 100644 index 00000000000..8a975ffe119 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/internal/util/MockUtil.java @@ -0,0 +1,18 @@ +package org.mockito.internal.util; + +import org.mockito.mock.MockCreationSettings; +import org.mockito.plugins.MockMaker; +import org.mockito.invocation.MockHandler; +import static org.mockito.internal.handler.MockHandlerFactory.createMockHandler; + +public class MockUtil { + public static T createMock(MockCreationSettings settings) { + MockMaker mockMaker = getMockMaker(settings.getMockMaker()); + MockHandler mockHandler = createMockHandler(settings); + return mockMaker.createMock(settings, mockHandler); + } + + public static MockMaker getMockMaker(String mockMaker) { + return null; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/invocation/MockHandler.java b/java/ql/test/stubs/mockito-5.14/org/mockito/invocation/MockHandler.java new file mode 100644 index 00000000000..d667c375929 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/invocation/MockHandler.java @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.invocation; + +import java.io.Serializable; + +public interface MockHandler extends Serializable { +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/mock/MockCreationSettings.java b/java/ql/test/stubs/mockito-5.14/org/mockito/mock/MockCreationSettings.java new file mode 100644 index 00000000000..86788eda5f1 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/mock/MockCreationSettings.java @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.mock; + +public interface MockCreationSettings { + String getMockMaker(); +} diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/plugins/MockMaker.java b/java/ql/test/stubs/mockito-5.14/org/mockito/plugins/MockMaker.java new file mode 100644 index 00000000000..d7b06ab96f5 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/plugins/MockMaker.java @@ -0,0 +1,8 @@ +package org.mockito.plugins; + +import org.mockito.mock.MockCreationSettings; +import org.mockito.invocation.MockHandler; + +public interface MockMaker { + T createMock(MockCreationSettings settings, MockHandler handler); +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Answer.java b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Answer.java new file mode 100644 index 00000000000..60828a66c52 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Answer.java @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.stubbing; + +public interface Answer { } \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/OngoingStubbing.java b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/OngoingStubbing.java new file mode 100644 index 00000000000..3fb5e659f04 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/OngoingStubbing.java @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2007 Mockito contributors + * This program is made available under the terms of the MIT License. + */ +package org.mockito.stubbing; + +public interface OngoingStubbing { + OngoingStubbing thenReturn(T value); +} \ No newline at end of file diff --git a/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Stubber.java b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Stubber.java new file mode 100644 index 00000000000..eccca0c2c38 --- /dev/null +++ b/java/ql/test/stubs/mockito-5.14/org/mockito/stubbing/Stubber.java @@ -0,0 +1,5 @@ +package org.mockito.stubbing; + +public interface Stubber { + T when(T mock); +} \ No newline at end of file diff --git a/javascript/documentation/library-customization.rst b/javascript/documentation/library-customization.rst index b06e5b5cab1..0960da8a112 100644 --- a/javascript/documentation/library-customization.rst +++ b/javascript/documentation/library-customization.rst @@ -178,7 +178,7 @@ added by extending ``Dataflow::SourceNode::Range``. Some of its subclasses can s extended. For example, ``DataFlow::ModuleImportNode`` models module imports, and ``DataFlow::ClassNode`` models class definitions. The former provides default implementations covering CommonJS, AMD, and ECMAScript 2015 modules, while the latter handles ECMAScript 2015 classes, as well as traditional function-based -classes. You can extend their corresponding ``::Range`` classes to add support for other module or +classes. You can extend their corresponding ``::Range`` classes to add support for other module or class systems. Type inference diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..ccefb5e2d49 --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme @@ -0,0 +1,1194 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; diff --git a/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties new file mode 100644 index 00000000000..bae98029d4b --- /dev/null +++ b/javascript/downgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties @@ -0,0 +1,5 @@ +description: downgrade overlay relations +compatibility: full + +databaseMetadata.rel: delete +overlayChangedFiles.rel: delete diff --git a/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme new file mode 100644 index 00000000000..80b2bc24189 --- /dev/null +++ b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/old.dbscheme @@ -0,0 +1,1205 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +has_defer_keyword (int id: @import_declaration ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/semmlecode.javascript.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties new file mode 100644 index 00000000000..6ebac3d9a45 --- /dev/null +++ b/javascript/downgrades/80b2bc24189307c5fd178dc2da95b45bcdb117f7/upgrade.properties @@ -0,0 +1,4 @@ +description: add support for deferred imports +compatibility: partial + +has_defer_keyword.rel: delete diff --git a/javascript/extractor/lib/typescript/package-lock.json b/javascript/extractor/lib/typescript/package-lock.json index 389cc1d2a5b..68923719ff8 100644 --- a/javascript/extractor/lib/typescript/package-lock.json +++ b/javascript/extractor/lib/typescript/package-lock.json @@ -6,24 +6,25 @@ "": { "name": "typescript-parser-wrapper", "dependencies": { - "typescript": "^5.8.2" + "typescript": "5.9" }, "devDependencies": { - "@types/node": "18.15.3" + "@types/node": "^24.3.1" } }, "node_modules/@types/node": { - "version": "18.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz", - "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==", + "version": "24.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz", + "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", "dev": true, - "license": "MIT" + "dependencies": { + "undici-types": "~7.10.0" + } }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "license": "Apache-2.0", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -31,6 +32,12 @@ "engines": { "node": ">=14.17" } + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true } } } diff --git a/javascript/extractor/lib/typescript/package.json b/javascript/extractor/lib/typescript/package.json index 7e0c5fd160d..f23f197e870 100644 --- a/javascript/extractor/lib/typescript/package.json +++ b/javascript/extractor/lib/typescript/package.json @@ -2,7 +2,7 @@ "name": "typescript-parser-wrapper", "private": true, "dependencies": { - "typescript": "^5.8.2" + "typescript": "5.9" }, "scripts": { "build": "tsc --project tsconfig.json", @@ -12,6 +12,6 @@ "watch": "tsc -p . -w --sourceMap" }, "devDependencies": { - "@types/node": "18.15.3" + "@types/node": "^24.3.1" } } diff --git a/javascript/extractor/lib/typescript/src/main.ts b/javascript/extractor/lib/typescript/src/main.ts index aa69642e04b..0630213c743 100644 --- a/javascript/extractor/lib/typescript/src/main.ts +++ b/javascript/extractor/lib/typescript/src/main.ts @@ -267,6 +267,7 @@ const astProperties: string[] = [ "parameterName", "parameters", "parseDiagnostics", + "phaseModifier", "properties", "propertyName", "qualifier", diff --git a/javascript/extractor/src/com/semmle/jcorn/Parser.java b/javascript/extractor/src/com/semmle/jcorn/Parser.java index 9c2eeb9e241..63f49e14891 100644 --- a/javascript/extractor/src/com/semmle/jcorn/Parser.java +++ b/javascript/extractor/src/com/semmle/jcorn/Parser.java @@ -61,6 +61,7 @@ import com.semmle.js.ast.IfStatement; import com.semmle.js.ast.ImportDeclaration; import com.semmle.js.ast.ImportDefaultSpecifier; import com.semmle.js.ast.ImportNamespaceSpecifier; +import com.semmle.js.ast.ImportPhaseModifier; import com.semmle.js.ast.ImportSpecifier; import com.semmle.js.ast.LabeledStatement; import com.semmle.js.ast.Literal; @@ -3587,6 +3588,7 @@ public class Parser { } protected ImportDeclaration parseImportRest(SourceLocation loc) { + ImportPhaseModifier[] phaseModifier = { ImportPhaseModifier.NONE }; List specifiers; Literal source; // import '...' @@ -3594,27 +3596,32 @@ public class Parser { specifiers = new ArrayList(); source = (Literal) this.parseExprAtom(null); } else { - specifiers = this.parseImportSpecifiers(); + specifiers = this.parseImportSpecifiers(phaseModifier); this.expectContextual("from"); if (this.type != TokenType.string) this.unexpected(); source = (Literal) this.parseExprAtom(null); } Expression attributes = this.parseImportOrExportAttributesAndSemicolon(); if (specifiers == null) return null; - return this.finishNode(new ImportDeclaration(loc, specifiers, source, attributes)); + return this.finishNode(new ImportDeclaration(loc, specifiers, source, attributes, phaseModifier[0])); } // Parses a comma-separated list of module imports. - protected List parseImportSpecifiers() { + protected List parseImportSpecifiers(ImportPhaseModifier[] phaseModifier) { List nodes = new ArrayList(); boolean first = true; if (this.type == TokenType.name) { // import defaultObj, { x, y as z } from '...' SourceLocation loc = new SourceLocation(this.startLoc); Identifier local = this.parseIdent(false); - this.checkLVal(local, true, null); - nodes.add(this.finishNode(new ImportDefaultSpecifier(loc, local))); - if (!this.eat(TokenType.comma)) return nodes; + // Parse `import defer *` as the beginning of a deferred import, instead of a default import specifier + if (this.type == TokenType.star && local.getName().equals("defer")) { + phaseModifier[0] = ImportPhaseModifier.DEFER; + } else { + this.checkLVal(local, true, null); + nodes.add(this.finishNode(new ImportDefaultSpecifier(loc, local))); + if (!this.eat(TokenType.comma)) return nodes; + } } if (this.type == TokenType.star) { SourceLocation loc = new SourceLocation(this.startLoc); @@ -3647,7 +3654,7 @@ public class Parser { if (this.type == TokenType.string) { // Arbitrary Module Namespace Identifiers // e.g. `import { "Foo::new" as Foo_new } from "./foo.wasm"` - Expression string = this.parseExprAtom(null); + Expression string = this.parseExprAtom(null); String str = ((Literal)string).getStringValue(); imported = this.finishNode(new Identifier(loc, str)); // only makes sense if there is a local identifier diff --git a/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java b/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java index 1213c15d99f..cb2dad0f978 100644 --- a/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java +++ b/javascript/extractor/src/com/semmle/jcorn/flow/FlowParser.java @@ -14,6 +14,7 @@ import com.semmle.js.ast.Expression; import com.semmle.js.ast.ExpressionStatement; import com.semmle.js.ast.FieldDefinition; import com.semmle.js.ast.Identifier; +import com.semmle.js.ast.ImportPhaseModifier; import com.semmle.js.ast.ImportSpecifier; import com.semmle.js.ast.Literal; import com.semmle.js.ast.MethodDefinition; @@ -1064,13 +1065,13 @@ public class FlowParser extends ESNextParser { } @Override - protected List parseImportSpecifiers() { + protected List parseImportSpecifiers(ImportPhaseModifier[] phaseModifier) { String kind = null; if (flow()) { kind = flowParseImportSpecifiers(); } - List specs = super.parseImportSpecifiers(); + List specs = super.parseImportSpecifiers(phaseModifier); if (kind != null || specs.isEmpty()) return null; return specs; } diff --git a/javascript/extractor/src/com/semmle/js/ast/ImportDeclaration.java b/javascript/extractor/src/com/semmle/js/ast/ImportDeclaration.java index e672afcb471..86f8743b9e4 100644 --- a/javascript/extractor/src/com/semmle/js/ast/ImportDeclaration.java +++ b/javascript/extractor/src/com/semmle/js/ast/ImportDeclaration.java @@ -26,11 +26,11 @@ public class ImportDeclaration extends Statement implements INodeWithSymbol { private int symbol = -1; - private boolean hasTypeKeyword; + private ImportPhaseModifier phaseModifier; public ImportDeclaration( SourceLocation loc, List specifiers, Literal source, Expression attributes) { - this(loc, specifiers, source, attributes, false); + this(loc, specifiers, source, attributes, ImportPhaseModifier.NONE); } public ImportDeclaration( @@ -38,12 +38,12 @@ public class ImportDeclaration extends Statement implements INodeWithSymbol { List specifiers, Literal source, Expression attributes, - boolean hasTypeKeyword) { + ImportPhaseModifier phaseModifier) { super("ImportDeclaration", loc); this.specifiers = specifiers; this.source = source; this.attributes = attributes; - this.hasTypeKeyword = hasTypeKeyword; + this.phaseModifier = phaseModifier; } public Literal getSource() { @@ -79,6 +79,15 @@ public class ImportDeclaration extends Statement implements INodeWithSymbol { /** Returns true if this is an import type declaration. */ public boolean hasTypeKeyword() { - return hasTypeKeyword; + return phaseModifier == ImportPhaseModifier.TYPE; + } + + /** Returns true if this is an import defer declaration. */ + public boolean hasDeferKeyword() { + return phaseModifier == ImportPhaseModifier.DEFER; + } + + public ImportPhaseModifier getPhaseModifier() { + return phaseModifier; } } diff --git a/javascript/extractor/src/com/semmle/js/ast/ImportPhaseModifier.java b/javascript/extractor/src/com/semmle/js/ast/ImportPhaseModifier.java new file mode 100644 index 00000000000..40777b23b60 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/ast/ImportPhaseModifier.java @@ -0,0 +1,10 @@ +package com.semmle.js.ast; + +/** + * A keyword that may appear on import declarations. + */ +public enum ImportPhaseModifier { + NONE, + DEFER, + TYPE, +} diff --git a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java index c216e0c1185..ae5676950df 100644 --- a/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java +++ b/javascript/extractor/src/com/semmle/js/ast/NodeCopier.java @@ -564,7 +564,7 @@ public class NodeCopier implements Visitor { copy(nd.getSpecifiers()), copy(nd.getSource()), copy(nd.getAttributes()), - nd.hasTypeKeyword()); + nd.getPhaseModifier()); } @Override diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 5625a9f1211..a2f006e3239 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -1833,6 +1833,9 @@ public class ASTExtractor { if (nd.hasTypeKeyword()) { trapwriter.addTuple("has_type_keyword", lbl); } + if (nd.hasDeferKeyword()) { + trapwriter.addTuple("has_defer_keyword", lbl); + } return lbl; } diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 08dac06c4d9..416fa237e97 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -465,10 +465,11 @@ public class AutoBuild { try { CompletableFuture sourceFuture = extractSource(); sourceFuture.join(); // wait for source extraction to complete - if (hasSeenCode()) { // don't bother with the externs if no code was seen + if (hasSeenCode() && !isOverlayChangeMode()) { // don't bother with the externs if no code was seen or in overlay change mode extractExterns(); } extractXml(); + writeOverlayMetadata(); } catch (OutOfMemoryError oom) { System.err.println("Out of memory while extracting the project."); return 137; // the CodeQL CLI will interpret this as an out-of-memory error @@ -488,27 +489,44 @@ public class AutoBuild { diagnosticsToClose.forEach(DiagnosticWriter::close); } - if (!hasSeenCode()) { + // Fail extraction if no relevant files were found. + boolean seenRelevantFiles = EnvironmentVariables.isActionsExtractor() + ? seenFiles // assume all files are relevant for Actions extractor + : hasSeenCode(); + if (!seenRelevantFiles) { if (seenFiles) { warn("Only found JavaScript or TypeScript files that were empty or contained syntax errors."); } else { warn("No JavaScript or TypeScript code found."); } - // ensuring that the finalize steps detects that no code was seen. + // Ensuring that the finalize steps detects that no code was seen. + // This is necessary to ensure we don't produce an overlay-base database without externs. Path srcFolder = Paths.get(EnvironmentVariables.getWipDatabase(), "src"); try { - // Non-recursive delete because "src/" should be empty. - FileUtil8.delete(srcFolder); + FileUtil8.recursiveDelete(srcFolder); } catch (NoSuchFileException e) { Exceptions.ignore(e, "the directory did not exist"); - } catch (DirectoryNotEmptyException e) { - Exceptions.ignore(e, "just leave the directory if it is not empty"); } return 0; } return 0; } + private void writeOverlayMetadata() { + String file = getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_BASE_METADATA_OUT"); + if (file == null) { + // no overlay metadata file specified, so nothing to do + return; + } + // Write an empty string to the file as we currently have no metadata to emit. + // The file must be created for the database to recognized as an overlay base. + try { + Files.writeString(Paths.get(file), "", StandardCharsets.UTF_8); + } catch (IOException e) { + throw new ResourceError("Could not write overlay metadata to " + file, e); + } + } + /** * A kind of error that can happen during extraction of JavaScript or TypeScript * code. @@ -734,6 +752,17 @@ public class AutoBuild { List tsconfigFiles = new ArrayList<>(); findFilesToExtract(defaultExtractor, filesToExtract, tsconfigFiles); + OverlayChanges overlay = getOverlayChanges(); + if (overlay != null) { + Set changedFiles = overlay.changes.stream() + .map(file -> Paths.get(file).toAbsolutePath()) + .collect(Collectors.toSet()); + int before = filesToExtract.size(); + filesToExtract.retainAll(changedFiles); + int after = filesToExtract.size(); + System.out.println("Overlay filter removed " + (before - after) + " out of " + before + " files from extraction."); + } + tsconfigFiles = tsconfigFiles.stream() .sorted(PATH_ORDERING) .collect(Collectors.toList()); @@ -1338,6 +1367,18 @@ protected DependencyInstallationResult preparePackagesAndDependencies(Set } } + private boolean isOverlayChangeMode() { + return getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_CHANGES") != null; + } + + private OverlayChanges getOverlayChanges() throws IOException { + String jsonFile = getEnvVar("CODEQL_EXTRACTOR_JAVASCRIPT_OVERLAY_CHANGES"); + if (jsonFile == null) { + return null; + } + return new Gson().fromJson(Files.newBufferedReader(Paths.get(jsonFile)), OverlayChanges.class); + } + public static void main(String[] args) { try { System.exit(new AutoBuild().run()); diff --git a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java index 39dfa70b285..f2ac4227589 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java +++ b/javascript/extractor/src/com/semmle/js/extractor/EnvironmentVariables.java @@ -18,6 +18,9 @@ public class EnvironmentVariables { public static final String CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR = "CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE"; + public static final String CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE_ENV_VAR = + "CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE"; + public static final String CODEQL_DIST_ENV_VAR = "CODEQL_DIST"; /** @@ -94,4 +97,8 @@ public class EnvironmentVariables { public static String getWipDatabase() { return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_JAVASCRIPT_WIP_DATABASE_ENV_VAR); } + + public static boolean isActionsExtractor() { + return Env.systemEnv().getNonEmpty(CODEQL_EXTRACTOR_ACTIONS_WIP_DATABASE_ENV_VAR) != null; + } } diff --git a/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java b/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java new file mode 100644 index 00000000000..25cae238920 --- /dev/null +++ b/javascript/extractor/src/com/semmle/js/extractor/OverlayChanges.java @@ -0,0 +1,7 @@ +package com.semmle.js.extractor; + +import java.util.List; + +public class OverlayChanges { + public List changes; +} diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java index a3e031845a2..0c013f906b2 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java @@ -52,6 +52,7 @@ import com.semmle.js.ast.IfStatement; import com.semmle.js.ast.ImportDeclaration; import com.semmle.js.ast.ImportDefaultSpecifier; import com.semmle.js.ast.ImportNamespaceSpecifier; +import com.semmle.js.ast.ImportPhaseModifier; import com.semmle.js.ast.ImportSpecifier; import com.semmle.js.ast.InvokeExpression; import com.semmle.js.ast.LabeledStatement; @@ -1404,7 +1405,7 @@ public class TypeScriptASTConverter { Literal src = tryConvertChild(node, "moduleSpecifier", Literal.class); Expression attributes = convertChild(node, "attributes"); List specifiers = new ArrayList<>(); - boolean hasTypeKeyword = false; + ImportPhaseModifier phaseModifier = ImportPhaseModifier.NONE; if (hasChild(node, "importClause")) { JsonObject importClause = node.get("importClause").getAsJsonObject(); if (hasChild(importClause, "name")) { @@ -1418,10 +1419,22 @@ public class TypeScriptASTConverter { specifiers.addAll(convertChildren(namedBindings, "elements")); } } - hasTypeKeyword = importClause.get("isTypeOnly").getAsBoolean(); + if (hasChild(importClause, "phaseModifier")) { + String name = metadata.getSyntaxKindName(importClause.get("phaseModifier").getAsInt()); + switch (name) { + case "DeferKeyword": { + phaseModifier = ImportPhaseModifier.DEFER; + break; + } + case "TypeKeyword": { + phaseModifier = ImportPhaseModifier.TYPE; + break; + } + } + } } ImportDeclaration importDecl = - new ImportDeclaration(loc, specifiers, src, attributes, hasTypeKeyword); + new ImportDeclaration(loc, specifiers, src, attributes, phaseModifier); attachSymbolInformation(importDecl, node); return importDecl; } diff --git a/javascript/ql/integration-tests/diagnostics/syntax-error/good.js b/javascript/ql/integration-tests/diagnostics/syntax-error/good.js new file mode 100644 index 00000000000..7b0bfcf5c25 --- /dev/null +++ b/javascript/ql/integration-tests/diagnostics/syntax-error/good.js @@ -0,0 +1,2 @@ +// Ensure at least one file without errors is included, as extraction fails otherwise. +console.log("Hello") diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected index 6894a776b37..c9407089189 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality-extended.qls.expected @@ -4,6 +4,9 @@ ql/javascript/ql/src/AngularJS/IncompatibleService.ql ql/javascript/ql/src/AngularJS/MissingExplicitInjection.ql ql/javascript/ql/src/AngularJS/RepeatedInjection.ql ql/javascript/ql/src/AngularJS/UseNgSrc.ql +ql/javascript/ql/src/Comments/CommentedOutCode.ql +ql/javascript/ql/src/Comments/TodoComments.ql +ql/javascript/ql/src/DOM/Alert.ql ql/javascript/ql/src/DOM/DuplicateAttributes.ql ql/javascript/ql/src/DOM/MalformedIdAttribute.ql ql/javascript/ql/src/DOM/PseudoEval.ql @@ -20,11 +23,13 @@ ql/javascript/ql/src/Declarations/IneffectiveParameterType.ql ql/javascript/ql/src/Declarations/MissingThisQualifier.ql ql/javascript/ql/src/Declarations/MissingVarDecl.ql ql/javascript/ql/src/Declarations/MixedStaticInstanceThisAccess.ql +ql/javascript/ql/src/Declarations/RedeclaredVariable.ql ql/javascript/ql/src/Declarations/SuspiciousMethodNameDeclaration.ql ql/javascript/ql/src/Declarations/TemporalDeadZone.ql ql/javascript/ql/src/Declarations/UniqueParameterNames.ql ql/javascript/ql/src/Declarations/UniquePropertyNames.ql ql/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +ql/javascript/ql/src/Declarations/UnusedParameter.ql ql/javascript/ql/src/Declarations/UnusedVariable.ql ql/javascript/ql/src/Expressions/ComparisonWithNaN.ql ql/javascript/ql/src/Expressions/DuplicateCondition.ql @@ -48,9 +53,12 @@ ql/javascript/ql/src/Expressions/UnclearOperatorPrecedence.ql ql/javascript/ql/src/Expressions/UnknownDirective.ql ql/javascript/ql/src/Expressions/UnneededDefensiveProgramming.ql ql/javascript/ql/src/Expressions/WhitespaceContradictsPrecedence.ql +ql/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql ql/javascript/ql/src/LanguageFeatures/BadTypeof.ql ql/javascript/ql/src/LanguageFeatures/ConditionalComments.ql +ql/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql ql/javascript/ql/src/LanguageFeatures/DeleteVar.ql +ql/javascript/ql/src/LanguageFeatures/Eval.ql ql/javascript/ql/src/LanguageFeatures/ExpressionClosures.ql ql/javascript/ql/src/LanguageFeatures/ForInComprehensionBlocks.ql ql/javascript/ql/src/LanguageFeatures/IllegalInvocation.ql @@ -63,7 +71,6 @@ ql/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql ql/javascript/ql/src/LanguageFeatures/SetterReturn.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql ql/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql -ql/javascript/ql/src/LanguageFeatures/SyntaxError.ql ql/javascript/ql/src/LanguageFeatures/TemplateSyntaxInStringLiteral.ql ql/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql ql/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql @@ -71,6 +78,7 @@ ql/javascript/ql/src/LanguageFeatures/WithStatement.ql ql/javascript/ql/src/LanguageFeatures/YieldInNonGenerator.ql ql/javascript/ql/src/NodeJS/InvalidExport.ql ql/javascript/ql/src/NodeJS/MissingExports.ql +ql/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql ql/javascript/ql/src/Quality/UnhandledErrorInStreamPipeline.ql ql/javascript/ql/src/React/DirectStateMutation.ql ql/javascript/ql/src/React/InconsistentStateUpdate.ql @@ -78,6 +86,7 @@ ql/javascript/ql/src/React/UnsupportedStateUpdateInLifecycleMethod.ql ql/javascript/ql/src/React/UnusedOrUndefinedStateProperty.ql ql/javascript/ql/src/RegExp/BackrefBeforeGroup.ql ql/javascript/ql/src/RegExp/BackrefIntoNegativeLookahead.ql +ql/javascript/ql/src/RegExp/BackspaceEscape.ql ql/javascript/ql/src/RegExp/DuplicateCharacterInCharacterClass.ql ql/javascript/ql/src/RegExp/EmptyCharacterClass.ql ql/javascript/ql/src/RegExp/RegExpAlwaysMatches.ql @@ -86,7 +95,9 @@ ql/javascript/ql/src/RegExp/UnmatchableCaret.ql ql/javascript/ql/src/RegExp/UnmatchableDollar.ql ql/javascript/ql/src/Statements/DanglingElse.ql ql/javascript/ql/src/Statements/IgnoreArrayResult.ql +ql/javascript/ql/src/Statements/ImplicitReturn.ql ql/javascript/ql/src/Statements/InconsistentLoopOrientation.ql +ql/javascript/ql/src/Statements/InconsistentReturn.ql ql/javascript/ql/src/Statements/LabelInCase.ql ql/javascript/ql/src/Statements/LoopIterationSkippedDueToShifting.ql ql/javascript/ql/src/Statements/MisleadingIndentationAfterControlStmt.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected index 6894a776b37..b550c2c8249 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-quality.qls.expected @@ -63,7 +63,6 @@ ql/javascript/ql/src/LanguageFeatures/SemicolonInsertion.ql ql/javascript/ql/src/LanguageFeatures/SetterReturn.ql ql/javascript/ql/src/LanguageFeatures/SpuriousArguments.ql ql/javascript/ql/src/LanguageFeatures/StrictModeCallStackIntrospection.ql -ql/javascript/ql/src/LanguageFeatures/SyntaxError.ql ql/javascript/ql/src/LanguageFeatures/TemplateSyntaxInStringLiteral.ql ql/javascript/ql/src/LanguageFeatures/ThisBeforeSuper.ql ql/javascript/ql/src/LanguageFeatures/UnusedIndexVariable.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected index 652ac0ebc1b..0c417e661c7 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected @@ -83,5 +83,6 @@ ql/javascript/ql/src/Security/CWE-915/PrototypePollutingFunction.ql ql/javascript/ql/src/Security/CWE-915/PrototypePollutingMergeCall.ql ql/javascript/ql/src/Security/CWE-916/InsufficientPasswordHash.ql ql/javascript/ql/src/Security/CWE-918/RequestForgery.ql +ql/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql ql/javascript/ql/src/Summary/LinesOfCode.ql ql/javascript/ql/src/Summary/LinesOfUserCode.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected index dd587768308..f87cd2bf505 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected @@ -184,6 +184,7 @@ ql/javascript/ql/src/Security/CWE-915/PrototypePollutingMergeCall.ql ql/javascript/ql/src/Security/CWE-916/InsufficientPasswordHash.ql ql/javascript/ql/src/Security/CWE-918/ClientSideRequestForgery.ql ql/javascript/ql/src/Security/CWE-918/RequestForgery.ql +ql/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql ql/javascript/ql/src/Statements/DanglingElse.ql ql/javascript/ql/src/Statements/IgnoreArrayResult.ql ql/javascript/ql/src/Statements/InconsistentLoopOrientation.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected index 9b7cfd22ed6..ac5e0e2c498 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected @@ -99,5 +99,6 @@ ql/javascript/ql/src/Security/CWE-915/PrototypePollutingMergeCall.ql ql/javascript/ql/src/Security/CWE-916/InsufficientPasswordHash.ql ql/javascript/ql/src/Security/CWE-918/ClientSideRequestForgery.ql ql/javascript/ql/src/Security/CWE-918/RequestForgery.ql +ql/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql ql/javascript/ql/src/Summary/LinesOfCode.ql ql/javascript/ql/src/Summary/LinesOfUserCode.ql diff --git a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected index 1b119f60c75..46317e8800f 100644 --- a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -1,18 +1,13 @@ ql/javascript/ql/src/AlertSuppression.ql ql/javascript/ql/src/AngularJS/DeadAngularJSEventListener.ql ql/javascript/ql/src/AngularJS/UnusedAngularDependency.ql -ql/javascript/ql/src/Comments/CommentedOutCode.ql ql/javascript/ql/src/Comments/FCommentedOutCode.ql -ql/javascript/ql/src/Comments/TodoComments.ql -ql/javascript/ql/src/DOM/Alert.ql ql/javascript/ql/src/DOM/AmbiguousIdAttribute.ql ql/javascript/ql/src/DOM/ConflictingAttributes.ql ql/javascript/ql/src/DOM/TargetBlank.ql ql/javascript/ql/src/Declarations/DeadStoreOfGlobal.ql -ql/javascript/ql/src/Declarations/RedeclaredVariable.ql ql/javascript/ql/src/Declarations/TooManyParameters.ql ql/javascript/ql/src/Declarations/UnstableCyclicImport.ql -ql/javascript/ql/src/Declarations/UnusedParameter.ql ql/javascript/ql/src/Declarations/UnusedProperty.ql ql/javascript/ql/src/Electron/EnablingNodeIntegration.ql ql/javascript/ql/src/Expressions/BitwiseSignCheck.ql @@ -21,10 +16,7 @@ ql/javascript/ql/src/Expressions/MisspelledIdentifier.ql ql/javascript/ql/src/JSDoc/BadParamTag.ql ql/javascript/ql/src/JSDoc/JSDocForNonExistentParameter.ql ql/javascript/ql/src/JSDoc/UndocumentedParameter.ql -ql/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql -ql/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql ql/javascript/ql/src/LanguageFeatures/EmptyArrayInit.ql -ql/javascript/ql/src/LanguageFeatures/Eval.ql ql/javascript/ql/src/LanguageFeatures/JumpFromFinally.ql ql/javascript/ql/src/LanguageFeatures/SetterIgnoresParameter.ql ql/javascript/ql/src/LanguageFeatures/WrongExtensionJSON.ql @@ -48,8 +40,6 @@ ql/javascript/ql/src/NodeJS/DubiousImport.ql ql/javascript/ql/src/NodeJS/UnresolvableImport.ql ql/javascript/ql/src/NodeJS/UnusedDependency.ql ql/javascript/ql/src/Performance/NonLocalForIn.ql -ql/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql -ql/javascript/ql/src/RegExp/BackspaceEscape.ql ql/javascript/ql/src/RegExp/MalformedRegExp.ql ql/javascript/ql/src/Security/CWE-020/ExternalAPIsUsedWithUntrustedData.ql ql/javascript/ql/src/Security/CWE-020/UntrustedDataToExternalAPI.ql @@ -59,8 +49,6 @@ ql/javascript/ql/src/Security/CWE-798/HardcodedCredentials.ql ql/javascript/ql/src/Security/CWE-807/DifferentKindsComparisonBypass.ql ql/javascript/ql/src/Security/trest/test.ql ql/javascript/ql/src/Statements/EphemeralLoop.ql -ql/javascript/ql/src/Statements/ImplicitReturn.ql -ql/javascript/ql/src/Statements/InconsistentReturn.ql ql/javascript/ql/src/Statements/NestedLoopsSameVariable.ql ql/javascript/ql/src/Statements/ReturnOutsideFunction.ql ql/javascript/ql/src/Summary/TaintSinks.ql @@ -75,7 +63,6 @@ ql/javascript/ql/src/experimental/Security/CWE-347/decodeJwtWithoutVerificationL ql/javascript/ql/src/experimental/Security/CWE-444/InsecureHttpParser.ql ql/javascript/ql/src/experimental/Security/CWE-522-DecompressionBombs/DecompressionBombs.ql ql/javascript/ql/src/experimental/Security/CWE-918/SSRF.ql -ql/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.ql ql/javascript/ql/src/experimental/StandardLibrary/MultipleArgumentsToSetConstructor.ql ql/javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-020/UntrustedDataToExternalAPI.ql ql/javascript/ql/src/experimental/heuristics/ql/src/Security/CWE-078/CommandInjection.ql diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 93edd0d9f49..9f27fdae99c 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,38 @@ +## 2.6.14 + +No user-facing changes. + +## 2.6.13 + +No user-facing changes. + +## 2.6.12 + +### Minor Analysis Improvements + +* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. +* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. + +## 2.6.11 + +### Minor Analysis Improvements + +* Added modeling for promisification libraries `@gar/promisify`, `es6-promisify`, `util.promisify`, `thenify-all`, `call-me-maybe`, `@google-cloud/promisify`, and `util-promisify`. +* Data flow is now tracked through promisified user-defined functions. + +## 2.6.10 + +### Minor Analysis Improvements + +* Removed `libxmljs` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/GNOME/libxml2/blob/0c948334a8f5c66d50e9f8992e62998017dc4fc6/NEWS#L905-L908) that prevents XML bomb attacks. + +## 2.6.9 + +### Minor Analysis Improvements + +* Improved modeling of command-line argument parsing libraries [arg](https://www.npmjs.com/package/arg), [args](https://www.npmjs.com/package/args), [command-line-args](https://www.npmjs.com/package/command-line-args) and [commander](https://www.npmjs.com/package/commander) + ## 2.6.8 ### Minor Analysis Improvements diff --git a/javascript/ql/lib/change-notes/released/2.6.10.md b/javascript/ql/lib/change-notes/released/2.6.10.md new file mode 100644 index 00000000000..7b9859668cb --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.10.md @@ -0,0 +1,5 @@ +## 2.6.10 + +### Minor Analysis Improvements + +* Removed `libxmljs` as an XML bomb sink. The underlying libxml2 library now includes [entity reference loop detection](https://github.com/GNOME/libxml2/blob/0c948334a8f5c66d50e9f8992e62998017dc4fc6/NEWS#L905-L908) that prevents XML bomb attacks. diff --git a/javascript/ql/lib/change-notes/released/2.6.11.md b/javascript/ql/lib/change-notes/released/2.6.11.md new file mode 100644 index 00000000000..b9a47cae76c --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.11.md @@ -0,0 +1,6 @@ +## 2.6.11 + +### Minor Analysis Improvements + +* Added modeling for promisification libraries `@gar/promisify`, `es6-promisify`, `util.promisify`, `thenify-all`, `call-me-maybe`, `@google-cloud/promisify`, and `util-promisify`. +* Data flow is now tracked through promisified user-defined functions. diff --git a/javascript/ql/lib/change-notes/released/2.6.12.md b/javascript/ql/lib/change-notes/released/2.6.12.md new file mode 100644 index 00000000000..adc136621d8 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.12.md @@ -0,0 +1,7 @@ +## 2.6.12 + +### Minor Analysis Improvements + +* Added modeling of `GraphQLObjectType` resolver function parameters as remote sources. +* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked. +* Added support for the `aws-sdk` and `@aws-sdk/client-dynamodb`, `@aws-sdk/client-athena`, `@aws-sdk/client-s3`, and `@aws-sdk/client-rds-data` packages. diff --git a/javascript/ql/lib/change-notes/released/2.6.13.md b/javascript/ql/lib/change-notes/released/2.6.13.md new file mode 100644 index 00000000000..475bfb69be9 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.13.md @@ -0,0 +1,3 @@ +## 2.6.13 + +No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.6.14.md b/javascript/ql/lib/change-notes/released/2.6.14.md new file mode 100644 index 00000000000..49a00b95efc --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.14.md @@ -0,0 +1,3 @@ +## 2.6.14 + +No user-facing changes. diff --git a/javascript/ql/lib/change-notes/released/2.6.9.md b/javascript/ql/lib/change-notes/released/2.6.9.md new file mode 100644 index 00000000000..6c80cc1db0d --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.9.md @@ -0,0 +1,5 @@ +## 2.6.9 + +### Minor Analysis Improvements + +* Improved modeling of command-line argument parsing libraries [arg](https://www.npmjs.com/package/arg), [args](https://www.npmjs.com/package/args), [command-line-args](https://www.npmjs.com/package/command-line-args) and [commander](https://www.npmjs.com/package/commander) diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index e3569f2b799..022aeff4e02 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.6.8 +lastReleaseVersion: 2.6.14 diff --git a/javascript/ql/lib/ext/apollo-server.model.yml b/javascript/ql/lib/ext/apollo-server.model.yml index ffceb6a6d5a..aa9755265b2 100644 --- a/javascript/ql/lib/ext/apollo-server.model.yml +++ b/javascript/ql/lib/ext/apollo-server.model.yml @@ -5,6 +5,13 @@ extensions: data: - ["@apollo/server", "Member[ApolloServer,ApolloServerBase].Argument[0].AnyMember.AnyMember.AnyMember.Parameter[1]", "remote"] + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["@apollo/server", "Member[gql].Argument[0]", "sql-injection"] + - ["@apollo/server", "Member[ApolloServer,ApolloServerBase].Argument[0].Member[cors].Member[origin]", "cors-origin"] + - addsTo: pack: codeql/javascript-all extensible: typeModel @@ -13,3 +20,9 @@ extensions: - ["@apollo/server", "apollo-server-express", ""] - ["@apollo/server", "apollo-server-core", ""] - ["@apollo/server", "apollo-server", ""] + - ["@apollo/server", "@apollo/apollo-server-express", ""] + - ["@apollo/server", "apollo-server-express", ""] + - ["@apollo/server", "@apollo/server", ""] + - ["@apollo/server", "@apollo/apollo-server-core", ""] + - ["ApolloServer", "@apollo/server", "Member[ApolloServer]"] + - ["GraphQLApollo", "@apollo/server", "Member[gql]"] diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml index eefa87fbe61..40fa4b8b703 100644 --- a/javascript/ql/lib/ext/aws-sdk.model.yml +++ b/javascript/ql/lib/ext/aws-sdk.model.yml @@ -1,8 +1,52 @@ extensions: + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["aws-sdk.Athena", "aws-sdk", "Member[Athena]"] + - ["aws-sdk.S3", "aws-sdk", "Member[S3]"] + - ["aws-sdk.RDSDataService", "aws-sdk", "Member[RDSDataService]"] + - ["aws-sdk.DynamoDB", "aws-sdk", "Member[DynamoDB]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-athena", "Member[AthenaClient]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-s3", "Member[S3Client]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"] + - ["@aws-sdk/client.Client", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"] - addsTo: pack: codeql/javascript-all extensible: sinkModel data: - - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"] - - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] - - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] + - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"] + - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"] + - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"] + - ["@aws-sdk/client.Client", "ReturnValue.Member[send].Argument[0]", "sql-injection"] + - ["aws-sdk.Athena", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"] + - ["aws-sdk.S3", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"] + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"] + - ["@aws-sdk/client-athena", "Member[CreatePreparedStatementCommand]", "Argument[0].Member[QueryStatement]", "ReturnValue", "taint"] + - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"] + - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"] + - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"] + - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"] + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["@aws-sdk/client.Client", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.S3", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.S3", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"] + - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"] diff --git a/javascript/ql/lib/ext/call-me-maybe.model.yml b/javascript/ql/lib/ext/call-me-maybe.model.yml new file mode 100644 index 00000000000..ceda3e8b092 --- /dev/null +++ b/javascript/ql/lib/ext/call-me-maybe.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["call-me-maybe", "", "Argument[1]", "ReturnValue", "value"] diff --git a/javascript/ql/lib/ext/cors.model.yml b/javascript/ql/lib/ext/cors.model.yml new file mode 100644 index 00000000000..31125d454b9 --- /dev/null +++ b/javascript/ql/lib/ext/cors.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["cors", "Argument[0].Member[origin]", "cors-origin"] diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml new file mode 100644 index 00000000000..2ea1c41ed9f --- /dev/null +++ b/javascript/ql/lib/ext/graph-ql.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: summaryModel + data: + - ["graphql", "Member[graphql]", "Argument[0].Member[source,variableValues]", "Argument[0].Member[rootValue].AnyMember.Parameter[0]", "taint"] + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ["graphql", "Member[GraphQLObjectType].Argument[0].Member[fields].AnyMember.Member[resolve].Parameter[1]", "remote"] diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index 88e46c77453..ad9cfe009b5 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -146,3 +146,4 @@ import semmle.javascript.linters.JSLint import semmle.javascript.linters.Linting import semmle.javascript.security.dataflow.RemoteFlowSources import semmle.javascript.frameworks.UnderscoreDotString +private import semmle.javascript.internal.Overlay diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 39b1edfe98c..bd19febdfaa 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.9-dev +version: 2.6.15-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript @@ -23,3 +23,4 @@ dataExtensions: - semmle/javascript/security/domains/**/*.model.yml - ext/*.model.yml warnOnImplicitThis: true +compileForOverlayEval: true diff --git a/javascript/ql/lib/semmle/javascript/AST.qll b/javascript/ql/lib/semmle/javascript/AST.qll index bcde7bbaf4a..db0a2e153d5 100644 --- a/javascript/ql/lib/semmle/javascript/AST.qll +++ b/javascript/ql/lib/semmle/javascript/AST.qll @@ -31,7 +31,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { /** Gets the first token belonging to this element. */ Token getFirstToken() { - exists(DbLocation l1, DbLocation l2, string filepath, int startline, int startcolumn | + exists(Location l1, Location l2, string filepath, int startline, int startcolumn | l1 = this.getLocation() and l2 = result.getLocation() and l1.hasLocationInfo(filepath, startline, startcolumn, _, _) and @@ -41,7 +41,7 @@ class AstNode extends @ast_node, NodeInStmtContainer { /** Gets the last token belonging to this element. */ Token getLastToken() { - exists(DbLocation l1, DbLocation l2, string filepath, int endline, int endcolumn | + exists(Location l1, Location l2, string filepath, int endline, int endcolumn | l1 = this.getLocation() and l2 = result.getLocation() and l1.hasLocationInfo(filepath, _, _, endline, endcolumn) and diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 3bb04f2686b..1a96e25b3b9 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -822,7 +822,7 @@ module API { or // special case: from `require('m')` to an export of `prop` in `m` exists(Import imp, Module m, string prop | - pred = imp.getImportedModuleNode() and + pred = imp.getImportedModuleNodeStrict() and m = imp.getImportedModule() and lbl = Label::member(prop) and rhs = m.getAnExportedValue(prop) @@ -1115,6 +1115,17 @@ module API { ref = awaited(call) ) or + // Handle promisified object member access: promisify(obj).member should be treated as obj.member (promisified) + exists( + Promisify::PromisifyAllCall promisifiedObj, DataFlow::SourceNode originalObj, + string member + | + originalObj.flowsTo(promisifiedObj.getArgument(0)) and + use(base, originalObj) and + lbl = Label::member(member) and + ref = promisifiedObj.getAPropertyRead(member) + ) + or decoratorDualEdge(base, lbl, ref) or decoratorUseEdge(base, lbl, ref) @@ -1313,7 +1324,9 @@ module API { exists(DataFlow::TypeTracker t, StepSummary summary, DataFlow::SourceNode prev | prev = trackUseNode(nd, promisified, boundArgs, prop, t) and StepSummary::step(prev, res, summary) and - result = t.append(summary) + result = t.append(summary) and + // Block argument-passing into 'this' when it determines the call target + not summary = CallReceiverStep() ) } @@ -1337,7 +1350,7 @@ module API { result = nd.getALocalSource() or // additional backwards step from `require('m')` to `exports` or `module.exports` in m - exists(Import imp | imp.getImportedModuleNode() = trackDefNode(nd, t.continue()) | + exists(Import imp | imp.getImportedModuleNodeStrict() = trackDefNode(nd, t.continue()) | result = DataFlow::exportsVarNode(imp.getImportedModule()) or result = DataFlow::moduleVarNode(imp.getImportedModule()).getAPropertyRead("exports") @@ -1370,7 +1383,9 @@ module API { exists(DataFlow::TypeBackTracker t, StepSummary summary, DataFlow::Node next | next = trackDefNode(nd, t) and StepSummary::step(prev, next, summary) and - result = t.prepend(summary) + result = t.prepend(summary) and + // Block argument-passing steps from 'this' back to a receiver when it determines the call target + not summary = CallReceiverStep() ) } diff --git a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll index e7534449f55..e584697c1e4 100644 --- a/javascript/ql/lib/semmle/javascript/ES2015Modules.qll +++ b/javascript/ql/lib/semmle/javascript/ES2015Modules.qll @@ -137,20 +137,37 @@ class ImportDeclaration extends Stmt, Import, @import_declaration { is instanceof ImportNamespaceSpecifier and count(this.getASpecifier()) = 1 or - // For compatibility with the non-standard implementation of default imports, - // treat default imports as namespace imports in cases where it can't cause ambiguity - // between named exports and the properties of a default-exported object. - not this.getImportedModule().(ES2015Module).hasBothNamedAndDefaultExports() and - is.getImportedName() = "default" + result = this.getAmbiguousDefaultImportNode() ) or // `import { createServer } from 'http'` result = DataFlow::destructuredModuleImportNode(this) } + /** + * Gets the data flow node corresponding to the `foo` in `import foo from "somewhere"`. + * + * This refers to the default import, but some non-standard compilers will treat it as a namespace + * import. In order to support both interpretations, it is considered an "ambiguous default import". + * + * Note that renamed default imports, such as `import { default as foo } from "somewhere"`, + * are not considered ambiguous, and will not be reported by this predicate. + */ + DataFlow::Node getAmbiguousDefaultImportNode() { + result = DataFlow::valueNode(this.getASpecifier().(ImportDefaultSpecifier)) + } + /** Holds if this is declared with the `type` keyword, so it only imports types. */ predicate isTypeOnly() { has_type_keyword(this) } + /** + * Holds if this is declared with the `defer` keyword, for example: + * ```ts + * import defer * as f from "somewhere"; + * ``` + */ + predicate isDeferredImport() { has_defer_keyword(this) } + override string getAPrimaryQlClass() { result = "ImportDeclaration" } } diff --git a/javascript/ql/lib/semmle/javascript/Files.qll b/javascript/ql/lib/semmle/javascript/Files.qll index e717eb6def4..b9274d92eba 100644 --- a/javascript/ql/lib/semmle/javascript/Files.qll +++ b/javascript/ql/lib/semmle/javascript/Files.qll @@ -3,7 +3,6 @@ import javascript private import NodeModuleResolutionImpl private import codeql.util.FileSystem -private import internal.Locations private module FsInput implements InputSig { abstract class ContainerBase extends @container { @@ -99,7 +98,7 @@ class File extends Container, Impl::File { * * Note that files have special locations starting and ending at line zero, column zero. */ - DbLocation getLocation() { result = getLocatableLocation(this) } + Location getLocation() { hasLocation(this, result) } /** Gets the number of lines in this file. */ int getNumberOfLines() { result = sum(int loc | numlines(this, loc, _, _) | loc) } diff --git a/javascript/ql/lib/semmle/javascript/JSON.qll b/javascript/ql/lib/semmle/javascript/JSON.qll index 714228e52b6..19fc3ec84d7 100644 --- a/javascript/ql/lib/semmle/javascript/JSON.qll +++ b/javascript/ql/lib/semmle/javascript/JSON.qll @@ -3,7 +3,6 @@ */ import javascript -private import semmle.javascript.internal.Locations /** * A JSON-encoded value, which may be a primitive value, an array or an object. @@ -33,7 +32,7 @@ class JsonValue extends @json_value, Locatable { override string toString() { json(this, _, _, _, result) } /** Gets the JSON file containing this value. */ - File getJsonFile() { result = getLocatableLocation(this).getFile() } + File getJsonFile() { exists(Location loc | json_locations(this, loc) and result = loc.getFile()) } /** If this is an object, gets the value of property `name`. */ JsonValue getPropValue(string name) { json_properties(this, name, result) } diff --git a/javascript/ql/lib/semmle/javascript/Locations.qll b/javascript/ql/lib/semmle/javascript/Locations.qll index ce323dfc14d..a3ad79ef93e 100644 --- a/javascript/ql/lib/semmle/javascript/Locations.qll +++ b/javascript/ql/lib/semmle/javascript/Locations.qll @@ -1,7 +1,6 @@ /** Provides classes for working with locations and program elements that have locations. */ import javascript -private import internal.Locations /** * A location as given by a file, a start line, a start column, @@ -11,31 +10,31 @@ private import internal.Locations * * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ -class DbLocation extends TDbLocation { +final class Location extends @location_default { /** Gets the file for this location. */ - File getFile() { dbLocationInfo(this, result, _, _, _, _) } + File getFile() { locations_default(this, result, _, _, _, _) } /** Gets the 1-based line number (inclusive) where this location starts. */ - int getStartLine() { dbLocationInfo(this, _, result, _, _, _) } + int getStartLine() { locations_default(this, _, result, _, _, _) } /** Gets the 1-based column number (inclusive) where this location starts. */ - int getStartColumn() { dbLocationInfo(this, _, _, result, _, _) } + int getStartColumn() { locations_default(this, _, _, result, _, _) } /** Gets the 1-based line number (inclusive) where this location ends. */ - int getEndLine() { dbLocationInfo(this, _, _, _, result, _) } + int getEndLine() { locations_default(this, _, _, _, result, _) } /** Gets the 1-based column number (inclusive) where this location ends. */ - int getEndColumn() { dbLocationInfo(this, _, _, _, _, result) } + int getEndColumn() { locations_default(this, _, _, _, _, result) } /** Gets the number of lines covered by this location. */ int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } /** Holds if this location starts before location `that`. */ pragma[inline] - predicate startsBefore(DbLocation that) { - exists(File f, int sl1, int sc1, int sl2, int sc2 | - dbLocationInfo(this, f, sl1, sc1, _, _) and - dbLocationInfo(that, f, sl2, sc2, _, _) + predicate startsBefore(Location that) { + exists(string f, int sl1, int sc1, int sl2, int sc2 | + this.hasLocationInfo(f, sl1, sc1, _, _) and + that.hasLocationInfo(f, sl2, sc2, _, _) | sl1 < sl2 or @@ -45,10 +44,10 @@ class DbLocation extends TDbLocation { /** Holds if this location ends after location `that`. */ pragma[inline] - predicate endsAfter(DbLocation that) { - exists(File f, int el1, int ec1, int el2, int ec2 | - dbLocationInfo(this, f, _, _, el1, ec1) and - dbLocationInfo(that, f, _, _, el2, ec2) + predicate endsAfter(Location that) { + exists(string f, int el1, int ec1, int el2, int ec2 | + this.hasLocationInfo(f, _, _, el1, ec1) and + that.hasLocationInfo(f, _, _, el2, ec2) | el1 > el2 or @@ -60,10 +59,10 @@ class DbLocation extends TDbLocation { * Holds if this location contains location `that`, meaning that it starts * before and ends after it. */ - predicate contains(DbLocation that) { this.startsBefore(that) and this.endsAfter(that) } + predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } /** Holds if this location is empty. */ - predicate isEmpty() { exists(int l, int c | dbLocationInfo(this, _, l, c, l, c - 1)) } + predicate isEmpty() { exists(int l, int c | this.hasLocationInfo(_, l, c, l, c - 1)) } /** Gets a textual representation of this element. */ string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } @@ -79,13 +78,19 @@ class DbLocation extends TDbLocation { string filepath, int startline, int startcolumn, int endline, int endcolumn ) { exists(File f | - dbLocationInfo(this, f, startline, startcolumn, endline, endcolumn) and + locations_default(this, f, startline, startcolumn, endline, endcolumn) and filepath = f.getAbsolutePath() ) } } -final class Location = LocationImpl; +cached +private Location getLocatableLocation(@locatable l) { + hasLocation(l, result) or + xmllocations(l, result) or + json_locations(l, result) or + yaml_locations(l, result) +} /** A program element with a location. */ class Locatable extends @locatable { @@ -93,7 +98,7 @@ class Locatable extends @locatable { File getFile() { result = this.getLocation().getFile() } /** Gets this element's location. */ - final DbLocation getLocation() { result = getLocatableLocation(this) } + final Location getLocation() { result = getLocatableLocation(this) } /** * Gets the line on which this element starts. @@ -144,3 +149,8 @@ class Locatable extends @locatable { */ string getAPrimaryQlClass() { result = "???" } } + +/** + * DEPRECATED. Use `Location` instead. + */ +deprecated class DbLocation = Location; diff --git a/javascript/ql/lib/semmle/javascript/Modules.qll b/javascript/ql/lib/semmle/javascript/Modules.qll index 3ddd5132d05..8b0330b708b 100644 --- a/javascript/ql/lib/semmle/javascript/Modules.qll +++ b/javascript/ql/lib/semmle/javascript/Modules.qll @@ -179,7 +179,42 @@ abstract class Import extends AstNode { } /** - * Gets the data flow node that the default import of this import is available at. + * Gets the data flow node corresponding to the imported module. + * + * For example: + * ```js + * // ES2015 style + * import * as foo from "fs"; // Gets the node for `foo` + * import { readSync } from "fs"; // Gets a node representing the destructured import + * + * // CommonJS style + * require("fs"); // Gets the return value + * + * // AMD style + * define(["fs"], function(fs) { // Gets the node for the `fs` parameter + * }); + * ``` + * + * For default imports, this gets two nodes: the default import node, and a node representing the imported module: + * ```js + * import foo from "fs"; // gets both `foo` and a node representing the imported module + * ``` + * This behaviour is to support non-standard compilers that treat default imports + * as namespace imports. Use `getImportedModuleNodeStrict()` to avoid this behaviour in cases + * where it would cause ambiguous data flow. */ abstract DataFlow::Node getImportedModuleNode(); + + /** + * Gets the same as `getImportedModuleNode()` except ambiguous default imports are excluded + * in cases where it would cause ambiguity between named exports and properties + * of a default export. + */ + final DataFlow::Node getImportedModuleNodeStrict() { + result = this.getImportedModuleNode() and + not ( + result = this.(ImportDeclaration).getAmbiguousDefaultImportNode() and + this.getImportedModule().(ES2015Module).hasBothNamedAndDefaultExports() + ) + } } diff --git a/javascript/ql/lib/semmle/javascript/Promises.qll b/javascript/ql/lib/semmle/javascript/Promises.qll index 51411463efc..2feb92e2e55 100644 --- a/javascript/ql/lib/semmle/javascript/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/Promises.qll @@ -727,8 +727,12 @@ module Promisify { PromisifyAllCall() { this = [ - DataFlow::moduleMember("bluebird", "promisifyAll"), - DataFlow::moduleImport(["util-promisifyall", "pify"]) + DataFlow::moduleMember(["bluebird", "@google-cloud/promisify", "es6-promisify"], + "promisifyAll"), + DataFlow::moduleMember("thenify-all", "withCallback"), + DataFlow::moduleImport([ + "util-promisifyall", "pify", "thenify-all", "@gar/promisify", "util.promisify-all" + ]) ].getACall() } } @@ -741,11 +745,13 @@ module Promisify { PromisifyCall() { this = DataFlow::moduleImport(["util", "bluebird"]).getAMemberCall("promisify") or - this = DataFlow::moduleImport(["pify", "util.promisify"]).getACall() + this = DataFlow::moduleImport(["pify", "util.promisify", "util-promisify"]).getACall() or - this = DataFlow::moduleImport("thenify").getACall() + this = DataFlow::moduleImport(["thenify", "@gar/promisify", "es6-promisify"]).getACall() or this = DataFlow::moduleMember("thenify", "withCallback").getACall() + or + this = DataFlow::moduleMember("@google-cloud/promisify", "promisify").getACall() } } } diff --git a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll index 05bcd8b3ddd..47ee41a4235 100644 --- a/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll +++ b/javascript/ql/lib/semmle/javascript/RestrictedLocations.qll @@ -26,7 +26,7 @@ class FirstLineOf extends Locatable { then endcolumn = xc else endcolumn = - max(int c | any(DbLocation l).hasLocationInfo(filepath, startline, _, startline, c)) + max(int c | any(Location l).hasLocationInfo(filepath, startline, _, startline, c)) ) } } diff --git a/javascript/ql/lib/semmle/javascript/SSA.qll b/javascript/ql/lib/semmle/javascript/SSA.qll index 2de42193743..a2c5bf1d34e 100644 --- a/javascript/ql/lib/semmle/javascript/SSA.qll +++ b/javascript/ql/lib/semmle/javascript/SSA.qll @@ -108,8 +108,8 @@ private module Internal { */ cached newtype TSsaDefinition = - TExplicitDef(ReachableBasicBlock bb, int i, VarDef d, SsaSourceVariable v) { - bb.defAt(i, v, d) and + TExplicitDef(ReachableBasicBlock bb, int i, VarDef d, SsaSourceVariable v, VarRef lhs) { + bb.defAt(i, v, d, lhs) and ( liveAfterDef(bb, i, v) or v.isCaptured() @@ -412,17 +412,22 @@ class SsaVariable extends TSsaDefinition { /** Gets a textual representation of this element. */ string toString() { result = this.getDefinition().prettyPrintRef() } + /** Gets the location of this SSA variable. */ + Location getLocation() { result = this.getDefinition().getLocation() } + /** + * DEPRECATED. Use `getLocation().hasLocationInfo()` instead. + * * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - this.getDefinition().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) } } @@ -478,23 +483,22 @@ class SsaDefinition extends TSsaDefinition { string toString() { result = this.prettyPrintDef() } /** + * DEPRECATED. Use `getLocation().hasLocationInfo()` instead. + * * Holds if this element is at the specified location. * The location spans column `startcolumn` of line `startline` to * column `endcolumn` of line `endline` in file `filepath`. * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - abstract predicate hasLocationInfo( + deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn - ); + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } /** Gets the location of this element. */ - final Location getLocation() { - exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | - this.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - result.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } + Location getLocation() { result = this.getBasicBlock().getLocation() } /** Gets the function or toplevel to which this definition belongs. */ StmtContainer getContainer() { result = this.getBasicBlock().getContainer() } @@ -505,36 +509,34 @@ class SsaDefinition extends TSsaDefinition { */ class SsaExplicitDefinition extends SsaDefinition, TExplicitDef { override predicate definesAt(ReachableBasicBlock bb, int i, SsaSourceVariable v) { - this = TExplicitDef(bb, i, _, v) + this = TExplicitDef(bb, i, _, v, _) } /** This SSA definition corresponds to the definition of `v` at `def`. */ - predicate defines(VarDef def, SsaSourceVariable v) { this = TExplicitDef(_, _, def, v) } + predicate defines(VarDef def, SsaSourceVariable v) { this = TExplicitDef(_, _, def, v, _) } /** Gets the variable definition wrapped by this SSA definition. */ - VarDef getDef() { this = TExplicitDef(_, _, result, _) } + VarDef getDef() { this = TExplicitDef(_, _, result, _, _) } + + /** Gets the variable reference appearing on the left-hand side of this assignment. */ + VarRef getLhs() { this = TExplicitDef(_, _, _, _, result) } /** Gets the basic block to which this definition belongs. */ override ReachableBasicBlock getBasicBlock() { this.definesAt(result, _, _) } - override SsaSourceVariable getSourceVariable() { this = TExplicitDef(_, _, _, result) } + override SsaSourceVariable getSourceVariable() { this = TExplicitDef(_, _, _, result, _) } override VarDef getAContributingVarDef() { result = this.getDef() } override string prettyPrintRef() { - exists(int l, int c | this.hasLocationInfo(_, l, c, _, _) | result = "def@" + l + ":" + c) + exists(int l, int c | this.getLocation().hasLocationInfo(_, l, c, _, _) | + result = "def@" + l + ":" + c + ) } override string prettyPrintDef() { result = this.getDef().toString() } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(Location loc | - pragma[only_bind_into](loc) = pragma[only_bind_into](this.getDef()).getLocation() and - loc.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } + override Location getLocation() { result = this.getLhs().getLocation() } /** * Gets the data flow node representing the incoming value assigned at this definition, @@ -557,21 +559,10 @@ abstract class SsaImplicitDefinition extends SsaDefinition { abstract string getKind(); override string prettyPrintRef() { - exists(int l, int c | this.hasLocationInfo(_, l, c, _, _) | + exists(int l, int c | this.getLocation().hasLocationInfo(_, l, c, _, _) | result = this.getKind() + "@" + l + ":" + c ) } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - endline = startline and - endcolumn = startcolumn and - exists(Location loc | - pragma[only_bind_into](loc) = pragma[only_bind_into](this.getBasicBlock()).getLocation() and - loc.hasLocationInfo(filepath, startline, startcolumn, _, _) - ) - } } /** @@ -617,16 +608,6 @@ class SsaVariableCapture extends SsaImplicitDefinition, TCapture { override string getKind() { result = "capture" } override string prettyPrintDef() { result = "capture variable " + this.getSourceVariable() } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(ReachableBasicBlock bb, int i | this.definesAt(bb, i, _) | - bb.getNode(i) - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - ) - } } /** @@ -747,13 +728,7 @@ class SsaRefinementNode extends SsaPseudoDefinition, TRefinement { this.getSourceVariable() + " = refine[" + this.getGuard() + "](" + this.ppInputs() + ")" } - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - this.getGuard() - .getLocation() - .hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } + override Location getLocation() { result = this.getGuard().getLocation() } } module Ssa { diff --git a/javascript/ql/lib/semmle/javascript/Tokens.qll b/javascript/ql/lib/semmle/javascript/Tokens.qll index c6a9b05a3d1..c9eeef69dfb 100644 --- a/javascript/ql/lib/semmle/javascript/Tokens.qll +++ b/javascript/ql/lib/semmle/javascript/Tokens.qll @@ -4,6 +4,14 @@ import javascript +pragma[nomagic] +private predicate adjacentTokens(Token token1, Token token2) { + exists(TopLevel top, int index | + tokeninfo(token1, _, top, index, _) and + tokeninfo(token2, _, top, index + 1, _) + ) +} + /** * A token occurring in a piece of JavaScript source code. * @@ -27,10 +35,7 @@ class Token extends Locatable, @token { string getValue() { tokeninfo(this, _, _, _, result) } /** Gets the token following this token inside the same toplevel structure, if any. */ - Token getNextToken() { - this.getTopLevel() = result.getTopLevel() and - this.getIndex() + 1 = result.getIndex() - } + Token getNextToken() { adjacentTokens(this, result) } /** Gets the token preceding this token inside the same toplevel structure, if any. */ Token getPreviousToken() { result.getNextToken() = this } diff --git a/javascript/ql/lib/semmle/javascript/Variables.qll b/javascript/ql/lib/semmle/javascript/Variables.qll index 2f9905f86e1..adc0ad5b9c8 100644 --- a/javascript/ql/lib/semmle/javascript/Variables.qll +++ b/javascript/ql/lib/semmle/javascript/Variables.qll @@ -353,9 +353,9 @@ class LocalVariable extends Variable { * If the variable has one or more declarations, the location of the first declaration is used. * If the variable has no declaration, the entry point of its declaring container is used. */ - DbLocation getLocation() { + Location getLocation() { result = - min(DbLocation loc | + min(Location loc | loc = this.getADeclaration().getLocation() | loc order by loc.getStartLine(), loc.getStartColumn() diff --git a/javascript/ql/lib/semmle/javascript/XML.qll b/javascript/ql/lib/semmle/javascript/XML.qll index 2a351016fd1..54157809260 100644 --- a/javascript/ql/lib/semmle/javascript/XML.qll +++ b/javascript/ql/lib/semmle/javascript/XML.qll @@ -3,13 +3,12 @@ */ import semmle.files.FileSystem -private import semmle.javascript.internal.Locations private import codeql.xml.Xml -private module Input implements InputSig { +private module Input implements InputSig { class XmlLocatableBase = @xmllocatable or @xmlnamespaceable; - predicate xmllocations_(XmlLocatableBase e, DbLocation loc) { loc = getLocatableLocation(e) } + predicate xmllocations_(XmlLocatableBase e, Location loc) { xmllocations(e, loc) } class XmlParentBase = @xmlparent; @@ -67,4 +66,4 @@ private module Input implements InputSig { } } -import Make +import Make diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index 24486b729c0..a312d78b6fb 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -9,8 +9,6 @@ import javascript private import codeql.yaml.Yaml as LibYaml private module YamlSig implements LibYaml::InputSig { - class Location = DbLocation; - class LocatableBase extends @yaml_locatable, Locatable { } import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll index df3d0d5ff8b..071d6d08433 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/DataFlow.qll @@ -192,26 +192,6 @@ module DataFlow { FlowSteps::identityFunctionStep(result, this) } - /** - * Gets the type annotation describing the type of this node, - * provided that a static type could not be found. - * - * Doesn't take field types and function return types into account. - */ - private TypeAnnotation getFallbackTypeAnnotation() { - exists(BindingPattern pattern | - this = valueNode(pattern) and - result = pattern.getTypeAnnotation() - ) - or - result = this.getAPredecessor().getFallbackTypeAnnotation() - or - exists(DataFlow::ClassNode cls, string fieldName | - this = cls.getAReceiverNode().getAPropertyRead(fieldName) and - result = cls.getFieldTypeAnnotation(fieldName) - ) - } - private NameResolution::Node getNameResolutionNode() { this = valueNode(result) or @@ -1932,6 +1912,7 @@ module DataFlow { deprecated import Configuration import TypeTracking import AdditionalFlowSteps + import PromisifyFlow import internal.FunctionWrapperSteps import internal.sharedlib.DataFlow import internal.BarrierGuards diff --git a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll index c4a6e12b210..eb7160683a7 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/FlowSummary.qll @@ -17,10 +17,10 @@ private import semmle.javascript.dataflow.internal.DataFlowPrivate * * - The relevant call sites cannot be matched by the access path syntax, and require the full power of CodeQL. * For example, complex overloading patterns might require more local reasoning at the call site. - * - The input/output behaviour cannot be described statically in the access path syntax, but the relevant access paths + * - The input/output behavior cannot be described statically in the access path syntax, but the relevant access paths * can be generated dynamically in CodeQL, based on the usages found in the codebase. * - * Subclasses should bind `this` to a unique identifier for the function being modelled. There is no special + * Subclasses should bind `this` to a unique identifier for the function being modeled. There is no special * interpreation of the `this` value, it should just not clash with the `this`-value used by other classes. * * For example, this models flow through calls such as `require("my-library").myFunction()`: diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Portals.qll b/javascript/ql/lib/semmle/javascript/dataflow/Portals.qll index a325a5e14f7..d8f29c707a6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Portals.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Portals.qll @@ -11,6 +11,7 @@ * * The API of this library is not stable yet and may change. */ +deprecated module; import javascript diff --git a/javascript/ql/lib/semmle/javascript/dataflow/PromisifyFlow.qll b/javascript/ql/lib/semmle/javascript/dataflow/PromisifyFlow.qll new file mode 100644 index 00000000000..4389a3d031a --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/dataflow/PromisifyFlow.qll @@ -0,0 +1,29 @@ +/** + * Provides data flow steps for promisified user-defined function calls. + * This ensures that when you call a promisified user-defined function, + * arguments flow to the original function's parameters. + */ + +private import javascript +private import semmle.javascript.dataflow.AdditionalFlowSteps + +/** + * A data flow step from arguments of promisified user-defined function calls to + * the parameters of the original function. + */ +class PromisifiedUserFunctionArgumentFlow extends AdditionalFlowStep { + override predicate step(DataFlow::Node pred, DataFlow::Node succ) { + exists( + DataFlow::CallNode promisifiedCall, Promisify::PromisifyCall promisify, + DataFlow::FunctionNode originalFunc, int i + | + // The promisified call flows from a promisify result + promisify.flowsTo(promisifiedCall.getCalleeNode()) and + // The original function was promisified + originalFunc.flowsTo(promisify.getArgument(0)) and + // Argument i of the promisified call flows to parameter i of the original function + pred = promisifiedCall.getArgument(i) and + succ = originalFunc.getParameter(i) + ) + } +} diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index f861488a046..7503e5001e0 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -334,6 +334,7 @@ module SourceNode { astNode instanceof Templating::PipeRefExpr or astNode instanceof Templating::TemplateVarRefExpr or astNode instanceof StringLiteral or + astNode instanceof TemplateLiteral or astNode instanceof TypeAssertion or astNode instanceof SatisfiesExpr ) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/TypeTracking.qll b/javascript/ql/lib/semmle/javascript/dataflow/TypeTracking.qll index 9e912a336f6..e4c8f162972 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/TypeTracking.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/TypeTracking.qll @@ -65,6 +65,8 @@ class TypeTracker extends TTypeTracker { or step = CallStep() and result = MkTypeTracker(true, prop) or + step = CallReceiverStep() and result = MkTypeTracker(true, prop) + or step = ReturnStep() and hasCall = false and result = this or step = LoadStep(prop) and result = MkTypeTracker(hasCall, "") @@ -238,6 +240,8 @@ class TypeBackTracker extends TTypeBackTracker { or step = CallStep() and hasReturn = false and result = this or + step = CallReceiverStep() and hasReturn = false and result = this + or step = ReturnStep() and result = MkTypeBackTracker(true, prop) or exists(string p | step = LoadStep(p) and prop = "" and result = MkTypeBackTracker(hasReturn, p)) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll index 0af57ec0186..6dd0ebf0bb1 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/BarrierGuards.qll @@ -386,34 +386,35 @@ module MakeStateBarrierGuard< */ private class BarrierGuardFunction extends FinalFunction { DataFlow::ParameterNode sanitizedParameter; - BarrierGuard guard; boolean guardOutcome; FlowState state; int paramIndex; BarrierGuardFunction() { - barrierGuardIsRelevant(guard) and - exists(Expr e | - exists(Expr returnExpr | - returnExpr = guard.asExpr() - or - // ad hoc support for conjunctions: - getALogicalAndParent(guard) = returnExpr and guardOutcome = true - or - // ad hoc support for disjunctions: - getALogicalOrParent(guard) = returnExpr and guardOutcome = false - | - exists(SsaExplicitDefinition ssa | - ssa.getDef().getSource() = returnExpr and - ssa.getVariable().getAUse() = this.getAReturnedExpr() - ) - or - returnExpr = this.getAReturnedExpr() + exists(BarrierGuard guard | + barrierGuardIsRelevant(guard) and + exists(Expr e | + exists(Expr returnExpr | + returnExpr = guard.asExpr() + or + // ad hoc support for conjunctions: + getALogicalAndParent(guard) = returnExpr and guardOutcome = true + or + // ad hoc support for disjunctions: + getALogicalOrParent(guard) = returnExpr and guardOutcome = false + | + exists(SsaExplicitDefinition ssa | + ssa.getDef().getSource() = returnExpr and + ssa.getVariable().getAUse() = this.getAReturnedExpr() + ) + or + returnExpr = this.getAReturnedExpr() + ) and + sanitizedParameter.flowsToExpr(e) and + barrierGuardBlocksExpr(guard, guardOutcome, e, state) ) and - sanitizedParameter.flowsToExpr(e) and - barrierGuardBlocksExpr(guard, guardOutcome, e, state) - ) and - sanitizedParameter.getParameter() = this.getParameter(paramIndex) + sanitizedParameter.getParameter() = this.getParameter(paramIndex) + ) } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll index 2fcc2acbd16..1a4051ccdf6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/DataFlowPrivate.qll @@ -408,12 +408,6 @@ class DataFlowCallable extends TDataFlowCallable { /** Gets the corresponding `LibraryCallable` if this is a library callable. */ LibraryCallable asLibraryCallable() { this = MkLibraryCallable(result) } - - int totalorder() { - result = TotalOrdering::astNodeId(this.asSourceCallable()).bitShiftLeft(1) - or - result = TotalOrdering::libraryCallableId(this.asLibraryCallable()).bitShiftLeft(1) + 1 - } } /** A callable defined in library code, identified by a unique string. */ @@ -680,7 +674,7 @@ predicate neverSkipInPathGraph(Node node) { // Include the return-value expression node.asExpr() = any(Function f).getAReturnedExpr() or - // Include calls (which may have been modelled as steps) + // Include calls (which may have been modeled as steps) node.asExpr() instanceof InvokeExpr or // Include references to a variable @@ -797,47 +791,6 @@ private newtype TDataFlowCall = FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) } -private module TotalOrdering { - private predicate astNodeRefl(AstNode x, AstNode y) { x = y } - - int astNodeId(AstNode n) = equivalenceRelation(astNodeRefl/2)(n, result) - - predicate dataFlowNodeId(DataFlow::Node node, int cls, int content) { - exists(AstNode n | - node = TValueNode(n) and cls = 1 and content = astNodeId(n) - or - node = TReflectiveCallNode(n, _) and cls = 2 and content = astNodeId(n) - ) - } - - predicate callId(DataFlowCall call, int cls, int child, int extra) { - exists(DataFlow::Node node | - call = MkOrdinaryCall(node) and dataFlowNodeId(node, cls - 1000, child) and extra = 0 - or - call = MkPartialCall(node, _) and dataFlowNodeId(node, cls - 2000, child) and extra = 0 - or - call = MkBoundCall(node, extra) and dataFlowNodeId(node, cls - 3000, child) - or - call = MkAccessorCall(node) and dataFlowNodeId(node, cls - 4000, child) and extra = 0 - ) - or - exists(Function f | - call = MkImpliedLambdaCall(f) and cls = 5000 and child = astNodeId(f) and extra = 0 - ) - or - exists( - FlowSummaryImpl::Public::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver - | - call = MkSummaryCall(c, receiver) and - cls = 6000 and - c = rank[child](FlowSummaryImpl::Public::SummarizedCallable cs) and - extra = 0 - ) - } - - int libraryCallableId(LibraryCallable callable) { callable = rank[result](LibraryCallable c) } -} - class DataFlowCall extends TDataFlowCall { DataFlowCallable getEnclosingCallable() { none() } // Overridden in subclass @@ -861,15 +814,6 @@ class DataFlowCall extends TDataFlowCall { } Location getLocation() { none() } // Overridden in subclass - - int totalorder() { - this = - rank[result](DataFlowCall call, int x, int y, int z | - TotalOrdering::callId(call, x, y, z) - | - call order by x, y, z - ) - } } private class OrdinaryCall extends DataFlowCall, MkOrdinaryCall { @@ -1159,7 +1103,7 @@ private predicate legacyBarrier(DataFlow::Node node) { pragma[nomagic] private predicate isBlockedLegacyNode(Node node) { // Ignore captured variable nodes for those variables that are handled by the captured-variable library. - // Note that some variables, such as top-level variables, are still modelled with these nodes (which will result in jump steps). + // Note that some variables, such as top-level variables, are still modeled with these nodes (which will result in jump steps). exists(LocalVariable variable | node = TCapturedVariableNode(variable) and variable = any(VariableCaptureConfig::CapturedVariable v).asLocalVariable() @@ -1653,8 +1597,6 @@ abstract class NodeRegion extends Unit { /** Holds if this region contains `n`. */ predicate contains(Node n) { none() } - - int totalOrder() { none() } } /** diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll index 31f5f16bbfb..a5131e4fd64 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/FlowSummaryPrivate.qll @@ -94,6 +94,8 @@ private string encodeContentAux(ContentSet cs, string arg) { cs = ContentSet::iteratorElement() and result = "IteratorElement" or cs = ContentSet::iteratorError() and result = "IteratorError" + or + cs = ContentSet::anyProperty() and result = "AnyMember" ) or cs = getPromiseContent(arg) and @@ -148,7 +150,9 @@ private module FlowSummaryStepInput implements Private::StepsInputSig { ) } - DataFlow::Node getSourceNode(SourceBase source, Private::SummaryComponent sc) { none() } + DataFlowCallable getSourceNodeEnclosingCallable(SourceBase source) { none() } + + DataFlow::Node getSourceNode(SourceBase source, Private::SummaryComponentStack s) { none() } DataFlow::Node getSinkNode(SinkBase sink, Private::SummaryComponent sc) { none() } } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll index 2bcd89130a9..fed492074b6 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll @@ -43,6 +43,7 @@ private module Cached { newtype TStepSummary = LevelStep() or CallStep() or + CallReceiverStep() or ReturnStep() or StoreStep(PropertyName prop) or LoadStep(PropertyName prop) or @@ -101,6 +102,15 @@ private module Cached { ) } + pragma[nomagic] + private predicate isReceiverForMethodDispatch(DataFlow::Node node) { + exists(DataFlow::SourceNode base, DataFlow::CallNode invoke | + node = invoke.getReceiver() and + base = node.getALocalSource() and + invoke.getCalleeNode() = base.getAPropertyRead() + ) + } + /** * INTERNAL: Use `TypeBackTracker.smallstep()` instead. */ @@ -116,7 +126,11 @@ private module Cached { or // Flow into function callStep(pred, succ) and - summary = CallStep() + ( + if isReceiverForMethodDispatch(pred) + then summary = CallReceiverStep() + else summary = CallStep() + ) or // Flow out of function returnStep(pred, succ) and @@ -251,6 +265,8 @@ class StepSummary extends TStepSummary { or this instanceof CallStep and result = "call" or + this instanceof CallReceiverStep and result = "call-receiver" + or this instanceof ReturnStep and result = "return" or exists(string prop | this = StoreStep(prop) | result = "store " + prop) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll index 75f21bab38a..8edacdc2f0f 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableCapture.qll @@ -4,7 +4,7 @@ private import semmle.javascript.dataflow.internal.VariableOrThis private import codeql.dataflow.VariableCapture private import semmle.javascript.dataflow.internal.sharedlib.DataFlowImplCommon as DataFlowImplCommon -module VariableCaptureConfig implements InputSig { +module VariableCaptureConfig implements InputSig { private js::Function getLambdaFromVariable(js::LocalVariable variable) { result.getVariable() = variable or @@ -106,10 +106,8 @@ module VariableCaptureConfig implements InputSig { ) } - class ControlFlowNode = js::ControlFlowNode; - - class BasicBlock extends js::BasicBlock { - Callable getEnclosingCallable() { result = this.getContainer().getFunctionBoundary() } + Callable basicBlockGetEnclosingCallable(js::Cfg::BasicBlock bb) { + result = bb.getContainer().getFunctionBoundary() } class Callable extends js::StmtContainer { @@ -125,7 +123,7 @@ module VariableCaptureConfig implements InputSig { class Expr extends js::AST::ValueNode { /** Holds if the `i`th node of basic block `bb` evaluates this expression. */ - predicate hasCfgNode(BasicBlock bb, int i) { + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { // Note: this is overridden for FunctionDeclStmt bb.getNode(i) = this } @@ -168,11 +166,11 @@ module VariableCaptureConfig implements InputSig { string toString() { none() } // Overridden in subclass - js::DbLocation getLocation() { none() } // Overridden in subclass + js::Location getLocation() { none() } // Overridden in subclass - predicate hasCfgNode(BasicBlock bb, int i) { none() } // Overridden in subclass + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { none() } // Overridden in subclass - // note: langauge-specific + // note: language-specific js::DataFlow::Node getSource() { none() } // Overridden in subclass } @@ -186,7 +184,7 @@ module VariableCaptureConfig implements InputSig { override string toString() { result = pattern.toString() } /** Gets the location of this write. */ - override js::DbLocation getLocation() { result = pattern.getLocation() } + override js::Location getLocation() { result = pattern.getLocation() } override js::DataFlow::Node getSource() { // Note: there is not always an expression corresponding to the RHS of the assignment. @@ -207,7 +205,7 @@ module VariableCaptureConfig implements InputSig { } /** Holds if the `i`th node of basic block `bb` evaluates this expression. */ - override predicate hasCfgNode(BasicBlock bb, int i) { + override predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { bb.getNode(i) = this.getCfgNodeOverride() or not exists(this.getCfgNodeOverride()) and @@ -222,11 +220,11 @@ module VariableCaptureConfig implements InputSig { override string toString() { result = "[implicit init] " + variable } - override js::DbLocation getLocation() { result = variable.getLocation() } + override js::Location getLocation() { result = variable.getLocation() } override CapturedVariable getVariable() { result = variable } - override predicate hasCfgNode(BasicBlock bb, int i) { + override predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { // 'i' would normally be bound to 0, but we lower it to -1 so FunctionDeclStmts can be evaluated // at index 0. any(js::SsaImplicitInit def).definesAt(bb, _, variable.asLocalVariable()) and i = -1 @@ -234,15 +232,9 @@ module VariableCaptureConfig implements InputSig { bb.(js::EntryBasicBlock).getContainer() = variable.asThisContainer() and i = -1 } } - - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - - BasicBlock getImmediateBasicBlockDominator(BasicBlock bb) { result = bb.getImmediateDominator() } - - predicate entryBlock(BasicBlock bb) { bb instanceof js::EntryBasicBlock } } -module VariableCaptureOutput = Flow; +module VariableCaptureOutput = Flow; js::DataFlow::Node getNodeFromClosureNode(VariableCaptureOutput::ClosureNode node) { result = TValueNode(node.(VariableCaptureOutput::ExprNode).getExpr()) @@ -288,9 +280,9 @@ private module Debug { relevantContainer(node1.getContainer()) } - predicate readBB(VariableRead read, BasicBlock bb, int i) { read.hasCfgNode(bb, i) } + predicate readBB(VariableRead read, js::Cfg::BasicBlock bb, int i) { read.hasCfgNode(bb, i) } - predicate writeBB(VariableWrite write, BasicBlock bb, int i) { write.hasCfgNode(bb, i) } + predicate writeBB(VariableWrite write, js::Cfg::BasicBlock bb, int i) { write.hasCfgNode(bb, i) } int captureDegree(js::Function fun) { result = strictcount(CapturedVariable v | captures(fun, v)) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll index 8309c0d639c..a517e0d91fd 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/VariableOrThis.qll @@ -25,7 +25,7 @@ class LocalVariableOrThis extends TLocalVariableOrThis { } /** Gets the location of a declaration of this variable, or the declaring container if this is `this`. */ - DbLocation getLocation() { + Location getLocation() { result = this.asLocalVariable().getLocation() or result = this.asThisContainer().getLocation() @@ -95,7 +95,7 @@ abstract class ThisUse instanceof ControlFlowNode { string toString() { result = super.toString() } /** Gets the location of this use of `this`. */ - DbLocation getLocation() { result = super.getLocation() } + Location getLocation() { result = super.getLocation() } } private predicate implicitThisUse(ControlFlowNode node, StmtContainer thisBinder) { diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index eef4dc08318..7e610c3c23c 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -9,11 +9,7 @@ private import codeql.ssa.Ssa private import semmle.javascript.internal.BasicBlockInternal as BasicBlockInternal private import semmle.javascript.dataflow.internal.VariableOrThis -module SsaConfig implements InputSig { - class ControlFlowNode = js::ControlFlowNode; - - class BasicBlock = js::BasicBlock; - +module SsaConfig implements InputSig { class SourceVariable extends LocalVariableOrThis { SourceVariable() { not this.isCaptured() } } @@ -23,7 +19,7 @@ module SsaConfig implements InputSig { result.getContainer() = container } - predicate variableWrite(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableWrite(js::Cfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { certain = true and ( bb.defAt(i, v.asLocalVariable(), _) @@ -34,20 +30,15 @@ module SsaConfig implements InputSig { ) } - predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { + predicate variableRead(js::Cfg::BasicBlock bb, int i, SourceVariable v, boolean certain) { bb.useAt(i, v.asLocalVariable(), _) and certain = true or certain = true and bb.getNode(i).(ThisUse).getBindingContainer() = v.asThisContainer() } - - predicate getImmediateBasicBlockDominator = BasicBlockInternal::immediateDominator/1; - - pragma[inline] - BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } } -import Make +import Make module SsaDataflowInput implements DataFlowIntegrationInputSig { private import codeql.util.Boolean @@ -55,7 +46,7 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { class Expr extends js::ControlFlowNode { Expr() { this = any(SsaConfig::SourceVariable v).getAUse() } - predicate hasCfgNode(js::BasicBlock bb, int i) { this = bb.getNode(i) } + predicate hasCfgNode(js::Cfg::BasicBlock bb, int i) { this = bb.getNode(i) } } predicate ssaDefHasSource(WriteDefinition def) { @@ -82,7 +73,7 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { * Holds if the evaluation of this guard to `branch` corresponds to the edge * from `bb1` to `bb2`. */ - predicate hasValueBranchEdge(js::BasicBlock bb1, js::BasicBlock bb2, GuardValue branch) { + predicate hasValueBranchEdge(js::Cfg::BasicBlock bb1, js::Cfg::BasicBlock bb2, GuardValue branch) { exists(js::ConditionGuardNode g | g.getTest() = this and bb1 = this.getBasicBlock() and @@ -96,13 +87,15 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { * branch edge from `bb1` to `bb2`. That is, following the edge from * `bb1` to `bb2` implies that this guard evaluated to `branch`. */ - predicate valueControlsBranchEdge(js::BasicBlock bb1, js::BasicBlock bb2, GuardValue branch) { + predicate valueControlsBranchEdge( + js::Cfg::BasicBlock bb1, js::Cfg::BasicBlock bb2, GuardValue branch + ) { this.hasValueBranchEdge(bb1, bb2, branch) } } pragma[inline] - predicate guardDirectlyControlsBlock(Guard guard, js::BasicBlock bb, GuardValue branch) { + predicate guardDirectlyControlsBlock(Guard guard, js::Cfg::BasicBlock bb, GuardValue branch) { exists(js::ConditionGuardNode g | g.getTest() = guard and g.dominates(bb) and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll index 248a88e3d1c..41d14c1e3be 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AngularJS/AngularJSCore.qll @@ -23,46 +23,6 @@ DataFlow::SourceNode angular() { result = DataFlow::moduleImport("angular") } -/** - * Holds if `tl` appears to be a top-level using the AngularJS library. - * - * Should not depend on the `SourceNode` class. - */ -pragma[nomagic] -private predicate isAngularTopLevel(TopLevel tl) { - exists(Import imprt | - imprt.getTopLevel() = tl and - imprt.getImportedPathString() = "angular" - ) - or - exists(GlobalVarAccess global | - global.getName() = "angular" and - global.getTopLevel() = tl - ) -} - -/** - * Holds if `s` is a string in a top-level using the AngularJS library. - * - * Should not depend on the `SourceNode` class. - */ -pragma[nomagic] -private predicate isAngularString(Expr s) { - isAngularTopLevel(s.getTopLevel()) and - ( - s instanceof StringLiteral or - s instanceof TemplateLiteral - ) -} - -/** - * String literals in Angular code are often used as identifiers or references, so we - * want to track them. - */ -private class TrackStringsInAngularCode extends DataFlow::SourceNode::Range, DataFlow::ValueNode { - TrackStringsInAngularCode() { isAngularString(astNode) } -} - /** * Holds if `m` is of the form `angular.module("name", ...)`. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll b/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll index 4dc60d44765..db2487ce46a 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/AsyncPackage.qll @@ -25,6 +25,18 @@ module AsyncPackage { result = member(name + "Series") } + /** + * Gets `Limit` or `Series` name variants for a given member name. + * + * For example, `memberNameVariant("map")` returns `map`, `mapLimit`, and `mapSeries`. + */ + bindingset[name] + private string memberNameVariant(string name) { + result = name or + result = name + "Limit" or + result = name + "Series" + } + /** * A call to `async.waterfall`. */ @@ -101,22 +113,47 @@ module AsyncPackage { */ class IterationCall extends DataFlow::InvokeNode { string name; + int iteratorCallbackIndex; + int finalCallbackIndex; IterationCall() { - this = memberVariant(name).getACall() and - name = - [ - "concat", "detect", "each", "eachOf", "forEach", "forEachOf", "every", "filter", - "groupBy", "map", "mapValues", "reduce", "reduceRight", "reject", "some", "sortBy", - "transform" - ] + ( + ( + name = + memberNameVariant([ + "concat", "detect", "each", "eachOf", "forEach", "forEachOf", "every", "filter", + "groupBy", "map", "mapValues", "reject", "some", "sortBy", + ]) and + if name.matches("%Limit") + then ( + iteratorCallbackIndex = 2 and finalCallbackIndex = 3 + ) else ( + iteratorCallbackIndex = 1 and finalCallbackIndex = 2 + ) + ) + or + name = ["reduce", "reduceRight", "transform"] and + iteratorCallbackIndex = 2 and + finalCallbackIndex = 3 + ) and + this = member(name).getACall() } /** - * Gets the name of the iteration call, without the `Limit` or `Series` suffix. + * Gets the name of the iteration call */ string getName() { result = name } + /** + * Gets the iterator callback index + */ + int getIteratorCallbackIndex() { result = iteratorCallbackIndex } + + /** + * Gets the final callback index + */ + int getFinalCallbackIndex() { result = finalCallbackIndex } + /** * Gets the node holding the collection being iterated over. */ @@ -125,26 +162,33 @@ module AsyncPackage { /** * Gets the node holding the function being called for each element in the collection. */ - DataFlow::Node getIteratorCallback() { result = this.getArgument(this.getNumArgument() - 2) } + DataFlow::FunctionNode getIteratorCallback() { + result = this.getCallback(iteratorCallbackIndex) + } /** - * Gets the node holding the function being invoked after iteration is complete. + * Gets the node holding the function being invoked after iteration is complete. (may not exist) */ - DataFlow::Node getFinalCallback() { result = this.getArgument(this.getNumArgument() - 1) } + DataFlow::FunctionNode getFinalCallback() { result = this.getCallback(finalCallbackIndex) } } - /** - * A taint step from the collection into the iterator callback of an iteration call. - * - * For example: `data -> item` in `async.each(data, (item, cb) => {})`. - */ - private class IterationInputTaintStep extends TaintTracking::SharedTaintStep { - override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - exists(DataFlow::FunctionNode iteratee, IterationCall call | - iteratee = call.getIteratorCallback() and // Require a closure to avoid spurious call/return mismatch. - pred = call.getCollection() and // TODO: needs a flow summary to ensure ArrayElement content is unfolded - succ = iteratee.getParameter(0) - ) + private class IterationCallFlowSummary extends DataFlow::SummarizedCallable { + private int callbackArgIndex; + + IterationCallFlowSummary() { + this = "async.IteratorCall(callbackArgIndex=" + callbackArgIndex + ")" and + callbackArgIndex in [1 .. 3] + } + + override DataFlow::InvokeNode getACallSimple() { + result instanceof IterationCall and + result.(IterationCall).getIteratorCallbackIndex() = callbackArgIndex + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + preservesValue = true and + input = "Argument[0]." + ["ArrayElement", "SetElement", "IteratorElement", "AnyMember"] and + output = "Argument[" + callbackArgIndex + "].Parameter[0]" } } @@ -152,14 +196,14 @@ module AsyncPackage { * A taint step from the return value of an iterator callback to the result of the iteration * call. * - * For example: `item + taint()` -> result` in `async.map(data, (item, cb) => cb(null, item + taint()), (err, result) => {})`. + * For example: `item + taint() -> result` in `async.map(data, (item, cb) => cb(null, item + taint()), (err, result) => {})`. */ private class IterationOutputTaintStep extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists( DataFlow::FunctionNode iteratee, DataFlow::FunctionNode final, int i, IterationCall call | - iteratee = call.getIteratorCallback().getALocalSource() and + iteratee = call.getIteratorCallback() and final = call.getFinalCallback() and // Require a closure to avoid spurious call/return mismatch. pred = getLastParameter(iteratee).getACall().getArgument(i) and succ = final.getParameter(i) and @@ -175,14 +219,18 @@ module AsyncPackage { * * For example: `data -> result` in `async.sortBy(data, orderingFn, (err, result) => {})`. */ - private class IterationPreserveTaintStep extends TaintTracking::SharedTaintStep { - override predicate step(DataFlow::Node pred, DataFlow::Node succ) { - exists(DataFlow::FunctionNode final, IterationCall call | - final = call.getFinalCallback() and // Require a closure to avoid spurious call/return mismatch. - pred = call.getCollection() and - succ = final.getParameter(1) and - call.getName() = "sortBy" - ) + private class IterationPreserveTaintStepFlowSummary extends DataFlow::SummarizedCallable { + IterationPreserveTaintStepFlowSummary() { this = "async.sortBy" } + + override DataFlow::InvokeNode getACallSimple() { + result instanceof IterationCall and + result.(IterationCall).getName() = "sortBy" + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + preservesValue = false and + input = "Argument[0]." + ["ArrayElement", "SetElement", "IteratorElement", "AnyMember"] and + output = "Argument[2].Parameter[1]" } } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll b/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll index 4b3f70b7772..9ca47fb4727 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Babel.qll @@ -141,16 +141,17 @@ module Babel { */ deprecated private class BabelRootTransformedPathExpr extends PathExpr, Expr { RootImportConfig plugin; - string prefix; string mappedPrefix; string suffix; BabelRootTransformedPathExpr() { this instanceof PathExpr and plugin.appliesTo(this.getTopLevel()) and - prefix = this.getStringValue().regexpCapture("(.)/(.*)", 1) and suffix = this.getStringValue().regexpCapture("(.)/(.*)", 2) and - mappedPrefix = plugin.getRoot(prefix) + exists(string prefix | + prefix = this.getStringValue().regexpCapture("(.)/(.*)", 1) and + mappedPrefix = plugin.getRoot(prefix) + ) } /** Gets the configuration that applies to this path. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/CommandLineArguments.qll b/javascript/ql/lib/semmle/javascript/frameworks/CommandLineArguments.qll index 50beb04b887..cd8fa34a08e 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/CommandLineArguments.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/CommandLineArguments.qll @@ -87,11 +87,43 @@ private class ArgsParseStep extends TaintTracking::SharedTaintStep { override predicate step(DataFlow::Node pred, DataFlow::Node succ) { exists(DataFlow::CallNode call | call = DataFlow::moduleMember("args", "parse").getACall() or - call = DataFlow::moduleImport(["yargs-parser", "minimist", "subarg"]).getACall() + call = + DataFlow::moduleImport(["yargs-parser", "minimist", "subarg", "yargs/yargs", "yargs"]) + .getACall() | succ = call and pred = call.getArgument(0) ) + or + exists(API::Node commanderNode | commanderNode = commander() | + pred = commanderNode.getMember(["parse", "parseAsync"]).getACall().getAnArgument() and + succ = + [ + commanderNode.getMember("opts").getACall(), commanderNode.getAMember().asSource(), + commander() + .getMember("action") + .getACall() + .getArgument(0) + .(DataFlow::FunctionNode) + .getAParameter() + ] + ) + or + exists(DataFlow::MethodCallNode methodCall | methodCall = yargs() | + pred = methodCall.getReceiver() and + succ = methodCall + ) + or + exists(DataFlow::CallNode call, DataFlow::Node options | + call = DataFlow::moduleImport(["arg", "command-line-args"]).getACall() and + succ = call and + options = call.getArgument(1) and + exists(DataFlow::PropWrite write | + write.getBase() = options and + write.getPropertyName() = "argv" and + pred = write.getRhs() + ) + ) } } @@ -115,7 +147,9 @@ private API::Node commander() { * Either directly imported as a module, or through some chained method call. */ private DataFlow::SourceNode yargs() { - result = DataFlow::moduleImport("yargs") + result = DataFlow::moduleImport(["yargs", "yargs/yargs"]) + or + result = DataFlow::moduleImport(["yargs", "yargs/yargs"]).getACall() or // script used to generate list of chained methods: https://gist.github.com/erik-krogh/f8afe952c0577f4b563a993e613269ba exists(string method | diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll index 8c016b3afe9..be3cb7b1ccb 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Express.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Express.qll @@ -781,6 +781,40 @@ module Express { override RouteHandler getRouteHandler() { result = response.getRouteHandler() } } + /** + * A call to `res.json()` or `res.jsonp()`. + * + * This sets the `content-type` header. + */ + private class ResponseJsonCall extends DataFlow::MethodCallNode, Http::HeaderDefinition { + private ResponseSource response; + + ResponseJsonCall() { this = response.ref().getAMethodCall(["json", "jsonp"]) } + + override RouteHandler getRouteHandler() { result = response.getRouteHandler() } + + override string getAHeaderName() { result = "content-type" } + + override predicate defines(string headerName, string headerValue) { + // Note: for `jsonp` the actual content-type header will be `text/javascript` or similar, but to avoid + // generating a spurious HTML injection sink, we treat it as `application/json` here. + headerName = "content-type" and headerValue = "application/json" + } + } + + /** + * An argument passed to the `json` or `jsonp` method of an HTTP response object. + */ + private class ResponseJsonCallArgument extends Http::ResponseSendArgument { + ResponseJsonCall call; + + ResponseJsonCallArgument() { this = call.getArgument(0) } + + override RouteHandler getRouteHandler() { result = call.getRouteHandler() } + + override HeaderDefinition getAnAssociatedHeaderDefinition() { result = call } + } + /** * An invocation of the `cookie` method on an HTTP response object. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll index 7c2e6aa37a5..20258622737 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/LodashUnderscore.qll @@ -341,6 +341,18 @@ module LodashUnderscore { preservesValue = true } } + + private class LodashGroupBy extends DataFlow::SummarizedCallable { + LodashGroupBy() { this = "_.groupBy" } + + override DataFlow::CallNode getACall() { result = member("groupBy").getACall() } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + input = "Argument[0]" and + output = ["Argument[1].Parameter[0]", "ReturnValue"] and + preservesValue = false + } + } } /** diff --git a/javascript/ql/lib/semmle/javascript/frameworks/React.qll b/javascript/ql/lib/semmle/javascript/frameworks/React.qll index 3a361e70594..d55ace8636d 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/React.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/React.qll @@ -311,14 +311,15 @@ class FunctionalComponent extends ReactComponent, Function { /** * A React/Preact component implemented as a class. */ -abstract private class SharedReactPreactClassComponent extends ReactComponent, ClassDefinition { +abstract private class SharedReactPreactClassComponent extends ReactComponent instanceof ClassDefinition +{ override Function getInstanceMethod(string name) { result = ClassDefinition.super.getInstanceMethod(name) } override Function getStaticMethod(string name) { exists(MethodDeclaration decl | - decl = this.getMethod(name) and + decl = ClassDefinition.super.getMethod(name) and decl.isStatic() and result = decl.getBody() ) @@ -327,7 +328,8 @@ abstract private class SharedReactPreactClassComponent extends ReactComponent, C override DataFlow::SourceNode getADirectPropsAccess() { result = this.getAnInstanceReference().getAPropertyRead("props") or - result = DataFlow::parameterNode(this.getConstructor().getBody().getParameter(0)) + result = + DataFlow::parameterNode(ClassDefinition.super.getConstructor().getBody().getParameter(0)) } override AbstractValue getAbstractComponent() { result = AbstractInstance::of(this) } @@ -340,7 +342,7 @@ abstract private class SharedReactPreactClassComponent extends ReactComponent, C override DataFlow::SourceNode getACandidateStateSource() { result = ReactComponent.super.getACandidateStateSource() or - result.flowsToExpr(this.getField("state").getInit()) + result.flowsToExpr(ClassDefinition.super.getField("state").getInit()) } override DataFlow::SourceNode getADefaultPropsSource() { @@ -349,6 +351,17 @@ abstract private class SharedReactPreactClassComponent extends ReactComponent, C DataFlow::valueNode(this).(DataFlow::SourceNode).hasPropertyWrite("defaultProps", props) ) } + + /** Gets the expression denoting the super class of the defined class, if any. */ + Expr getSuperClass() { result = ClassDefinition.super.getSuperClass() } + + /** + * Gets the constructor of this class. + * + * Note that every class has a constructor: if no explicit constructor + * is declared, it has a synthetic default constructor. + */ + ConstructorDeclaration getConstructor() { result = ClassDefinition.super.getConstructor() } } /** @@ -362,7 +375,7 @@ abstract class ES2015Component extends SharedReactPreactClassComponent { } */ private class DefiniteES2015Component extends ES2015Component { DefiniteES2015Component() { - exists(DataFlow::SourceNode sup | sup.flowsToExpr(this.getSuperClass()) | + exists(DataFlow::SourceNode sup | sup.flowsToExpr(this.(ClassDefinition).getSuperClass()) | exists(PropAccess access, string globalReactName | (globalReactName = "react" or globalReactName = "React") and access = sup.asExpr() @@ -400,7 +413,7 @@ abstract class PreactComponent extends SharedReactPreactClassComponent { */ private class DefinitePreactComponent extends PreactComponent { DefinitePreactComponent() { - exists(DataFlow::SourceNode sup | sup.flowsToExpr(this.getSuperClass()) | + exists(DataFlow::SourceNode sup | sup.flowsToExpr(this.(ClassDefinition).getSuperClass()) | exists(PropAccess access, string globalPreactName | (globalPreactName = "preact" or globalPreactName = "Preact") and access = sup.asExpr() @@ -419,12 +432,11 @@ private class DefinitePreactComponent extends PreactComponent { * - extends class called `Component` * - has a `render` method that returns JSX or React elements. */ -private class HeuristicReactPreactComponent extends ClassDefinition, PreactComponent, - ES2015Component -{ +private class HeuristicReactPreactComponent extends PreactComponent, ES2015Component { HeuristicReactPreactComponent() { - any(DataFlow::GlobalVarRefNode c | c.getName() = "Component").flowsToExpr(this.getSuperClass()) and - alwaysReturnsJsxOrReactElements(ClassDefinition.super.getInstanceMethod("render")) + any(DataFlow::GlobalVarRefNode c | c.getName() = "Component") + .flowsToExpr(this.(ClassDefinition).getSuperClass()) and + alwaysReturnsJsxOrReactElements(this.(ClassDefinition).getInstanceMethod("render")) } } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/XmlParsers.qll b/javascript/ql/lib/semmle/javascript/frameworks/XmlParsers.qll index a451182aa21..c0a783c1764 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/XmlParsers.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/XmlParsers.qll @@ -49,9 +49,7 @@ module XML { override JS::Expr getSourceArgument() { result = this.getArgument(0) } override predicate resolvesEntities(EntityKind kind) { - // internal entities are always resolved - kind = InternalEntity() - or + not kind = InternalEntity() and // other entities are only resolved if the configuration option `noent` is set to `true` exists(JS::Expr noent | this.hasOptionArgument(1, "noent", noent) and @@ -126,8 +124,9 @@ module XML { override JS::Expr getSourceArgument() { result = this.getArgument(0) } override predicate resolvesEntities(EntityKind kind) { - // entities are resolved by default - any() + // SAX parsers in libxmljs also inherit libxml2's protection against XML bombs + kind = ExternalEntity(_) or + kind = ParameterEntity(true) } override DataFlow::Node getAResult() { @@ -149,8 +148,9 @@ module XML { override JS::Expr getSourceArgument() { result = this.getArgument(0) } override predicate resolvesEntities(EntityKind kind) { - // entities are resolved by default - any() + // SAX push parsers in libxmljs also inherit libxml2's protection against XML bombs + kind = ExternalEntity(_) or + kind = ParameterEntity(true) } override DataFlow::Node getAResult() { diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll index b86d7de457e..4969da43be3 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsExtensions.qll @@ -4,7 +4,7 @@ /** * Holds if the value at `(type, path)` should be seen as a flow - * source of the given `kind`. + * source of the given `kind` and `madId` is the data extension row number. * * The kind `remote` represents a general remote flow source. */ @@ -14,13 +14,14 @@ extensible predicate sourceModel( /** * Holds if the value at `(type, path)` should be seen as a sink - * of the given `kind`. + * of the given `kind` and `madId` is the data extension row number. */ extensible predicate sinkModel(string type, string path, string kind, QlBuiltins::ExtensionId madId); /** * Holds if in calls to `(type, path)`, the value referred to by `input` - * can flow to the value referred to by `output`. + * can flow to the value referred to by `output` and `madId` is the data + * extension row number. * * `kind` should be either `value` or `taint`, for value-preserving or taint-preserving steps, * respectively. diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll index 5e9846e9ad5..f0d751ad31b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -35,7 +35,7 @@ class Location = JS::Location; * Type names have form `package.type` or just `package` if referring to the package export * object. If `package` contains a `.` character it must be enclosed in single quotes, such as `'package'.type`. * - * A type name of form `(package)` may also be used when refering to the package export object. + * A type name of form `(package)` may also be used when referring to the package export object. * We allow this syntax as an alternative to the above, so models generated based on `EndpointNaming` look more consistent. * However, access paths are deliberately not parsed here, as we can not handle aliasing at this stage. * The model generator must explicitly generate the step between `(package)` and `(package).foo`, for example. @@ -58,9 +58,11 @@ predicate parseTypeString(string rawType, string package, string qualifiedName) predicate isPackageUsed(string package) { package = "global" or - package = any(JS::Import imp).getImportedPathString() + // To simplify which dependencies are needed to construct DataFlow::Node, we don't want to rely on `Import` here. + // Just check all string literals. + package = any(JS::Expr imp).getStringValue() or - any(JS::TypeAnnotation t).hasUnderlyingType(package, _) + package = any(JS::StringLiteralTypeExpr t).getValue() // Can be used in `import("foo")` or exists(JS::PackageJson json | json.getPackageName() = package) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll b/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll index 92458cd87af..be64f243e46 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/xUnit.qll @@ -23,6 +23,8 @@ private predicate possiblyAttribute(Expr e, string name) { ) } +final private class FinalExpr = Expr; + /** * A bracketed list of expressions. * @@ -34,15 +36,22 @@ private predicate possiblyAttribute(Expr e, string name) { * * We also allow singleton lists, as in `[a][b]`. */ -abstract private class BracketedListOfExpressions extends Expr { +abstract private class BracketedListOfExpressions extends FinalExpr { /** Gets the `i`th element expression of this list. */ abstract Expr getElement(int i); + + /** Gets the first token in this bracketed list of expressions */ + Token getFirstToken() { result = Expr.super.getFirstToken() } + + /** Gets the last token in this bracketed list of expressions */ + Token getLastToken() { result = Expr.super.getLastToken() } } /** * An array expression viewed as a bracketed list of expressions. */ -private class ArrayExprIsABracketedListOfExpressions extends ArrayExpr, BracketedListOfExpressions { +private class ArrayExprIsABracketedListOfExpressions extends BracketedListOfExpressions instanceof ArrayExpr +{ /** Gets the `i`th element of this array literal. */ override Expr getElement(int i) { result = ArrayExpr.super.getElement(i) } } diff --git a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll index c7ad2a1ada8..d8e4a18dfc1 100644 --- a/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll +++ b/javascript/ql/lib/semmle/javascript/internal/BasicBlockInternal.qll @@ -6,6 +6,7 @@ import javascript private import semmle.javascript.internal.StmtContainers private import semmle.javascript.internal.CachedStages +private import codeql.controlflow.BasicBlock as BB /** * Holds if `nd` starts a new basic block. @@ -67,11 +68,12 @@ private module Cached { } cached - predicate defAt(BasicBlock bb, int i, Variable v, VarDef d) { - exists(VarRef lhs | + predicate defAt(BasicBlock bb, int i, Variable v, VarDef d, VarRef lhs) { + ( lhs = d.getTarget().(BindingPattern).getABindingVarRef() and v = lhs.getVariable() - | + ) and + ( lhs = d.getTarget() and bbIndex(bb, d, i) or @@ -148,7 +150,10 @@ module Public { predicate useAt(int i, Variable v, VarUse u) { useAt(this, i, v, u) } /** Holds if this basic block defines variable `v` in its `i`th node `d`. */ - predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d) } + predicate defAt(int i, Variable v, VarDef d) { defAt(this, i, v, d, _) } + + /** Holds if this basic block defines variable `v` in its `i`th node `d`, and `lhs` is the corresponding variable reference. */ + predicate defAt(int i, Variable v, VarDef d, VarRef lhs) { defAt(this, i, v, d, lhs) } /** * Holds if `v` is live at entry to this basic block and `u` is a use of `v` @@ -362,4 +367,62 @@ module Public { ) } } + + final private class FinalBasicBlock = BasicBlock; + + module Cfg implements BB::CfgSig { + private import javascript as Js + private import codeql.controlflow.SuccessorType + + class ControlFlowNode = Js::ControlFlowNode; + + private predicate conditionSucc(BasicBlock bb1, BasicBlock bb2, boolean branch) { + exists(ConditionGuardNode g | + bb1 = g.getTest().getBasicBlock() and + bb2 = g.getBasicBlock() and + branch = g.getOutcome() + ) + } + + class BasicBlock extends FinalBasicBlock { + BasicBlock getASuccessor() { result = super.getASuccessor() } + + BasicBlock getASuccessor(SuccessorType t) { + conditionSucc(this, result, t.(BooleanSuccessor).getValue()) + or + result = super.getASuccessor() and + t instanceof DirectSuccessor and + not conditionSucc(this, result, _) + } + + predicate strictlyDominates(BasicBlock bb) { + this.(ReachableBasicBlock).strictlyDominates(bb) + } + + predicate dominates(BasicBlock bb) { this.(ReachableBasicBlock).dominates(bb) } + + predicate inDominanceFrontier(BasicBlock df) { + df.(ReachableJoinBlock).inDominanceFrontierOf(this) + } + + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + predicate strictlyPostDominates(BasicBlock bb) { + this.(ReachableBasicBlock).strictlyPostDominates(bb) + } + + predicate postDominates(BasicBlock bb) { this.(ReachableBasicBlock).postDominates(bb) } + } + + class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { entryBB(this) } + } + + pragma[nomagic] + predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { + bb1.getASuccessor() = bb2 and + bb1 = bb2.getImmediateDominator() and + forall(BasicBlock pred | pred = bb2.getAPredecessor() and pred != bb1 | bb2.dominates(pred)) + } + } } diff --git a/javascript/ql/lib/semmle/javascript/internal/Locations.qll b/javascript/ql/lib/semmle/javascript/internal/Locations.qll deleted file mode 100644 index d1dc8d403f7..00000000000 --- a/javascript/ql/lib/semmle/javascript/internal/Locations.qll +++ /dev/null @@ -1,171 +0,0 @@ -/** Provides classes for working with locations and program elements that have locations. */ - -import javascript - -// Should _not_ be cached, as that would require the data flow stage to be evaluated -// in order to evaluate the AST stage. Ideally, we would cache each injector separately, -// but that's not possible. Instead, we cache all predicates that need the injectors -// to be tuple numbered. -newtype TLocation = - TDbLocation(@location loc) or - TSynthLocation(string filepath, int startline, int startcolumn, int endline, int endcolumn) { - any(SsaDefinition def).hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - // avoid overlap with existing DB locations - not exists(File f | - locations_default(_, f, startline, startcolumn, endline, endcolumn) and - f.getAbsolutePath() = filepath - ) - } - -/** - * A location as given by a file, a start line, a start column, - * an end line, and an end column. - * - * For more information about locations see [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ -abstract class LocationImpl extends TLocation { - /** Gets the file for this location. */ - abstract File getFile(); - - /** Gets the 1-based line number (inclusive) where this location starts. */ - abstract int getStartLine(); - - /** Gets the 1-based column number (inclusive) where this location starts. */ - abstract int getStartColumn(); - - /** Gets the 1-based line number (inclusive) where this location ends. */ - abstract int getEndLine(); - - /** Gets the 1-based column number (inclusive) where this location ends. */ - abstract int getEndColumn(); - - /** Gets the number of lines covered by this location. */ - int getNumLines() { result = this.getEndLine() - this.getStartLine() + 1 } - - /** Holds if this location starts before location `that`. */ - pragma[inline] - predicate startsBefore(Location that) { - exists(string f, int sl1, int sc1, int sl2, int sc2 | - this.hasLocationInfo(f, sl1, sc1, _, _) and - that.hasLocationInfo(f, sl2, sc2, _, _) - | - sl1 < sl2 - or - sl1 = sl2 and sc1 < sc2 - ) - } - - /** Holds if this location ends after location `that`. */ - pragma[inline] - predicate endsAfter(Location that) { - exists(string f, int el1, int ec1, int el2, int ec2 | - this.hasLocationInfo(f, _, _, el1, ec1) and - that.hasLocationInfo(f, _, _, el2, ec2) - | - el1 > el2 - or - el1 = el2 and ec1 > ec2 - ) - } - - /** - * Holds if this location contains location `that`, meaning that it starts - * before and ends after it. - */ - predicate contains(Location that) { this.startsBefore(that) and this.endsAfter(that) } - - /** Holds if this location is empty. */ - predicate isEmpty() { exists(int l, int c | this.hasLocationInfo(_, l, c, l, c - 1)) } - - /** Gets a textual representation of this element. */ - string toString() { result = this.getFile().getBaseName() + ":" + this.getStartLine().toString() } - - /** - * Holds if this element is at the specified location. - * The location spans column `startcolumn` of line `startline` to - * column `endcolumn` of line `endline` in file `filepath`. - * For more information, see - * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). - */ - abstract predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ); -} - -class DbLocationImpl extends LocationImpl instanceof DbLocation { - override File getFile() { result = DbLocation.super.getFile() } - - override int getStartLine() { result = DbLocation.super.getStartLine() } - - override int getStartColumn() { result = DbLocation.super.getStartColumn() } - - override int getEndLine() { result = DbLocation.super.getEndLine() } - - override int getEndColumn() { result = DbLocation.super.getEndColumn() } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - DbLocation.super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) - } -} - -class SynthLocationImpl extends LocationImpl, TSynthLocation { - override File getFile() { synthLocationInfo(this, result.getAbsolutePath(), _, _, _, _) } - - override int getStartLine() { synthLocationInfo(this, _, result, _, _, _) } - - override int getStartColumn() { synthLocationInfo(this, _, _, result, _, _) } - - override int getEndLine() { synthLocationInfo(this, _, _, _, result, _) } - - override int getEndColumn() { synthLocationInfo(this, _, _, _, _, result) } - - override predicate hasLocationInfo( - string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - synthLocationInfo(this, filepath, startline, startcolumn, endline, endcolumn) - } -} - -cached -private module Cached { - cached - DbLocation getLocatableLocation(@locatable l) { - exists(@location loc | - hasLocation(l, loc) or - xmllocations(l, loc) or - json_locations(l, loc) or - yaml_locations(l, loc) - | - result = TDbLocation(loc) - ) - } - - cached - predicate dbLocationInfo( - DbLocation l, File f, int startline, int startcolumn, int endline, int endcolumn - ) { - exists(@location loc | - l = TDbLocation(loc) and - locations_default(loc, f, startline, startcolumn, endline, endcolumn) - ) - } -} - -import Cached - -cached -private module CachedInDataFlowStage { - private import semmle.javascript.internal.CachedStages - - cached - predicate synthLocationInfo( - SynthLocationImpl l, string filepath, int startline, int startcolumn, int endline, int endcolumn - ) { - Stages::DataFlowStage::ref() and - l = TSynthLocation(filepath, startline, startcolumn, endline, endcolumn) - } -} - -private import CachedInDataFlowStage diff --git a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll index b25c98fd693..43ae4ffd43e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/NameResolution.qll @@ -73,6 +73,7 @@ module NameResolution { * * May also include some type-specific steps in cases where this is harmless when tracking values. */ + pragma[nomagic] private predicate commonStep(Node node1, Node node2) { // Import paths are part of the graph and has an incoming edge from the imported module, if found. // This ensures we can also use the PathExpr as a source when working with external (unresolved) modules. @@ -187,6 +188,7 @@ module NameResolution { /** * Holds if there is a read from `node1` to `node2` that accesses the member `name`. */ + pragma[nomagic] predicate readStep(Node node1, string name, Node node2) { exists(QualifiedTypeAccess access | node1 = access.getQualifier() and @@ -321,6 +323,7 @@ module NameResolution { /** * Gets the exported member of `mod` named `name`. */ + pragma[nomagic] Node getModuleExport(ModuleLike mod, string name) { exists(ExportDeclaration exprt | mod = exprt.getContainer() and @@ -362,6 +365,7 @@ module NameResolution { * Holds if `value` is stored in `target.prop`. Only needs to recognise assignments * that are also recognised by JSDoc tooling such as the Closure compiler. */ + pragma[nomagic] private predicate storeToVariable(Expr value, string prop, LocalVariableLike target) { exists(AssignExpr assign | // target.name = value @@ -374,6 +378,7 @@ module NameResolution { } /** Steps that only apply for this configuration. */ + pragma[nomagic] private predicate specificStep(Node node1, Node node2) { exists(LexicalName var | S::isRelevantVariable(var) | node1.(LexicalDecl).getALexicalName() = var and @@ -406,6 +411,7 @@ module NameResolution { /** Helps track flow from a particular set of source nodes. */ module Track { /** Gets the set of nodes reachable from `source`. */ + pragma[nomagic] Node track(Node source) { isSource(source) and result = source @@ -419,6 +425,7 @@ module NameResolution { /** Helps track flow from a particular set of source nodes. */ module TrackNode { /** Gets the set of nodes reachable from `source`. */ + pragma[nomagic] Node track(Source source) { result = source or @@ -482,6 +489,7 @@ module NameResolution { * * Unlike `trackModule`, this is intended to track uses of external packages. */ + pragma[nomagic] predicate nodeRefersToModule(Node node, string mod, string qualifiedName) { exists(Expr path | path = any(Import imprt).getImportedPathExpr() or diff --git a/javascript/ql/lib/semmle/javascript/internal/Overlay.qll b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll new file mode 100644 index 00000000000..a20ac1868e6 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/internal/Overlay.qll @@ -0,0 +1,30 @@ +private import javascript + +/** Holds if the database is an overlay. */ +overlay[local] +private predicate isOverlay() { databaseMetadata("isOverlay", "true") } + +overlay[local] +private string getFileFromEntity(@locatable node) { + exists(@location loc, @file file | + hasLocation(node, loc) and + locations_default(loc, file, _, _, _, _) and + files(file, result) + ) +} + +/** Holds if `file` was changed or deleted in the overlay. */ +overlay[local] +private predicate discardFile(string file) { isOverlay() and overlayChangedFiles(file) } + +/** Holds if `node` is in the `file` and is part of the overlay base database. */ +overlay[local] +private predicate discardableEntity(string file, @locatable node) { + not isOverlay() and file = getFileFromEntity(node) +} + +/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ +overlay[discard_entity] +private predicate discardEntity(@locatable node) { + exists(string file | discardableEntity(file, node) and discardFile(file)) +} diff --git a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll index a158ed6421a..73885f83305 100644 --- a/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll +++ b/javascript/ql/lib/semmle/javascript/internal/TypeResolution.qll @@ -12,6 +12,7 @@ module TypeResolution { * We track through underlying types as an approximate way to handle calls to a type * that is a union/intersection involving functions. */ + pragma[nomagic] Node trackUnderlyingFunctionType(Function fun) { result = fun or @@ -139,6 +140,28 @@ module TypeResolution { ) } + /** + * `ContentSet.getAReadContent` restricted to the content sets and contents relevant for type resolution. + */ + pragma[nomagic] + private DataFlow::Content getAReadContentRestricted(DataFlow::ContentSet cs) { + valueReadStep(_, cs, _) and + result = cs.getAReadContent() and + typeMember(_, result, _) + } + + /** + * `valueReadStep` where the `ContentSet` has been mapped to the set of relevant read-contents. + */ + pragma[nomagic] + private predicate valueReadStepOnContent(Node object, DataFlow::Content content, Node member) { + exists(DataFlow::ContentSet contents | + valueReadStep(object, contents, member) and + content = getAReadContentRestricted(contents) + ) + } + + pragma[nomagic] predicate callTarget(InvokeExpr call, Function target) { exists(ClassDefinition cls | valueHasType(call.(NewExpr).getCallee(), trackClassValue(cls)) and @@ -198,6 +221,7 @@ module TypeResolution { ) } + pragma[nomagic] predicate contextualType(Node value, Node type) { exists(LocalVariableLike v | type = v.getADeclaration().getTypeAnnotation() and @@ -239,6 +263,7 @@ module TypeResolution { /** * Holds if `value` has the given `type`. */ + cached predicate valueHasType(Node value, Node type) { value.(BindingPattern).getTypeAnnotation() = type or @@ -293,11 +318,18 @@ module TypeResolution { or exists(Node mid | valueHasType(mid, type) | ValueFlow::step(mid, value)) or - exists(Node mid, Node midType, DataFlow::ContentSet contents, Node host | - valueReadStep(mid, contents, value) and + exists(DataFlow::Content content, Node host | + typeMemberHostRead(host, content, value) and + typeMember(host, content, type) + ) + } + + pragma[nomagic] + private predicate typeMemberHostRead(Node host, DataFlow::Content content, Node target) { + exists(Node mid, Node midType | + valueReadStepOnContent(mid, content, target) and valueHasType(mid, midType) and - typeMemberHostReaches(host, midType) and - typeMember(host, contents.getAReadContent(), type) + typeMemberHostReaches(host, midType) ) } @@ -309,6 +341,7 @@ module TypeResolution { * - a union type has the property if all its members have the property */ module TrackMustProp { + pragma[nomagic] predicate hasProperty(Node node) { directlyHasProperty(node) or @@ -341,6 +374,7 @@ module TypeResolution { } module ValueHasProperty { + pragma[nomagic] predicate valueHasProperty(Node value) { exists(Node type | valueHasType(value, type) and @@ -405,6 +439,7 @@ module TypeResolution { /** * Holds if `type` contains `string` or `any`, possibly wrapped in a promise. */ + pragma[nomagic] predicate hasUnderlyingStringOrAnyType(Node type) { type.(TypeAnnotation).isStringy() or diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll index 00fed9c4f09..6754d3db307 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Arrays.qll @@ -1,7 +1,7 @@ /** * Contains a summary for relevant methods on arrays. * - * Note that some of Array methods are modelled in `AmbiguousCoreMethods.qll`, and `toString` is special-cased elsewhere. + * Note that some of Array methods are modeled in `AmbiguousCoreMethods.qll`, and `toString` is special-cased elsewhere. */ private import javascript @@ -60,7 +60,7 @@ private predicate isForLoopVariable(Variable v) { private predicate isLikelyArrayIndex(Expr e) { // Require that 'e' is of type number and refers to a for-loop variable. - // TODO: This is here to mirror the old behaviour. Experiment with turning the 'and' into an 'or'. + // TODO: This is here to mirror the old behavior. Experiment with turning the 'and' into an 'or'. TTNumber() = unique(InferredType type | type = e.flow().analyze().getAType()) and isForLoopVariable(e.(VarAccess).getVariable()) or @@ -114,7 +114,7 @@ class ArrayConstructorSummary extends SummarizedCallable { /** * A call to `join` with a separator argument. * - * Calls without separators are modelled in `StringConcatenation.qll`. + * Calls without separators are modeled in `StringConcatenation.qll`. */ class Join extends SummarizedCallable { Join() { this = "Array#join" } @@ -544,6 +544,25 @@ class ToSpliced extends SummarizedCallable { } } +class With extends SummarizedCallable { + With() { this = "Array#with" } + + override InstanceCall getACallSimple() { result.getMethodName() = "with" } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + preservesValue = true and + ( + // Copy all elements from the original array to the new array + input = "Argument[this].WithArrayElement" and + output = "ReturnValue" + or + // Replace the value at the specified index + input = "Argument[1]" and + output = "ReturnValue.ArrayElement" + ) + } +} + class ArrayCoercionPackage extends FunctionalPackageSummary { ArrayCoercionPackage() { this = "ArrayCoercionPackage" } diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll index a39b0e6f43d..246ac0f19d0 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/AsyncAwait.qll @@ -8,7 +8,7 @@ private import semmle.javascript.dataflow.internal.AdditionalFlowInternal private import semmle.javascript.dataflow.internal.DataFlowPrivate /** - * Steps modelling flow in an `async` function. + * Steps modeling flow in an `async` function. * * Note about promise-coercion and flattening: * - `await` preserves non-promise values, e.g. `await "foo"` is just `"foo"`. diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll index a5df1d4716a..33f891935f4 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/FlowSummaryUtil.qll @@ -49,3 +49,10 @@ string getAnArrayContent() { // Values stored at an unknown index result = "ArrayElement[?]" } + +/** + * Gets an argument position up to a certain limit. + * + * This can be used to generate flow summaries that should preserve such positions. + */ +int getAnArgumentPosition() { result = [0 .. 10] } diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll index e187b5751cf..75815d00341 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Generators.qll @@ -7,7 +7,7 @@ private import semmle.javascript.dataflow.internal.DataFlowNode private import semmle.javascript.dataflow.internal.AdditionalFlowInternal /** - * Steps modelling flow out of a generator function: + * Steps modeling flow out of a generator function: * ```js * function* foo() { * yield x; // store 'x' in the return value's IteratorElement diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll index e9937363c01..6b1a182a49b 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Iterators.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through iterators. + * Contains flow summaries and steps modeling flow through iterators. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll index 61cc1d148c6..d9649d407c6 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Maps.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Map` objects. + * Contains flow summaries and steps modeling flow through `Map` objects. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll index 1122c38320a..74048f0e397 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Promises.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Promise` objects. + * Contains flow summaries and steps modeling flow through `Promise` objects. */ private import javascript @@ -368,3 +368,29 @@ private class PromiseWithResolversLike extends SummarizedCallable { ) } } + +class PromiseTry extends DataFlow::SummarizedCallable { + PromiseTry() { this = "Promise.try()" } + + override DataFlow::CallNode getACallSimple() { + result = promiseConstructorRef().getAMemberCall(["try", "attempt"]) + or + result = DataFlow::moduleImport(["p-try", "es6-promise-try"]).getACall() + } + + override predicate propagatesFlow(string input, string output, boolean preservesValue) { + preservesValue = true and + ( + exists(int i | i = getAnArgumentPosition() | + input = "Argument[" + (i + 1) + "]" and + output = "Argument[0].Parameter[" + i + "]" + ) + or + input = "Argument[0].ReturnValue" and + output = "ReturnValue.Awaited" + or + input = "Argument[0].ReturnValue[exception]" and + output = "ReturnValue.Awaited[error]" + ) + } +} diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll index 34f7d222df8..6b4f089b38e 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Sets.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through `Set` objects. + * Contains flow summaries and steps modeling flow through `Set` objects. */ private import javascript diff --git a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll index d18e2181965..bf9442219a7 100644 --- a/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll +++ b/javascript/ql/lib/semmle/javascript/internal/flow_summaries/Strings.qll @@ -1,5 +1,5 @@ /** - * Contains flow summaries and steps modelling flow through string methods. + * Contains flow summaries and steps modeling flow through string methods. */ private import javascript @@ -73,7 +73,7 @@ class StringSplit extends SummarizedCallable { * These are of special significance when tracking a tainted URL suffix, such as `window.location.href`, * because the first element of the resulting array should not be considered tainted. * - * This summary defaults to the same behaviour as the general `.split()` case, but it contains optional steps + * This summary defaults to the same behavior as the general `.split()` case, but it contains optional steps * and barriers named `tainted-url-suffix` that should be activated when tracking a tainted URL suffix. */ class StringSplitHashOrQuestionMark extends SummarizedCallable { diff --git a/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll new file mode 100644 index 00000000000..aed0e26a6b3 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll @@ -0,0 +1,85 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * overly permissive CORS configurations, as well as + * extension points for adding your own. + */ + +import javascript + +/** Module containing sources, sinks, and sanitizers for overly permissive CORS configurations. */ +module CorsPermissiveConfiguration { + private newtype TFlowState = + TTaint() or + TPermissive() + + /** A flow state to associate with a tracked value. */ + class FlowState extends TFlowState { + /** Gets a string representation of this flow state. */ + string toString() { + this = TTaint() and result = "taint" + or + this = TPermissive() and result = "permissive" + } + } + + /** Predicates for working with flow states. */ + module FlowState { + /** A tainted value. */ + FlowState taint() { result = TTaint() } + + /** A permissive value (true, null, or "*"). */ + FlowState permissive() { result = TPermissive() } + } + + /** + * A data flow source for permissive CORS configuration. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for permissive CORS configuration. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for permissive CORS configuration. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** + * An active threat-model source, considered as a flow source. + */ + private class ActiveThreatModelSourceAsSource extends Source instanceof ActiveThreatModelSource { + ActiveThreatModelSourceAsSource() { not this instanceof ClientSideRemoteFlowSource } + } + + /** An overly permissive value for `origin` configuration. */ + class PermissiveValue extends Source { + PermissiveValue() { + this.mayHaveBooleanValue(true) or + this.asExpr() instanceof NullLiteral or + this.mayHaveStringValue("*") + } + } + + /** + * The value of cors origin when initializing the application. + */ + class CorsOriginSink extends Sink, DataFlow::ValueNode { + CorsOriginSink() { this = ModelOutput::getASinkNode("cors-origin").asSink() } + } + + /** + * A sanitizer for CORS configurations where credentials are explicitly disabled. + * When credentials are false, using "*" for origin is a legitimate pattern. + */ + private class CredentialsDisabledSanitizer extends Sanitizer { + CredentialsDisabledSanitizer() { + exists(DataFlow::SourceNode config, DataFlow::CallNode call | + call.getArgument(0).getALocalSource() = config and + this = config.getAPropertyWrite("origin").getRhs() and + config.getAPropertyWrite("credentials").getRhs().mayHaveBooleanValue(false) + ) + } + } +} diff --git a/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationQuery.qll b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationQuery.qll new file mode 100644 index 00000000000..03d20578b0e --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationQuery.qll @@ -0,0 +1,38 @@ +/** + * Provides a dataflow taint tracking configuration for reasoning + * about overly permissive CORS configurations. + * + * Note, for performance reasons: only import this file if + * `CorsPermissiveConfiguration::Configuration` is needed, + * otherwise `CorsPermissiveConfigurationCustomizations` should + * be imported instead. + */ + +import javascript +import CorsPermissiveConfigurationCustomizations::CorsPermissiveConfiguration +private import CorsPermissiveConfigurationCustomizations::CorsPermissiveConfiguration as CorsPermissiveConfiguration + +/** + * A data flow configuration for overly permissive CORS configuration. + */ +module CorsPermissiveConfigurationConfig implements DataFlow::StateConfigSig { + class FlowState = CorsPermissiveConfiguration::FlowState; + + predicate isSource(DataFlow::Node source, FlowState state) { + source instanceof PermissiveValue and state = FlowState::permissive() + or + source instanceof RemoteFlowSource and state = FlowState::taint() + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + sink instanceof CorsOriginSink and + state = [FlowState::taint(), FlowState::permissive()] + } + + predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } + + predicate observeDiffInformedIncrementalMode() { any() } +} + +module CorsPermissiveConfigurationFlow = + TaintTracking::GlobalWithState; diff --git a/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll index d4bce73be19..841f830f2bf 100644 --- a/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/TaintedUrlSuffixCustomizations.qll @@ -76,7 +76,7 @@ module TaintedUrlSuffix { // // x [tainted-url-suffix] --> x.split('#') [array element 1] [taint] // - // Technically we should also preverse tainted-url-suffix when entering the first array element of such + // Technically we should also preserve tainted-url-suffix when entering the first array element of such // a split, but this mostly leads to FPs since we currently don't track if the taint has been through URI-decoding. // (The query/fragment parts are often URI-decoded in practice, but not the other URL parts are not) state1.isTaintedUrlSuffix() and diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/CleartextLoggingCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/CleartextLoggingCustomizations.qll index dbb775f99b5..a7bbc73ce03 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/CleartextLoggingCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/CleartextLoggingCustomizations.qll @@ -247,10 +247,24 @@ module CleartextLogging { reduceCall.getABoundCallbackParameter(0, 1) = name | reduceCall.getReceiver+().(DataFlow::MethodCallNode).getMethodName() = "filter" + or + isArrayOfConstants(reduceCall.getReceiver+()) ) or exists(StringOps::RegExpTest test | test.getStringOperand().getALocalSource() = name) or exists(MembershipCandidate test | test.getAMemberNode().getALocalSource() = name) } + + private predicate isArrayOfConstants(DataFlow::ArrayCreationNode array) { + forex(DataFlow::Node node | + node = + [ + array.getAnElement(), array.getAPropertyWrite().getRhs(), + array.getAMethodCall("push").getArgument(0) + ] + | + exists(node.getStringValue()) + ) + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionQuery.qll index 7c013e1f4ac..228f2b8c72c 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionQuery.qll @@ -34,8 +34,9 @@ module CommandInjectionConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(DataFlow::Node node | - isSinkWithHighlight(sink, node) and + exists(DataFlow::Node node | isSinkWithHighlight(sink, node) | + result = sink.getLocation() + or result = node.getLocation() ) } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/IndirectCommandInjectionQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/IndirectCommandInjectionQuery.qll index 87d85911a1b..6dbba8261fb 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/IndirectCommandInjectionQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/IndirectCommandInjectionQuery.qll @@ -30,8 +30,9 @@ module IndirectCommandInjectionConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { - exists(DataFlow::Node node | - isSinkWithHighlight(sink, node) and + exists(DataFlow::Node node | isSinkWithHighlight(sink, node) | + result = sink.getLocation() + or result = node.getLocation() ) } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RegExpInjectionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RegExpInjectionCustomizations.qll index 1c056935d40..5ee39219d26 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RegExpInjectionCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RegExpInjectionCustomizations.qll @@ -5,6 +5,7 @@ */ import javascript +private import codeql.threatmodels.ThreatModels module RegExpInjection { /** @@ -32,19 +33,32 @@ module RegExpInjection { /** * An active threat-model source, considered as a flow source. + * Excludes environment variables by default - they require the "environment" threat model. */ private class ActiveThreatModelSourceAsSource extends Source instanceof ActiveThreatModelSource { - ActiveThreatModelSourceAsSource() { not this.isClientSideSource() } + ActiveThreatModelSourceAsSource() { + not this.isClientSideSource() and + not this.(ThreatModelSource).getThreatModel() = "environment" + } } - private import IndirectCommandInjectionCustomizations + /** + * Environment variables as a source when the "environment" threat model is active. + */ + private class EnvironmentVariableAsSource extends Source instanceof ThreatModelSource { + EnvironmentVariableAsSource() { + this.getThreatModel() = "environment" and + currentThreatModel("environment") + } + + override string describe() { result = "environment variable" } + } /** - * A read of `process.env`, `process.argv`, and similar, considered as a flow source for regular - * expression injection. + * Command line arguments as a source for regular expression injection. */ - class ArgvAsSource extends Source instanceof IndirectCommandInjection::Source { - override string describe() { result = IndirectCommandInjection::Source.super.describe() } + private class CommandLineArgumentAsSource extends Source instanceof CommandLineArguments { + override string describe() { result = "command-line argument" } } /** diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll index 8f1f174d8ec..f338651b63d 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RemotePropertyInjectionQuery.qll @@ -10,6 +10,7 @@ import javascript import RemotePropertyInjectionCustomizations::RemotePropertyInjection +private import semmle.javascript.DynamicPropertyAccess /** * A taint-tracking configuration for reasoning about remote property injection. @@ -24,6 +25,10 @@ module RemotePropertyInjectionConfig implements DataFlow::ConfigSig { node = StringConcatenation::getRoot(any(ConstantString str).flow()) } + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + node1 = node2.(EnumeratedPropName).getSourceObject() + } + predicate observeDiffInformedIncrementalMode() { any() } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/ShellCommandInjectionFromEnvironmentQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/ShellCommandInjectionFromEnvironmentQuery.qll index 1d396da5b20..e1dcdd339d9 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/ShellCommandInjectionFromEnvironmentQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/ShellCommandInjectionFromEnvironmentQuery.qll @@ -33,7 +33,7 @@ module ShellCommandInjectionFromEnvironmentConfig implements DataFlow::ConfigSig Location getASelectedSinkLocation(DataFlow::Node sink) { exists(DataFlow::Node node | isSinkWithHighlight(sink, node) and - result = node.getLocation() + result = [node.getLocation(), sink.getLocation()] ) } } diff --git a/javascript/ql/lib/semmle/javascript/security/regexp/PolynomialReDoSQuery.qll b/javascript/ql/lib/semmle/javascript/security/regexp/PolynomialReDoSQuery.qll index e68fd5af415..d1baf9c4523 100644 --- a/javascript/ql/lib/semmle/javascript/security/regexp/PolynomialReDoSQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/regexp/PolynomialReDoSQuery.qll @@ -29,6 +29,8 @@ module PolynomialReDoSConfig implements DataFlow::ConfigSig { predicate observeDiffInformedIncrementalMode() { any() } Location getASelectedSinkLocation(DataFlow::Node sink) { + result = sink.(Sink).getLocation() + or result = sink.(Sink).getHighlight().getLocation() or result = sink.(Sink).getRegExp().getLocation() diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index ccefb5e2d49..80b2bc24189 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -516,6 +516,7 @@ has_private_keyword (int id: @property ref); has_protected_keyword (int id: @property ref); has_readonly_keyword (int id: @property ref); has_type_keyword (int id: @type_keyword_operand ref); +has_defer_keyword (int id: @import_declaration ref); is_optional_member (int id: @property ref); has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); is_optional_parameter_declaration (unique int parameter: @pattern ref); @@ -1192,3 +1193,13 @@ configLocations( ); @configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats index 51889bd9286..dd86c7346ef 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme.stats +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme.stats @@ -4319,6 +4319,17 @@ +has_defer_keyword +1000 + + +id +1000 + + + + + is_optional_member 3668 @@ -28260,5 +28271,52 @@ + +databaseMetadata +1 + + +metadataKey +1 + + +value +1 + + + + +metadataKey +value + + +12 + + + + + +value +metadataKey + + +12 + + + + + + + +overlayChangedFiles +50 + + +path +50 + + + + diff --git a/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/old.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..80b2bc24189 --- /dev/null +++ b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/semmlecode.javascript.dbscheme @@ -0,0 +1,1205 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +has_defer_keyword (int id: @import_declaration ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties new file mode 100644 index 00000000000..2acd37b6a3a --- /dev/null +++ b/javascript/ql/lib/upgrades/76a926a00d5f3bc199c203a1437796fd7b2835ba/upgrade.properties @@ -0,0 +1,2 @@ +description: add support for deferred imports +compatibility: backwards diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme new file mode 100644 index 00000000000..ccefb5e2d49 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/old.dbscheme @@ -0,0 +1,1194 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme new file mode 100644 index 00000000000..76a926a00d5 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/semmlecode.javascript.dbscheme @@ -0,0 +1,1204 @@ +/*** Standard fragments ***/ + +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Lines of code -*/ + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref +); + +/*- External data -*/ + +/** + * External data, loaded from CSV files during snapshot creation. See + * [Tutorial: Incorporating external data](https://help.semmle.com/wiki/display/SD/Tutorial%3A+Incorporating+external+data) + * for more information. + */ +externalData( + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- JavaScript-specific part -*/ + +@location = @location_default + +@sourceline = @locatable; + +filetype( + int file: @file ref, + string filetype: string ref +) + +// top-level code fragments +toplevels (unique int id: @toplevel, + int kind: int ref); + +is_externs (int toplevel: @toplevel ref); + +case @toplevel.kind of + 0 = @script +| 1 = @inline_script +| 2 = @event_handler +| 3 = @javascript_url +| 4 = @template_toplevel; + +is_module (int tl: @toplevel ref); +is_nodejs (int tl: @toplevel ref); +is_es2015_module (int tl: @toplevel ref); +is_closure_module (int tl: @toplevel ref); + +@xml_node_with_code = @xmlelement | @xmlattribute | @template_placeholder_tag; +toplevel_parent_xml_node( + unique int toplevel: @toplevel ref, + int xmlnode: @xml_node_with_code ref); + +xml_element_parent_expression( + unique int xmlnode: @xmlelement ref, + int expression: @expr ref, + int index: int ref); + +// statements +#keyset[parent, idx] +stmts (unique int id: @stmt, + int kind: int ref, + int parent: @stmt_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +stmt_containers (unique int stmt: @stmt ref, + int container: @stmt_container ref); + +jump_targets (unique int jump: @stmt ref, + int target: @stmt ref); + +@stmt_parent = @stmt | @toplevel | @function_expr | @arrow_function_expr | @static_initializer; +@stmt_container = @toplevel | @function | @namespace_declaration | @external_module_declaration | @global_augmentation_declaration; + +case @stmt.kind of + 0 = @empty_stmt +| 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @labeled_stmt +| 5 = @break_stmt +| 6 = @continue_stmt +| 7 = @with_stmt +| 8 = @switch_stmt +| 9 = @return_stmt +| 10 = @throw_stmt +| 11 = @try_stmt +| 12 = @while_stmt +| 13 = @do_while_stmt +| 14 = @for_stmt +| 15 = @for_in_stmt +| 16 = @debugger_stmt +| 17 = @function_decl_stmt +| 18 = @var_decl_stmt +| 19 = @case +| 20 = @catch_clause +| 21 = @for_of_stmt +| 22 = @const_decl_stmt +| 23 = @let_stmt +| 24 = @legacy_let_stmt +| 25 = @for_each_stmt +| 26 = @class_decl_stmt +| 27 = @import_declaration +| 28 = @export_all_declaration +| 29 = @export_default_declaration +| 30 = @export_named_declaration +| 31 = @namespace_declaration +| 32 = @import_equals_declaration +| 33 = @export_assign_declaration +| 34 = @interface_declaration +| 35 = @type_alias_declaration +| 36 = @enum_declaration +| 37 = @external_module_declaration +| 38 = @export_as_namespace_declaration +| 39 = @global_augmentation_declaration +| 40 = @using_decl_stmt +; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @let_stmt | @legacy_let_stmt | @using_decl_stmt; + +@export_declaration = @export_all_declaration | @export_default_declaration | @export_named_declaration; + +@namespace_definition = @namespace_declaration | @enum_declaration; +@type_definition = @class_definition | @interface_declaration | @enum_declaration | @type_alias_declaration | @enum_member; + +is_instantiated(unique int decl: @namespace_declaration ref); + +@declarable_node = @decl_stmt | @namespace_declaration | @class_decl_stmt | @function_decl_stmt | @enum_declaration | @external_module_declaration | @global_augmentation_declaration | @field; +has_declare_keyword(unique int stmt: @declarable_node ref); + +is_for_await_of(unique int forof: @for_of_stmt ref); + +// expressions +#keyset[parent, idx] +exprs (unique int id: @expr, + int kind: int ref, + int parent: @expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @expr_or_type ref); + +enclosing_stmt (unique int expr: @expr_or_type ref, + int stmt: @stmt ref); + +expr_containers (unique int expr: @expr_or_type ref, + int container: @stmt_container ref); + +array_size (unique int ae: @arraylike ref, + int sz: int ref); + +is_delegating (int yield: @yield_expr ref); + +@expr_or_stmt = @expr | @stmt; +@expr_or_type = @expr | @typeexpr; +@expr_parent = @expr_or_stmt | @property | @function_typeexpr; +@arraylike = @array_expr | @array_pattern; +@type_annotation = @typeexpr | @jsdoc_type_expr; +@node_in_stmt_container = @cfg_node | @type_annotation | @toplevel; + +case @expr.kind of + 0 = @label +| 1 = @null_literal +| 2 = @boolean_literal +| 3 = @number_literal +| 4 = @string_literal +| 5 = @regexp_literal +| 6 = @this_expr +| 7 = @array_expr +| 8 = @obj_expr +| 9 = @function_expr +| 10 = @seq_expr +| 11 = @conditional_expr +| 12 = @new_expr +| 13 = @call_expr +| 14 = @dot_expr +| 15 = @index_expr +| 16 = @neg_expr +| 17 = @plus_expr +| 18 = @log_not_expr +| 19 = @bit_not_expr +| 20 = @typeof_expr +| 21 = @void_expr +| 22 = @delete_expr +| 23 = @eq_expr +| 24 = @neq_expr +| 25 = @eqq_expr +| 26 = @neqq_expr +| 27 = @lt_expr +| 28 = @le_expr +| 29 = @gt_expr +| 30 = @ge_expr +| 31 = @lshift_expr +| 32 = @rshift_expr +| 33 = @urshift_expr +| 34 = @add_expr +| 35 = @sub_expr +| 36 = @mul_expr +| 37 = @div_expr +| 38 = @mod_expr +| 39 = @bitor_expr +| 40 = @xor_expr +| 41 = @bitand_expr +| 42 = @in_expr +| 43 = @instanceof_expr +| 44 = @logand_expr +| 45 = @logor_expr +| 47 = @assign_expr +| 48 = @assign_add_expr +| 49 = @assign_sub_expr +| 50 = @assign_mul_expr +| 51 = @assign_div_expr +| 52 = @assign_mod_expr +| 53 = @assign_lshift_expr +| 54 = @assign_rshift_expr +| 55 = @assign_urshift_expr +| 56 = @assign_or_expr +| 57 = @assign_xor_expr +| 58 = @assign_and_expr +| 59 = @preinc_expr +| 60 = @postinc_expr +| 61 = @predec_expr +| 62 = @postdec_expr +| 63 = @par_expr +| 64 = @var_declarator +| 65 = @arrow_function_expr +| 66 = @spread_element +| 67 = @array_pattern +| 68 = @object_pattern +| 69 = @yield_expr +| 70 = @tagged_template_expr +| 71 = @template_literal +| 72 = @template_element +| 73 = @array_comprehension_expr +| 74 = @generator_expr +| 75 = @for_in_comprehension_block +| 76 = @for_of_comprehension_block +| 77 = @legacy_letexpr +| 78 = @var_decl +| 79 = @proper_varaccess +| 80 = @class_expr +| 81 = @super_expr +| 82 = @newtarget_expr +| 83 = @named_import_specifier +| 84 = @import_default_specifier +| 85 = @import_namespace_specifier +| 86 = @named_export_specifier +| 87 = @exp_expr +| 88 = @assign_exp_expr +| 89 = @jsx_element +| 90 = @jsx_qualified_name +| 91 = @jsx_empty_expr +| 92 = @await_expr +| 93 = @function_sent_expr +| 94 = @decorator +| 95 = @export_default_specifier +| 96 = @export_namespace_specifier +| 97 = @bind_expr +| 98 = @external_module_reference +| 99 = @dynamic_import +| 100 = @expression_with_type_arguments +| 101 = @prefix_type_assertion +| 102 = @as_type_assertion +| 103 = @export_varaccess +| 104 = @decorator_list +| 105 = @non_null_assertion +| 106 = @bigint_literal +| 107 = @nullishcoalescing_expr +| 108 = @e4x_xml_anyname +| 109 = @e4x_xml_static_attribute_selector +| 110 = @e4x_xml_dynamic_attribute_selector +| 111 = @e4x_xml_filter_expression +| 112 = @e4x_xml_static_qualident +| 113 = @e4x_xml_dynamic_qualident +| 114 = @e4x_xml_dotdotexpr +| 115 = @import_meta_expr +| 116 = @assignlogandexpr +| 117 = @assignlogorexpr +| 118 = @assignnullishcoalescingexpr +| 119 = @template_pipe_ref +| 120 = @generated_code_expr +| 121 = @satisfies_expr +; + +@varaccess = @proper_varaccess | @export_varaccess; +@varref = @var_decl | @varaccess; + +@identifier = @label | @varref | @type_identifier; + +@literal = @null_literal | @boolean_literal | @number_literal | @string_literal | @regexp_literal | @bigint_literal; + +@propaccess = @dot_expr | @index_expr; + +@invokeexpr = @new_expr | @call_expr; + +@unaryexpr = @neg_expr | @plus_expr | @log_not_expr | @bit_not_expr | @typeof_expr | @void_expr | @delete_expr | @spread_element; + +@equality_test = @eq_expr | @neq_expr | @eqq_expr | @neqq_expr; + +@comparison = @equality_test | @lt_expr | @le_expr | @gt_expr | @ge_expr; + +@binaryexpr = @comparison | @lshift_expr | @rshift_expr | @urshift_expr | @add_expr | @sub_expr | @mul_expr | @div_expr | @mod_expr | @exp_expr | @bitor_expr | @xor_expr | @bitand_expr | @in_expr | @instanceof_expr | @logand_expr | @logor_expr | @nullishcoalescing_expr; + +@assignment = @assign_expr | @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr | @assign_mod_expr | @assign_exp_expr | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr | @assign_or_expr | @assign_xor_expr | @assign_and_expr | @assignlogandexpr | @assignlogorexpr | @assignnullishcoalescingexpr; + +@updateexpr = @preinc_expr | @postinc_expr | @predec_expr | @postdec_expr; + +@pattern = @varref | @array_pattern | @object_pattern; + +@comprehension_expr = @array_comprehension_expr | @generator_expr; + +@comprehension_block = @for_in_comprehension_block | @for_of_comprehension_block; + +@import_specifier = @named_import_specifier | @import_default_specifier | @import_namespace_specifier; + +@exportspecifier = @named_export_specifier | @export_default_specifier | @export_namespace_specifier; + +@type_keyword_operand = @import_declaration | @export_declaration | @import_specifier; + +@type_assertion = @as_type_assertion | @prefix_type_assertion; + +@class_definition = @class_decl_stmt | @class_expr; +@interface_definition = @interface_declaration | @interface_typeexpr; +@class_or_interface = @class_definition | @interface_definition; + +@lexical_decl = @var_decl | @type_decl; +@lexical_access = @varaccess | @local_type_access | @local_var_type_access | @local_namespace_access; +@lexical_ref = @lexical_decl | @lexical_access; + +@e4x_xml_attribute_selector = @e4x_xml_static_attribute_selector | @e4x_xml_dynamic_attribute_selector; +@e4x_xml_qualident = @e4x_xml_static_qualident | @e4x_xml_dynamic_qualident; + +expr_contains_template_tag_location( + int expr: @expr ref, + int location: @location ref +); + +@template_placeholder_tag_parent = @xmlelement | @xmlattribute | @file; + +template_placeholder_tag_info( + unique int node: @template_placeholder_tag, + int parentNode: @template_placeholder_tag_parent ref, + varchar(900) raw: string ref +); + +// scopes +scopes (unique int id: @scope, + int kind: int ref); + +case @scope.kind of + 0 = @global_scope +| 1 = @function_scope +| 2 = @catch_scope +| 3 = @module_scope +| 4 = @block_scope +| 5 = @for_scope +| 6 = @for_in_scope // for-of scopes work the same as for-in scopes +| 7 = @comprehension_block_scope +| 8 = @class_expr_scope +| 9 = @namespace_scope +| 10 = @class_decl_scope +| 11 = @interface_scope +| 12 = @type_alias_scope +| 13 = @mapped_type_scope +| 14 = @enum_scope +| 15 = @external_module_scope +| 16 = @conditional_type_scope; + +scopenodes (unique int node: @ast_node ref, + int scope: @scope ref); + +scopenesting (unique int inner: @scope ref, + int outer: @scope ref); + +// functions +@function = @function_decl_stmt | @function_expr | @arrow_function_expr; + +@parameterized = @function | @catch_clause; +@type_parameterized = @function | @class_or_interface | @type_alias_declaration | @mapped_typeexpr | @infer_typeexpr; + +is_generator (int fun: @function ref); +has_rest_parameter (int fun: @function ref); +is_async (int fun: @function ref); + +// variables and lexically scoped type names +#keyset[scope, name] +variables (unique int id: @variable, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_type_names (unique int id: @local_type_name, + varchar(900) name: string ref, + int scope: @scope ref); + +#keyset[scope, name] +local_namespace_names (unique int id: @local_namespace_name, + varchar(900) name: string ref, + int scope: @scope ref); + +is_arguments_object (int id: @variable ref); + +@lexical_name = @variable | @local_type_name | @local_namespace_name; + +@bind_id = @varaccess | @local_var_type_access; +bind (unique int id: @bind_id ref, + int decl: @variable ref); + +decl (unique int id: @var_decl ref, + int decl: @variable ref); + +@typebind_id = @local_type_access | @export_varaccess; +typebind (unique int id: @typebind_id ref, + int decl: @local_type_name ref); + +@typedecl_id = @type_decl | @var_decl; +typedecl (unique int id: @typedecl_id ref, + int decl: @local_type_name ref); + +namespacedecl (unique int id: @var_decl ref, + int decl: @local_namespace_name ref); + +@namespacebind_id = @local_namespace_access | @export_varaccess; +namespacebind (unique int id: @namespacebind_id ref, + int decl: @local_namespace_name ref); + + +// properties in object literals, property patterns in object patterns, and method declarations in classes +#keyset[parent, index] +properties (unique int id: @property, + int parent: @property_parent ref, + int index: int ref, + int kind: int ref, + varchar(900) tostring: string ref); + +case @property.kind of + 0 = @value_property +| 1 = @property_getter +| 2 = @property_setter +| 3 = @jsx_attribute +| 4 = @function_call_signature +| 5 = @constructor_call_signature +| 6 = @index_signature +| 7 = @enum_member +| 8 = @proper_field +| 9 = @parameter_field +| 10 = @static_initializer +; + +@property_parent = @obj_expr | @object_pattern | @class_definition | @jsx_element | @interface_definition | @enum_declaration; +@property_accessor = @property_getter | @property_setter; +@call_signature = @function_call_signature | @constructor_call_signature; +@field = @proper_field | @parameter_field; +@field_or_vardeclarator = @field | @var_declarator; + +is_computed (int id: @property ref); +is_method (int id: @property ref); +is_static (int id: @property ref); +is_abstract_member (int id: @property ref); +is_const_enum (int id: @enum_declaration ref); +is_abstract_class (int id: @class_decl_stmt ref); + +has_public_keyword (int id: @property ref); +has_private_keyword (int id: @property ref); +has_protected_keyword (int id: @property ref); +has_readonly_keyword (int id: @property ref); +has_type_keyword (int id: @type_keyword_operand ref); +is_optional_member (int id: @property ref); +has_definite_assignment_assertion (int id: @field_or_vardeclarator ref); +is_optional_parameter_declaration (unique int parameter: @pattern ref); + +#keyset[constructor, param_index] +parameter_fields( + unique int field: @parameter_field ref, + int constructor: @function_expr ref, + int param_index: int ref +); + +// types +#keyset[parent, idx] +typeexprs ( + unique int id: @typeexpr, + int kind: int ref, + int parent: @typeexpr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref +); + +case @typeexpr.kind of + 0 = @local_type_access +| 1 = @type_decl +| 2 = @keyword_typeexpr +| 3 = @string_literal_typeexpr +| 4 = @number_literal_typeexpr +| 5 = @boolean_literal_typeexpr +| 6 = @array_typeexpr +| 7 = @union_typeexpr +| 8 = @indexed_access_typeexpr +| 9 = @intersection_typeexpr +| 10 = @parenthesized_typeexpr +| 11 = @tuple_typeexpr +| 12 = @keyof_typeexpr +| 13 = @qualified_type_access +| 14 = @generic_typeexpr +| 15 = @type_label +| 16 = @typeof_typeexpr +| 17 = @local_var_type_access +| 18 = @qualified_var_type_access +| 19 = @this_var_type_access +| 20 = @predicate_typeexpr +| 21 = @interface_typeexpr +| 22 = @type_parameter +| 23 = @plain_function_typeexpr +| 24 = @constructor_typeexpr +| 25 = @local_namespace_access +| 26 = @qualified_namespace_access +| 27 = @mapped_typeexpr +| 28 = @conditional_typeexpr +| 29 = @infer_typeexpr +| 30 = @import_type_access +| 31 = @import_namespace_access +| 32 = @import_var_type_access +| 33 = @optional_typeexpr +| 34 = @rest_typeexpr +| 35 = @bigint_literal_typeexpr +| 36 = @readonly_typeexpr +| 37 = @template_literal_typeexpr +; + +@typeref = @typeaccess | @type_decl; +@type_identifier = @type_decl | @local_type_access | @type_label | @local_var_type_access | @local_namespace_access; +@typeexpr_parent = @expr | @stmt | @property | @typeexpr; +@literal_typeexpr = @string_literal_typeexpr | @number_literal_typeexpr | @boolean_literal_typeexpr | @bigint_literal_typeexpr; +@typeaccess = @local_type_access | @qualified_type_access | @import_type_access; +@vartypeaccess = @local_var_type_access | @qualified_var_type_access | @this_var_type_access | @import_var_type_access; +@namespace_access = @local_namespace_access | @qualified_namespace_access | @import_namespace_access; +@import_typeexpr = @import_type_access | @import_namespace_access | @import_var_type_access; + +@function_typeexpr = @plain_function_typeexpr | @constructor_typeexpr; + +// types +types ( + unique int id: @type, + int kind: int ref, + varchar(900) tostring: string ref +); + +#keyset[parent, idx] +type_child ( + int child: @type ref, + int parent: @type ref, + int idx: int ref +); + +case @type.kind of + 0 = @any_type +| 1 = @string_type +| 2 = @number_type +| 3 = @union_type +| 4 = @true_type +| 5 = @false_type +| 6 = @type_reference +| 7 = @object_type +| 8 = @canonical_type_variable_type +| 9 = @typeof_type +| 10 = @void_type +| 11 = @undefined_type +| 12 = @null_type +| 13 = @never_type +| 14 = @plain_symbol_type +| 15 = @unique_symbol_type +| 16 = @objectkeyword_type +| 17 = @intersection_type +| 18 = @tuple_type +| 19 = @lexical_type_variable_type +| 20 = @this_type +| 21 = @number_literal_type +| 22 = @string_literal_type +| 23 = @unknown_type +| 24 = @bigint_type +| 25 = @bigint_literal_type +; + +@boolean_literal_type = @true_type | @false_type; +@symbol_type = @plain_symbol_type | @unique_symbol_type; +@union_or_intersection_type = @union_type | @intersection_type; +@typevariable_type = @canonical_type_variable_type | @lexical_type_variable_type; + +has_asserts_keyword(int node: @predicate_typeexpr ref); + +@typed_ast_node = @expr | @typeexpr | @function; +ast_node_type( + unique int node: @typed_ast_node ref, + int typ: @type ref); + +declared_function_signature( + unique int node: @function ref, + int sig: @signature_type ref +); + +invoke_expr_signature( + unique int node: @invokeexpr ref, + int sig: @signature_type ref +); + +invoke_expr_overload_index( + unique int node: @invokeexpr ref, + int index: int ref +); + +symbols ( + unique int id: @symbol, + int kind: int ref, + varchar(900) name: string ref +); + +symbol_parent ( + unique int symbol: @symbol ref, + int parent: @symbol ref +); + +symbol_module ( + int symbol: @symbol ref, + varchar(900) moduleName: string ref +); + +symbol_global ( + int symbol: @symbol ref, + varchar(900) globalName: string ref +); + +case @symbol.kind of + 0 = @root_symbol +| 1 = @member_symbol +| 2 = @other_symbol +; + +@type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; + +ast_node_symbol( + unique int node: @ast_node_with_symbol ref, + int symbol: @symbol ref); + +type_symbol( + unique int typ: @type_with_symbol ref, + int symbol: @symbol ref); + +#keyset[typ, name] +type_property( + int typ: @type ref, + varchar(900) name: string ref, + int propertyType: @type ref); + +type_alias( + unique int aliasType: @type ref, + int underlyingType: @type ref); + +@literal_type = @string_literal_type | @number_literal_type | @boolean_literal_type | @bigint_literal_type; +@type_with_literal_value = @string_literal_type | @number_literal_type | @bigint_literal_type; +type_literal_value( + unique int typ: @type_with_literal_value ref, + varchar(900) value: string ref); + +signature_types ( + unique int id: @signature_type, + int kind: int ref, + varchar(900) tostring: string ref, + int type_parameters: int ref, + int required_params: int ref +); + +is_abstract_signature( + unique int sig: @signature_type ref +); + +signature_rest_parameter( + unique int sig: @signature_type ref, + int rest_param_arra_type: @type ref +); + +case @signature_type.kind of + 0 = @function_signature_type +| 1 = @constructor_signature_type +; + +#keyset[typ, kind, index] +type_contains_signature ( + int typ: @type ref, + int kind: int ref, // constructor/call/index + int index: int ref, // ordering of overloaded signatures + int sig: @signature_type ref +); + +#keyset[parent, index] +signature_contains_type ( + int child: @type ref, + int parent: @signature_type ref, + int index: int ref +); + +#keyset[sig, index] +signature_parameter_name ( + int sig: @signature_type ref, + int index: int ref, + varchar(900) name: string ref +); + +number_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +string_index_type ( + unique int baseType: @type ref, + int propertyType: @type ref +); + +base_type_names( + int typeName: @symbol ref, + int baseTypeName: @symbol ref +); + +self_types( + int typeName: @symbol ref, + int selfType: @type_reference ref +); + +tuple_type_min_length( + unique int typ: @type ref, + int minLength: int ref +); + +tuple_type_rest_index( + unique int typ: @type ref, + int index: int ref +); + +// comments +comments (unique int id: @comment, + int kind: int ref, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(900) tostring: string ref); + +case @comment.kind of + 0 = @slashslash_comment +| 1 = @slashstar_comment +| 2 = @doc_comment +| 3 = @html_comment_start +| 4 = @htmlcommentend; + +@html_comment = @html_comment_start | @htmlcommentend; +@line_comment = @slashslash_comment | @html_comment; +@block_comment = @slashstar_comment | @doc_comment; + +// source lines +lines (unique int id: @line, + int toplevel: @toplevel ref, + varchar(900) text: string ref, + varchar(2) terminator: string ref); +indentation (int file: @file ref, + int lineno: int ref, + varchar(1) indentChar: string ref, + int indentDepth: int ref); + +// JavaScript parse errors +js_parse_errors (unique int id: @js_parse_error, + int toplevel: @toplevel ref, + varchar(900) message: string ref, + varchar(900) line: string ref); + +// regular expressions +#keyset[parent, idx] +regexpterm (unique int id: @regexpterm, + int kind: int ref, + int parent: @regexpparent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +@regexpparent = @regexpterm | @regexp_literal | @string_literal | @add_expr; + +case @regexpterm.kind of + 0 = @regexp_alt +| 1 = @regexp_seq +| 2 = @regexp_caret +| 3 = @regexp_dollar +| 4 = @regexp_wordboundary +| 5 = @regexp_nonwordboundary +| 6 = @regexp_positive_lookahead +| 7 = @regexp_negative_lookahead +| 8 = @regexp_star +| 9 = @regexp_plus +| 10 = @regexp_opt +| 11 = @regexp_range +| 12 = @regexp_dot +| 13 = @regexp_group +| 14 = @regexp_normal_constant +| 15 = @regexp_hex_escape +| 16 = @regexp_unicode_escape +| 17 = @regexp_dec_escape +| 18 = @regexp_oct_escape +| 19 = @regexp_ctrl_escape +| 20 = @regexp_char_class_escape +| 21 = @regexp_id_escape +| 22 = @regexp_backref +| 23 = @regexp_char_class +| 24 = @regexp_char_range +| 25 = @regexp_positive_lookbehind +| 26 = @regexp_negative_lookbehind +| 27 = @regexp_unicode_property_escape +| 28 = @regexp_quoted_string +| 29 = @regexp_intersection +| 30 = @regexp_subtraction; + +regexp_parse_errors (unique int id: @regexp_parse_error, + int regexp: @regexpterm ref, + varchar(900) message: string ref); + +@regexp_quantifier = @regexp_star | @regexp_plus | @regexp_opt | @regexp_range; +@regexp_escape = @regexp_char_escape | @regexp_char_class_escape | @regexp_unicode_property_escape; +@regexp_char_escape = @regexp_hex_escape | @regexp_unicode_escape | @regexp_dec_escape | @regexp_oct_escape | @regexp_ctrl_escape | @regexp_id_escape; +@regexp_constant = @regexp_normal_constant | @regexp_char_escape; +@regexp_lookahead = @regexp_positive_lookahead | @regexp_negative_lookahead; +@regexp_lookbehind = @regexp_positive_lookbehind | @regexp_negative_lookbehind; +@regexp_subpattern = @regexp_lookahead | @regexp_lookbehind; +@regexp_anchor = @regexp_dollar | @regexp_caret; + +is_greedy (int id: @regexp_quantifier ref); +range_quantifier_lower_bound (unique int id: @regexp_range ref, int lo: int ref); +range_quantifier_upper_bound (unique int id: @regexp_range ref, int hi: int ref); +is_capture (unique int id: @regexp_group ref, int number: int ref); +is_named_capture (unique int id: @regexp_group ref, string name: string ref); +is_inverted (int id: @regexp_char_class ref); +regexp_const_value (unique int id: @regexp_constant ref, varchar(1) value: string ref); +char_class_escape (unique int id: @regexp_char_class_escape ref, varchar(1) value: string ref); +backref (unique int id: @regexp_backref ref, int value: int ref); +named_backref (unique int id: @regexp_backref ref, string name: string ref); +unicode_property_escapename (unique int id: @regexp_unicode_property_escape ref, string name: string ref); +unicode_property_escapevalue (unique int id: @regexp_unicode_property_escape ref, string value: string ref); + +// tokens +#keyset[toplevel, idx] +tokeninfo (unique int id: @token, + int kind: int ref, + int toplevel: @toplevel ref, + int idx: int ref, + varchar(900) value: string ref); + +case @token.kind of + 0 = @token_eof +| 1 = @token_null_literal +| 2 = @token_boolean_literal +| 3 = @token_numeric_literal +| 4 = @token_string_literal +| 5 = @token_regular_expression +| 6 = @token_identifier +| 7 = @token_keyword +| 8 = @token_punctuator; + +// associate comments with the token immediately following them (which may be EOF) +next_token (int comment: @comment ref, int token: @token ref); + +// JSON +#keyset[parent, idx] +json (unique int id: @json_value, + int kind: int ref, + int parent: @json_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); + +json_literals (varchar(900) value: string ref, + varchar(900) raw: string ref, + unique int expr: @json_value ref); + +json_properties (int obj: @json_object ref, + varchar(900) property: string ref, + int value: @json_value ref); + +json_errors (unique int id: @json_parse_error, + varchar(900) message: string ref); + +json_locations(unique int locatable: @json_locatable ref, + int location: @location_default ref); + +case @json_value.kind of + 0 = @json_null +| 1 = @json_boolean +| 2 = @json_number +| 3 = @json_string +| 4 = @json_array +| 5 = @json_object; + +@json_parent = @json_object | @json_array | @file; + +@json_locatable = @json_value | @json_parse_error; + +// locations +@ast_node = @toplevel | @stmt | @expr | @property | @typeexpr; + +@locatable = @file + | @ast_node + | @comment + | @line + | @js_parse_error | @regexp_parse_error + | @regexpterm + | @json_locatable + | @token + | @cfg_node + | @jsdoc | @jsdoc_type_expr | @jsdoc_tag + | @yaml_locatable + | @xmllocatable + | @configLocatable + | @template_placeholder_tag; + +hasLocation (unique int locatable: @locatable ref, + int location: @location ref); + +// CFG +entry_cfg_node (unique int id: @entry_node, int container: @stmt_container ref); +exit_cfg_node (unique int id: @exit_node, int container: @stmt_container ref); +guard_node (unique int id: @guard_node, int kind: int ref, int test: @expr ref); +case @guard_node.kind of + 0 = @falsy_guard +| 1 = @truthy_guard; +@condition_guard = @falsy_guard | @truthy_guard; + +@synthetic_cfg_node = @entry_node | @exit_node | @guard_node; +@cfg_node = @synthetic_cfg_node | @expr_parent; + +successor (int pred: @cfg_node ref, int succ: @cfg_node ref); + +// JSDoc comments +jsdoc (unique int id: @jsdoc, varchar(900) description: string ref, int comment: @comment ref); +#keyset[parent, idx] +jsdoc_tags (unique int id: @jsdoc_tag, varchar(900) title: string ref, + int parent: @jsdoc ref, int idx: int ref, varchar(900) tostring: string ref); +jsdoc_tag_descriptions (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); +jsdoc_tag_names (unique int tag: @jsdoc_tag ref, varchar(900) text: string ref); + +#keyset[parent, idx] +jsdoc_type_exprs (unique int id: @jsdoc_type_expr, + int kind: int ref, + int parent: @jsdoc_type_expr_parent ref, + int idx: int ref, + varchar(900) tostring: string ref); +case @jsdoc_type_expr.kind of + 0 = @jsdoc_any_type_expr +| 1 = @jsdoc_null_type_expr +| 2 = @jsdoc_undefined_type_expr +| 3 = @jsdoc_unknown_type_expr +| 4 = @jsdoc_void_type_expr +| 5 = @jsdoc_identifier_type_expr +| 6 = @jsdoc_applied_type_expr +| 7 = @jsdoc_nullable_type_expr +| 8 = @jsdoc_non_nullable_type_expr +| 9 = @jsdoc_record_type_expr +| 10 = @jsdoc_array_type_expr +| 11 = @jsdoc_union_type_expr +| 12 = @jsdoc_function_type_expr +| 13 = @jsdoc_optional_type_expr +| 14 = @jsdoc_rest_type_expr +| 15 = @jsdoc_qualified_type_expr +; + +#keyset[id, idx] +jsdoc_record_field_name (int id: @jsdoc_record_type_expr ref, int idx: int ref, varchar(900) name: string ref); +jsdoc_prefix_qualifier (int id: @jsdoc_type_expr ref); +jsdoc_has_new_parameter (int fn: @jsdoc_function_type_expr ref); + +@jsdoc_type_expr_parent = @jsdoc_type_expr | @jsdoc_tag; + +jsdoc_errors (unique int id: @jsdoc_error, int tag: @jsdoc_tag ref, varchar(900) message: string ref, varchar(900) tostring: string ref); + +@dataflownode = @expr | @function_decl_stmt | @class_decl_stmt | @namespace_declaration | @enum_declaration | @property; + +@optionalchainable = @call_expr | @propaccess; + +isOptionalChaining(int id: @optionalchainable ref); + +/** + * The time taken for the extraction of a file. + * This table contains non-deterministic content. + * + * The sum of the `time` column for each (`file`, `timerKind`) pair + * is the total time taken for extraction of `file`. The `extractionPhase` + * column provides a granular view of the extraction time of the file. + */ +extraction_time( + int file : @file ref, + // see `com.semmle.js.extractor.ExtractionMetrics.ExtractionPhase`. + int extractionPhase: int ref, + // 0 for the elapsed CPU time in nanoseconds, 1 for the elapsed wallclock time in nanoseconds + int timerKind: int ref, + float time: float ref +) + +/** +* Non-timing related data for the extraction of a single file. +* This table contains non-deterministic content. +*/ +extraction_data( + int file : @file ref, + // the absolute path to the cache file + varchar(900) cacheFile: string ref, + boolean fromCache: boolean ref, + int length: int ref +) + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + +/*- XML Files -*/ + +xmlEncoding( + unique int id: @file ref, + string encoding: string ref +); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref +); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref +); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref +); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref +); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref +); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref +); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref +); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref +); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/*- Configuration files with key value pairs -*/ + +configs( + unique int id: @config +); + +configNames( + unique int id: @configName, + int config: @config ref, + string name: string ref +); + +configValues( + unique int id: @configValue, + int config: @config ref, + string value: string ref +); + +configLocations( + int locatable: @configLocatable ref, + int location: @location_default ref +); + +@configLocatable = @config | @configName | @configValue; + +/*- Database metadata -*/ +databaseMetadata( + string metadataKey: string ref, + string value: string ref +); + +overlayChangedFiles( + string path: string ref +); diff --git a/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties new file mode 100644 index 00000000000..4ff972031d7 --- /dev/null +++ b/javascript/ql/lib/upgrades/ccefb5e2d49318eea4aeafd4c6ae2af9f94ac72a/upgrade.properties @@ -0,0 +1,2 @@ +description: add overlay relations +compatibility: full diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index 19314b8b774..4a453506818 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,39 @@ +## 2.1.3 + +No user-facing changes. + +## 2.1.2 + +No user-facing changes. + +## 2.1.1 + +No user-facing changes. + +## 2.1.0 + +### Major Analysis Improvements + +* Added support for TypeScript 5.9 +* Added support for `import defer` syntax in JavaScript and TypeScript. + +### Minor Analysis Improvements + +* Data flow is now tracked through the `Promise.try` and `Array.prototype.with` functions. +* Query `js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. +* The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. +* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! + +## 2.0.3 + +No user-facing changes. + +## 2.0.2 + +### Minor Analysis Improvements + +* The `js/regex-injection` query no longer considers environment variables as sources by default. Environment variables can be re-enabled as sources by setting the threat model to include the "environment" category. + ## 2.0.1 No user-facing changes. diff --git a/javascript/ql/src/Comments/CommentedOutCode.ql b/javascript/ql/src/Comments/CommentedOutCode.ql index 2528172522d..460a3bc2133 100644 --- a/javascript/ql/src/Comments/CommentedOutCode.ql +++ b/javascript/ql/src/Comments/CommentedOutCode.ql @@ -4,9 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/commented-out-code - * @tags maintainability - * statistical - * non-attributable + * @tags quality + * maintainability + * readability * @precision medium */ diff --git a/javascript/ql/src/Comments/TodoComments.ql b/javascript/ql/src/Comments/TodoComments.ql index 3d7f92cfbfc..487dde1f737 100644 --- a/javascript/ql/src/Comments/TodoComments.ql +++ b/javascript/ql/src/Comments/TodoComments.ql @@ -5,7 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/todo-comment - * @tags maintainability + * @tags quality + * maintainability + * readability * external/cwe/cwe-546 * @precision medium */ diff --git a/javascript/ql/src/DOM/Alert.ql b/javascript/ql/src/DOM/Alert.ql index 97fd505d2f9..43218c439c1 100644 --- a/javascript/ql/src/DOM/Alert.ql +++ b/javascript/ql/src/DOM/Alert.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/alert-call - * @tags maintainability + * @tags quality + * reliability + * correctness * external/cwe/cwe-489 * @precision medium */ diff --git a/javascript/ql/src/Declarations/RedeclaredVariable.ql b/javascript/ql/src/Declarations/RedeclaredVariable.ql index a48e4e5f65e..098cfdaffc4 100644 --- a/javascript/ql/src/Declarations/RedeclaredVariable.ql +++ b/javascript/ql/src/Declarations/RedeclaredVariable.ql @@ -4,7 +4,9 @@ * @kind problem * @problem.severity recommendation * @id js/variable-redeclaration - * @tags reliability + * @tags quality + * reliability + * correctness * readability * @precision medium */ diff --git a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql index 912d58ab54c..0088af1a2c0 100644 --- a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +++ b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql @@ -46,9 +46,7 @@ string getKind(MemberDeclaration m) { * A call-signature that originates from a MethodSignature in the AST. */ private class MethodCallSig extends Function { - private MethodSignature signature; - - MethodCallSig() { this = signature.getBody() } + MethodCallSig() { this = any(MethodSignature signature).getBody() } int getNumOptionalParameter() { result = count(Parameter p | p = this.getParameter(_) and p.isDeclaredOptional()) diff --git a/javascript/ql/src/Declarations/UnusedParameter.ql b/javascript/ql/src/Declarations/UnusedParameter.ql index d48dc11ed2a..6cb84d2f7c1 100644 --- a/javascript/ql/src/Declarations/UnusedParameter.ql +++ b/javascript/ql/src/Declarations/UnusedParameter.ql @@ -4,7 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/unused-parameter - * @tags maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.qhelp b/javascript/ql/src/Expressions/ExprHasNoEffect.qhelp index da9db7c2ac0..d9907689f8f 100644 --- a/javascript/ql/src/Expressions/ExprHasNoEffect.qhelp +++ b/javascript/ql/src/Expressions/ExprHasNoEffect.qhelp @@ -51,10 +51,4 @@ assign it an initial value, which also serves to document its expected type: - - -

    - - - diff --git a/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql b/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql index 6354383f6c7..9bbf22eebaa 100644 --- a/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql +++ b/javascript/ql/src/LanguageFeatures/ArgumentsCallerCallee.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/call-stack-introspection - * @tags maintainability - * language-features + * @tags quality + * reliability + * correctness * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql b/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql index 6ffca36df7c..a81f8e93051 100644 --- a/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql +++ b/javascript/ql/src/LanguageFeatures/DebuggerStatement.ql @@ -4,9 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/debugger-statement - * @tags efficiency - * maintainability - * language-features + * @tags quality + * reliability + * correctness + * performance * external/cwe/cwe-489 * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/DeleteVar.qhelp b/javascript/ql/src/LanguageFeatures/DeleteVar.qhelp index 79d7ec97035..69ccb83f083 100644 --- a/javascript/ql/src/LanguageFeatures/DeleteVar.qhelp +++ b/javascript/ql/src/LanguageFeatures/DeleteVar.qhelp @@ -35,11 +35,4 @@ function compute to the outside world): - - - -
  • JSLint Error Explanations: Only properties should be deleted.
  • - - -
    diff --git a/javascript/ql/src/LanguageFeatures/Eval.ql b/javascript/ql/src/LanguageFeatures/Eval.ql index f1f753774c0..940ec716da7 100644 --- a/javascript/ql/src/LanguageFeatures/Eval.ql +++ b/javascript/ql/src/LanguageFeatures/Eval.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/eval-call - * @tags maintainability - * language-features + * @tags quality + * reliability + * correctness * external/cwe/cwe-676 * @precision medium */ diff --git a/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql b/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql index 4f3815d6fc6..c5766d61cd6 100644 --- a/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql +++ b/javascript/ql/src/LanguageFeatures/LengthComparisonOffByOne.ql @@ -33,6 +33,18 @@ ConditionGuardNode getLengthLEGuard(Variable index, Variable array) { ) } +/** + * Gets a condition that checks that `index` is less than `array.length`. + */ +ConditionGuardNode getLengthLTGuard(Variable index, Variable array) { + exists(RelationalComparison cmp | cmp instanceof GTExpr or cmp instanceof LTExpr | + cmp = result.getTest() and + result.getOutcome() = true and + cmp.getGreaterOperand() = arrayLen(array) and + cmp.getLesserOperand() = index.getAnAccess() + ) +} + /** * Gets a condition that checks that `index` is not equal to `array.length`. */ @@ -62,7 +74,8 @@ where elementRead(ea, array, index, bb) and // and the read is guarded by the comparison cond.dominates(bb) and - // but the read is not guarded by another check that `index != array.length` - not getLengthNEGuard(index, array).dominates(bb) + // but the read is not guarded by another check that `index != array.length` or `index < array.length` + not getLengthNEGuard(index, array).dominates(bb) and + not getLengthLTGuard(index, array).dominates(bb) select cond.getTest(), "Off-by-one index comparison against length may lead to out-of-bounds $@.", ea, "read" diff --git a/javascript/ql/src/LanguageFeatures/SyntaxError.ql b/javascript/ql/src/LanguageFeatures/SyntaxError.ql index 0c9a69490f7..d4428c75774 100644 --- a/javascript/ql/src/LanguageFeatures/SyntaxError.ql +++ b/javascript/ql/src/LanguageFeatures/SyntaxError.ql @@ -4,8 +4,7 @@ * @kind problem * @problem.severity recommendation * @id js/syntax-error - * @tags quality - * reliability + * @tags reliability * correctness * language-features * @precision very-high diff --git a/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql b/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql index 0e54de5d7d8..7fddaa74592 100644 --- a/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql +++ b/javascript/ql/src/Performance/ReassignParameterAndUseArguments.ql @@ -5,8 +5,9 @@ * @kind problem * @problem.severity recommendation * @id js/parameter-reassignment-with-arguments - * @tags efficiency - * maintainability + * @tags quality + * reliability + * performance * @precision medium */ diff --git a/javascript/ql/src/RegExp/BackspaceEscape.ql b/javascript/ql/src/RegExp/BackspaceEscape.ql index 054f46f06b6..cee6c7672ce 100644 --- a/javascript/ql/src/RegExp/BackspaceEscape.ql +++ b/javascript/ql/src/RegExp/BackspaceEscape.ql @@ -5,9 +5,10 @@ * @kind problem * @problem.severity recommendation * @id js/regex/backspace-escape - * @tags maintainability + * @tags quality + * maintainability * readability - * regular-expressions + * correctness * @precision medium */ diff --git a/javascript/ql/src/Security/CWE-020/OverlyLargeRange.ql b/javascript/ql/src/Security/CWE-020/OverlyLargeRange.ql index 582a8975c8f..c5435e34758 100644 --- a/javascript/ql/src/Security/CWE-020/OverlyLargeRange.ql +++ b/javascript/ql/src/Security/CWE-020/OverlyLargeRange.ql @@ -4,7 +4,7 @@ * This may allow an attacker to bypass a filter or sanitizer. * @kind problem * @problem.severity warning - * @security-severity 5.0 + * @security-severity 4.0 * @precision high * @id js/overly-large-range * @tags correctness diff --git a/javascript/ql/src/Security/CWE-079/XssThroughDom.ql b/javascript/ql/src/Security/CWE-079/XssThroughDom.ql index e690e2bab28..fb8f32cbaca 100644 --- a/javascript/ql/src/Security/CWE-079/XssThroughDom.ql +++ b/javascript/ql/src/Security/CWE-079/XssThroughDom.ql @@ -4,7 +4,7 @@ * can lead to a cross-site scripting vulnerability. * @kind path-problem * @problem.severity warning - * @security-severity 6.1 + * @security-severity 7.8 * @precision high * @id js/xss-through-dom * @tags security diff --git a/javascript/ql/src/Security/CWE-116/IncompleteMultiCharacterSanitization.qhelp b/javascript/ql/src/Security/CWE-116/IncompleteMultiCharacterSanitization.qhelp index 63f28578ec1..b5ef7781f36 100644 --- a/javascript/ql/src/Security/CWE-116/IncompleteMultiCharacterSanitization.qhelp +++ b/javascript/ql/src/Security/CWE-116/IncompleteMultiCharacterSanitization.qhelp @@ -108,7 +108,7 @@ str.replace(/\.\.\//g, "");

    -The regular expression attempts to strip out all occurences of /../ from str. +The regular expression attempts to strip out all occurrences of /../ from str. This will not work as expected: for the string /./.././, for example, it will remove the single occurrence of /../ in the middle, but the remainder of the string then becomes /../, which is another instance of the substring we were trying to remove. diff --git a/javascript/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp b/javascript/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp index e0ccf71572f..bdd1071b613 100644 --- a/javascript/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp +++ b/javascript/ql/src/Security/CWE-327/BrokenCryptoAlgorithm.qhelp @@ -4,17 +4,34 @@

    - Using broken or weak cryptographic algorithms can leave data - vulnerable to being decrypted or forged by an attacker. + Using broken or weak cryptographic algorithms may compromise + security guarantees such as confidentiality, integrity, and + authenticity.

    - Many cryptographic algorithms provided by cryptography - libraries are known to be weak, or flawed. Using such an - algorithm means that encrypted or hashed data is less - secure than it appears to be. + Many cryptographic algorithms are known to be weak or flawed. The + security guarantees of a system often rely on the underlying + cryptography, so using a weak algorithm can have severe consequences. + For example:

    +
      +
    • + If a weak encryption algorithm is used, an attacker may be able to + decrypt sensitive data. +
    • +
    • + If a weak hashing algorithm is used to protect data integrity, an + attacker may be able to craft a malicious input that has the same + hash as a benign one. +
    • +
    • + If a weak algorithm is used for digital signatures, an attacker may + be able to forge signatures and impersonate legitimate users. +
    • +
    + diff --git a/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.qhelp b/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.qhelp new file mode 100644 index 00000000000..04796dfbc18 --- /dev/null +++ b/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.qhelp @@ -0,0 +1,73 @@ + + + + +

    + + A server can use CORS (Cross-Origin Resource Sharing) to relax the + restrictions imposed by the Same-Origin Policy, allowing controlled, secure + cross-origin requests when necessary. + +

    +

    + + A server with an overly permissive CORS configuration may inadvertently + expose sensitive data or enable CSRF attacks, which allow attackers to trick + users into performing unwanted operations on websites they're authenticated to. + +

    +
    + + +

    + + When the origin is set to true, the server + accepts requests from any origin, potentially exposing the system to + CSRF attacks. Use false as the origin value or implement a whitelist + of allowed origins instead. + +

    +

    + + When the origin is set to null, it can be + exploited by an attacker who can deceive a user into making + requests from a null origin, often hosted within a sandboxed iframe. + +

    +

    + + If the origin value is user-controlled, ensure that the data + is properly sanitized and validated against a whitelist of allowed origins. + +

    +
    + + +

    + + In the following example, server_1 accepts requests from any origin + because the value of origin is set to true. + server_2 uses user-controlled data for the origin without validation. + +

    + + + +

    + + To fix these issues, server_1 uses a restrictive CORS configuration + that is not vulnerable to CSRF attacks. server_2 properly validates + user-controlled data against a whitelist before using it. + +

    + + +
    + + +
  • Mozilla Developer Network: CORS, Access-Control-Allow-Origin.
  • +
  • W3C: CORS for developers, Advice for Resource Owners.
  • +
    +
    diff --git a/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql b/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql new file mode 100644 index 00000000000..1699129d2a0 --- /dev/null +++ b/javascript/ql/src/Security/CWE-942/CorsPermissiveConfiguration.ql @@ -0,0 +1,22 @@ +/** + * @name Permissive CORS configuration + * @description Cross-origin resource sharing (CORS) policy allows overly broad access. + * @kind path-problem + * @problem.severity warning + * @security-severity 6.0 + * @precision high + * @id js/cors-permissive-configuration + * @tags security + * external/cwe/cwe-942 + */ + +import javascript +import semmle.javascript.security.CorsPermissiveConfigurationQuery as CorsQuery +import CorsQuery::CorsPermissiveConfigurationFlow::PathGraph + +from + CorsQuery::CorsPermissiveConfigurationFlow::PathNode source, + CorsQuery::CorsPermissiveConfigurationFlow::PathNode sink +where CorsQuery::CorsPermissiveConfigurationFlow::flowPath(source, sink) +select sink.getNode(), source, sink, "CORS Origin allows broad access due to $@.", source.getNode(), + "permissive or user controlled value" diff --git a/javascript/ql/src/experimental/Security/CWE-942/examples/CorsPermissiveConfigurationBad.js b/javascript/ql/src/Security/CWE-942/examples/CorsPermissiveConfigurationBad.js similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-942/examples/CorsPermissiveConfigurationBad.js rename to javascript/ql/src/Security/CWE-942/examples/CorsPermissiveConfigurationBad.js diff --git a/javascript/ql/src/experimental/Security/CWE-942/examples/CorsPermissiveConfigurationGood.js b/javascript/ql/src/Security/CWE-942/examples/CorsPermissiveConfigurationGood.js similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-942/examples/CorsPermissiveConfigurationGood.js rename to javascript/ql/src/Security/CWE-942/examples/CorsPermissiveConfigurationGood.js diff --git a/javascript/ql/src/Statements/ImplicitReturn.ql b/javascript/ql/src/Statements/ImplicitReturn.ql index 9bc50f0798a..cf76ec61606 100644 --- a/javascript/ql/src/Statements/ImplicitReturn.ql +++ b/javascript/ql/src/Statements/ImplicitReturn.ql @@ -5,7 +5,10 @@ * @kind problem * @problem.severity recommendation * @id js/implicit-return - * @tags maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ diff --git a/javascript/ql/src/Statements/InconsistentReturn.ql b/javascript/ql/src/Statements/InconsistentReturn.ql index b6978301e02..a6e810d52bf 100644 --- a/javascript/ql/src/Statements/InconsistentReturn.ql +++ b/javascript/ql/src/Statements/InconsistentReturn.ql @@ -4,8 +4,10 @@ * @kind problem * @problem.severity recommendation * @id js/mixed-returns - * @tags reliability - * maintainability + * @tags quality + * reliability + * correctness + * readability * @precision medium */ diff --git a/javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md b/javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md new file mode 100644 index 00000000000..ca81037f44b --- /dev/null +++ b/javascript/ql/src/change-notes/2025-10-22-adjust-query-severity.md @@ -0,0 +1,5 @@ +--- +category: queryMetadata +--- +* Increased the `security-severity` score of the `js/xss-through-dom` query from 6.1 to 7.8 to align with other XSS queries. +* Reduced the `security-severity` score of the `js/overly-large-range` query from 5.0 to 4.0 to better reflect its impact. \ No newline at end of file diff --git a/javascript/ql/src/change-notes/released/2.0.2.md b/javascript/ql/src/change-notes/released/2.0.2.md new file mode 100644 index 00000000000..f2fc5c62f78 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.0.2.md @@ -0,0 +1,5 @@ +## 2.0.2 + +### Minor Analysis Improvements + +* The `js/regex-injection` query no longer considers environment variables as sources by default. Environment variables can be re-enabled as sources by setting the threat model to include the "environment" category. diff --git a/javascript/ql/src/change-notes/released/2.0.3.md b/javascript/ql/src/change-notes/released/2.0.3.md new file mode 100644 index 00000000000..7bd669821d5 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.0.3.md @@ -0,0 +1,3 @@ +## 2.0.3 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/2.1.0.md b/javascript/ql/src/change-notes/released/2.1.0.md new file mode 100644 index 00000000000..c95b5add20b --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.1.0.md @@ -0,0 +1,13 @@ +## 2.1.0 + +### Major Analysis Improvements + +* Added support for TypeScript 5.9 +* Added support for `import defer` syntax in JavaScript and TypeScript. + +### Minor Analysis Improvements + +* Data flow is now tracked through the `Promise.try` and `Array.prototype.with` functions. +* Query `js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test. +* The query `js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as `Object.keys()`. +* The query "Permissive CORS configuration" (`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who [submitted the original experimental query](https://github.com/github/codeql/pull/14342)! diff --git a/javascript/ql/src/change-notes/released/2.1.1.md b/javascript/ql/src/change-notes/released/2.1.1.md new file mode 100644 index 00000000000..f023e9166c2 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.1.1.md @@ -0,0 +1,3 @@ +## 2.1.1 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/2.1.2.md b/javascript/ql/src/change-notes/released/2.1.2.md new file mode 100644 index 00000000000..6e72407c8c7 --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.1.2.md @@ -0,0 +1,3 @@ +## 2.1.2 + +No user-facing changes. diff --git a/javascript/ql/src/change-notes/released/2.1.3.md b/javascript/ql/src/change-notes/released/2.1.3.md new file mode 100644 index 00000000000..a1338012fcd --- /dev/null +++ b/javascript/ql/src/change-notes/released/2.1.3.md @@ -0,0 +1,3 @@ +## 2.1.3 + +No user-facing changes. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index fe974a4dbf3..345fb0c73a4 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.1 +lastReleaseVersion: 2.1.3 diff --git a/javascript/ql/src/experimental/Security/CWE-918/SSRF.js b/javascript/ql/src/experimental/Security/CWE-918/SSRF.js index e39e9760441..7e47b6dfd17 100644 --- a/javascript/ql/src/experimental/Security/CWE-918/SSRF.js +++ b/javascript/ql/src/experimental/Security/CWE-918/SSRF.js @@ -1,7 +1,7 @@ const axios = require('axios'); export const handler = async (req, res, next) => { - const { target } = req.body; + const { target } = req.body; try { // BAD: `target` is controlled by the attacker diff --git a/javascript/ql/src/experimental/Security/CWE-918/SSRF.qll b/javascript/ql/src/experimental/Security/CWE-918/SSRF.qll index 03bc9f99038..380f594c21e 100644 --- a/javascript/ql/src/experimental/Security/CWE-918/SSRF.qll +++ b/javascript/ql/src/experimental/Security/CWE-918/SSRF.qll @@ -29,10 +29,6 @@ module SsrfConfig implements DataFlow::ConfigSig { predicate isBarrierOut(DataFlow::Node node) { strictSanitizingPrefixEdge(node, _) } - Location getASelectedSourceLocation(DataFlow::Node source) { - none() // Does not select the source - } - predicate observeDiffInformedIncrementalMode() { any() } } diff --git a/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js b/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js index 10ab26e607b..e91c1131338 100644 --- a/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js +++ b/javascript/ql/src/experimental/Security/CWE-918/SSRFGood.js @@ -2,7 +2,7 @@ const axios = require('axios'); const validator = require('validator'); export const handler = async (req, res, next) => { - const { target } = req.body; + const { target } = req.body; if (!validator.isAlphanumeric(target)) { return next(new Error('Bad request')); diff --git a/javascript/ql/src/experimental/Security/CWE-942/Apollo.qll b/javascript/ql/src/experimental/Security/CWE-942/Apollo.qll deleted file mode 100644 index 983c0a8ac89..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/Apollo.qll +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Provides classes for working with Apollo GraphQL connectors. - */ - -import javascript - -/** Provides classes modeling the apollo packages [@apollo/server](https://npmjs.com/package/@apollo/server`) */ -module Apollo { - /** Get a reference to the `ApolloServer` class. */ - private API::Node apollo() { - result = - API::moduleImport([ - "@apollo/server", "@apollo/apollo-server-express", "@apollo/apollo-server-core", - "apollo-server", "apollo-server-express" - ]).getMember("ApolloServer") - } - - /** Gets a reference to the `gql` function that parses GraphQL strings. */ - private API::Node gql() { - result = - API::moduleImport([ - "@apollo/server", "@apollo/apollo-server-express", "@apollo/apollo-server-core", - "apollo-server", "apollo-server-express" - ]).getMember("gql") - } - - /** An instantiation of an `ApolloServer`. */ - class ApolloServer extends API::NewNode { - ApolloServer() { this = apollo().getAnInstantiation() } - } - - /** A string that is interpreted as a GraphQL query by a `apollo` package. */ - private class ApolloGraphQLString extends GraphQL::GraphQLString { - ApolloGraphQLString() { this = gql().getACall().getArgument(0) } - } -} diff --git a/javascript/ql/src/experimental/Security/CWE-942/Cors.qll b/javascript/ql/src/experimental/Security/CWE-942/Cors.qll deleted file mode 100644 index cc190e6f429..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/Cors.qll +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Provides classes for working with Cors connectors. - */ - -import javascript - -/** Provides classes modeling the [cors](https://npmjs.com/package/cors) library. */ -module Cors { - /** - * An expression that creates a new CORS configuration. - */ - class Cors extends DataFlow::CallNode { - Cors() { this = DataFlow::moduleImport("cors").getAnInvocation() } - - /** Get the options used to configure Cors */ - DataFlow::Node getOptionsArgument() { result = this.getArgument(0) } - - /** Holds if cors is using default configuration */ - predicate isDefault() { this.getNumArgument() = 0 } - - /** Gets the value of the `origin` option used to configure this Cors instance. */ - DataFlow::Node getOrigin() { result = this.getOptionArgument(0, "origin") } - } -} diff --git a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.qhelp b/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.qhelp deleted file mode 100644 index fc79eee743b..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.qhelp +++ /dev/null @@ -1,71 +0,0 @@ - - - - -

    - - A server can use CORS (Cross-Origin Resource Sharing) to relax the - restrictions imposed by the SOP (Same-Origin Policy), allowing controlled, secure - cross-origin requests when necessary. - - A server with an overly permissive CORS configuration may inadvertently - expose sensitive data or lead to CSRF which is an attack that allows attackers to trick - users into performing unwanted operations in websites they're authenticated to. - -

    - -
    - - -

    - - When the origin is set to true, it signifies that the server - is accepting requests from any origin, potentially exposing the system to - CSRF attacks. This can be fixed using false as origin value or using a whitelist. - -

    -

    - - On the other hand, if the origin is - set to null, it can be exploited by an attacker to deceive a user into making - requests from a null origin form, often hosted within a sandboxed iframe. - -

    - -

    - - If the origin value is user controlled, make sure that the data - is properly sanitized. - -

    -
    - - -

    - - In the example below, the server_1 accepts requests from any origin - since the value of origin is set to true. - And server_2's origin is user-controlled. - -

    - - - -

    - - In the example below, the server_1 CORS is restrictive so it's not - vulnerable to CSRF attacks. And server_2's is using properly sanitized - user-controlled data. - -

    - - -
    - - -
  • Mozilla Developer Network: CORS, Access-Control-Allow-Origin.
  • -
  • W3C: CORS for developers, Advice for Resource Owners
  • -
    -
    diff --git a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.ql b/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.ql deleted file mode 100644 index 87db66ad98d..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfiguration.ql +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @name overly CORS configuration - * @description Misconfiguration of CORS HTTP headers allows CSRF attacks. - * @kind path-problem - * @problem.severity error - * @security-severity 7.5 - * @precision high - * @id js/cors-misconfiguration - * @tags security - * external/cwe/cwe-942 - */ - -import javascript -import CorsPermissiveConfigurationQuery -import CorsPermissiveConfigurationFlow::PathGraph - -from - CorsPermissiveConfigurationFlow::PathNode source, CorsPermissiveConfigurationFlow::PathNode sink -where CorsPermissiveConfigurationFlow::flowPath(source, sink) -select sink.getNode(), source, sink, "CORS Origin misconfiguration due to a $@.", source.getNode(), - "too permissive or user controlled value" diff --git a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationCustomizations.qll b/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationCustomizations.qll deleted file mode 100644 index 8876373a3d2..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationCustomizations.qll +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for reasoning about - * overly permissive CORS configurations, as well as - * extension points for adding your own. - */ - -import javascript -import Cors::Cors -import Apollo::Apollo - -/** Module containing sources, sinks, and sanitizers for overly permissive CORS configurations. */ -module CorsPermissiveConfiguration { - private newtype TFlowState = - TTaint() or - TTrueOrNull() or - TWildcard() - - /** A flow state to asociate with a tracked value. */ - class FlowState extends TFlowState { - /** Gets a string representation of this flow state. */ - string toString() { - this = TTaint() and result = "taint" - or - this = TTrueOrNull() and result = "true-or-null" - or - this = TWildcard() and result = "wildcard" - } - - deprecated DataFlow::FlowLabel toFlowLabel() { - this = TTaint() and result.isTaint() - or - this = TTrueOrNull() and result instanceof TrueAndNull - or - this = TWildcard() and result instanceof Wildcard - } - } - - /** Predicates for working with flow states. */ - module FlowState { - deprecated FlowState fromFlowLabel(DataFlow::FlowLabel label) { result.toFlowLabel() = label } - - /** A tainted value. */ - FlowState taint() { result = TTaint() } - - /** A `true` or `null` value. */ - FlowState trueOrNull() { result = TTrueOrNull() } - - /** A `"*"` value. */ - FlowState wildcard() { result = TWildcard() } - } - - /** - * A data flow source for permissive CORS configuration. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for permissive CORS configuration. - */ - abstract class Sink extends DataFlow::Node { } - - /** - * A sanitizer for permissive CORS configuration. - */ - abstract class Sanitizer extends DataFlow::Node { } - - /** - * DEPRECATED: Use `ActiveThreatModelSource` from Concepts instead! - */ - deprecated class RemoteFlowSourceAsSource = ActiveThreatModelSourceAsSource; - - /** - * An active threat-model source, considered as a flow source. - */ - private class ActiveThreatModelSourceAsSource extends Source instanceof ActiveThreatModelSource { - ActiveThreatModelSourceAsSource() { not this instanceof ClientSideRemoteFlowSource } - } - - /** A flow label representing `true` and `null` values. */ - abstract deprecated class TrueAndNull extends DataFlow::FlowLabel { - TrueAndNull() { this = "TrueAndNull" } - } - - deprecated TrueAndNull truenullLabel() { any() } - - /** A flow label representing `*` value. */ - abstract deprecated class Wildcard extends DataFlow::FlowLabel { - Wildcard() { this = "Wildcard" } - } - - deprecated Wildcard wildcardLabel() { any() } - - /** An overly permissive value for `origin` (Apollo) */ - class TrueNullValue extends Source { - TrueNullValue() { this.mayHaveBooleanValue(true) or this.asExpr() instanceof NullLiteral } - } - - /** An overly permissive value for `origin` (Express) */ - class WildcardValue extends Source { - WildcardValue() { this.mayHaveStringValue("*") } - } - - /** - * The value of cors origin when initializing the application. - */ - class CorsApolloServer extends Sink, DataFlow::ValueNode { - CorsApolloServer() { - exists(ApolloServer agql | - this = - agql.getOptionArgument(0, "cors").getALocalSource().getAPropertyWrite("origin").getRhs() - ) - } - } - - /** - * The value of cors origin when initializing the application. - */ - class ExpressCors extends Sink, DataFlow::ValueNode { - ExpressCors() { - exists(CorsConfiguration config | this = config.getCorsConfiguration().getOrigin()) - } - } - - /** - * An express route setup configured with the `cors` package. - */ - class CorsConfiguration extends DataFlow::MethodCallNode { - Cors corsConfig; - - CorsConfiguration() { - exists(Express::RouteSetup setup | this = setup | - if setup.isUseCall() - then corsConfig = setup.getArgument(0) - else corsConfig = setup.getArgument(any(int i | i > 0)) - ) - } - - /** Gets the expression that configures `cors` on this route setup. */ - Cors getCorsConfiguration() { result = corsConfig } - } -} diff --git a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationQuery.qll b/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationQuery.qll deleted file mode 100644 index 3605a1adaa9..00000000000 --- a/javascript/ql/src/experimental/Security/CWE-942/CorsPermissiveConfigurationQuery.qll +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Provides a dataflow taint tracking configuration for reasoning - * about overly permissive CORS configurations. - * - * Note, for performance reasons: only import this file if - * `CorsPermissiveConfiguration::Configuration` is needed, - * otherwise `CorsPermissiveConfigurationCustomizations` should - * be imported instead. - */ - -import javascript -import CorsPermissiveConfigurationCustomizations::CorsPermissiveConfiguration -private import CorsPermissiveConfigurationCustomizations::CorsPermissiveConfiguration as CorsPermissiveConfiguration - -/** - * A data flow configuration for overly permissive CORS configuration. - */ -module CorsPermissiveConfigurationConfig implements DataFlow::StateConfigSig { - class FlowState = CorsPermissiveConfiguration::FlowState; - - predicate isSource(DataFlow::Node source, FlowState state) { - source instanceof TrueNullValue and state = FlowState::trueOrNull() - or - source instanceof WildcardValue and state = FlowState::wildcard() - or - source instanceof RemoteFlowSource and state = FlowState::taint() - } - - predicate isSink(DataFlow::Node sink, FlowState state) { - sink instanceof CorsApolloServer and state = [FlowState::taint(), FlowState::trueOrNull()] - or - sink instanceof ExpressCors and state = [FlowState::taint(), FlowState::wildcard()] - } - - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } - - predicate observeDiffInformedIncrementalMode() { any() } -} - -module CorsPermissiveConfigurationFlow = - TaintTracking::GlobalWithState; - -/** - * DEPRECATED. Use the `CorsPermissiveConfigurationFlow` module instead. - */ -deprecated class Configuration extends TaintTracking::Configuration { - Configuration() { this = "CorsPermissiveConfiguration" } - - override predicate isSource(DataFlow::Node source, DataFlow::FlowLabel label) { - CorsPermissiveConfigurationConfig::isSource(source, FlowState::fromFlowLabel(label)) - } - - override predicate isSink(DataFlow::Node sink, DataFlow::FlowLabel label) { - CorsPermissiveConfigurationConfig::isSink(sink, FlowState::fromFlowLabel(label)) - } - - override predicate isSanitizer(DataFlow::Node node) { - super.isSanitizer(node) or - CorsPermissiveConfigurationConfig::isBarrier(node) - } -} - -deprecated private class WildcardActivated extends DataFlow::FlowLabel, Wildcard { - WildcardActivated() { this = this } -} - -deprecated private class TrueAndNullActivated extends DataFlow::FlowLabel, TrueAndNull { - TrueAndNullActivated() { this = this } -} diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index c06711ab2ca..93dd9cf7ae7 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.0.2-dev +version: 2.1.4-dev groups: - javascript - queries diff --git a/csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/RequireSSL.expected b/javascript/ql/test/ApiGraphs/explicit-this/VerifyAssertions.expected similarity index 100% rename from csharp/ql/test/experimental/Security Features/CWE-614/RequireSSLSystemWeb/HttpCookiesTrue/RequireSSL.expected rename to javascript/ql/test/ApiGraphs/explicit-this/VerifyAssertions.expected diff --git a/javascript/ql/test/ApiGraphs/explicit-this/VerifyAssertions.ql b/javascript/ql/test/ApiGraphs/explicit-this/VerifyAssertions.ql new file mode 100644 index 00000000000..b9c54e26072 --- /dev/null +++ b/javascript/ql/test/ApiGraphs/explicit-this/VerifyAssertions.ql @@ -0,0 +1 @@ +import ApiGraphs.VerifyAssertions diff --git a/javascript/ql/test/ApiGraphs/explicit-this/package.json b/javascript/ql/test/ApiGraphs/explicit-this/package.json new file mode 100644 index 00000000000..f48acd62360 --- /dev/null +++ b/javascript/ql/test/ApiGraphs/explicit-this/package.json @@ -0,0 +1,6 @@ +{ + "name": "explicit-this", + "dependencies": { + "something": "*" + } +} diff --git a/javascript/ql/test/ApiGraphs/explicit-this/tst.js b/javascript/ql/test/ApiGraphs/explicit-this/tst.js new file mode 100644 index 00000000000..a3f5ecff21e --- /dev/null +++ b/javascript/ql/test/ApiGraphs/explicit-this/tst.js @@ -0,0 +1,7 @@ +const lib = require('something'); + +function f() { + this.two(); /** use=moduleImport("something").getMember("exports").getMember("one").getMember("two").getReturn() */ +} + +f.call(lib.one); diff --git a/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected b/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected index 4cd0cf23378..1d53bbb1b25 100644 --- a/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected +++ b/javascript/ql/test/experimental/FormParsers/RemoteFlowSource.expected @@ -1,17 +1,17 @@ edges | busybus.js:9:30:9:33 | file | busybus.js:13:23:13:23 | z | provenance | | | busybus.js:9:36:9:39 | info | busybus.js:10:54:10:57 | info | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | encoding | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | filename | provenance | | -| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:19:10:57 | mimeType | provenance | | -| busybus.js:10:19:10:57 | encoding | busybus.js:12:28:12:35 | encoding | provenance | | -| busybus.js:10:19:10:57 | filename | busybus.js:12:18:12:25 | filename | provenance | | -| busybus.js:10:19:10:57 | mimeType | busybus.js:12:38:12:45 | mimeType | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:21:10:28 | filename | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:31:10:38 | encoding | provenance | | +| busybus.js:10:19:10:50 | { filen ... eType } | busybus.js:10:41:10:48 | mimeType | provenance | | +| busybus.js:10:21:10:28 | filename | busybus.js:12:18:12:25 | filename | provenance | | +| busybus.js:10:31:10:38 | encoding | busybus.js:12:28:12:35 | encoding | provenance | | +| busybus.js:10:41:10:48 | mimeType | busybus.js:12:38:12:45 | mimeType | provenance | | | busybus.js:10:54:10:57 | info | busybus.js:10:19:10:50 | { filen ... eType } | provenance | | | busybus.js:13:23:13:23 | z | busybus.js:13:31:13:36 | sink() | provenance | | | busybus.js:15:30:15:33 | data | busybus.js:16:22:16:25 | data | provenance | | -| busybus.js:22:25:22:42 | data | busybus.js:23:26:23:29 | data | provenance | | -| busybus.js:22:32:22:42 | this.read() | busybus.js:22:25:22:42 | data | provenance | | +| busybus.js:22:25:22:28 | data | busybus.js:23:26:23:29 | data | provenance | | +| busybus.js:22:32:22:42 | this.read() | busybus.js:22:25:22:28 | data | provenance | | | busybus.js:27:25:27:28 | name | busybus.js:28:18:28:21 | name | provenance | | | busybus.js:27:31:27:33 | val | busybus.js:28:24:28:26 | val | provenance | | | busybus.js:27:36:27:39 | info | busybus.js:28:29:28:32 | info | provenance | | @@ -19,10 +19,10 @@ edges | dicer.js:14:28:14:33 | header | dicer.js:16:22:16:27 | header | provenance | | | dicer.js:16:22:16:27 | header | dicer.js:16:22:16:30 | header[h] | provenance | | | dicer.js:19:26:19:29 | data | dicer.js:20:18:20:21 | data | provenance | | -| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:11:7:49 | fields | provenance | | -| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:11:7:49 | files | provenance | | -| formidable.js:7:11:7:49 | fields | formidable.js:8:10:8:15 | fields | provenance | | -| formidable.js:7:11:7:49 | files | formidable.js:8:18:8:22 | files | provenance | | +| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:12:7:17 | fields | provenance | | +| formidable.js:7:11:7:25 | [fields, files] | formidable.js:7:20:7:24 | files | provenance | | +| formidable.js:7:12:7:17 | fields | formidable.js:8:10:8:15 | fields | provenance | | +| formidable.js:7:20:7:24 | files | formidable.js:8:18:8:22 | files | provenance | | | formidable.js:7:29:7:49 | await f ... se(req) | formidable.js:7:11:7:25 | [fields, files] | provenance | | | formidable.js:7:35:7:49 | form.parse(req) | formidable.js:7:29:7:49 | await f ... se(req) | provenance | | | formidable.js:9:27:9:34 | formname | formidable.js:10:14:10:21 | formname | provenance | | @@ -39,9 +39,9 @@ nodes | busybus.js:9:30:9:33 | file | semmle.label | file | | busybus.js:9:36:9:39 | info | semmle.label | info | | busybus.js:10:19:10:50 | { filen ... eType } | semmle.label | { filen ... eType } | -| busybus.js:10:19:10:57 | encoding | semmle.label | encoding | -| busybus.js:10:19:10:57 | filename | semmle.label | filename | -| busybus.js:10:19:10:57 | mimeType | semmle.label | mimeType | +| busybus.js:10:21:10:28 | filename | semmle.label | filename | +| busybus.js:10:31:10:38 | encoding | semmle.label | encoding | +| busybus.js:10:41:10:48 | mimeType | semmle.label | mimeType | | busybus.js:10:54:10:57 | info | semmle.label | info | | busybus.js:12:18:12:25 | filename | semmle.label | filename | | busybus.js:12:28:12:35 | encoding | semmle.label | encoding | @@ -50,7 +50,7 @@ nodes | busybus.js:13:31:13:36 | sink() | semmle.label | sink() | | busybus.js:15:30:15:33 | data | semmle.label | data | | busybus.js:16:22:16:25 | data | semmle.label | data | -| busybus.js:22:25:22:42 | data | semmle.label | data | +| busybus.js:22:25:22:28 | data | semmle.label | data | | busybus.js:22:32:22:42 | this.read() | semmle.label | this.read() | | busybus.js:23:26:23:29 | data | semmle.label | data | | busybus.js:27:25:27:28 | name | semmle.label | name | @@ -67,8 +67,8 @@ nodes | dicer.js:19:26:19:29 | data | semmle.label | data | | dicer.js:20:18:20:21 | data | semmle.label | data | | formidable.js:7:11:7:25 | [fields, files] | semmle.label | [fields, files] | -| formidable.js:7:11:7:49 | fields | semmle.label | fields | -| formidable.js:7:11:7:49 | files | semmle.label | files | +| formidable.js:7:12:7:17 | fields | semmle.label | fields | +| formidable.js:7:20:7:24 | files | semmle.label | files | | formidable.js:7:29:7:49 | await f ... se(req) | semmle.label | await f ... se(req) | | formidable.js:7:35:7:49 | form.parse(req) | semmle.label | form.parse(req) | | formidable.js:8:10:8:15 | fields | semmle.label | fields | diff --git a/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected b/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected index ab162e0b311..0385389e73c 100644 --- a/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-094-dataURL/CodeInjection.expected @@ -1,33 +1,33 @@ edges -| test.js:5:11:5:44 | payload | test.js:6:30:6:36 | payload | provenance | | -| test.js:5:11:5:44 | payload | test.js:9:26:9:32 | payload | provenance | | -| test.js:5:21:5:44 | req.que ... rameter | test.js:5:11:5:44 | payload | provenance | | -| test.js:6:9:6:43 | payloadURL | test.js:7:16:7:25 | payloadURL | provenance | | -| test.js:6:22:6:43 | new URL ... + sth) | test.js:6:9:6:43 | payloadURL | provenance | | +| test.js:5:11:5:17 | payload | test.js:6:30:6:36 | payload | provenance | | +| test.js:5:11:5:17 | payload | test.js:9:26:9:32 | payload | provenance | | +| test.js:5:21:5:44 | req.que ... rameter | test.js:5:11:5:17 | payload | provenance | | +| test.js:6:9:6:18 | payloadURL | test.js:7:16:7:25 | payloadURL | provenance | | +| test.js:6:22:6:43 | new URL ... + sth) | test.js:6:9:6:18 | payloadURL | provenance | | | test.js:6:30:6:36 | payload | test.js:6:30:6:42 | payload + sth | provenance | | | test.js:6:30:6:42 | payload + sth | test.js:6:22:6:43 | new URL ... + sth) | provenance | Config | -| test.js:9:5:9:39 | payloadURL | test.js:10:16:10:25 | payloadURL | provenance | | -| test.js:9:18:9:39 | new URL ... + sth) | test.js:9:5:9:39 | payloadURL | provenance | | +| test.js:9:5:9:14 | payloadURL | test.js:10:16:10:25 | payloadURL | provenance | | +| test.js:9:18:9:39 | new URL ... + sth) | test.js:9:5:9:14 | payloadURL | provenance | | | test.js:9:26:9:32 | payload | test.js:9:26:9:38 | payload + sth | provenance | | | test.js:9:26:9:38 | payload + sth | test.js:9:18:9:39 | new URL ... + sth) | provenance | Config | -| test.js:17:11:17:44 | payload | test.js:18:18:18:24 | payload | provenance | | -| test.js:17:11:17:44 | payload | test.js:19:18:19:24 | payload | provenance | | -| test.js:17:21:17:44 | req.que ... rameter | test.js:17:11:17:44 | payload | provenance | | +| test.js:17:11:17:17 | payload | test.js:18:18:18:24 | payload | provenance | | +| test.js:17:11:17:17 | payload | test.js:19:18:19:24 | payload | provenance | | +| test.js:17:21:17:44 | req.que ... rameter | test.js:17:11:17:17 | payload | provenance | | | test.js:19:18:19:24 | payload | test.js:19:18:19:30 | payload + sth | provenance | | nodes -| test.js:5:11:5:44 | payload | semmle.label | payload | +| test.js:5:11:5:17 | payload | semmle.label | payload | | test.js:5:21:5:44 | req.que ... rameter | semmle.label | req.que ... rameter | -| test.js:6:9:6:43 | payloadURL | semmle.label | payloadURL | +| test.js:6:9:6:18 | payloadURL | semmle.label | payloadURL | | test.js:6:22:6:43 | new URL ... + sth) | semmle.label | new URL ... + sth) | | test.js:6:30:6:36 | payload | semmle.label | payload | | test.js:6:30:6:42 | payload + sth | semmle.label | payload + sth | | test.js:7:16:7:25 | payloadURL | semmle.label | payloadURL | -| test.js:9:5:9:39 | payloadURL | semmle.label | payloadURL | +| test.js:9:5:9:14 | payloadURL | semmle.label | payloadURL | | test.js:9:18:9:39 | new URL ... + sth) | semmle.label | new URL ... + sth) | | test.js:9:26:9:32 | payload | semmle.label | payload | | test.js:9:26:9:38 | payload + sth | semmle.label | payload + sth | | test.js:10:16:10:25 | payloadURL | semmle.label | payloadURL | -| test.js:17:11:17:44 | payload | semmle.label | payload | +| test.js:17:11:17:17 | payload | semmle.label | payload | | test.js:17:21:17:44 | req.que ... rameter | semmle.label | req.que ... rameter | | test.js:18:18:18:24 | payload | semmle.label | payload | | test.js:19:18:19:24 | payload | semmle.label | payload | diff --git a/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected b/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected index 40313cf964c..d54685c97be 100644 --- a/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-099/EnvValueAndKeyInjection/EnvValueAndKeyInjection.expected @@ -1,28 +1,28 @@ edges -| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:9:5:39 | EnvKey | provenance | | -| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:9:5:39 | EnvValue | provenance | | -| test.js:5:9:5:39 | EnvKey | test.js:6:15:6:20 | EnvKey | provenance | | -| test.js:5:9:5:39 | EnvKey | test.js:7:15:7:20 | EnvKey | provenance | | -| test.js:5:9:5:39 | EnvValue | test.js:6:25:6:32 | EnvValue | provenance | | -| test.js:5:9:5:39 | EnvValue | test.js:7:25:7:32 | EnvValue | provenance | | +| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:11:5:18 | EnvValue | provenance | | +| test.js:5:9:5:28 | { EnvValue, EnvKey } | test.js:5:21:5:26 | EnvKey | provenance | | +| test.js:5:11:5:18 | EnvValue | test.js:6:25:6:32 | EnvValue | provenance | | +| test.js:5:11:5:18 | EnvValue | test.js:7:25:7:32 | EnvValue | provenance | | +| test.js:5:21:5:26 | EnvKey | test.js:6:15:6:20 | EnvKey | provenance | | +| test.js:5:21:5:26 | EnvKey | test.js:7:15:7:20 | EnvKey | provenance | | | test.js:5:32:5:39 | req.body | test.js:5:9:5:28 | { EnvValue, EnvKey } | provenance | | -| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:9:13:39 | EnvKey | provenance | | -| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:9:13:39 | EnvValue | provenance | | -| test.js:13:9:13:39 | EnvKey | test.js:15:15:15:20 | EnvKey | provenance | | -| test.js:13:9:13:39 | EnvValue | test.js:16:26:16:33 | EnvValue | provenance | | +| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:11:13:18 | EnvValue | provenance | | +| test.js:13:9:13:28 | { EnvValue, EnvKey } | test.js:13:21:13:26 | EnvKey | provenance | | +| test.js:13:11:13:18 | EnvValue | test.js:16:26:16:33 | EnvValue | provenance | | +| test.js:13:21:13:26 | EnvKey | test.js:15:15:15:20 | EnvKey | provenance | | | test.js:13:32:13:39 | req.body | test.js:13:9:13:28 | { EnvValue, EnvKey } | provenance | | nodes | test.js:5:9:5:28 | { EnvValue, EnvKey } | semmle.label | { EnvValue, EnvKey } | -| test.js:5:9:5:39 | EnvKey | semmle.label | EnvKey | -| test.js:5:9:5:39 | EnvValue | semmle.label | EnvValue | +| test.js:5:11:5:18 | EnvValue | semmle.label | EnvValue | +| test.js:5:21:5:26 | EnvKey | semmle.label | EnvKey | | test.js:5:32:5:39 | req.body | semmle.label | req.body | | test.js:6:15:6:20 | EnvKey | semmle.label | EnvKey | | test.js:6:25:6:32 | EnvValue | semmle.label | EnvValue | | test.js:7:15:7:20 | EnvKey | semmle.label | EnvKey | | test.js:7:25:7:32 | EnvValue | semmle.label | EnvValue | | test.js:13:9:13:28 | { EnvValue, EnvKey } | semmle.label | { EnvValue, EnvKey } | -| test.js:13:9:13:39 | EnvKey | semmle.label | EnvKey | -| test.js:13:9:13:39 | EnvValue | semmle.label | EnvValue | +| test.js:13:11:13:18 | EnvValue | semmle.label | EnvValue | +| test.js:13:21:13:26 | EnvKey | semmle.label | EnvKey | | test.js:13:32:13:39 | req.body | semmle.label | req.body | | test.js:15:15:15:20 | EnvKey | semmle.label | EnvKey | | test.js:16:26:16:33 | EnvValue | semmle.label | EnvValue | diff --git a/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected b/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected index 87f6e5d4b86..5ba1884017f 100644 --- a/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected +++ b/javascript/ql/test/experimental/Security/CWE-099/EnvValueInjection/EnvValueInjection.expected @@ -1,12 +1,12 @@ edges -| test.js:4:9:4:20 | { EnvValue } | test.js:4:9:4:31 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:5:35:5:42 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:6:23:6:30 | EnvValue | provenance | | -| test.js:4:9:4:31 | EnvValue | test.js:7:22:7:29 | EnvValue | provenance | | +| test.js:4:9:4:20 | { EnvValue } | test.js:4:11:4:18 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:5:35:5:42 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:6:23:6:30 | EnvValue | provenance | | +| test.js:4:11:4:18 | EnvValue | test.js:7:22:7:29 | EnvValue | provenance | | | test.js:4:24:4:31 | req.body | test.js:4:9:4:20 | { EnvValue } | provenance | | nodes | test.js:4:9:4:20 | { EnvValue } | semmle.label | { EnvValue } | -| test.js:4:9:4:31 | EnvValue | semmle.label | EnvValue | +| test.js:4:11:4:18 | EnvValue | semmle.label | EnvValue | | test.js:4:24:4:31 | req.body | semmle.label | req.body | | test.js:5:35:5:42 | EnvValue | semmle.label | EnvValue | | test.js:6:23:6:30 | EnvValue | semmle.label | EnvValue | diff --git a/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected b/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected index 0f67cfc8513..09db119d078 100644 --- a/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected +++ b/javascript/ql/test/experimental/Security/CWE-347/localsource/decodeJwtWithoutVerificationLocalSource.expected @@ -1,74 +1,74 @@ edges -| JsonWebToken.js:13:11:13:28 | UserToken | JsonWebToken.js:16:28:16:36 | UserToken | provenance | | -| JsonWebToken.js:13:23:13:28 | aJwt() | JsonWebToken.js:13:11:13:28 | UserToken | provenance | | -| JsonWebToken.js:20:11:20:28 | UserToken | JsonWebToken.js:23:28:23:36 | UserToken | provenance | | -| JsonWebToken.js:20:11:20:28 | UserToken | JsonWebToken.js:24:28:24:36 | UserToken | provenance | | -| JsonWebToken.js:20:23:20:28 | aJwt() | JsonWebToken.js:20:11:20:28 | UserToken | provenance | | -| JsonWebToken.js:28:11:28:28 | UserToken | JsonWebToken.js:31:28:31:36 | UserToken | provenance | | -| JsonWebToken.js:28:23:28:28 | aJwt() | JsonWebToken.js:28:11:28:28 | UserToken | provenance | | -| JsonWebToken.js:35:11:35:28 | UserToken | JsonWebToken.js:38:28:38:36 | UserToken | provenance | | -| JsonWebToken.js:35:11:35:28 | UserToken | JsonWebToken.js:39:28:39:36 | UserToken | provenance | | -| JsonWebToken.js:35:23:35:28 | aJwt() | JsonWebToken.js:35:11:35:28 | UserToken | provenance | | -| JsonWebToken.js:43:11:43:28 | UserToken | JsonWebToken.js:46:28:46:36 | UserToken | provenance | | -| JsonWebToken.js:43:11:43:28 | UserToken | JsonWebToken.js:47:28:47:36 | UserToken | provenance | | -| JsonWebToken.js:43:23:43:28 | aJwt() | JsonWebToken.js:43:11:43:28 | UserToken | provenance | | -| jose.js:12:11:12:28 | UserToken | jose.js:15:20:15:28 | UserToken | provenance | | -| jose.js:12:23:12:28 | aJwt() | jose.js:12:11:12:28 | UserToken | provenance | | -| jose.js:19:11:19:28 | UserToken | jose.js:22:20:22:28 | UserToken | provenance | | -| jose.js:19:11:19:28 | UserToken | jose.js:23:26:23:34 | UserToken | provenance | | -| jose.js:19:23:19:28 | aJwt() | jose.js:19:11:19:28 | UserToken | provenance | | -| jose.js:27:11:27:28 | UserToken | jose.js:30:26:30:34 | UserToken | provenance | | -| jose.js:27:23:27:28 | aJwt() | jose.js:27:11:27:28 | UserToken | provenance | | -| jwtDecode.js:13:11:13:28 | UserToken | jwtDecode.js:17:16:17:24 | UserToken | provenance | | -| jwtDecode.js:13:23:13:28 | aJwt() | jwtDecode.js:13:11:13:28 | UserToken | provenance | | -| jwtSimple.js:13:11:13:28 | UserToken | jwtSimple.js:16:23:16:31 | UserToken | provenance | | -| jwtSimple.js:13:23:13:28 | aJwt() | jwtSimple.js:13:11:13:28 | UserToken | provenance | | -| jwtSimple.js:20:11:20:28 | UserToken | jwtSimple.js:23:23:23:31 | UserToken | provenance | | -| jwtSimple.js:20:11:20:28 | UserToken | jwtSimple.js:24:23:24:31 | UserToken | provenance | | -| jwtSimple.js:20:23:20:28 | aJwt() | jwtSimple.js:20:11:20:28 | UserToken | provenance | | -| jwtSimple.js:28:11:28:28 | UserToken | jwtSimple.js:31:23:31:31 | UserToken | provenance | | -| jwtSimple.js:28:11:28:28 | UserToken | jwtSimple.js:32:23:32:31 | UserToken | provenance | | -| jwtSimple.js:28:23:28:28 | aJwt() | jwtSimple.js:28:11:28:28 | UserToken | provenance | | +| JsonWebToken.js:13:11:13:19 | UserToken | JsonWebToken.js:16:28:16:36 | UserToken | provenance | | +| JsonWebToken.js:13:23:13:28 | aJwt() | JsonWebToken.js:13:11:13:19 | UserToken | provenance | | +| JsonWebToken.js:20:11:20:19 | UserToken | JsonWebToken.js:23:28:23:36 | UserToken | provenance | | +| JsonWebToken.js:20:11:20:19 | UserToken | JsonWebToken.js:24:28:24:36 | UserToken | provenance | | +| JsonWebToken.js:20:23:20:28 | aJwt() | JsonWebToken.js:20:11:20:19 | UserToken | provenance | | +| JsonWebToken.js:28:11:28:19 | UserToken | JsonWebToken.js:31:28:31:36 | UserToken | provenance | | +| JsonWebToken.js:28:23:28:28 | aJwt() | JsonWebToken.js:28:11:28:19 | UserToken | provenance | | +| JsonWebToken.js:35:11:35:19 | UserToken | JsonWebToken.js:38:28:38:36 | UserToken | provenance | | +| JsonWebToken.js:35:11:35:19 | UserToken | JsonWebToken.js:39:28:39:36 | UserToken | provenance | | +| JsonWebToken.js:35:23:35:28 | aJwt() | JsonWebToken.js:35:11:35:19 | UserToken | provenance | | +| JsonWebToken.js:43:11:43:19 | UserToken | JsonWebToken.js:46:28:46:36 | UserToken | provenance | | +| JsonWebToken.js:43:11:43:19 | UserToken | JsonWebToken.js:47:28:47:36 | UserToken | provenance | | +| JsonWebToken.js:43:23:43:28 | aJwt() | JsonWebToken.js:43:11:43:19 | UserToken | provenance | | +| jose.js:12:11:12:19 | UserToken | jose.js:15:20:15:28 | UserToken | provenance | | +| jose.js:12:23:12:28 | aJwt() | jose.js:12:11:12:19 | UserToken | provenance | | +| jose.js:19:11:19:19 | UserToken | jose.js:22:20:22:28 | UserToken | provenance | | +| jose.js:19:11:19:19 | UserToken | jose.js:23:26:23:34 | UserToken | provenance | | +| jose.js:19:23:19:28 | aJwt() | jose.js:19:11:19:19 | UserToken | provenance | | +| jose.js:27:11:27:19 | UserToken | jose.js:30:26:30:34 | UserToken | provenance | | +| jose.js:27:23:27:28 | aJwt() | jose.js:27:11:27:19 | UserToken | provenance | | +| jwtDecode.js:13:11:13:19 | UserToken | jwtDecode.js:17:16:17:24 | UserToken | provenance | | +| jwtDecode.js:13:23:13:28 | aJwt() | jwtDecode.js:13:11:13:19 | UserToken | provenance | | +| jwtSimple.js:13:11:13:19 | UserToken | jwtSimple.js:16:23:16:31 | UserToken | provenance | | +| jwtSimple.js:13:23:13:28 | aJwt() | jwtSimple.js:13:11:13:19 | UserToken | provenance | | +| jwtSimple.js:20:11:20:19 | UserToken | jwtSimple.js:23:23:23:31 | UserToken | provenance | | +| jwtSimple.js:20:11:20:19 | UserToken | jwtSimple.js:24:23:24:31 | UserToken | provenance | | +| jwtSimple.js:20:23:20:28 | aJwt() | jwtSimple.js:20:11:20:19 | UserToken | provenance | | +| jwtSimple.js:28:11:28:19 | UserToken | jwtSimple.js:31:23:31:31 | UserToken | provenance | | +| jwtSimple.js:28:11:28:19 | UserToken | jwtSimple.js:32:23:32:31 | UserToken | provenance | | +| jwtSimple.js:28:23:28:28 | aJwt() | jwtSimple.js:28:11:28:19 | UserToken | provenance | | nodes -| JsonWebToken.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:13:11:13:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:16:28:16:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:20:11:20:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:20:11:20:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:20:23:20:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:23:28:23:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:24:28:24:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:28:11:28:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:28:11:28:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:28:23:28:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:31:28:31:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:35:11:35:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:35:11:35:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:35:23:35:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:38:28:38:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:39:28:39:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:43:11:43:28 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:43:11:43:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:43:23:43:28 | aJwt() | semmle.label | aJwt() | | JsonWebToken.js:46:28:46:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:47:28:47:36 | UserToken | semmle.label | UserToken | -| jose.js:12:11:12:28 | UserToken | semmle.label | UserToken | +| jose.js:12:11:12:19 | UserToken | semmle.label | UserToken | | jose.js:12:23:12:28 | aJwt() | semmle.label | aJwt() | | jose.js:15:20:15:28 | UserToken | semmle.label | UserToken | -| jose.js:19:11:19:28 | UserToken | semmle.label | UserToken | +| jose.js:19:11:19:19 | UserToken | semmle.label | UserToken | | jose.js:19:23:19:28 | aJwt() | semmle.label | aJwt() | | jose.js:22:20:22:28 | UserToken | semmle.label | UserToken | | jose.js:23:26:23:34 | UserToken | semmle.label | UserToken | -| jose.js:27:11:27:28 | UserToken | semmle.label | UserToken | +| jose.js:27:11:27:19 | UserToken | semmle.label | UserToken | | jose.js:27:23:27:28 | aJwt() | semmle.label | aJwt() | | jose.js:30:26:30:34 | UserToken | semmle.label | UserToken | -| jwtDecode.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| jwtDecode.js:13:11:13:19 | UserToken | semmle.label | UserToken | | jwtDecode.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | jwtDecode.js:17:16:17:24 | UserToken | semmle.label | UserToken | -| jwtSimple.js:13:11:13:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:13:11:13:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:13:23:13:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:16:23:16:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:20:11:20:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:20:11:20:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:20:23:20:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:23:23:23:31 | UserToken | semmle.label | UserToken | | jwtSimple.js:24:23:24:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:28:11:28:28 | UserToken | semmle.label | UserToken | +| jwtSimple.js:28:11:28:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:28:23:28:28 | aJwt() | semmle.label | aJwt() | | jwtSimple.js:31:23:31:31 | UserToken | semmle.label | UserToken | | jwtSimple.js:32:23:32:31 | UserToken | semmle.label | UserToken | diff --git a/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected b/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected index bb6ca940759..364fbd76b00 100644 --- a/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected +++ b/javascript/ql/test/experimental/Security/CWE-347/remotesource/decodeJwtWithoutVerification.expected @@ -1,50 +1,50 @@ edges -| JsonWebToken.js:10:11:10:47 | UserToken | JsonWebToken.js:13:28:13:36 | UserToken | provenance | | -| JsonWebToken.js:10:23:10:47 | req.hea ... ization | JsonWebToken.js:10:11:10:47 | UserToken | provenance | | -| JsonWebToken.js:17:11:17:47 | UserToken | JsonWebToken.js:20:28:20:36 | UserToken | provenance | | -| JsonWebToken.js:17:11:17:47 | UserToken | JsonWebToken.js:21:28:21:36 | UserToken | provenance | | -| JsonWebToken.js:17:23:17:47 | req.hea ... ization | JsonWebToken.js:17:11:17:47 | UserToken | provenance | | -| JsonWebToken.js:32:11:32:47 | UserToken | JsonWebToken.js:35:28:35:36 | UserToken | provenance | | -| JsonWebToken.js:32:23:32:47 | req.hea ... ization | JsonWebToken.js:32:11:32:47 | UserToken | provenance | | -| JsonWebToken.js:40:11:40:47 | UserToken | JsonWebToken.js:43:28:43:36 | UserToken | provenance | | -| JsonWebToken.js:40:23:40:47 | req.hea ... ization | JsonWebToken.js:40:11:40:47 | UserToken | provenance | | -| jose.js:11:11:11:47 | UserToken | jose.js:13:20:13:28 | UserToken | provenance | | -| jose.js:11:23:11:47 | req.hea ... ization | jose.js:11:11:11:47 | UserToken | provenance | | -| jose.js:24:11:24:47 | UserToken | jose.js:26:20:26:28 | UserToken | provenance | | -| jose.js:24:23:24:47 | req.hea ... ization | jose.js:24:11:24:47 | UserToken | provenance | | -| jwtDecode.js:11:11:11:47 | UserToken | jwtDecode.js:15:16:15:24 | UserToken | provenance | | -| jwtDecode.js:11:23:11:47 | req.hea ... ization | jwtDecode.js:11:11:11:47 | UserToken | provenance | | -| jwtSimple.js:10:11:10:47 | UserToken | jwtSimple.js:13:23:13:31 | UserToken | provenance | | -| jwtSimple.js:10:23:10:47 | req.hea ... ization | jwtSimple.js:10:11:10:47 | UserToken | provenance | | -| jwtSimple.js:25:11:25:47 | UserToken | jwtSimple.js:28:23:28:31 | UserToken | provenance | | -| jwtSimple.js:25:23:25:47 | req.hea ... ization | jwtSimple.js:25:11:25:47 | UserToken | provenance | | +| JsonWebToken.js:10:11:10:19 | UserToken | JsonWebToken.js:13:28:13:36 | UserToken | provenance | | +| JsonWebToken.js:10:23:10:47 | req.hea ... ization | JsonWebToken.js:10:11:10:19 | UserToken | provenance | | +| JsonWebToken.js:17:11:17:19 | UserToken | JsonWebToken.js:20:28:20:36 | UserToken | provenance | | +| JsonWebToken.js:17:11:17:19 | UserToken | JsonWebToken.js:21:28:21:36 | UserToken | provenance | | +| JsonWebToken.js:17:23:17:47 | req.hea ... ization | JsonWebToken.js:17:11:17:19 | UserToken | provenance | | +| JsonWebToken.js:32:11:32:19 | UserToken | JsonWebToken.js:35:28:35:36 | UserToken | provenance | | +| JsonWebToken.js:32:23:32:47 | req.hea ... ization | JsonWebToken.js:32:11:32:19 | UserToken | provenance | | +| JsonWebToken.js:40:11:40:19 | UserToken | JsonWebToken.js:43:28:43:36 | UserToken | provenance | | +| JsonWebToken.js:40:23:40:47 | req.hea ... ization | JsonWebToken.js:40:11:40:19 | UserToken | provenance | | +| jose.js:11:11:11:19 | UserToken | jose.js:13:20:13:28 | UserToken | provenance | | +| jose.js:11:23:11:47 | req.hea ... ization | jose.js:11:11:11:19 | UserToken | provenance | | +| jose.js:24:11:24:19 | UserToken | jose.js:26:20:26:28 | UserToken | provenance | | +| jose.js:24:23:24:47 | req.hea ... ization | jose.js:24:11:24:19 | UserToken | provenance | | +| jwtDecode.js:11:11:11:19 | UserToken | jwtDecode.js:15:16:15:24 | UserToken | provenance | | +| jwtDecode.js:11:23:11:47 | req.hea ... ization | jwtDecode.js:11:11:11:19 | UserToken | provenance | | +| jwtSimple.js:10:11:10:19 | UserToken | jwtSimple.js:13:23:13:31 | UserToken | provenance | | +| jwtSimple.js:10:23:10:47 | req.hea ... ization | jwtSimple.js:10:11:10:19 | UserToken | provenance | | +| jwtSimple.js:25:11:25:19 | UserToken | jwtSimple.js:28:23:28:31 | UserToken | provenance | | +| jwtSimple.js:25:23:25:47 | req.hea ... ization | jwtSimple.js:25:11:25:19 | UserToken | provenance | | nodes -| JsonWebToken.js:10:11:10:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:10:11:10:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:10:23:10:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:13:28:13:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:17:11:17:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:17:11:17:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:17:23:17:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:20:28:20:36 | UserToken | semmle.label | UserToken | | JsonWebToken.js:21:28:21:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:32:11:32:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:32:11:32:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:32:23:32:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:35:28:35:36 | UserToken | semmle.label | UserToken | -| JsonWebToken.js:40:11:40:47 | UserToken | semmle.label | UserToken | +| JsonWebToken.js:40:11:40:19 | UserToken | semmle.label | UserToken | | JsonWebToken.js:40:23:40:47 | req.hea ... ization | semmle.label | req.hea ... ization | | JsonWebToken.js:43:28:43:36 | UserToken | semmle.label | UserToken | -| jose.js:11:11:11:47 | UserToken | semmle.label | UserToken | +| jose.js:11:11:11:19 | UserToken | semmle.label | UserToken | | jose.js:11:23:11:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jose.js:13:20:13:28 | UserToken | semmle.label | UserToken | -| jose.js:24:11:24:47 | UserToken | semmle.label | UserToken | +| jose.js:24:11:24:19 | UserToken | semmle.label | UserToken | | jose.js:24:23:24:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jose.js:26:20:26:28 | UserToken | semmle.label | UserToken | -| jwtDecode.js:11:11:11:47 | UserToken | semmle.label | UserToken | +| jwtDecode.js:11:11:11:19 | UserToken | semmle.label | UserToken | | jwtDecode.js:11:23:11:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtDecode.js:15:16:15:24 | UserToken | semmle.label | UserToken | -| jwtSimple.js:10:11:10:47 | UserToken | semmle.label | UserToken | +| jwtSimple.js:10:11:10:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:10:23:10:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtSimple.js:13:23:13:31 | UserToken | semmle.label | UserToken | -| jwtSimple.js:25:11:25:47 | UserToken | semmle.label | UserToken | +| jwtSimple.js:25:11:25:19 | UserToken | semmle.label | UserToken | | jwtSimple.js:25:23:25:47 | req.hea ... ization | semmle.label | req.hea ... ization | | jwtSimple.js:28:23:28:31 | UserToken | semmle.label | UserToken | subpaths diff --git a/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected b/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected index da02dc24848..8a0dabd4c59 100644 --- a/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected +++ b/javascript/ql/test/experimental/Security/CWE-918/SSRF.expected @@ -1,6 +1,6 @@ edges -| check-domain.js:16:9:16:27 | url | check-domain.js:17:13:17:15 | url | provenance | | -| check-domain.js:16:15:16:27 | req.query.url | check-domain.js:16:9:16:27 | url | provenance | | +| check-domain.js:16:9:16:11 | url | check-domain.js:17:13:17:15 | url | provenance | | +| check-domain.js:16:15:16:27 | req.query.url | check-domain.js:16:9:16:11 | url | provenance | | | check-middleware.js:9:27:9:43 | req.query.tainted | check-middleware.js:9:13:9:43 | "test.c ... tainted | provenance | | | check-path.js:19:27:19:43 | req.query.tainted | check-path.js:19:13:19:43 | 'test.c ... tainted | provenance | | | check-path.js:23:27:23:43 | req.query.tainted | check-path.js:23:13:23:45 | `/addre ... inted}` | provenance | | @@ -16,13 +16,13 @@ edges | check-validator.js:15:29:15:45 | req.query.tainted | check-validator.js:15:15:15:45 | "test.c ... tainted | provenance | | | check-validator.js:27:29:27:45 | req.query.tainted | check-validator.js:27:15:27:45 | "test.c ... tainted | provenance | | | check-validator.js:50:29:50:45 | req.query.tainted | check-validator.js:50:15:50:45 | "test.c ... tainted | provenance | | -| check-validator.js:54:9:54:37 | numberURL | check-validator.js:62:29:62:37 | numberURL | provenance | | -| check-validator.js:54:21:54:37 | req.query.tainted | check-validator.js:54:9:54:37 | numberURL | provenance | | +| check-validator.js:54:9:54:17 | numberURL | check-validator.js:62:29:62:37 | numberURL | provenance | | +| check-validator.js:54:21:54:37 | req.query.tainted | check-validator.js:54:9:54:17 | numberURL | provenance | | | check-validator.js:59:29:59:45 | req.query.tainted | check-validator.js:59:15:59:45 | "test.c ... tainted | provenance | | | check-validator.js:62:29:62:37 | numberURL | check-validator.js:62:15:62:37 | "test.c ... mberURL | provenance | | | check-validator.js:68:29:68:45 | req.query.tainted | check-validator.js:68:15:68:45 | "test.c ... tainted | provenance | | nodes -| check-domain.js:16:9:16:27 | url | semmle.label | url | +| check-domain.js:16:9:16:11 | url | semmle.label | url | | check-domain.js:16:15:16:27 | req.query.url | semmle.label | req.query.url | | check-domain.js:17:13:17:15 | url | semmle.label | url | | check-domain.js:26:15:26:27 | req.query.url | semmle.label | req.query.url | @@ -56,7 +56,7 @@ nodes | check-validator.js:27:29:27:45 | req.query.tainted | semmle.label | req.query.tainted | | check-validator.js:50:15:50:45 | "test.c ... tainted | semmle.label | "test.c ... tainted | | check-validator.js:50:29:50:45 | req.query.tainted | semmle.label | req.query.tainted | -| check-validator.js:54:9:54:37 | numberURL | semmle.label | numberURL | +| check-validator.js:54:9:54:17 | numberURL | semmle.label | numberURL | | check-validator.js:54:21:54:37 | req.query.tainted | semmle.label | req.query.tainted | | check-validator.js:59:15:59:45 | "test.c ... tainted | semmle.label | "test.c ... tainted | | check-validator.js:59:29:59:45 | req.query.tainted | semmle.label | req.query.tainted | diff --git a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected b/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected deleted file mode 100644 index 6c28b7105a1..00000000000 --- a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.expected +++ /dev/null @@ -1,34 +0,0 @@ -edges -| apollo-test.js:8:9:8:59 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | -| apollo-test.js:8:9:8:59 | user_origin | apollo-test.js:26:25:26:35 | user_origin | provenance | | -| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:59 | user_origin | provenance | | -| apollo-test.js:8:23:8:46 | url.par ... , true) | apollo-test.js:8:9:8:59 | user_origin | provenance | | -| apollo-test.js:8:33:8:39 | req.url | apollo-test.js:8:23:8:46 | url.par ... , true) | provenance | | -| apollo-test.js:8:42:8:45 | true | apollo-test.js:8:23:8:46 | url.par ... , true) | provenance | | -| express-test.js:10:9:10:59 | user_origin | express-test.js:33:17:33:27 | user_origin | provenance | | -| express-test.js:10:23:10:46 | url.par ... , true) | express-test.js:10:9:10:59 | user_origin | provenance | | -| express-test.js:10:33:10:39 | req.url | express-test.js:10:23:10:46 | url.par ... , true) | provenance | | -nodes -| apollo-test.js:8:9:8:59 | user_origin | semmle.label | user_origin | -| apollo-test.js:8:9:8:59 | user_origin | semmle.label | user_origin | -| apollo-test.js:8:23:8:46 | url.par ... , true) | semmle.label | url.par ... , true) | -| apollo-test.js:8:23:8:46 | url.par ... , true) | semmle.label | url.par ... , true) | -| apollo-test.js:8:33:8:39 | req.url | semmle.label | req.url | -| apollo-test.js:8:42:8:45 | true | semmle.label | true | -| apollo-test.js:11:25:11:28 | true | semmle.label | true | -| apollo-test.js:21:25:21:28 | null | semmle.label | null | -| apollo-test.js:26:25:26:35 | user_origin | semmle.label | user_origin | -| apollo-test.js:26:25:26:35 | user_origin | semmle.label | user_origin | -| express-test.js:10:9:10:59 | user_origin | semmle.label | user_origin | -| express-test.js:10:23:10:46 | url.par ... , true) | semmle.label | url.par ... , true) | -| express-test.js:10:33:10:39 | req.url | semmle.label | req.url | -| express-test.js:26:17:26:19 | '*' | semmle.label | '*' | -| express-test.js:33:17:33:27 | user_origin | semmle.label | user_origin | -subpaths -#select -| apollo-test.js:11:25:11:28 | true | apollo-test.js:11:25:11:28 | true | apollo-test.js:11:25:11:28 | true | CORS Origin misconfiguration due to a $@. | apollo-test.js:11:25:11:28 | true | too permissive or user controlled value | -| apollo-test.js:21:25:21:28 | null | apollo-test.js:21:25:21:28 | null | apollo-test.js:21:25:21:28 | null | CORS Origin misconfiguration due to a $@. | apollo-test.js:21:25:21:28 | null | too permissive or user controlled value | -| apollo-test.js:26:25:26:35 | user_origin | apollo-test.js:8:33:8:39 | req.url | apollo-test.js:26:25:26:35 | user_origin | CORS Origin misconfiguration due to a $@. | apollo-test.js:8:33:8:39 | req.url | too permissive or user controlled value | -| apollo-test.js:26:25:26:35 | user_origin | apollo-test.js:8:42:8:45 | true | apollo-test.js:26:25:26:35 | user_origin | CORS Origin misconfiguration due to a $@. | apollo-test.js:8:42:8:45 | true | too permissive or user controlled value | -| express-test.js:26:17:26:19 | '*' | express-test.js:26:17:26:19 | '*' | express-test.js:26:17:26:19 | '*' | CORS Origin misconfiguration due to a $@. | express-test.js:26:17:26:19 | '*' | too permissive or user controlled value | -| express-test.js:33:17:33:27 | user_origin | express-test.js:10:33:10:39 | req.url | express-test.js:33:17:33:27 | user_origin | CORS Origin misconfiguration due to a $@. | express-test.js:10:33:10:39 | req.url | too permissive or user controlled value | diff --git a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.qlref b/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.qlref deleted file mode 100644 index 1e6a39679c0..00000000000 --- a/javascript/ql/test/experimental/Security/CWE-942/CorsPermissiveConfiguration.qlref +++ /dev/null @@ -1 +0,0 @@ -./experimental/Security/CWE-942/CorsPermissiveConfiguration.ql \ No newline at end of file diff --git a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected index 8185f693b22..1192c8ec8fb 100644 --- a/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected +++ b/javascript/ql/test/library-tests/CallGraphs/FullTest/tests.expected @@ -50,15 +50,15 @@ test_getAFunctionValue | c.js:2:8:2:24 | function bar() {} | c.js:2:8:2:24 | function bar() {} | | classes.js:1:1:19:2 | (functi ... o();\\n}) | classes.js:1:2:19:1 | functio ... lo();\\n} | | classes.js:1:2:19:1 | functio ... lo();\\n} | classes.js:1:2:19:1 | functio ... lo();\\n} | -| classes.js:2:3:10:3 | A | classes.js:2:11:2:10 | () {} | | classes.js:2:3:10:3 | class A ... }\\n } | classes.js:2:11:2:10 | () {} | +| classes.js:2:9:2:9 | A | classes.js:2:11:2:10 | () {} | | classes.js:2:11:2:10 | () {} | classes.js:2:11:2:10 | () {} | | classes.js:3:10:5:5 | () {\\n ... ;\\n } | classes.js:3:10:5:5 | () {\\n ... ;\\n } | | classes.js:7:6:9:5 | () {\\n ... ;\\n } | classes.js:7:6:9:5 | () {\\n ... ;\\n } | | classes.js:8:7:8:16 | this.hello | classes.js:3:10:5:5 | () {\\n ... ;\\n } | | classes.js:8:7:8:16 | this.hello | classes.js:13:10:15:5 | () {\\n ... ;\\n } | -| classes.js:12:3:16:3 | B | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:12:3:16:3 | class B ... }\\n } | classes.js:12:21:12:20 | (...arg ... rgs); } | +| classes.js:12:9:12:9 | B | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:12:19:12:19 | A | classes.js:2:11:2:10 | () {} | | classes.js:12:21:12:20 | (...arg ... rgs); } | classes.js:12:21:12:20 | (...arg ... rgs); } | | classes.js:13:10:15:5 | () {\\n ... ;\\n } | classes.js:13:10:15:5 | () {\\n ... ;\\n } | @@ -146,9 +146,9 @@ test_getAFunctionValue | tst.js:11:1:20:1 | functio ... \\tf();\\n} | tst.js:11:1:20:1 | functio ... \\tf();\\n} | | tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | | tst.js:11:12:11:12 | m | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:6 | m | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:27 | n | tst.js:2:9:2:21 | function() {} | -| tst.js:12:6:12:27 | n | tst.js:12:15:12:27 | function() {} | +| tst.js:12:6:12:6 | n | tst.js:2:9:2:21 | function() {} | +| tst.js:12:6:12:6 | n | tst.js:12:15:12:27 | function() {} | +| tst.js:12:6:12:27 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | | tst.js:12:10:12:10 | m | tst.js:2:9:2:21 | function() {} | diff --git a/javascript/ql/test/library-tests/DataFlow/tests.expected b/javascript/ql/test/library-tests/DataFlow/tests.expected index 26ba8c46a99..7ba6cbb60f3 100644 --- a/javascript/ql/test/library-tests/DataFlow/tests.expected +++ b/javascript/ql/test/library-tests/DataFlow/tests.expected @@ -19,8 +19,8 @@ basicBlock | arguments.js:1:2:12:1 | exceptional return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:1:0 | entry node of | | arguments.js:1:2:12:1 | return of anonymous function | arguments.js:1:2:1:1 | entry node of functio ... , 3);\\n} | +| arguments.js:2:5:2:4 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:2:4 | this | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:2:5:2:5 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | [function self-reference] functio ... ;\\n } | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:2:5:10:5 | exceptional return of function f | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -44,7 +44,7 @@ basicBlock | arguments.js:5:25:5:36 | arguments[1] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:5:35:5:35 | 1 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:13:6:16 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:6:13:6:28 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | +| arguments.js:6:13:6:16 | args | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:13:6:28 | args = arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:6:20:6:28 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:7:13:7:20 | thirdArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -53,7 +53,7 @@ basicBlock | arguments.js:7:24:7:30 | args[2] | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:7:29:7:29 | 2 | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:9:8:17 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | -| arguments.js:8:9:8:22 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | +| arguments.js:8:9:8:17 | arguments | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:9:8:22 | arguments = {} | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:8:21:8:22 | {} | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | | arguments.js:9:13:9:23 | notFirstArg | arguments.js:2:5:2:4 | entry node of functio ... ;\\n } | @@ -75,7 +75,7 @@ basicBlock | eval.js:1:1:5:1 | return of function k | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:1:10:1:10 | k | eval.js:1:1:1:0 | entry node of | | eval.js:2:7:2:7 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | -| eval.js:2:7:2:12 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | +| eval.js:2:7:2:7 | x | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:2:7:2:12 | x = 42 | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:2:11:2:12 | 42 | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | | eval.js:3:3:3:6 | eval | eval.js:1:1:1:0 | entry node of functio ... eval`\\n} | @@ -122,23 +122,23 @@ basicBlock | sources.js:10:12:10:14 | key | sources.js:10:8:10:14 | let key | | sources.js:10:19:10:23 | array | sources.js:9:1:9:0 | entry node of functio ... ey; }\\n} | | sources.js:10:28:10:30 | key | sources.js:10:8:10:14 | let key | -| sources.js:11:12:11:18 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:12:11:18 | { key } | sources.js:11:8:11:18 | let { key } | | sources.js:11:12:11:18 | { key } | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | +| sources.js:11:14:11:16 | key | sources.js:11:8:11:18 | let { key } | | sources.js:11:23:11:27 | array | sources.js:11:23:11:27 | array | | sources.js:11:32:11:34 | key | sources.js:11:8:11:18 | let { key } | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:1:1:0 | this | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:1:8:5:1 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | +| tst2.ts:1:18:1:18 | A | tst2.ts:1:1:1:0 | entry node of | +| tst2.ts:2:14:2:14 | x | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:14:2:14 | x | tst2.ts:1:1:1:0 | entry node of | -| tst2.ts:2:14:2:19 | x | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:14:2:19 | x = 42 | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:2:18:2:19 | 42 | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:3:3:3:6 | setX | tst2.ts:1:1:1:0 | entry node of | @@ -190,17 +190,17 @@ basicBlock | tst2.ts:15:11:15:30 | A.x satisfies number | tst2.ts:1:1:1:0 | entry node of | | tst2.ts:15:13:15:13 | x | tst2.ts:1:1:1:0 | entry node of | | tst.js:1:1:1:0 | this | tst.js:1:1:1:0 | entry node of | -| tst.js:1:1:1:1 | x | tst.js:1:1:1:0 | entry node of | +| tst.js:1:1:1:0 | x | tst.js:1:1:1:0 | entry node of | | tst.js:1:1:1:24 | import ... m 'fs'; | tst.js:1:1:1:0 | entry node of | | tst.js:1:10:1:11 | fs | tst.js:1:1:1:0 | entry node of | | tst.js:1:10:1:11 | fs | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | -| tst.js:3:5:3:10 | x | tst.js:1:1:1:0 | entry node of | +| tst.js:3:5:3:5 | x | tst.js:1:1:1:0 | entry node of | | tst.js:3:5:3:10 | x = 42 | tst.js:1:1:1:0 | entry node of | | tst.js:3:9:3:10 | 42 | tst.js:1:1:1:0 | entry node of | | tst.js:4:5:4:5 | y | tst.js:1:1:1:0 | entry node of | -| tst.js:4:5:4:12 | y | tst.js:1:1:1:0 | entry node of | +| tst.js:4:5:4:5 | y | tst.js:1:1:1:0 | entry node of | | tst.js:4:5:4:12 | y = "hi" | tst.js:1:1:1:0 | entry node of | | tst.js:4:9:4:12 | "hi" | tst.js:1:1:1:0 | entry node of | | tst.js:5:5:5:5 | z | tst.js:1:1:1:0 | entry node of | @@ -220,13 +220,13 @@ basicBlock | tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | guard: x is false | | tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | guard: x is true | | tst.js:12:1:12:1 | x | tst.js:12:1:12:7 | x \|\| y; | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:7 | x \|\| y; | | tst.js:12:1:12:6 | x \|\| y | tst.js:12:1:12:7 | x \|\| y; | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:7 | x \|\| y; | | tst.js:12:6:12:6 | y | tst.js:12:1:12:1 | guard: x is false | -| tst.js:13:1:13:1 | x | tst.js:13:1:13:6 | z = y; | | tst.js:13:1:13:1 | z | tst.js:13:1:13:6 | z = y; | -| tst.js:13:1:13:5 | z | tst.js:13:1:13:6 | z = y; | +| tst.js:13:1:13:1 | z | tst.js:13:1:13:6 | z = y; | | tst.js:13:1:13:5 | z = y | tst.js:13:1:13:6 | z = y; | +| tst.js:13:1:13:6 | x | tst.js:13:1:13:6 | z = y; | | tst.js:13:5:13:5 | y | tst.js:13:1:13:6 | z = y; | | tst.js:14:1:14:1 | z | tst.js:13:1:13:6 | z = y; | | tst.js:14:1:14:9 | z ? x : y | tst.js:13:1:13:6 | z = y; | @@ -254,16 +254,16 @@ basicBlock | tst.js:19:10:19:11 | "" | tst.js:17:7:17:25 | guard: Math.random() > 0.5 is false | | tst.js:20:4:20:8 | "arg" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:5:22:20 | { readFileSync } | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:22:5:22:25 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:5:22:25 | { readF ... } = fs | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:22:7:22:18 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:22:24:22:25 | fs | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:23:1:23:12 | readFileSync | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:25:1:25:3 | ++x | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:25:1:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:25:3:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:25:3:25:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:26:1:26:1 | x | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -290,7 +290,7 @@ basicBlock | tst.js:35:1:35:7 | g(true) | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:35:3:35:6 | true | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:5:37:5 | o | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:37:5:42:1 | o | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:37:5:37:5 | o | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:5:42:1 | o = {\\n ... ;\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:38:3:38:3 | x | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -318,9 +318,9 @@ basicBlock | tst.js:46:1:46:11 | global = "" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:46:10:46:11 | "" | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:47:1:47:6 | global | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:49:1:54:1 | A | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:7:49:7 | A | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:49:7:49:7 | A | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:49:17:49:17 | B | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:50:3:50:13 | constructor | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:50:3:53:3 | constru ... et`\\n } | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -365,7 +365,7 @@ basicBlock | tst.js:66:7:66:25 | tmp = function.sent | tst.js:64:1:64:0 | entry node of functio ... lysed\\n} | | tst.js:66:13:66:25 | function.sent | tst.js:64:1:64:0 | entry node of functio ... lysed\\n} | | tst.js:68:5:68:8 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | -| tst.js:68:5:68:14 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | +| tst.js:68:5:68:8 | iter | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:5:68:14 | iter = h() | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:12:68:12 | h | tst.js:16:1:20:10 | (functi ... "arg"); | | tst.js:68:12:68:14 | exceptional return of h() | tst.js:16:1:20:10 | (functi ... "arg"); | @@ -424,33 +424,33 @@ basicBlock | tst.js:87:2:92:1 | exceptional return of anonymous function | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:85:5:85:28 | vs2 = ( ... o) v ) | | tst.js:87:2:92:1 | return of anonymous function | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:87:11:87:24 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:87:11:87:24 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:11:87:24 | { p: x, ...o } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:13 | p | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:16 | p: x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:13:87:16 | p: x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:16:87:16 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:87:16:87:16 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:22:87:22 | ...o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:87:22:87:22 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:87:22:87:22 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:7:88:14 | { q: y } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:88:7:88:18 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:7:88:18 | { q: y } = o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:9 | q | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:12 | q: y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:9:88:12 | q: y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:12:88:12 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:88:12:88:12 | y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:88:18:88:18 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:89:7:89:7 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:89:7:89:7 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:3:90:16 | ({ r: z } = o) | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:4:90:11 | { r: z } | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | -| tst.js:90:4:90:15 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:4:90:15 | { r: z } = o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:6 | r | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:9 | r: z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:6:90:9 | r: z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:9:90:9 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | +| tst.js:90:9:90:9 | z | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:90:15:90:15 | o | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:91:10:91:10 | x | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | | tst.js:91:10:91:14 | x + y | tst.js:87:2:87:1 | entry node of functio ... + z;\\n} | @@ -479,15 +479,15 @@ basicBlock | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:85:5:85:28 | vs2 = ( ... o) v ) | | tst.js:98:2:103:1 | return of anonymous function | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:11:98:24 | [ x, ...rest ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:98:11:98:24 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:98:11:98:24 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:13:98:13 | x | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:19:98:22 | ...rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:98:19:98:22 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:98:19:98:22 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:7:99:11 | [ y ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:7:99:18 | [ y ] = rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:99:7:99:18 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:9:99:9 | y | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:99:15:99:18 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | @@ -495,7 +495,7 @@ basicBlock | tst.js:100:7:100:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:3:101:9 | [ , z ] | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:3:101:16 | [ , z ] = rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | -| tst.js:101:3:101:16 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | +| tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:7:101:7 | z | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | | tst.js:101:13:101:16 | rest | tst.js:98:2:98:1 | entry node of functio ... + z;\\n} | @@ -521,14 +521,13 @@ basicBlock | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:3 | (functi ... 2c;\\n}); | | tst.js:107:2:113:1 | return of anonymous function | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:6:108:32 | {v1a, v ... = o1c} | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:108:6:108:38 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:6:108:38 | {v1a, v ... } = o1d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:7:108:9 | v1a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:14 | v1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:12:108:20 | v1b = o1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -536,6 +535,7 @@ basicBlock | tst.js:108:18:108:20 | o1b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:108:23:108:25 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:31 | v1c = o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:23:108:31 | v1c = o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:108:29:108:31 | o1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -547,16 +547,16 @@ basicBlock | tst.js:109:14:109:16 | v1c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:6:111:32 | [v2a, v ... = o2c] | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:6:111:38 | [v2a, v ... ] = o2d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | -| tst.js:111:6:111:38 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:7:111:9 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:12:111:14 | v2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:18:111:20 | o2b | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | +| tst.js:111:23:111:25 | v2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:29:111:31 | o2c | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:111:36:111:38 | o2d | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | | tst.js:112:2:112:4 | v2a | tst.js:107:2:107:1 | entry node of functio ... v2c;\\n} | @@ -946,9 +946,9 @@ enclosingExpr | tst.js:117:22:117:23 | x1 | tst.js:117:22:117:23 | x1 | flowStep | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:12:2 | (functi ... 3);\\n}) | -| arguments.js:2:5:2:5 | arguments | arguments.js:4:28:4:36 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:5:25:5:33 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:6:20:6:28 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:4:28:4:36 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:5:25:5:33 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:6:20:6:28 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:4:28:4:36 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:5:25:5:33 | arguments | | arguments.js:2:5:10:5 | 'arguments' object of function f | arguments.js:6:20:6:28 | arguments | @@ -958,13 +958,13 @@ flowStep | arguments.js:2:14:2:14 | f | arguments.js:11:5:11:5 | f | | arguments.js:2:16:2:16 | x | arguments.js:2:16:2:16 | x | | arguments.js:2:16:2:16 | x | arguments.js:3:24:3:24 | x | -| arguments.js:6:13:6:28 | args | arguments.js:7:24:7:27 | args | -| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:28 | args | -| arguments.js:8:9:8:22 | arguments | arguments.js:9:27:9:35 | arguments | -| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments | +| arguments.js:6:13:6:16 | args | arguments.js:7:24:7:27 | args | +| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:16 | args | +| arguments.js:8:9:8:17 | arguments | arguments.js:9:27:9:35 | arguments | +| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:17 | arguments | | arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments = {} | -| eval.js:2:7:2:12 | x | eval.js:4:3:4:3 | x | -| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:12 | x | +| eval.js:2:7:2:7 | x | eval.js:4:3:4:3 | x | +| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:7 | x | | sources.js:1:6:1:6 | x | sources.js:1:6:1:6 | x | | sources.js:1:6:1:6 | x | sources.js:1:11:1:11 | x | | sources.js:1:6:1:11 | x => x | sources.js:1:5:1:12 | (x => x) | @@ -980,17 +980,17 @@ flowStep | sources.js:9:14:9:18 | array | sources.js:10:19:10:23 | array | | sources.js:9:14:9:18 | array | sources.js:11:23:11:27 | array | | sources.js:10:12:10:14 | key | sources.js:10:28:10:30 | key | -| sources.js:11:12:11:18 | key | sources.js:11:32:11:34 | key | -| sources.js:11:14:11:16 | key | sources.js:11:12:11:18 | key | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:11:11:11:11 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:15:11:15:11 | A | -| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:8:5:1 | A | +| sources.js:11:14:11:16 | key | sources.js:11:14:11:16 | key | +| sources.js:11:14:11:16 | key | sources.js:11:32:11:34 | key | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:1:18:1:18 | A | | tst2.ts:1:18:1:18 | A | tst2.ts:7:1:7:0 | A | -| tst2.ts:2:14:2:19 | x | tst2.ts:4:3:4:3 | x | -| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:19 | x | +| tst2.ts:1:18:1:18 | A | tst2.ts:11:11:11:11 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:15:11:15:11 | A | +| tst2.ts:2:14:2:14 | x | tst2.ts:4:3:4:3 | x | +| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:14 | x | | tst2.ts:7:1:7:0 | A | tst2.ts:8:3:8:3 | A | | tst2.ts:7:1:9:1 | functio ... = 23;\\n} | tst2.ts:7:10:7:13 | setX | | tst2.ts:7:10:7:13 | setX | tst2.ts:3:3:3:6 | setX | @@ -1001,43 +1001,43 @@ flowStep | tst2.ts:13:39:13:38 | args | tst2.ts:13:39:13:38 | args | | tst2.ts:13:39:13:38 | this | tst2.ts:13:39:13:38 | implicit 'this' | | tst2.ts:15:11:15:13 | A.x | tst2.ts:15:11:15:30 | A.x satisfies number | -| tst.js:1:1:1:1 | x | tst.js:3:5:3:5 | x | +| tst.js:1:1:1:0 | x | tst.js:3:5:3:5 | x | | tst.js:1:10:1:11 | fs | tst.js:1:10:1:11 | fs | | tst.js:1:10:1:11 | fs | tst.js:7:1:7:2 | fs | | tst.js:1:10:1:11 | fs | tst.js:22:24:22:25 | fs | +| tst.js:3:5:3:5 | x | tst.js:3:5:3:5 | x | +| tst.js:3:5:3:5 | x | tst.js:8:1:8:1 | x | +| tst.js:3:5:3:5 | x | tst.js:9:2:9:2 | x | +| tst.js:3:5:3:5 | x | tst.js:10:1:10:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | | tst.js:3:5:3:5 | x | tst.js:28:2:28:1 | x | | tst.js:3:5:3:5 | x | tst.js:32:1:32:0 | x | -| tst.js:3:5:3:10 | x | tst.js:3:5:3:5 | x | -| tst.js:3:5:3:10 | x | tst.js:8:1:8:1 | x | -| tst.js:3:5:3:10 | x | tst.js:9:2:9:2 | x | -| tst.js:3:5:3:10 | x | tst.js:10:1:10:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:10 | x | -| tst.js:4:5:4:12 | y | tst.js:10:4:10:4 | y | -| tst.js:4:5:4:12 | y | tst.js:11:6:11:6 | y | -| tst.js:4:5:4:12 | y | tst.js:12:6:12:6 | y | -| tst.js:4:5:4:12 | y | tst.js:13:5:13:5 | y | -| tst.js:4:5:4:12 | y | tst.js:14:9:14:9 | y | -| tst.js:4:5:4:12 | y | tst.js:105:6:105:6 | y | -| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:12 | y | +| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:5 | x | +| tst.js:4:5:4:5 | y | tst.js:10:4:10:4 | y | +| tst.js:4:5:4:5 | y | tst.js:11:6:11:6 | y | +| tst.js:4:5:4:5 | y | tst.js:12:6:12:6 | y | +| tst.js:4:5:4:5 | y | tst.js:13:5:13:5 | y | +| tst.js:4:5:4:5 | y | tst.js:14:9:14:9 | y | +| tst.js:4:5:4:5 | y | tst.js:105:6:105:6 | y | +| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:5 | y | | tst.js:9:2:9:2 | x | tst.js:9:1:9:3 | (x) | | tst.js:10:4:10:4 | y | tst.js:10:1:10:4 | x, y | -| tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | -| tst.js:11:1:11:1 | x | tst.js:12:1:12:1 | x | +| tst.js:11:1:11:1 | x | tst.js:12:1:12:7 | x | +| tst.js:11:1:11:1 | x | tst.js:12:1:12:7 | x | | tst.js:11:6:11:6 | y | tst.js:11:1:11:6 | x && y | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | | tst.js:12:1:12:1 | x | tst.js:12:1:12:6 | x \|\| y | -| tst.js:12:1:12:1 | x | tst.js:13:1:13:1 | x | -| tst.js:12:1:12:1 | x | tst.js:13:1:13:1 | x | +| tst.js:12:1:12:1 | x | tst.js:13:1:13:6 | x | +| tst.js:12:1:12:1 | x | tst.js:13:1:13:6 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | | tst.js:12:6:12:6 | y | tst.js:12:1:12:6 | x \|\| y | -| tst.js:13:1:13:1 | x | tst.js:14:5:14:5 | x | -| tst.js:13:1:13:1 | x | tst.js:25:3:25:3 | x | -| tst.js:13:1:13:5 | z | tst.js:14:1:14:1 | z | -| tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z | +| tst.js:13:1:13:1 | z | tst.js:14:1:14:1 | z | +| tst.js:13:1:13:6 | x | tst.js:14:5:14:5 | x | +| tst.js:13:1:13:6 | x | tst.js:25:3:25:3 | x | +| tst.js:13:5:13:5 | y | tst.js:13:1:13:1 | z | | tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z = y | | tst.js:14:5:14:5 | x | tst.js:14:1:14:9 | z ? x : y | | tst.js:14:9:14:9 | y | tst.js:14:1:14:9 | z ? x : y | @@ -1049,14 +1049,14 @@ flowStep | tst.js:19:10:19:11 | "" | tst.js:16:1:20:9 | (functi ... ("arg") | | tst.js:19:10:19:11 | "" | tst.js:16:2:20:1 | return of function f | | tst.js:20:4:20:8 | "arg" | tst.js:16:13:16:13 | a | -| tst.js:22:5:22:25 | readFileSync | tst.js:23:1:23:12 | readFileSync | -| tst.js:22:7:22:18 | readFileSync | tst.js:22:5:22:25 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:22:7:22:18 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:23:1:23:12 | readFileSync | | tst.js:22:24:22:25 | fs | tst.js:22:5:22:20 | { readFileSync } | -| tst.js:25:1:25:3 | x | tst.js:3:5:3:5 | x | -| tst.js:25:1:25:3 | x | tst.js:26:1:26:1 | x | -| tst.js:25:1:25:3 | x | tst.js:57:7:57:7 | x | -| tst.js:25:1:25:3 | x | tst.js:58:11:58:11 | x | -| tst.js:25:1:25:3 | x | tst.js:105:1:105:1 | x | +| tst.js:25:3:25:3 | x | tst.js:3:5:3:5 | x | +| tst.js:25:3:25:3 | x | tst.js:26:1:26:1 | x | +| tst.js:25:3:25:3 | x | tst.js:57:7:57:7 | x | +| tst.js:25:3:25:3 | x | tst.js:58:11:58:11 | x | +| tst.js:25:3:25:3 | x | tst.js:105:1:105:1 | x | | tst.js:28:2:28:1 | x | tst.js:29:3:29:3 | x | | tst.js:28:2:29:3 | () =>\\n x | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | | tst.js:29:3:29:3 | x | tst.js:28:1:30:3 | (() =>\\n ... les\\n)() | @@ -1067,56 +1067,56 @@ flowStep | tst.js:32:10:32:10 | g | tst.js:60:1:60:1 | g | | tst.js:32:10:32:10 | g | tst.js:62:4:62:4 | g | | tst.js:33:10:33:10 | x | tst.js:32:1:34:1 | return of function g | -| tst.js:37:5:42:1 | o | tst.js:43:1:43:1 | o | -| tst.js:37:5:42:1 | o | tst.js:44:1:44:1 | o | -| tst.js:37:5:42:1 | o | tst.js:61:3:61:3 | o | -| tst.js:37:5:42:1 | o | tst.js:62:1:62:1 | o | -| tst.js:37:5:42:1 | o | tst.js:77:15:77:15 | o | -| tst.js:37:5:42:1 | o | tst.js:80:15:80:15 | o | -| tst.js:37:5:42:1 | o | tst.js:83:23:83:23 | o | -| tst.js:37:5:42:1 | o | tst.js:85:23:85:23 | o | -| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:42:1 | o | +| tst.js:37:5:37:5 | o | tst.js:43:1:43:1 | o | +| tst.js:37:5:37:5 | o | tst.js:44:1:44:1 | o | +| tst.js:37:5:37:5 | o | tst.js:61:3:61:3 | o | +| tst.js:37:5:37:5 | o | tst.js:62:1:62:1 | o | +| tst.js:37:5:37:5 | o | tst.js:77:15:77:15 | o | +| tst.js:37:5:37:5 | o | tst.js:80:15:80:15 | o | +| tst.js:37:5:37:5 | o | tst.js:83:23:83:23 | o | +| tst.js:37:5:37:5 | o | tst.js:85:23:85:23 | o | +| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:37:5 | o | | tst.js:39:4:39:3 | this | tst.js:40:5:40:8 | this | | tst.js:46:10:46:11 | "" | tst.js:46:1:46:11 | global = "" | -| tst.js:49:1:54:1 | A | tst.js:55:1:55:1 | A | -| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:1:54:1 | A | +| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:7:49:7 | A | +| tst.js:49:7:49:7 | A | tst.js:55:1:55:1 | A | | tst.js:50:14:50:13 | this | tst.js:51:5:51:9 | implicit 'this' | | tst.js:64:1:67:1 | functio ... lysed\\n} | tst.js:64:11:64:11 | h | | tst.js:64:11:64:11 | h | tst.js:68:12:68:12 | h | -| tst.js:68:5:68:14 | iter | tst.js:69:1:69:4 | iter | -| tst.js:68:12:68:14 | h() | tst.js:68:5:68:14 | iter | +| tst.js:68:5:68:8 | iter | tst.js:69:1:69:4 | iter | +| tst.js:68:12:68:14 | h() | tst.js:68:5:68:8 | iter | | tst.js:77:10:77:10 | i | tst.js:78:3:78:3 | i | | tst.js:80:10:80:10 | v | tst.js:81:3:81:3 | v | | tst.js:83:18:83:18 | v | tst.js:83:26:83:26 | v | | tst.js:85:18:85:18 | v | tst.js:85:26:85:26 | v | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:87:1:92:2 | (functi ... + z;\\n}) | -| tst.js:87:11:87:24 | o | tst.js:88:18:88:18 | o | -| tst.js:87:11:87:24 | o | tst.js:90:15:90:15 | o | -| tst.js:87:11:87:24 | x | tst.js:91:10:91:10 | x | -| tst.js:87:13:87:16 | p: x | tst.js:87:11:87:24 | x | -| tst.js:87:22:87:22 | ...o | tst.js:87:11:87:24 | o | -| tst.js:88:7:88:18 | y | tst.js:91:14:91:14 | y | -| tst.js:88:9:88:12 | q: y | tst.js:88:7:88:18 | y | +| tst.js:87:13:87:16 | p: x | tst.js:87:16:87:16 | x | +| tst.js:87:16:87:16 | x | tst.js:91:10:91:10 | x | +| tst.js:87:22:87:22 | ...o | tst.js:87:22:87:22 | o | +| tst.js:87:22:87:22 | o | tst.js:88:18:88:18 | o | +| tst.js:87:22:87:22 | o | tst.js:90:15:90:15 | o | +| tst.js:88:9:88:12 | q: y | tst.js:88:12:88:12 | y | +| tst.js:88:12:88:12 | y | tst.js:91:14:91:14 | y | | tst.js:88:18:88:18 | o | tst.js:88:7:88:14 | { q: y } | -| tst.js:90:4:90:15 | z | tst.js:91:18:91:18 | z | | tst.js:90:4:90:15 | { r: z } = o | tst.js:90:3:90:16 | ({ r: z } = o) | -| tst.js:90:6:90:9 | r: z | tst.js:90:4:90:15 | z | +| tst.js:90:6:90:9 | r: z | tst.js:90:9:90:9 | z | +| tst.js:90:9:90:9 | z | tst.js:91:18:91:18 | z | | tst.js:90:15:90:15 | o | tst.js:90:4:90:11 | { r: z } | | tst.js:90:15:90:15 | o | tst.js:90:4:90:15 | { r: z } = o | | tst.js:91:10:91:18 | x + y + z | tst.js:87:1:96:2 | (functi ... r: 0\\n}) | | tst.js:91:10:91:18 | x + y + z | tst.js:87:2:92:1 | return of anonymous function | | tst.js:92:4:96:1 | {\\n p: ... r: 0\\n} | tst.js:87:11:87:24 | { p: x, ...o } | | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:98:1:103:2 | (functi ... + z;\\n}) | -| tst.js:98:11:98:24 | rest | tst.js:99:15:99:18 | rest | -| tst.js:98:11:98:24 | rest | tst.js:101:13:101:16 | rest | -| tst.js:98:11:98:24 | x | tst.js:102:10:102:10 | x | -| tst.js:98:13:98:13 | x | tst.js:98:11:98:24 | x | -| tst.js:98:19:98:22 | ...rest | tst.js:98:11:98:24 | rest | -| tst.js:99:7:99:18 | y | tst.js:102:14:102:14 | y | -| tst.js:99:9:99:9 | y | tst.js:99:7:99:18 | y | +| tst.js:98:13:98:13 | x | tst.js:98:13:98:13 | x | +| tst.js:98:13:98:13 | x | tst.js:102:10:102:10 | x | +| tst.js:98:19:98:22 | ...rest | tst.js:98:19:98:22 | rest | +| tst.js:98:19:98:22 | rest | tst.js:99:15:99:18 | rest | +| tst.js:98:19:98:22 | rest | tst.js:101:13:101:16 | rest | +| tst.js:99:9:99:9 | y | tst.js:99:9:99:9 | y | +| tst.js:99:9:99:9 | y | tst.js:102:14:102:14 | y | | tst.js:99:15:99:18 | rest | tst.js:99:7:99:11 | [ y ] | -| tst.js:101:3:101:16 | z | tst.js:102:18:102:18 | z | -| tst.js:101:7:101:7 | z | tst.js:101:3:101:16 | z | +| tst.js:101:7:101:7 | z | tst.js:101:7:101:7 | z | +| tst.js:101:7:101:7 | z | tst.js:102:18:102:18 | z | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:9 | [ , z ] | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:16 | [ , z ] = rest | | tst.js:102:10:102:18 | x + y + z | tst.js:98:1:103:17 | (functi ... 3, 0 ]) | @@ -1125,41 +1125,41 @@ flowStep | tst.js:105:1:105:1 | x | tst.js:105:1:105:6 | x ?? y | | tst.js:105:6:105:6 | y | tst.js:105:1:105:6 | x ?? y | | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:2 | (functi ... v2c;\\n}) | -| tst.js:108:6:108:38 | v1a | tst.js:109:2:109:4 | v1a | -| tst.js:108:6:108:38 | v1b | tst.js:109:8:109:10 | v1b | -| tst.js:108:6:108:38 | v1c | tst.js:109:14:109:16 | v1c | -| tst.js:108:7:108:9 | v1a | tst.js:108:6:108:38 | v1a | -| tst.js:108:12:108:20 | v1b = o1b | tst.js:108:6:108:38 | v1b | -| tst.js:108:18:108:20 | o1b | tst.js:108:6:108:38 | v1b | -| tst.js:108:23:108:31 | v1c = o1c | tst.js:108:6:108:38 | v1c | -| tst.js:108:29:108:31 | o1c | tst.js:108:6:108:38 | v1c | +| tst.js:108:7:108:9 | v1a | tst.js:108:7:108:9 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:109:2:109:4 | v1a | +| tst.js:108:12:108:14 | v1b | tst.js:109:8:109:10 | v1b | +| tst.js:108:12:108:20 | v1b = o1b | tst.js:108:12:108:14 | v1b | +| tst.js:108:18:108:20 | o1b | tst.js:108:12:108:14 | v1b | +| tst.js:108:23:108:25 | v1c | tst.js:109:14:109:16 | v1c | +| tst.js:108:23:108:31 | v1c = o1c | tst.js:108:23:108:25 | v1c | +| tst.js:108:29:108:31 | o1c | tst.js:108:23:108:25 | v1c | | tst.js:108:36:108:38 | o1d | tst.js:108:6:108:32 | {v1a, v ... = o1c} | -| tst.js:111:6:111:38 | v2a | tst.js:112:2:112:4 | v2a | -| tst.js:111:6:111:38 | v2b | tst.js:112:8:112:10 | v2b | -| tst.js:111:6:111:38 | v2c | tst.js:112:14:112:16 | v2c | -| tst.js:111:7:111:9 | v2a | tst.js:111:6:111:38 | v2a | -| tst.js:111:12:111:14 | v2b | tst.js:111:6:111:38 | v2b | -| tst.js:111:18:111:20 | o2b | tst.js:111:6:111:38 | v2b | -| tst.js:111:23:111:25 | v2c | tst.js:111:6:111:38 | v2c | -| tst.js:111:29:111:31 | o2c | tst.js:111:6:111:38 | v2c | +| tst.js:111:7:111:9 | v2a | tst.js:111:7:111:9 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:112:2:112:4 | v2a | +| tst.js:111:12:111:14 | v2b | tst.js:111:12:111:14 | v2b | +| tst.js:111:12:111:14 | v2b | tst.js:112:8:112:10 | v2b | +| tst.js:111:18:111:20 | o2b | tst.js:111:12:111:14 | v2b | +| tst.js:111:23:111:25 | v2c | tst.js:111:23:111:25 | v2c | +| tst.js:111:23:111:25 | v2c | tst.js:112:14:112:16 | v2c | +| tst.js:111:29:111:31 | o2c | tst.js:111:23:111:25 | v2c | | tst.js:111:36:111:38 | o2d | tst.js:111:6:111:32 | [v2a, v ... = o2c] | | tst.js:115:1:115:12 | reflective call | tst.js:115:1:115:12 | Array.call() | getImmediatePredecessor | arguments.js:1:2:12:1 | functio ... , 3);\\n} | arguments.js:1:1:12:2 | (functi ... 3);\\n}) | -| arguments.js:2:5:2:5 | arguments | arguments.js:4:28:4:36 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:5:25:5:33 | arguments | -| arguments.js:2:5:2:5 | arguments | arguments.js:6:20:6:28 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:4:28:4:36 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:5:25:5:33 | arguments | +| arguments.js:2:5:2:4 | arguments | arguments.js:6:20:6:28 | arguments | | arguments.js:2:5:10:5 | functio ... ;\\n } | arguments.js:2:14:2:14 | f | | arguments.js:2:14:2:14 | f | arguments.js:11:5:11:5 | f | | arguments.js:2:16:2:16 | x | arguments.js:2:16:2:16 | x | | arguments.js:2:16:2:16 | x | arguments.js:3:24:3:24 | x | -| arguments.js:6:13:6:28 | args | arguments.js:7:24:7:27 | args | -| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:28 | args | -| arguments.js:8:9:8:22 | arguments | arguments.js:9:27:9:35 | arguments | -| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments | +| arguments.js:6:13:6:16 | args | arguments.js:7:24:7:27 | args | +| arguments.js:6:20:6:28 | arguments | arguments.js:6:13:6:16 | args | +| arguments.js:8:9:8:17 | arguments | arguments.js:9:27:9:35 | arguments | +| arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:17 | arguments | | arguments.js:8:21:8:22 | {} | arguments.js:8:9:8:22 | arguments = {} | -| eval.js:2:7:2:12 | x | eval.js:4:3:4:3 | x | -| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:12 | x | +| eval.js:2:7:2:7 | x | eval.js:4:3:4:3 | x | +| eval.js:2:11:2:12 | 42 | eval.js:2:7:2:7 | x | | sources.js:1:6:1:6 | x | sources.js:1:6:1:6 | x | | sources.js:1:6:1:6 | x | sources.js:1:11:1:11 | x | | sources.js:1:6:1:11 | x => x | sources.js:1:5:1:12 | (x => x) | @@ -1173,14 +1173,14 @@ getImmediatePredecessor | sources.js:9:14:9:18 | array | sources.js:10:19:10:23 | array | | sources.js:9:14:9:18 | array | sources.js:11:23:11:27 | array | | sources.js:10:12:10:14 | key | sources.js:10:28:10:30 | key | -| sources.js:11:12:11:18 | key | sources.js:11:32:11:34 | key | -| sources.js:11:14:11:16 | key | sources.js:11:12:11:18 | key | -| tst2.ts:1:1:1:1 | A | tst2.ts:1:18:1:18 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:11:11:11:11 | A | -| tst2.ts:1:8:5:1 | A | tst2.ts:15:11:15:11 | A | -| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:8:5:1 | A | -| tst2.ts:2:14:2:19 | x | tst2.ts:4:3:4:3 | x | -| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:19 | x | +| sources.js:11:14:11:16 | key | sources.js:11:14:11:16 | key | +| sources.js:11:14:11:16 | key | sources.js:11:32:11:34 | key | +| tst2.ts:1:1:1:0 | A | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:8:5:1 | namespa ... lysed\\n} | tst2.ts:1:18:1:18 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:11:11:11:11 | A | +| tst2.ts:1:18:1:18 | A | tst2.ts:15:11:15:11 | A | +| tst2.ts:2:14:2:14 | x | tst2.ts:4:3:4:3 | x | +| tst2.ts:2:18:2:19 | 42 | tst2.ts:2:14:2:14 | x | | tst2.ts:7:1:7:0 | A | tst2.ts:8:3:8:3 | A | | tst2.ts:7:1:9:1 | functio ... = 23;\\n} | tst2.ts:7:10:7:13 | setX | | tst2.ts:7:10:7:13 | setX | tst2.ts:3:3:3:6 | setX | @@ -1194,43 +1194,43 @@ getImmediatePredecessor | tst.js:1:10:1:11 | fs | tst.js:1:10:1:11 | fs | | tst.js:1:10:1:11 | fs | tst.js:7:1:7:2 | fs | | tst.js:1:10:1:11 | fs | tst.js:22:24:22:25 | fs | -| tst.js:3:5:3:10 | x | tst.js:8:1:8:1 | x | -| tst.js:3:5:3:10 | x | tst.js:9:2:9:2 | x | -| tst.js:3:5:3:10 | x | tst.js:10:1:10:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:11:1:11:1 | x | -| tst.js:3:5:3:10 | x | tst.js:12:1:12:1 | x | -| tst.js:3:5:3:10 | x | tst.js:13:1:13:1 | x | -| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:10 | x | -| tst.js:4:5:4:12 | y | tst.js:10:4:10:4 | y | -| tst.js:4:5:4:12 | y | tst.js:11:6:11:6 | y | -| tst.js:4:5:4:12 | y | tst.js:12:6:12:6 | y | -| tst.js:4:5:4:12 | y | tst.js:13:5:13:5 | y | -| tst.js:4:5:4:12 | y | tst.js:14:9:14:9 | y | -| tst.js:4:5:4:12 | y | tst.js:105:6:105:6 | y | -| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:12 | y | +| tst.js:3:5:3:5 | x | tst.js:8:1:8:1 | x | +| tst.js:3:5:3:5 | x | tst.js:9:2:9:2 | x | +| tst.js:3:5:3:5 | x | tst.js:10:1:10:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:11:1:11:1 | x | +| tst.js:3:5:3:5 | x | tst.js:12:1:12:7 | x | +| tst.js:3:5:3:5 | x | tst.js:13:1:13:6 | x | +| tst.js:3:9:3:10 | 42 | tst.js:3:5:3:5 | x | +| tst.js:4:5:4:5 | y | tst.js:10:4:10:4 | y | +| tst.js:4:5:4:5 | y | tst.js:11:6:11:6 | y | +| tst.js:4:5:4:5 | y | tst.js:12:6:12:6 | y | +| tst.js:4:5:4:5 | y | tst.js:13:5:13:5 | y | +| tst.js:4:5:4:5 | y | tst.js:14:9:14:9 | y | +| tst.js:4:5:4:5 | y | tst.js:105:6:105:6 | y | +| tst.js:4:9:4:12 | "hi" | tst.js:4:5:4:5 | y | | tst.js:9:2:9:2 | x | tst.js:9:1:9:3 | (x) | | tst.js:10:4:10:4 | y | tst.js:10:1:10:4 | x, y | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:12:1:12:1 | x | tst.js:12:1:12:1 | x | -| tst.js:13:1:13:1 | x | tst.js:14:5:14:5 | x | -| tst.js:13:1:13:1 | x | tst.js:25:3:25:3 | x | -| tst.js:13:1:13:5 | z | tst.js:14:1:14:1 | z | -| tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:12:1:12:7 | x | tst.js:12:1:12:1 | x | +| tst.js:13:1:13:1 | z | tst.js:14:1:14:1 | z | +| tst.js:13:1:13:6 | x | tst.js:14:5:14:5 | x | +| tst.js:13:1:13:6 | x | tst.js:25:3:25:3 | x | +| tst.js:13:5:13:5 | y | tst.js:13:1:13:1 | z | | tst.js:13:5:13:5 | y | tst.js:13:1:13:5 | z = y | | tst.js:16:2:20:1 | functio ... n "";\\n} | tst.js:16:1:20:2 | (functi ... "";\\n}) | | tst.js:16:13:16:13 | a | tst.js:16:13:16:13 | a | | tst.js:16:13:16:13 | a | tst.js:18:12:18:12 | a | | tst.js:20:4:20:8 | "arg" | tst.js:16:13:16:13 | a | -| tst.js:22:5:22:25 | readFileSync | tst.js:23:1:23:12 | readFileSync | -| tst.js:22:7:22:18 | readFileSync | tst.js:22:5:22:25 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:22:7:22:18 | readFileSync | +| tst.js:22:7:22:18 | readFileSync | tst.js:23:1:23:12 | readFileSync | | tst.js:22:24:22:25 | fs | tst.js:22:5:22:20 | { readFileSync } | -| tst.js:25:1:25:3 | x | tst.js:26:1:26:1 | x | -| tst.js:25:1:25:3 | x | tst.js:57:7:57:7 | x | -| tst.js:25:1:25:3 | x | tst.js:58:11:58:11 | x | -| tst.js:25:1:25:3 | x | tst.js:105:1:105:1 | x | +| tst.js:25:3:25:3 | x | tst.js:26:1:26:1 | x | +| tst.js:25:3:25:3 | x | tst.js:57:7:57:7 | x | +| tst.js:25:3:25:3 | x | tst.js:58:11:58:11 | x | +| tst.js:25:3:25:3 | x | tst.js:105:1:105:1 | x | | tst.js:28:2:28:1 | x | tst.js:29:3:29:3 | x | | tst.js:28:2:29:3 | () =>\\n x | tst.js:28:1:30:1 | (() =>\\n ... ables\\n) | | tst.js:29:3:29:3 | x | tst.js:28:1:30:3 | (() =>\\n ... les\\n)() | @@ -1239,69 +1239,69 @@ getImmediatePredecessor | tst.js:32:10:32:10 | g | tst.js:35:1:35:1 | g | | tst.js:32:10:32:10 | g | tst.js:60:1:60:1 | g | | tst.js:32:10:32:10 | g | tst.js:62:4:62:4 | g | -| tst.js:37:5:42:1 | o | tst.js:43:1:43:1 | o | -| tst.js:37:5:42:1 | o | tst.js:44:1:44:1 | o | -| tst.js:37:5:42:1 | o | tst.js:61:3:61:3 | o | -| tst.js:37:5:42:1 | o | tst.js:62:1:62:1 | o | -| tst.js:37:5:42:1 | o | tst.js:77:15:77:15 | o | -| tst.js:37:5:42:1 | o | tst.js:80:15:80:15 | o | -| tst.js:37:5:42:1 | o | tst.js:83:23:83:23 | o | -| tst.js:37:5:42:1 | o | tst.js:85:23:85:23 | o | -| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:42:1 | o | +| tst.js:37:5:37:5 | o | tst.js:43:1:43:1 | o | +| tst.js:37:5:37:5 | o | tst.js:44:1:44:1 | o | +| tst.js:37:5:37:5 | o | tst.js:61:3:61:3 | o | +| tst.js:37:5:37:5 | o | tst.js:62:1:62:1 | o | +| tst.js:37:5:37:5 | o | tst.js:77:15:77:15 | o | +| tst.js:37:5:37:5 | o | tst.js:80:15:80:15 | o | +| tst.js:37:5:37:5 | o | tst.js:83:23:83:23 | o | +| tst.js:37:5:37:5 | o | tst.js:85:23:85:23 | o | +| tst.js:37:9:42:1 | {\\n x: ... ;\\n }\\n} | tst.js:37:5:37:5 | o | | tst.js:39:4:39:3 | this | tst.js:40:5:40:8 | this | | tst.js:46:10:46:11 | "" | tst.js:46:1:46:11 | global = "" | -| tst.js:49:1:54:1 | A | tst.js:55:1:55:1 | A | -| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:1:54:1 | A | +| tst.js:49:1:54:1 | class A ... `\\n }\\n} | tst.js:49:7:49:7 | A | +| tst.js:49:7:49:7 | A | tst.js:55:1:55:1 | A | | tst.js:50:14:50:13 | this | tst.js:51:5:51:9 | implicit 'this' | | tst.js:64:1:67:1 | functio ... lysed\\n} | tst.js:64:11:64:11 | h | | tst.js:64:11:64:11 | h | tst.js:68:12:68:12 | h | -| tst.js:68:5:68:14 | iter | tst.js:69:1:69:4 | iter | -| tst.js:68:12:68:14 | h() | tst.js:68:5:68:14 | iter | +| tst.js:68:5:68:8 | iter | tst.js:69:1:69:4 | iter | +| tst.js:68:12:68:14 | h() | tst.js:68:5:68:8 | iter | | tst.js:77:10:77:10 | i | tst.js:78:3:78:3 | i | | tst.js:80:10:80:10 | v | tst.js:81:3:81:3 | v | | tst.js:83:18:83:18 | v | tst.js:83:26:83:26 | v | | tst.js:85:18:85:18 | v | tst.js:85:26:85:26 | v | | tst.js:87:2:92:1 | functio ... + z;\\n} | tst.js:87:1:92:2 | (functi ... + z;\\n}) | -| tst.js:87:11:87:24 | o | tst.js:88:18:88:18 | o | -| tst.js:87:11:87:24 | o | tst.js:90:15:90:15 | o | -| tst.js:87:11:87:24 | x | tst.js:91:10:91:10 | x | -| tst.js:87:13:87:16 | p: x | tst.js:87:11:87:24 | x | -| tst.js:87:22:87:22 | ...o | tst.js:87:11:87:24 | o | -| tst.js:88:7:88:18 | y | tst.js:91:14:91:14 | y | -| tst.js:88:9:88:12 | q: y | tst.js:88:7:88:18 | y | +| tst.js:87:13:87:16 | p: x | tst.js:87:16:87:16 | x | +| tst.js:87:16:87:16 | x | tst.js:91:10:91:10 | x | +| tst.js:87:22:87:22 | ...o | tst.js:87:22:87:22 | o | +| tst.js:87:22:87:22 | o | tst.js:88:18:88:18 | o | +| tst.js:87:22:87:22 | o | tst.js:90:15:90:15 | o | +| tst.js:88:9:88:12 | q: y | tst.js:88:12:88:12 | y | +| tst.js:88:12:88:12 | y | tst.js:91:14:91:14 | y | | tst.js:88:18:88:18 | o | tst.js:88:7:88:14 | { q: y } | -| tst.js:90:4:90:15 | z | tst.js:91:18:91:18 | z | | tst.js:90:4:90:15 | { r: z } = o | tst.js:90:3:90:16 | ({ r: z } = o) | -| tst.js:90:6:90:9 | r: z | tst.js:90:4:90:15 | z | +| tst.js:90:6:90:9 | r: z | tst.js:90:9:90:9 | z | +| tst.js:90:9:90:9 | z | tst.js:91:18:91:18 | z | | tst.js:90:15:90:15 | o | tst.js:90:4:90:11 | { r: z } | | tst.js:90:15:90:15 | o | tst.js:90:4:90:15 | { r: z } = o | | tst.js:91:10:91:18 | x + y + z | tst.js:87:1:96:2 | (functi ... r: 0\\n}) | | tst.js:92:4:96:1 | {\\n p: ... r: 0\\n} | tst.js:87:11:87:24 | { p: x, ...o } | | tst.js:98:2:103:1 | functio ... + z;\\n} | tst.js:98:1:103:2 | (functi ... + z;\\n}) | -| tst.js:98:11:98:24 | rest | tst.js:99:15:99:18 | rest | -| tst.js:98:11:98:24 | rest | tst.js:101:13:101:16 | rest | -| tst.js:98:11:98:24 | x | tst.js:102:10:102:10 | x | -| tst.js:98:13:98:13 | x | tst.js:98:11:98:24 | x | -| tst.js:98:19:98:22 | ...rest | tst.js:98:11:98:24 | rest | -| tst.js:99:7:99:18 | y | tst.js:102:14:102:14 | y | -| tst.js:99:9:99:9 | y | tst.js:99:7:99:18 | y | +| tst.js:98:13:98:13 | x | tst.js:98:13:98:13 | x | +| tst.js:98:13:98:13 | x | tst.js:102:10:102:10 | x | +| tst.js:98:19:98:22 | ...rest | tst.js:98:19:98:22 | rest | +| tst.js:98:19:98:22 | rest | tst.js:99:15:99:18 | rest | +| tst.js:98:19:98:22 | rest | tst.js:101:13:101:16 | rest | +| tst.js:99:9:99:9 | y | tst.js:99:9:99:9 | y | +| tst.js:99:9:99:9 | y | tst.js:102:14:102:14 | y | | tst.js:99:15:99:18 | rest | tst.js:99:7:99:11 | [ y ] | -| tst.js:101:3:101:16 | z | tst.js:102:18:102:18 | z | -| tst.js:101:7:101:7 | z | tst.js:101:3:101:16 | z | +| tst.js:101:7:101:7 | z | tst.js:101:7:101:7 | z | +| tst.js:101:7:101:7 | z | tst.js:102:18:102:18 | z | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:9 | [ , z ] | | tst.js:101:13:101:16 | rest | tst.js:101:3:101:16 | [ , z ] = rest | | tst.js:102:10:102:18 | x + y + z | tst.js:98:1:103:17 | (functi ... 3, 0 ]) | | tst.js:103:4:103:16 | [ 19, 23, 0 ] | tst.js:98:11:98:24 | [ x, ...rest ] | | tst.js:107:2:113:1 | functio ... v2c;\\n} | tst.js:107:1:113:2 | (functi ... v2c;\\n}) | -| tst.js:108:6:108:38 | v1a | tst.js:109:2:109:4 | v1a | -| tst.js:108:6:108:38 | v1b | tst.js:109:8:109:10 | v1b | -| tst.js:108:6:108:38 | v1c | tst.js:109:14:109:16 | v1c | -| tst.js:108:7:108:9 | v1a | tst.js:108:6:108:38 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:108:7:108:9 | v1a | +| tst.js:108:7:108:9 | v1a | tst.js:109:2:109:4 | v1a | +| tst.js:108:12:108:14 | v1b | tst.js:109:8:109:10 | v1b | +| tst.js:108:23:108:25 | v1c | tst.js:109:14:109:16 | v1c | | tst.js:108:36:108:38 | o1d | tst.js:108:6:108:32 | {v1a, v ... = o1c} | -| tst.js:111:6:111:38 | v2a | tst.js:112:2:112:4 | v2a | -| tst.js:111:6:111:38 | v2b | tst.js:112:8:112:10 | v2b | -| tst.js:111:6:111:38 | v2c | tst.js:112:14:112:16 | v2c | -| tst.js:111:7:111:9 | v2a | tst.js:111:6:111:38 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:111:7:111:9 | v2a | +| tst.js:111:7:111:9 | v2a | tst.js:112:2:112:4 | v2a | +| tst.js:111:12:111:14 | v2b | tst.js:112:8:112:10 | v2b | +| tst.js:111:23:111:25 | v2c | tst.js:112:14:112:16 | v2c | | tst.js:111:36:111:38 | o2d | tst.js:111:6:111:32 | [v2a, v ... = o2c] | | tst.js:115:1:115:12 | reflective call | tst.js:115:1:115:12 | Array.call() | | tst.js:117:22:117:23 | x1 | tst.js:117:10:117:24 | Object.seal(x1) | @@ -1340,7 +1340,7 @@ incomplete | arguments.js:11:5:11:14 | exceptional return of f(1, 2, 3) | call | | arguments.js:11:5:11:14 | f(1, 2, 3) | call | | eval.js:1:1:5:1 | exceptional return of function k | call | -| eval.js:2:7:2:12 | x | eval | +| eval.js:2:7:2:7 | x | eval | | eval.js:3:3:3:6 | eval | global | | eval.js:3:3:3:16 | eval("x = 23") | call | | eval.js:3:3:3:16 | exceptional return of eval("x = 23") | call | @@ -1351,9 +1351,9 @@ incomplete | sources.js:9:1:12:1 | exceptional return of function foo | call | | sources.js:9:14:9:18 | array | call | | sources.js:10:12:10:14 | key | heap | -| sources.js:11:12:11:18 | key | heap | | sources.js:11:14:11:16 | key | heap | -| tst2.ts:2:14:2:19 | x | namespace | +| sources.js:11:14:11:16 | key | heap | +| tst2.ts:2:14:2:14 | x | namespace | | tst2.ts:3:3:3:8 | exceptional return of setX() | call | | tst2.ts:3:3:3:8 | setX() | call | | tst2.ts:7:1:9:1 | exceptional return of function setX | call | @@ -1564,8 +1564,10 @@ sources | tst.js:50:14:53:3 | () {\\n ... et`\\n } | | tst.js:50:14:53:3 | return of constructor of class A | | tst.js:51:5:51:13 | super(42) | +| tst.js:57:1:57:9 | `x: ${x}` | | tst.js:58:1:58:3 | tag | | tst.js:58:1:58:13 | tag `x: ${x}` | +| tst.js:58:5:58:13 | `x: ${x}` | | tst.js:61:1:61:5 | ::o.m | | tst.js:61:3:61:5 | o.m | | tst.js:62:1:62:4 | o::g | diff --git a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected index f029dd71b6c..fe8ec09345b 100644 --- a/javascript/ql/test/library-tests/DefUse/DefUsePair.expected +++ b/javascript/ql/test/library-tests/DefUse/DefUsePair.expected @@ -1,9 +1,9 @@ -| classes.js:7:5:8:5 | def@7:5 | classes.js:10:5:10:12 | LocalFoo | +| classes.js:7:11:7:18 | def@7:11 | classes.js:10:5:10:12 | LocalFoo | | es2015.js:1:10:1:11 | def@1:10 | es2015.js:2:3:2:4 | fn | | es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:32:5:32 | i | | es2015.js:5:16:5:16 | def@5:16 | es2015.js:5:34:5:34 | i | | es2015modules.js:1:10:1:12 | def@1:10 | es2015modules.js:4:3:4:5 | foo | -| es2015modules.js:1:15:1:24 | def@1:15 | es2015modules.js:6:3:6:5 | baz | +| es2015modules.js:1:22:1:24 | def@1:22 | es2015modules.js:6:3:6:5 | baz | | es2015modules.js:10:10:10:13 | def@10:10 | es2015modules.js:7:3:7:6 | quux | | es2015modules.js:15:17:15:17 | def@15:17 | es2015modules.js:12:1:12:1 | f | | es2015modules.js:16:25:16:25 | def@16:25 | es2015modules.js:13:1:13:1 | g | @@ -14,17 +14,17 @@ | fundecls.js:30:12:30:12 | def@30:12 | fundecls.js:28:3:28:3 | f | | fundecls.js:36:12:36:12 | def@36:12 | fundecls.js:35:3:35:3 | f | | fundecls.js:39:11:39:11 | def@39:11 | fundecls.js:40:7:40:7 | x | -| fundecls.js:45:3:45:3 | phi@45:3 | fundecls.js:45:3:45:3 | f | +| fundecls.js:45:3:45:6 | phi@45:3 | fundecls.js:45:3:45:3 | f | | fundecls.js:48:11:48:11 | def@48:11 | fundecls.js:50:7:50:7 | x | | tst.js:1:12:1:12 | def@1:12 | tst.js:3:12:3:12 | o | | tst.js:1:12:1:12 | def@1:12 | tst.js:5:16:5:16 | o | -| tst.js:2:9:2:14 | def@2:9 | tst.js:8:17:8:17 | y | -| tst.js:3:2:3:2 | phi@3:2 | tst.js:4:5:4:5 | i | -| tst.js:5:2:5:2 | phi@5:2 | tst.js:7:6:7:6 | i | -| tst.js:5:2:5:2 | phi@5:2 | tst.js:8:14:8:14 | z | +| tst.js:2:9:2:9 | def@2:9 | tst.js:8:17:8:17 | y | +| tst.js:3:2:4:6 | phi@3:2 | tst.js:4:5:4:5 | i | +| tst.js:5:2:7:7 | phi@5:2 | tst.js:7:6:7:6 | i | +| tst.js:5:2:7:7 | phi@5:2 | tst.js:8:14:8:14 | z | | tst.js:5:11:5:11 | def@5:11 | tst.js:6:7:6:7 | z | -| tst.js:12:2:12:7 | def@12:2 | tst.js:14:9:14:9 | x | +| tst.js:12:2:12:2 | def@12:2 | tst.js:14:9:14:9 | x | | tst.js:19:11:19:11 | def@19:11 | tst.js:18:9:18:9 | x | -| tst.js:23:6:23:23 | def@23:6 | tst.js:24:2:24:2 | a | -| tst.js:23:6:23:23 | def@23:6 | tst.js:24:6:24:6 | c | +| tst.js:23:7:23:7 | def@23:7 | tst.js:24:2:24:2 | a | +| tst.js:23:14:23:14 | def@23:14 | tst.js:24:6:24:6 | c | | tst.js:26:11:26:11 | def@26:11 | tst.js:27:2:27:2 | a | diff --git a/javascript/ql/test/library-tests/FlowSummary/DataFlowConsistency.expected b/javascript/ql/test/library-tests/FlowSummary/DataFlowConsistency.expected index f3b3ca527c3..51612c5b97a 100644 --- a/javascript/ql/test/library-tests/FlowSummary/DataFlowConsistency.expected +++ b/javascript/ql/test/library-tests/FlowSummary/DataFlowConsistency.expected @@ -20,21 +20,6 @@ reverseRead | tst.js:267:28:267:31 | map3 | Origin of readStep is missing a PostUpdateNode. | argHasPostUpdate postWithInFlow -| file://:0:0:0:0 | [summary] to write: Argument[0] in _.tap | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array method with flow into callback | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#filter | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#find / Array#findLast | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#flatMap | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#forEach / Map#forEach / Set#forEach | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#map | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[1] in Array#reduce / Array#reduceRight | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[2] in 'array.prototype.find' / 'array-find' | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[2] in Array.from(arg, callback, [thisArg]) | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[2] in _.reduce-like | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[this] in Array#flatMap | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[this] in Array#forEach / Map#forEach / Set#forEach | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[this] in Array#map | PostUpdateNode should not be the target of local flow. | -| file://:0:0:0:0 | [summary] to write: Argument[this] in Array#reduce / Array#reduceRight | PostUpdateNode should not be the target of local flow. | viableImplInCallContextTooLarge uniqueParameterNodeAtPosition uniqueParameterNodePosition diff --git a/javascript/ql/test/library-tests/FlowSummary/test.ql b/javascript/ql/test/library-tests/FlowSummary/test.ql index e8ca23a423c..0e40dcdadb0 100644 --- a/javascript/ql/test/library-tests/FlowSummary/test.ql +++ b/javascript/ql/test/library-tests/FlowSummary/test.ql @@ -8,7 +8,7 @@ DataFlow::CallNode getACall(string name) { result.getCalleeNode().getALocalSource() = DataFlow::globalVarRef(name) } -module ConfigArg implements DataFlow::ConfigSig { +module FlowConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node node) { node = getACall("source") } predicate isSink(DataFlow::Node node) { node = getACall("sink").getAnArgument() } @@ -19,7 +19,7 @@ module ConfigArg implements DataFlow::ConfigSig { } } -module Configuration = DataFlow::Global; +module Flow = DataFlow::Global; class BasicBarrierGuard extends DataFlow::CallNode { BasicBarrierGuard() { this = getACall("isSafe") } @@ -32,5 +32,5 @@ class BasicBarrierGuard extends DataFlow::CallNode { deprecated class ConsistencyConfig extends ConsistencyConfiguration { ConsistencyConfig() { this = "ConsistencyConfig" } - override DataFlow::Node getAnAlert() { Configuration::flow(_, result) } + override DataFlow::Node getAnAlert() { Flow::flow(_, result) } } diff --git a/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected b/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected index b216e18c71d..c6ca30cd329 100644 --- a/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected +++ b/javascript/ql/test/library-tests/GlobalAccessPaths/GlobalAccessPaths.expected @@ -9,22 +9,22 @@ test_getAReferenceTo | other_ns.js:4:9:4:10 | NS | NS | | other_ns.js:4:9:4:16 | NS \|\| {} | NS | | other_ns.js:6:1:6:8 | Conflict | Conflict | -| test.js:2:7:2:17 | v | foo.bar | +| test.js:2:7:2:7 | v | foo.bar | | test.js:2:11:2:13 | foo | foo | | test.js:2:11:2:17 | foo.bar | foo.bar | | test.js:3:3:3:3 | v | foo.bar | | test.js:3:3:3:7 | v.baz | foo.bar.baz | | test.js:4:7:4:24 | { baz, a, b: {c} } | foo.bar | -| test.js:4:7:4:28 | c | foo.bar.b.c | | test.js:4:9:4:11 | baz | foo.bar.baz | | test.js:4:14:4:14 | a | foo.bar.a | | test.js:4:17:4:22 | b: {c} | foo.bar.b | | test.js:4:20:4:22 | {c} | foo.bar.b | | test.js:4:21:4:21 | c | foo.bar.b.c | +| test.js:4:21:4:21 | c | foo.bar.b.c | | test.js:4:28:4:28 | v | foo.bar | | test.js:5:11:5:11 | c | foo.bar.b.c | | test.js:5:11:5:13 | c.d | foo.bar.b.c.d | -| test.js:7:7:7:16 | w | window | +| test.js:7:7:7:7 | w | window | | test.js:7:11:7:16 | window | window | | test.js:8:13:8:18 | window | window | | test.js:8:13:8:20 | window.x | x | @@ -35,11 +35,11 @@ test_getAReferenceTo | test.js:10:13:10:13 | w | window | | test.js:10:13:10:15 | w.x | x | | test.js:10:13:10:17 | w.x.y | x.y | -| test.js:12:7:12:25 | notUnique | foo.bar | +| test.js:12:7:12:15 | notUnique | foo.bar | | test.js:12:19:12:21 | foo | foo | | test.js:12:19:12:25 | foo.bar | foo.bar | | test.js:13:7:13:15 | something | something | -| test.js:14:5:14:23 | notUnique | bar.baz | +| test.js:14:5:14:13 | notUnique | bar.baz | | test.js:14:5:14:23 | notUnique = bar.baz | bar.baz | | test.js:14:17:14:19 | bar | bar | | test.js:14:17:14:23 | bar.baz | bar.baz | @@ -56,7 +56,7 @@ test_getAReferenceTo | test.js:33:7:33:18 | { bar = {} } | foo | | test.js:33:9:33:16 | bar = {} | foo.bar | | test.js:33:22:33:24 | foo | foo | -| test.js:39:3:39:20 | lazyInit | foo.bar | +| test.js:39:3:39:10 | lazyInit | foo.bar | | test.js:39:3:39:20 | lazyInit = foo.bar | foo.bar | | test.js:39:14:39:16 | foo | foo | | test.js:39:14:39:20 | foo.bar | foo.bar | @@ -77,7 +77,7 @@ test_getAReferenceTo | test.js:68:11:68:34 | Object. ... ar).baz | foo.bar.baz | | test.js:68:23:68:25 | foo | foo | | test.js:68:23:68:29 | foo.bar | foo.bar | -| test.js:69:6:69:15 | O | Object | +| test.js:69:6:69:6 | O | Object | | test.js:69:10:69:15 | Object | Object | | test.js:70:11:70:11 | O | Object | | test.js:70:11:70:16 | O.seal | Object.seal | diff --git a/javascript/ql/test/library-tests/Portals/PortalEntry.expected b/javascript/ql/test/library-tests/Portals/PortalEntry.expected deleted file mode 100644 index b6f7ce88118..00000000000 --- a/javascript/ql/test/library-tests/Portals/PortalEntry.expected +++ /dev/null @@ -1,1715 +0,0 @@ -| (member Promise (root https://www.npmjs.com/package/bluebird)) | src/bluebird/index.js:9:19:9:25 | Promise | true | -| (member default (root https://www.npmjs.com/package/m2)) | src/m2/main.js:6:16:16:1 | class { ... y; }\\n} | true | -| (member exec (instance (member Promise (root https://www.npmjs.com/package/bluebird)))) | src/bluebird/index.js:2:15:2:18 | exec | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member f00 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (member foo (root https://www.npmjs.com/package/cyclic))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (parameter 0 (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member f00 (return (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:5:11:5:13 | foo | true | -| (member foo (root https://www.npmjs.com/package/cyclic)) | src/cyclic/index.js:10:15:10:17 | foo | true | -| (member foo (root https://www.npmjs.com/package/m2)) | src/m2/main.js:1:8:4:1 | functio ... "hi";\\n} | true | -| (member foo (root https://www.npmjs.com/package/m4)) | src/m4/index.js:1:15:1:28 | function(x) {} | true | -| (member m (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:11:4:13:3 | (x) {\\n ... e);\\n } | true | -| (member name (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:8:17:8:20 | name | true | -| (member s (member default (root https://www.npmjs.com/package/m2))) | src/m2/main.js:15:11:15:27 | (y) { return y; } | true | -| (member then (instance (member Promise (root https://www.npmjs.com/package/bluebird)))) | src/bluebird/index.js:5:26:7:1 | functio ... ull);\\n} | true | -| (member x (parameter 0 (member foo (root https://www.npmjs.com/package/m2)))) | src/m3/tst2.js:5:10:5:10 | o | false | -| (member y (member x (parameter 0 (member foo (root https://www.npmjs.com/package/m2))))) | src/m3/tst2.js:3:6:3:8 | "?" | false | -| (member z (parameter 0 (member foo (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:3:9:3:12 | "hi" | true | -| (parameter 0 (member String (global))) | src/m5/index.js:5:33:5:50 | fs.readFileSync(f) | true | -| (parameter 0 (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:4:7:4:10 | "me" | false | -| (parameter 0 (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:5:7:5:10 | "me" | false | -| (parameter 0 (member encode (root https://www.npmjs.com/package/base-64/base64.js))) | src/m5/index.js:5:26:5:51 | String( ... ync(f)) | false | -| (parameter 0 (member foo (root https://www.npmjs.com/package/m2))) | src/m3/tst2.js:5:5:5:12 | { x: o } | false | -| (parameter 0 (member log (member console (global)))) | src/m2/main.js:2:15:2:19 | p.x.y | true | -| (parameter 0 (member log (member console (global)))) | src/m2/main.js:12:17:12:35 | x + " " + this.name | true | -| (parameter 0 (member log (member console (global)))) | src/m3/index.js:3:43:3:61 | m1("Hello, world!") | true | -| (parameter 0 (member m (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:15:4:18 | "hi" | false | -| (parameter 0 (member m (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:15:4:18 | "hi" | true | -| (parameter 0 (member m (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:2:5:2:8 | "hi" | false | -| (parameter 0 (member m (return (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:15:4:18 | "hi" | false | -| (parameter 0 (member readFileSync (root https://www.npmjs.com/package/fs))) | src/m5/index.js:5:49:5:49 | f | false | -| (parameter 0 (member s (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:15:5:21 | "there" | false | -| (parameter 0 (member s (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:15:5:21 | "there" | true | -| (parameter 0 (member s (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:3:5:3:11 | "there" | false | -| (parameter 0 (member s (return (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:15:5:21 | "there" | false | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 0 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:6:2:8 | foo | true | -| (parameter 0 (parameter 1 (member then (instance (member Promise (root https://www.npmjs.com/package/bluebird)))))) | src/bluebird/index.js:6:12:6:15 | null | true | -| (parameter 0 (root https://www.npmjs.com/package/m1)) | src/m3/index.js:3:46:3:60 | "Hello, world!" | false | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member f00 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member foo (root https://www.npmjs.com/package/cyclic))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (member s (member default (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:15:24:15:24 | y | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (parameter 0 (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (return (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:3:10:3:12 | foo | true | -| (return (root https://www.npmjs.com/package/m1)) | src/m1/index.js:1:25:1:25 | x | true | -| (root https://www.npmjs.com/package/m1) | src/m1/index.js:1:18:1:25 | (x) => x | true | diff --git a/javascript/ql/test/library-tests/Portals/PortalEntry.ql b/javascript/ql/test/library-tests/Portals/PortalEntry.ql deleted file mode 100644 index 2e16b7bffb1..00000000000 --- a/javascript/ql/test/library-tests/Portals/PortalEntry.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript -import semmle.javascript.dataflow.Portals - -from Portal p, boolean escapes -select p, p.getAnEntryNode(escapes), escapes diff --git a/javascript/ql/test/library-tests/Portals/PortalExit.expected b/javascript/ql/test/library-tests/Portals/PortalExit.expected deleted file mode 100644 index ed5a28d830e..00000000000 --- a/javascript/ql/test/library-tests/Portals/PortalExit.expected +++ /dev/null @@ -1,1060 +0,0 @@ -| (global) | src/bluebird/index.js:1:1:1:0 | this | true | -| (global) | src/bluebird/tst.js:1:1:1:0 | this | true | -| (global) | src/cyclic/index.js:1:1:1:0 | this | true | -| (global) | src/m1/index.js:1:1:1:0 | this | true | -| (global) | src/m2/main.js:1:1:1:0 | this | true | -| (global) | src/m3/index.js:1:1:1:0 | this | true | -| (global) | src/m3/tst2.js:1:1:1:0 | this | true | -| (global) | src/m3/tst3.js:1:1:1:0 | this | true | -| (global) | src/m3/tst.js:1:1:1:0 | this | true | -| (global) | src/m4/index.js:1:1:1:0 | this | true | -| (global) | src/m5/index.js:1:1:1:0 | this | true | -| (instance (member Promise (root https://www.npmjs.com/package/bluebird))) | src/bluebird/index.js:1:1:1:0 | this | true | -| (instance (member Promise (root https://www.npmjs.com/package/bluebird))) | src/bluebird/index.js:5:1:5:17 | Promise.prototype | true | -| (instance (member Promise (root https://www.npmjs.com/package/bluebird))) | src/bluebird/index.js:5:26:5:25 | this | true | -| (instance (member Promise (root https://www.npmjs.com/package/bluebird))) | src/bluebird/tst.js:2:9:2:21 | new Promise() | true | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m2/main.js:7:14:7:13 | this | true | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m2/main.js:11:4:11:3 | this | true | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m2/main.js:15:11:15:10 | this | true | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:4:1:4:11 | new A("me") | false | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:4:1:4:11 | new A("me") | true | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:5:1:5:11 | new A("me") | false | -| (instance (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:5:1:5:11 | new A("me") | true | -| (member String (global)) | src/m5/index.js:5:26:5:31 | String | true | -| (member console (global)) | src/m2/main.js:2:3:2:9 | console | true | -| (member console (global)) | src/m2/main.js:12:5:12:11 | console | true | -| (member console (global)) | src/m3/index.js:3:31:3:37 | console | true | -| (member default (root https://www.npmjs.com/package/m2)) | src/m3/tst3.js:1:8:1:8 | A | false | -| (member encode (root https://www.npmjs.com/package/base-64/base64.js)) | src/m5/index.js:5:12:5:24 | base64.encode | false | -| (member foo (root https://www.npmjs.com/package/m2)) | src/m3/tst2.js:1:10:1:12 | foo | false | -| (member log (member console (global))) | src/m2/main.js:2:3:2:13 | console.log | true | -| (member log (member console (global))) | src/m2/main.js:12:5:12:15 | console.log | true | -| (member log (member console (global))) | src/m3/index.js:3:31:3:41 | console.log | true | -| (member m (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:4:1:4:13 | new A("me").m | false | -| (member m (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:4:1:4:13 | new A("me").m | true | -| (member m (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:2:1:2:3 | A.m | false | -| (member m (return (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:4:1:4:13 | new A("me").m | false | -| (member name (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:12:27:12:35 | this.name | true | -| (member readFileSync (root https://www.npmjs.com/package/fs)) | src/m5/index.js:5:33:5:47 | fs.readFileSync | false | -| (member s (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:5:1:5:13 | new A("me").s | false | -| (member s (instance (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:5:1:5:13 | new A("me").s | true | -| (member s (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:3:1:3:3 | A.s | false | -| (member s (return (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:5:1:5:13 | new A("me").s | false | -| (member x (parameter 0 (member foo (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:2:15:2:17 | p.x | true | -| (member y (member x (parameter 0 (member foo (root https://www.npmjs.com/package/m2))))) | src/m2/main.js:2:15:2:19 | p.x.y | true | -| (parameter 0 (member Promise (root https://www.npmjs.com/package/bluebird))) | src/bluebird/index.js:1:18:1:21 | exec | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member f00 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (member foo (root https://www.npmjs.com/package/m2))) | src/m2/main.js:1:21:1:21 | p | true | -| (parameter 0 (member foo (root https://www.npmjs.com/package/m4))) | src/m4/index.js:1:24:1:24 | x | true | -| (parameter 0 (member m (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m2/main.js:11:5:11:5 | x | true | -| (parameter 0 (member s (member default (root https://www.npmjs.com/package/m2)))) | src/m2/main.js:15:12:15:12 | y | true | -| (parameter 0 (member then (instance (member Promise (root https://www.npmjs.com/package/bluebird))))) | src/bluebird/index.js:5:35:5:43 | fulfilled | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (parameter 0 (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (return (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:1:14:1:15 | cb | true | -| (parameter 0 (root https://www.npmjs.com/package/m1)) | src/m1/index.js:1:19:1:19 | x | true | -| (parameter 1 (member then (instance (member Promise (root https://www.npmjs.com/package/bluebird))))) | src/bluebird/index.js:5:46:5:53 | rejected | true | -| (return (member String (global))) | src/m5/index.js:5:26:5:51 | String( ... ync(f)) | true | -| (return (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:4:1:4:11 | new A("me") | false | -| (return (member default (root https://www.npmjs.com/package/m2))) | src/m3/tst3.js:5:1:5:11 | new A("me") | false | -| (return (member encode (root https://www.npmjs.com/package/base-64/base64.js))) | src/m5/index.js:5:12:5:52 | base64. ... nc(f))) | false | -| (return (member foo (root https://www.npmjs.com/package/m2))) | src/m3/tst2.js:5:1:5:13 | foo({ x: o }) | false | -| (return (member log (member console (global)))) | src/m2/main.js:2:3:2:20 | console.log(p.x.y) | true | -| (return (member log (member console (global)))) | src/m2/main.js:12:5:12:36 | console ... s.name) | true | -| (return (member log (member console (global)))) | src/m3/index.js:3:31:3:62 | console ... rld!")) | true | -| (return (member m (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:1:4:19 | new A("me").m("hi") | false | -| (return (member m (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:1:4:19 | new A("me").m("hi") | true | -| (return (member m (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:2:1:2:9 | A.m("hi") | false | -| (return (member m (return (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:4:1:4:19 | new A("me").m("hi") | false | -| (return (member readFileSync (root https://www.npmjs.com/package/fs))) | src/m5/index.js:5:33:5:50 | fs.readFileSync(f) | false | -| (return (member s (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:1:5:22 | new A(" ... there") | false | -| (return (member s (instance (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:1:5:22 | new A(" ... there") | true | -| (return (member s (member default (root https://www.npmjs.com/package/m2)))) | src/m3/tst3.js:3:1:3:12 | A.s("there") | false | -| (return (member s (return (member default (root https://www.npmjs.com/package/m2))))) | src/m3/tst3.js:5:1:5:22 | new A(" ... there") | false | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member f00 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (parameter 0 (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member f00 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (parameter 0 (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member f00 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (parameter 0 (parameter 0 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member f00 (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (parameter 0 (parameter 0 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (parameter 0 (parameter 0 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (member f00 (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (member f00 (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (parameter 0 (parameter 0 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (return (member f00 (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 0 (return (return (return (return (return (return (member foo (root https://www.npmjs.com/package/cyclic)))))))))) | src/cyclic/index.js:2:3:2:9 | cb(foo) | true | -| (return (parameter 1 (member then (instance (member Promise (root https://www.npmjs.com/package/bluebird)))))) | src/bluebird/index.js:6:3:6:16 | rejected(null) | true | -| (return (root https://www.npmjs.com/package/m1)) | src/m3/index.js:3:43:3:61 | m1("Hello, world!") | false | -| (root https://www.npmjs.com/package/base-64/base64.js) | src/m5/index.js:2:14:2:41 | require ... 64.js") | false | -| (root https://www.npmjs.com/package/fs) | src/m5/index.js:1:12:1:24 | require("fs") | false | -| (root https://www.npmjs.com/package/m1) | src/m3/index.js:1:10:1:22 | require("m1") | false | -| (root https://www.npmjs.com/package/m2) | src/m3/tst2.js:1:1:1:25 | import ... m "m2"; | false | -| (root https://www.npmjs.com/package/m2) | src/m3/tst3.js:1:1:1:19 | import A from "m2"; | false | diff --git a/javascript/ql/test/library-tests/Portals/PortalExit.ql b/javascript/ql/test/library-tests/Portals/PortalExit.ql deleted file mode 100644 index c8215261fd0..00000000000 --- a/javascript/ql/test/library-tests/Portals/PortalExit.ql +++ /dev/null @@ -1,5 +0,0 @@ -import javascript -import semmle.javascript.dataflow.Portals - -from Portal p, boolean isRemote -select p, p.getAnExitNode(isRemote), isRemote diff --git a/javascript/ql/test/library-tests/Portals/src/bluebird/index.js b/javascript/ql/test/library-tests/Portals/src/bluebird/index.js deleted file mode 100644 index 55534a29ee1..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/bluebird/index.js +++ /dev/null @@ -1,9 +0,0 @@ -function Promise(exec) { - this.exec = exec; -} - -Promise.prototype.then = function(fulfilled, rejected) { - rejected(null); -}; - -exports.Promise = Promise; diff --git a/javascript/ql/test/library-tests/Portals/src/bluebird/package.json b/javascript/ql/test/library-tests/Portals/src/bluebird/package.json deleted file mode 100644 index c87227dd781..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/bluebird/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "bluebird" -} diff --git a/javascript/ql/test/library-tests/Portals/src/bluebird/tst.js b/javascript/ql/test/library-tests/Portals/src/bluebird/tst.js deleted file mode 100644 index 9de51f32583..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/bluebird/tst.js +++ /dev/null @@ -1,2 +0,0 @@ -var Promise= require('./index').Promise; -var p = new Promise(); diff --git a/javascript/ql/test/library-tests/Portals/src/cyclic/index.js b/javascript/ql/test/library-tests/Portals/src/cyclic/index.js deleted file mode 100644 index cf6f60871ce..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/cyclic/index.js +++ /dev/null @@ -1,10 +0,0 @@ -function foo(cb) { - cb(foo); - return foo; -} -foo.f00 = foo; - -foo(foo); -foo(foo()); - -exports.foo = foo; diff --git a/javascript/ql/test/library-tests/Portals/src/cyclic/package.json b/javascript/ql/test/library-tests/Portals/src/cyclic/package.json deleted file mode 100644 index f842eba9efd..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/cyclic/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "cyclic" -} diff --git a/javascript/ql/test/library-tests/Portals/src/m1/index.js b/javascript/ql/test/library-tests/Portals/src/m1/index.js deleted file mode 100644 index b6996b7326d..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m1/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = (x) => x; diff --git a/javascript/ql/test/library-tests/Portals/src/m1/package.json b/javascript/ql/test/library-tests/Portals/src/m1/package.json deleted file mode 100644 index a055bb659b3..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m1/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "m1" -} diff --git a/javascript/ql/test/library-tests/Portals/src/m2/main.js b/javascript/ql/test/library-tests/Portals/src/m2/main.js deleted file mode 100644 index 43f42b1ff83..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m2/main.js +++ /dev/null @@ -1,16 +0,0 @@ -export function foo(p) { - console.log(p.x.y); - p.z = "hi"; -} - -export default class { - constructor(name) { - this.name = name; - } - - m(x) { - console.log(x + " " + this.name); - } - - static s(y) { return y; } -}; diff --git a/javascript/ql/test/library-tests/Portals/src/m2/package.json b/javascript/ql/test/library-tests/Portals/src/m2/package.json deleted file mode 100644 index 6a14139b8eb..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m2/package.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "m2", - "main": "main.js" -} diff --git a/javascript/ql/test/library-tests/Portals/src/m3/index.js b/javascript/ql/test/library-tests/Portals/src/m3/index.js deleted file mode 100644 index c677a0e8f86..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m3/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var m1 = require("m1"); - -module.exports = function() { console.log(m1("Hello, world!")); }; diff --git a/javascript/ql/test/library-tests/Portals/src/m3/package.json b/javascript/ql/test/library-tests/Portals/src/m3/package.json deleted file mode 100644 index 6644e5c989c..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m3/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "client", - "private": true, - "dependencies": { - "m1": "*", - "m2": "*" - } -} diff --git a/javascript/ql/test/library-tests/Portals/src/m3/tst.js b/javascript/ql/test/library-tests/Portals/src/m3/tst.js deleted file mode 100644 index dea4b2f9201..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m3/tst.js +++ /dev/null @@ -1 +0,0 @@ -require(".")(); diff --git a/javascript/ql/test/library-tests/Portals/src/m3/tst2.js b/javascript/ql/test/library-tests/Portals/src/m3/tst2.js deleted file mode 100644 index ae963ef6458..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m3/tst2.js +++ /dev/null @@ -1,5 +0,0 @@ -import { foo } from "m2"; -var o = { - y: "?" -}; -foo({ x: o }); diff --git a/javascript/ql/test/library-tests/Portals/src/m3/tst3.js b/javascript/ql/test/library-tests/Portals/src/m3/tst3.js deleted file mode 100644 index 33f1bce997b..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m3/tst3.js +++ /dev/null @@ -1,5 +0,0 @@ -import A from "m2"; -A.m("hi"); -A.s("there"); -new A("me").m("hi"); -new A("me").s("there"); diff --git a/javascript/ql/test/library-tests/Portals/src/m4/index.js b/javascript/ql/test/library-tests/Portals/src/m4/index.js deleted file mode 100644 index 71247fc87d9..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m4/index.js +++ /dev/null @@ -1 +0,0 @@ -exports.foo = function(x) {}; diff --git a/javascript/ql/test/library-tests/Portals/src/m4/package.json b/javascript/ql/test/library-tests/Portals/src/m4/package.json deleted file mode 100644 index a3bb655cba4..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m4/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "m4" -} diff --git a/javascript/ql/test/library-tests/Portals/src/m5/index.js b/javascript/ql/test/library-tests/Portals/src/m5/index.js deleted file mode 100644 index cc467c97fb8..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m5/index.js +++ /dev/null @@ -1,6 +0,0 @@ -const fs = require("fs"), - base64 = require("base-64/base64.js"); - -module.exports.readBase64 = function (f) { - return base64.encode(String(fs.readFileSync(f))); -}; diff --git a/javascript/ql/test/library-tests/Portals/src/m5/package.json b/javascript/ql/test/library-tests/Portals/src/m5/package.json deleted file mode 100644 index 90f440499e9..00000000000 --- a/javascript/ql/test/library-tests/Portals/src/m5/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "m5", - "dependencies": { - "base-64": "*" - } -} diff --git a/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected b/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected index e971020cdd6..fba49cf683b 100644 --- a/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected +++ b/javascript/ql/test/library-tests/SSA/GetRhsNode/GetRhsNode.expected @@ -1,14 +1,14 @@ -| tst.js:2:7:2:13 | a = g() | tst.js:2:7:2:7 | a | tst.js:2:11:2:13 | g() | -| tst.js:4:7:4:24 | { propB: b } = g() | tst.js:4:16:4:16 | b | tst.js:4:9:4:16 | propB: b | -| tst.js:6:7:6:34 | { propC ... } = g() | tst.js:6:16:6:16 | c | tst.js:6:9:6:16 | propC: c | -| tst.js:6:7:6:34 | { propC ... } = g() | tst.js:6:26:6:26 | d | tst.js:6:19:6:26 | propD: d | -| tst.js:8:7:8:41 | { array ... } = g() | tst.js:8:22:8:25 | elm1 | tst.js:8:22:8:25 | elm1 | -| tst.js:8:7:8:41 | { array ... } = g() | tst.js:8:28:8:31 | elm2 | tst.js:8:28:8:31 | elm2 | -| tst.js:17:3:17:22 | ({ propB: b }) = g() | tst.js:4:16:4:16 | b | tst.js:17:6:17:13 | propB: b | -| tst.js:19:3:19:32 | ({ prop ... ) = g() | tst.js:6:16:6:16 | c | tst.js:19:6:19:13 | propC: c | -| tst.js:19:3:19:32 | ({ prop ... ) = g() | tst.js:6:26:6:26 | d | tst.js:19:16:19:23 | propD: d | -| tst.js:21:3:21:22 | [ elm1, elm2 ] = g() | tst.js:8:22:8:25 | elm1 | tst.js:21:5:21:8 | elm1 | -| tst.js:21:3:21:22 | [ elm1, elm2 ] = g() | tst.js:8:28:8:31 | elm2 | tst.js:21:11:21:14 | elm2 | -| tst.js:31:12:31:23 | [elm1, elm2] | tst.js:31:13:31:16 | elm1 | tst.js:31:13:31:16 | elm1 | -| tst.js:31:12:31:23 | [elm1, elm2] | tst.js:31:19:31:22 | elm2 | tst.js:31:19:31:22 | elm2 | -| tst.js:31:26:31:40 | { prop: value } | tst.js:31:34:31:38 | value | tst.js:31:28:31:38 | prop: value | +| tst.js:2:7:2:7 | a = g() | tst.js:2:7:2:7 | a | tst.js:2:11:2:13 | g() | +| tst.js:4:16:4:16 | { propB: b } = g() | tst.js:4:16:4:16 | b | tst.js:4:9:4:16 | propB: b | +| tst.js:6:16:6:16 | { propC ... } = g() | tst.js:6:16:6:16 | c | tst.js:6:9:6:16 | propC: c | +| tst.js:6:26:6:26 | { propC ... } = g() | tst.js:6:26:6:26 | d | tst.js:6:19:6:26 | propD: d | +| tst.js:8:22:8:25 | { array ... } = g() | tst.js:8:22:8:25 | elm1 | tst.js:8:22:8:25 | elm1 | +| tst.js:8:28:8:31 | { array ... } = g() | tst.js:8:28:8:31 | elm2 | tst.js:8:28:8:31 | elm2 | +| tst.js:17:13:17:13 | ({ propB: b }) = g() | tst.js:4:16:4:16 | b | tst.js:17:6:17:13 | propB: b | +| tst.js:19:13:19:13 | ({ prop ... ) = g() | tst.js:6:16:6:16 | c | tst.js:19:6:19:13 | propC: c | +| tst.js:19:23:19:23 | ({ prop ... ) = g() | tst.js:6:26:6:26 | d | tst.js:19:16:19:23 | propD: d | +| tst.js:21:5:21:8 | [ elm1, elm2 ] = g() | tst.js:8:22:8:25 | elm1 | tst.js:21:5:21:8 | elm1 | +| tst.js:21:11:21:14 | [ elm1, elm2 ] = g() | tst.js:8:28:8:31 | elm2 | tst.js:21:11:21:14 | elm2 | +| tst.js:31:13:31:16 | [elm1, elm2] | tst.js:31:13:31:16 | elm1 | tst.js:31:13:31:16 | elm1 | +| tst.js:31:19:31:22 | [elm1, elm2] | tst.js:31:19:31:22 | elm2 | tst.js:31:19:31:22 | elm2 | +| tst.js:31:34:31:38 | { prop: value } | tst.js:31:34:31:38 | value | tst.js:31:28:31:38 | prop: value | diff --git a/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected b/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected index 77536822831..9bc6c472374 100644 --- a/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected +++ b/javascript/ql/test/library-tests/SSA/SSADefinition/SSADefinition.expected @@ -1,39 +1,39 @@ -| tst.js:1:1:1:1 | implicit initialization of y | +| tst.js:1:1:1:0 | implicit initialization of y | | tst.js:1:12:1:12 | x | | tst.js:3:7:3:7 | x = refine[guard: x is false](def@1:12) | | tst.js:3:7:3:7 | x = refine[guard: x is true](def@1:12) | -| tst.js:4:5:4:9 | y = x | -| tst.js:5:3:5:3 | x = phi(refine[guard: x is false]@3:7, refine[guard: x is true]@3:7) | -| tst.js:5:3:5:3 | y = phi(def@4:5, implicitInit@1:1) | -| tst.js:5:3:5:7 | z = y | +| tst.js:4:5:4:5 | y = x | +| tst.js:5:3:5:3 | z = y | +| tst.js:5:3:5:8 | x = phi(refine[guard: x is false]@3:7, refine[guard: x is true]@3:7) | +| tst.js:5:3:5:8 | y = phi(def@4:5, implicitInit@1:1) | | tst.js:6:10:6:10 | x = phi(phi@5:3, refine[guard: x is true]@6:10) | | tst.js:6:10:6:10 | x = refine[guard: x is true](phi@6:10) | | tst.js:6:10:6:10 | z = phi(def@5:3, def@7:5) | -| tst.js:7:5:7:7 | z++ | -| tst.js:11:1:11:1 | implicit initialization of x | +| tst.js:7:5:7:5 | z++ | +| tst.js:11:1:11:0 | implicit initialization of x | | tst.js:11:12:11:12 | x | | tst.js:12:3:12:2 | capture variable x | -| tst.js:15:3:15:8 | x = 42 | -| tst.js:18:1:18:1 | implicit initialization of x | -| tst.js:19:7:19:11 | x = 0 | +| tst.js:15:3:15:3 | x = 42 | +| tst.js:18:1:18:0 | implicit initialization of x | +| tst.js:19:7:19:7 | x = 0 | +| tst.js:20:3:20:2 | capture variable x | | tst.js:20:3:20:2 | capture variable x | | tst.js:20:13:20:16 | iter | -| tst.js:22:5:22:9 | capture variable x | -| tst.js:25:7:25:18 | gen = iter() | -| tst.js:27:3:27:5 | ++x | -| tst.js:31:1:31:1 | implicit initialization of x | -| tst.js:31:1:31:1 | implicit initialization of y | +| tst.js:25:7:25:9 | gen = iter() | +| tst.js:27:5:27:5 | ++x | +| tst.js:31:1:31:0 | capture variable x | +| tst.js:31:1:31:0 | implicit initialization of x | +| tst.js:31:1:31:0 | implicit initialization of y | | tst.js:32:3:32:2 | capture variable x | | tst.js:32:3:32:2 | capture variable y | | tst.js:32:12:32:16 | inner | -| tst.js:34:5:34:10 | x += y | -| tst.js:36:7:36:11 | x = 0 | -| tst.js:36:14:36:18 | y = 1 | -| tst.js:37:3:37:9 | capture variable x | -| tst.js:41:1:41:1 | implicit initialization of x | -| tst.js:42:7:42:11 | x = 0 | -| tst.js:42:14:42:18 | y = 1 | -| tst.js:43:7:43:37 | inc = ( ... */ ++x | +| tst.js:34:5:34:5 | x += y | +| tst.js:36:7:36:7 | x = 0 | +| tst.js:36:14:36:14 | y = 1 | +| tst.js:41:1:41:0 | capture variable x | +| tst.js:41:1:41:0 | implicit initialization of x | +| tst.js:42:7:42:7 | x = 0 | +| tst.js:42:14:42:14 | y = 1 | +| tst.js:43:7:43:9 | inc = ( ... */ ++x | | tst.js:43:13:43:12 | capture variable x | -| tst.js:43:35:43:37 | ++x | -| tst.js:44:3:44:11 | capture variable x | +| tst.js:43:37:43:37 | ++x | diff --git a/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected b/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected index fa1632d2757..c21fbad3292 100644 --- a/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected +++ b/javascript/ql/test/library-tests/StringConcatenation/StringOps.expected @@ -6,26 +6,26 @@ concatenation | html-concat.js:3:14:3:26 | `${x}` | | html-concat.js:5:21:5:47 | `Hey ` | | html-concat.js:7:18:10:24 | `\\n H ... m!` | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | -| html-concat.js:14:3:14:13 | buffer | +| html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | -| html-concat.js:15:3:15:15 | buffer | +| html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | -| tst.js:3:3:3:12 | x | +| tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | -| tst.js:4:3:4:14 | x | +| tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | -| tst.js:5:3:5:13 | x | +| tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | -| tst.js:12:5:12:26 | x | +| tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | | tst.js:12:10:12:18 | "one" + y | | tst.js:12:10:12:26 | "one" + y + "two" | -| tst.js:14:3:14:13 | x | +| tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | | tst.js:19:11:19:23 | "one" + "two" | -| tst.js:20:3:20:25 | x | +| tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | | tst.js:20:9:20:24 | "three" + "four" | | tst.js:21:10:21:19 | x + "five" | @@ -43,9 +43,9 @@ concatenation | tst.js:61:10:61:34 | `first ... } last` | | tst.js:77:15:77:37 | ["one", ... three"] | | tst.js:79:12:79:23 | array.join() | -| tst.js:87:5:87:14 | x | +| tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | -| tst.js:89:3:89:14 | x | +| tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | | tst.js:95:7:95:30 | x.conca ... three') | | tst.js:104:11:104:23 | "foo" + "bar" | @@ -262,31 +262,31 @@ concatenationNode | html-concat.js:8:13:8:13 | x | | html-concat.js:8:15:10:23 | .\\n \\n ... um! | | html-concat.js:13:3:13:8 | buffer | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | | html-concat.js:13:13:13:18 | '
  • ' | | html-concat.js:14:3:14:8 | buffer | -| html-concat.js:14:3:14:13 | buffer | +| html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | | html-concat.js:14:13:14:13 | x | | html-concat.js:15:3:15:8 | buffer | -| html-concat.js:15:3:15:15 | buffer | +| html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | | html-concat.js:15:13:15:15 | '!' | | tst.js:3:3:3:3 | x | -| tst.js:3:3:3:12 | x | +| tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | | tst.js:3:8:3:12 | "two" | | tst.js:4:3:4:3 | x | -| tst.js:4:3:4:14 | x | +| tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | | tst.js:4:8:4:14 | "three" | | tst.js:5:3:5:3 | x | -| tst.js:5:3:5:13 | x | +| tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | | tst.js:5:8:5:13 | "four" | | tst.js:12:5:12:5 | x | -| tst.js:12:5:12:26 | x | +| tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | | tst.js:12:10:12:14 | "one" | | tst.js:12:10:12:18 | "one" + y | @@ -294,14 +294,14 @@ concatenationNode | tst.js:12:18:12:18 | y | | tst.js:12:22:12:26 | "two" | | tst.js:14:3:14:3 | x | -| tst.js:14:3:14:13 | x | +| tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | | tst.js:14:8:14:13 | "last" | | tst.js:19:11:19:15 | "one" | | tst.js:19:11:19:23 | "one" + "two" | | tst.js:19:19:19:23 | "two" | | tst.js:20:3:20:3 | x | -| tst.js:20:3:20:25 | x | +| tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:9:20:15 | "three" | @@ -349,11 +349,11 @@ concatenationNode | tst.js:77:30:77:36 | "three" | | tst.js:79:12:79:23 | array.join() | | tst.js:87:5:87:5 | x | -| tst.js:87:5:87:14 | x | +| tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | | tst.js:87:10:87:14 | 'two' | | tst.js:89:3:89:3 | x | -| tst.js:89:3:89:14 | x | +| tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | | tst.js:89:8:89:14 | 'three' | | tst.js:95:7:95:7 | x | @@ -396,46 +396,46 @@ operand | html-concat.js:7:18:10:24 | `\\n H ... m!` | 0 | html-concat.js:7:19:8:10 | \\n Hello | | html-concat.js:7:18:10:24 | `\\n H ... m!` | 1 | html-concat.js:8:13:8:13 | x | | html-concat.js:7:18:10:24 | `\\n H ... m!` | 2 | html-concat.js:8:15:10:23 | .\\n \\n ... um! | -| html-concat.js:13:3:13:18 | buffer | 0 | html-concat.js:13:3:13:8 | buffer | -| html-concat.js:13:3:13:18 | buffer | 1 | html-concat.js:13:13:13:18 | '
  • ' | +| html-concat.js:13:3:13:8 | buffer | 0 | html-concat.js:13:3:13:8 | buffer | +| html-concat.js:13:3:13:8 | buffer | 1 | html-concat.js:13:13:13:18 | '
  • ' | | html-concat.js:13:3:13:18 | buffer += '
  • ' | 0 | html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | 1 | html-concat.js:13:13:13:18 | '
  • ' | -| html-concat.js:14:3:14:13 | buffer | 0 | html-concat.js:14:3:14:8 | buffer | -| html-concat.js:14:3:14:13 | buffer | 1 | html-concat.js:14:13:14:13 | x | +| html-concat.js:14:3:14:8 | buffer | 0 | html-concat.js:14:3:14:8 | buffer | +| html-concat.js:14:3:14:8 | buffer | 1 | html-concat.js:14:13:14:13 | x | | html-concat.js:14:3:14:13 | buffer += x | 0 | html-concat.js:14:3:14:8 | buffer | | html-concat.js:14:3:14:13 | buffer += x | 1 | html-concat.js:14:13:14:13 | x | -| html-concat.js:15:3:15:15 | buffer | 0 | html-concat.js:15:3:15:8 | buffer | -| html-concat.js:15:3:15:15 | buffer | 1 | html-concat.js:15:13:15:15 | '!' | +| html-concat.js:15:3:15:8 | buffer | 0 | html-concat.js:15:3:15:8 | buffer | +| html-concat.js:15:3:15:8 | buffer | 1 | html-concat.js:15:13:15:15 | '!' | | html-concat.js:15:3:15:15 | buffer += '!' | 0 | html-concat.js:15:3:15:8 | buffer | | html-concat.js:15:3:15:15 | buffer += '!' | 1 | html-concat.js:15:13:15:15 | '!' | -| tst.js:3:3:3:12 | x | 0 | tst.js:3:3:3:3 | x | -| tst.js:3:3:3:12 | x | 1 | tst.js:3:8:3:12 | "two" | +| tst.js:3:3:3:3 | x | 0 | tst.js:3:3:3:3 | x | +| tst.js:3:3:3:3 | x | 1 | tst.js:3:8:3:12 | "two" | | tst.js:3:3:3:12 | x += "two" | 0 | tst.js:3:3:3:3 | x | | tst.js:3:3:3:12 | x += "two" | 1 | tst.js:3:8:3:12 | "two" | -| tst.js:4:3:4:14 | x | 0 | tst.js:4:3:4:3 | x | -| tst.js:4:3:4:14 | x | 1 | tst.js:4:8:4:14 | "three" | +| tst.js:4:3:4:3 | x | 0 | tst.js:4:3:4:3 | x | +| tst.js:4:3:4:3 | x | 1 | tst.js:4:8:4:14 | "three" | | tst.js:4:3:4:14 | x += "three" | 0 | tst.js:4:3:4:3 | x | | tst.js:4:3:4:14 | x += "three" | 1 | tst.js:4:8:4:14 | "three" | -| tst.js:5:3:5:13 | x | 0 | tst.js:5:3:5:3 | x | -| tst.js:5:3:5:13 | x | 1 | tst.js:5:8:5:13 | "four" | +| tst.js:5:3:5:3 | x | 0 | tst.js:5:3:5:3 | x | +| tst.js:5:3:5:3 | x | 1 | tst.js:5:8:5:13 | "four" | | tst.js:5:3:5:13 | x += "four" | 0 | tst.js:5:3:5:3 | x | | tst.js:5:3:5:13 | x += "four" | 1 | tst.js:5:8:5:13 | "four" | -| tst.js:12:5:12:26 | x | 0 | tst.js:12:5:12:5 | x | -| tst.js:12:5:12:26 | x | 1 | tst.js:12:10:12:26 | "one" + y + "two" | +| tst.js:12:5:12:5 | x | 0 | tst.js:12:5:12:5 | x | +| tst.js:12:5:12:5 | x | 1 | tst.js:12:10:12:26 | "one" + y + "two" | | tst.js:12:5:12:26 | x += "o ... + "two" | 0 | tst.js:12:5:12:5 | x | | tst.js:12:5:12:26 | x += "o ... + "two" | 1 | tst.js:12:10:12:26 | "one" + y + "two" | | tst.js:12:10:12:18 | "one" + y | 0 | tst.js:12:10:12:14 | "one" | | tst.js:12:10:12:18 | "one" + y | 1 | tst.js:12:18:12:18 | y | | tst.js:12:10:12:26 | "one" + y + "two" | 0 | tst.js:12:10:12:18 | "one" + y | | tst.js:12:10:12:26 | "one" + y + "two" | 1 | tst.js:12:22:12:26 | "two" | -| tst.js:14:3:14:13 | x | 0 | tst.js:14:3:14:3 | x | -| tst.js:14:3:14:13 | x | 1 | tst.js:14:8:14:13 | "last" | +| tst.js:14:3:14:3 | x | 0 | tst.js:14:3:14:3 | x | +| tst.js:14:3:14:3 | x | 1 | tst.js:14:8:14:13 | "last" | | tst.js:14:3:14:13 | x += "last" | 0 | tst.js:14:3:14:3 | x | | tst.js:14:3:14:13 | x += "last" | 1 | tst.js:14:8:14:13 | "last" | | tst.js:19:11:19:23 | "one" + "two" | 0 | tst.js:19:11:19:15 | "one" | | tst.js:19:11:19:23 | "one" + "two" | 1 | tst.js:19:19:19:23 | "two" | -| tst.js:20:3:20:25 | x | 0 | tst.js:20:3:20:3 | x | -| tst.js:20:3:20:25 | x | 1 | tst.js:20:8:20:25 | ("three" + "four") | +| tst.js:20:3:20:3 | x | 0 | tst.js:20:3:20:3 | x | +| tst.js:20:3:20:3 | x | 1 | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:3:20:25 | x += (" ... "four") | 0 | tst.js:20:3:20:3 | x | | tst.js:20:3:20:25 | x += (" ... "four") | 1 | tst.js:20:8:20:25 | ("three" + "four") | | tst.js:20:9:20:24 | "three" + "four" | 0 | tst.js:20:9:20:15 | "three" | @@ -472,12 +472,12 @@ operand | tst.js:77:15:77:37 | ["one", ... three"] | 1 | tst.js:77:23:77:27 | "two" | | tst.js:77:15:77:37 | ["one", ... three"] | 2 | tst.js:77:30:77:36 | "three" | | tst.js:79:12:79:23 | array.join() | 0 | tst.js:77:15:77:37 | ["one", ... three"] | -| tst.js:87:5:87:14 | x | 0 | tst.js:87:5:87:5 | x | -| tst.js:87:5:87:14 | x | 1 | tst.js:87:10:87:14 | 'two' | +| tst.js:87:5:87:5 | x | 0 | tst.js:87:5:87:5 | x | +| tst.js:87:5:87:5 | x | 1 | tst.js:87:10:87:14 | 'two' | | tst.js:87:5:87:14 | x += 'two' | 0 | tst.js:87:5:87:5 | x | | tst.js:87:5:87:14 | x += 'two' | 1 | tst.js:87:10:87:14 | 'two' | -| tst.js:89:3:89:14 | x | 0 | tst.js:89:3:89:3 | x | -| tst.js:89:3:89:14 | x | 1 | tst.js:89:8:89:14 | 'three' | +| tst.js:89:3:89:3 | x | 0 | tst.js:89:3:89:3 | x | +| tst.js:89:3:89:3 | x | 1 | tst.js:89:8:89:14 | 'three' | | tst.js:89:3:89:14 | x += 'three' | 0 | tst.js:89:3:89:3 | x | | tst.js:89:3:89:14 | x += 'three' | 1 | tst.js:89:8:89:14 | 'three' | | tst.js:95:7:95:30 | x.conca ... three') | 0 | tst.js:95:7:95:7 | x | @@ -553,7 +553,7 @@ htmlRoot | html-concat.js:3:14:3:26 | `${x}` | | html-concat.js:5:21:5:47 | `Hey ` | | html-concat.js:7:18:10:24 | `\\n H ... m!` | -| html-concat.js:13:3:13:18 | buffer | +| html-concat.js:13:3:13:8 | buffer | | html-concat.js:13:3:13:18 | buffer += '
  • ' | htmlLeaf | html-concat.js:2:15:2:17 | | diff --git a/javascript/ql/test/library-tests/TripleDot/array-with.js b/javascript/ql/test/library-tests/TripleDot/array-with.js new file mode 100644 index 00000000000..73c09a434ac --- /dev/null +++ b/javascript/ql/test/library-tests/TripleDot/array-with.js @@ -0,0 +1,25 @@ +function t1() { + const arr = [1, 2, 3]; + const newArr = arr.with(1, source('with.1')); + sink(newArr[1]); // $ hasValueFlow=with.1 +} + +function t2() { + const arr = [source('with.2.1'), 2, source('with.2.3')]; + const newArr = arr.with(1, 'replaced'); + sink(newArr[0]); // $ hasValueFlow=with.2.1 + sink(newArr[2]); // $ hasValueFlow=with.2.3 +} + +function t3() { + const arr = [1, 2, 3]; + const index = source('with.3.index'); + const newArr = arr.with(index, 'new value'); + // No assertions here as the index is tainted, not the value +} + +function t4() { + const arr = [1, 2, 3]; + const newArr = arr.with(1, source('with.4')); + sink(arr[1]); // This should NOT have value flow as with() returns a new array +} diff --git a/javascript/ql/test/library-tests/TripleDot/promise-try.js b/javascript/ql/test/library-tests/TripleDot/promise-try.js new file mode 100644 index 00000000000..9c96ee73426 --- /dev/null +++ b/javascript/ql/test/library-tests/TripleDot/promise-try.js @@ -0,0 +1,29 @@ +async function t1() { + const promise = Promise.try(() => { + return source('try.1'); + }); + sink(await promise); // $ hasValueFlow=try.1 +} + +async function t2() { + const promise = Promise.try((x) => { + return x + }, source('try.2')); + sink(await promise); // $ hasValueFlow=try.2 +} + +async function t3() { + const promise = Promise.try((x) => { + throw x; + }, source('try.3')); + promise.catch(err => { + sink(err); // $ hasValueFlow=try.3 + }); +} + +async function t4() { + const promise = Promise.try((x, y) => { + return y; + }, source('try.4.1'), source('try.4.2')); + sink(await promise); // $ hasValueFlow=try.4.2 +} diff --git a/javascript/ql/test/library-tests/TypeScript/ImportDefer/test-js.js b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test-js.js new file mode 100644 index 00000000000..a3a80435538 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test-js.js @@ -0,0 +1,3 @@ +import defer * as deferred from "somewhere"; +import * as normal from "somewhere"; +import defer from "somewhere"; diff --git a/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.expected b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.expected new file mode 100644 index 00000000000..c5d2d2e3f3d --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.expected @@ -0,0 +1,2 @@ +| test-js.js:1:1:1:44 | import ... where"; | +| tst.ts:1:1:1:44 | import ... where"; | diff --git a/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.ql b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.ql new file mode 100644 index 00000000000..b512330a096 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/ImportDefer/test.ql @@ -0,0 +1,3 @@ +import javascript + +query predicate deferredImports(ImportDeclaration decl) { decl.isDeferredImport() } diff --git a/javascript/ql/test/library-tests/TypeScript/ImportDefer/tst.ts b/javascript/ql/test/library-tests/TypeScript/ImportDefer/tst.ts new file mode 100644 index 00000000000..513394b4c14 --- /dev/null +++ b/javascript/ql/test/library-tests/TypeScript/ImportDefer/tst.ts @@ -0,0 +1,4 @@ +import defer * as deferred from "somewhere"; +import type * as t from "somewhere"; +import * as normal from "somewhere"; +import defer from "somewhere"; diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts index 3082f40600f..8e25b67918a 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/EmptyName/test.ts @@ -1,9 +1,9 @@ type Mapped = { -     [mk in MK]: string + [mk in MK]: string }; export function fn(ev: Mapped) { -    const props: Mapped = { -        ...ev -    }; + const props: Mapped = { + ...ev + }; } diff --git a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts index 1726e5abafb..a3ed2046836 100644 --- a/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts +++ b/javascript/ql/test/library-tests/TypeScript/RegressionTests/SemicolonInName/test.ts @@ -1,9 +1,9 @@ type Mapped = { -     [mk in MK]: string + [mk in MK]: string }; export function fn(ev: Mapped) { -    const props: Mapped = { -        ...ev -    }; + const props: Mapped = { + ...ev + }; } diff --git a/javascript/ql/test/library-tests/frameworks/AsyncPackage/AsyncTaintTracking.expected b/javascript/ql/test/library-tests/frameworks/AsyncPackage/AsyncTaintTracking.expected index 168f5ec5ace..95ee8fe452b 100644 --- a/javascript/ql/test/library-tests/frameworks/AsyncPackage/AsyncTaintTracking.expected +++ b/javascript/ql/test/library-tests/frameworks/AsyncPackage/AsyncTaintTracking.expected @@ -1,12 +1,24 @@ legacyDataFlowDifference -| each.js:11:9:11:16 | source() | each.js:13:12:13:15 | item | only flow with OLD data flow library | -| map.js:10:13:10:20 | source() | map.js:12:14:12:17 | item | only flow with OLD data flow library | -| map.js:26:13:26:20 | source() | map.js:28:27:28:32 | result | only flow with OLD data flow library | -| sortBy.js:10:22:10:29 | source() | sortBy.js:12:27:12:32 | result | only flow with OLD data flow library | +| each.js:11:9:11:16 | source() | each.js:13:12:13:15 | item | only flow with NEW data flow library | +| map.js:14:13:14:20 | source() | map.js:16:14:16:17 | item | only flow with NEW data flow library | +| map.js:30:13:30:20 | source() | map.js:32:27:32:32 | result | only flow with NEW data flow library | +| map.js:40:13:40:20 | source() | map.js:11:10:11:10 | x | only flow with NEW data flow library | +| map.js:42:12:42:19 | source() | map.js:11:10:11:10 | x | only flow with NEW data flow library | +| map.js:44:16:44:23 | source() | map.js:11:10:11:10 | x | only flow with NEW data flow library | +| map.js:46:18:46:25 | source() | map.js:11:10:11:10 | x | only flow with NEW data flow library | +| sortBy.js:10:22:10:29 | source() | sortBy.js:12:27:12:32 | result | only flow with NEW data flow library | #select -| map.js:20:19:20:26 | source() | map.js:23:27:23:32 | result | -| waterfall.js:8:30:8:37 | source() | waterfall.js:11:12:11:16 | taint | -| waterfall.js:8:30:8:37 | source() | waterfall.js:20:10:20:14 | taint | -| waterfall.js:28:18:28:25 | source() | waterfall.js:39:10:39:12 | err | -| waterfall.js:46:22:46:29 | source() | waterfall.js:49:12:49:16 | taint | -| waterfall.js:46:22:46:29 | source() | waterfall.js:55:10:55:14 | taint | +| each.js:11:9:11:16 | source() | each.js:13:12:13:15 | item | +| map.js:14:13:14:20 | source() | map.js:16:14:16:17 | item | +| map.js:24:19:24:26 | source() | map.js:27:27:27:32 | result | +| map.js:30:13:30:20 | source() | map.js:32:27:32:32 | result | +| map.js:40:13:40:20 | source() | map.js:11:10:11:10 | x | +| map.js:42:12:42:19 | source() | map.js:11:10:11:10 | x | +| map.js:44:16:44:23 | source() | map.js:11:10:11:10 | x | +| map.js:46:18:46:25 | source() | map.js:11:10:11:10 | x | +| sortBy.js:10:22:10:29 | source() | sortBy.js:12:27:12:32 | result | +| waterfall.js:16:30:16:37 | source() | waterfall.js:19:12:19:16 | taint | +| waterfall.js:16:30:16:37 | source() | waterfall.js:28:10:28:14 | taint | +| waterfall.js:36:18:36:25 | source() | waterfall.js:47:10:47:12 | err | +| waterfall.js:54:22:54:29 | source() | waterfall.js:57:12:57:16 | taint | +| waterfall.js:54:22:54:29 | source() | waterfall.js:63:10:63:14 | taint | diff --git a/javascript/ql/test/library-tests/frameworks/AsyncPackage/map.js b/javascript/ql/test/library-tests/frameworks/AsyncPackage/map.js index ed7e64b01fa..b1e9ecc883b 100644 --- a/javascript/ql/test/library-tests/frameworks/AsyncPackage/map.js +++ b/javascript/ql/test/library-tests/frameworks/AsyncPackage/map.js @@ -7,6 +7,10 @@ function sink(x) { console.log(x) } +function call_sink(x) { + sink(x) +} + async_.map([source()], (item, cb) => { sink(item), // NOT OK @@ -32,3 +36,12 @@ async_.map(['safe'], (item, cb) => cb(null, item), (err, result) => sink(result) // OK ); + +async_.map([source()], call_sink) // NOT OK + +async_.map(source().prop, call_sink) // NOT OK + +async_.map({a: source()}, call_sink) // NOT OK + +async_.mapLimit([source()], 1, call_sink) // NOT OK + diff --git a/javascript/ql/test/library-tests/frameworks/AsyncPackage/waterfall.js b/javascript/ql/test/library-tests/frameworks/AsyncPackage/waterfall.js index 439ac48674a..8554d048d98 100644 --- a/javascript/ql/test/library-tests/frameworks/AsyncPackage/waterfall.js +++ b/javascript/ql/test/library-tests/frameworks/AsyncPackage/waterfall.js @@ -1,7 +1,15 @@ let async_ = require('async'); let waterfall = require('a-sync-waterfall'); -var source, sink, somethingWrong; +function source() { + return 'TAINT' +} + +function sink(x) { + console.log(x) +} + +var somethingWrong; async_.waterfall([ function(callback) { diff --git a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected index 72fb0a737b8..a51c8e632b1 100644 --- a/javascript/ql/test/library-tests/frameworks/Electron/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Electron/tests.expected @@ -1,7 +1,7 @@ browserObject -| electron.js:3:5:3:48 | bw | +| electron.js:3:5:3:6 | bw | | electron.js:3:10:3:48 | new Bro ... s: {}}) | -| electron.js:4:5:4:46 | bv | +| electron.js:4:5:4:6 | bv | | electron.js:4:10:4:46 | new Bro ... s: {}}) | | electron.js:35:1:37:1 | return of function foo | | electron.js:35:14:35:14 | x | @@ -11,7 +11,7 @@ browserObject | electron.js:39:5:39:6 | bw | | electron.js:40:1:40:7 | foo(bv) | | electron.js:40:5:40:6 | bv | -| electron.js:62:7:62:59 | win | +| electron.js:62:7:62:9 | win | | electron.js:62:13:62:59 | new Bro ... 1500 }) | | electron.js:63:3:63:5 | win | | electron.js:65:18:65:20 | win | diff --git a/javascript/ql/test/library-tests/frameworks/Express/src/json.js b/javascript/ql/test/library-tests/frameworks/Express/src/json.js new file mode 100644 index 00000000000..6b87cad68cf --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/Express/src/json.js @@ -0,0 +1,10 @@ +const express = require('express'); +const app = express(); + +app.get('/test/json', function(req, res) { + res.json(req.query.data); +}); + +app.get('/test/jsonp', function(req, res) { + res.jsonp(req.query.data); +}); diff --git a/javascript/ql/test/library-tests/frameworks/Express/tests.expected b/javascript/ql/test/library-tests/frameworks/Express/tests.expected index ec4253740f7..9007a1ed984 100644 --- a/javascript/ql/test/library-tests/frameworks/Express/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/Express/tests.expected @@ -131,6 +131,12 @@ test_isRequest | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:7:2:7:4 | req | +| src/json.js:4:32:4:34 | req | +| src/json.js:4:32:4:34 | req | +| src/json.js:5:14:5:16 | req | +| src/json.js:8:33:8:35 | req | +| src/json.js:8:33:8:35 | req | +| src/json.js:9:15:9:17 | req | | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:6:5:6:7 | req | @@ -201,6 +207,8 @@ test_RouteSetup | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | false | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | false | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | false | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | false | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | false | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | true | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | false | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | src/middleware-flow.js:37:22:37:30 | express() | false | @@ -345,6 +353,14 @@ test_isResponse | src/inheritedFromNode.js:4:29:4:31 | res | | src/inheritedFromNode.js:5:2:5:4 | res | | src/inheritedFromNode.js:6:2:6:4 | res | +| src/json.js:4:37:4:39 | res | +| src/json.js:4:37:4:39 | res | +| src/json.js:5:5:5:7 | res | +| src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:38:8:40 | res | +| src/json.js:8:38:8:40 | res | +| src/json.js:9:5:9:7 | res | +| src/json.js:9:5:9:29 | res.jso ... y.data) | | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:23:23:25 | res | @@ -575,6 +591,12 @@ test_RequestExpr | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:7:2:7:4 | req | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:32:4:34 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:4:32:4:34 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:14:5:16 | req | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:33:8:35 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:8:33:8:35 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:17 | req | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:6:5:6:7 | req | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | @@ -627,6 +649,7 @@ test_appCreation | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -651,6 +674,8 @@ test_ResponseBody | src/express.js:61:12:61:25 | req.params.foo | src/express.js:59:23:63:1 | functio ... res);\\n} | | src/express.js:67:12:67:25 | req.params.foo | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | src/express.js:71:23:75:1 | functio ... res);\\n} | +| src/json.js:5:14:5:27 | req.query.data | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:8:18:8:22 | value | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:15:12:15:18 | "Hello" | src/params.js:14:24:16:1 | functio ... lo");\\n} | test_ResponseExpr @@ -820,6 +845,14 @@ test_ResponseExpr | src/inheritedFromNode.js:4:29:4:31 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:5:2:5:4 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | | src/inheritedFromNode.js:6:2:6:4 | res | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:37:4:39 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:4:37:4:39 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:5:5:7 | res | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:5:5:5:28 | res.jso ... y.data) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:38:8:40 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:8:38:8:40 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:7 | res | src/json.js:8:24:10:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:29 | res.jso ... y.data) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:5:25:5:27 | res | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:30:17:32 | res | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:23:23:23:25 | res | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | @@ -940,6 +973,8 @@ test_RouteHandler | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:36:65:38 | req | src/express.js:65:41:65:43 | res | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:32:71:34 | req | src/express.js:71:37:71:39 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:29:4:31 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | src/json.js:4:37:4:39 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | src/json.js:8:38:8:40 | res | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:25:17:27 | req | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | src/middleware-flow.js:23:18:23:20 | req | src/middleware-flow.js:23:23:23:25 | res | @@ -972,6 +1007,8 @@ test_HeaderDefinition | src/express.js:66:3:66:42 | res.hea ... plain") | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:72:3:72:41 | res.hea ... /html") | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:6:2:6:16 | res.setHeader() | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:5:5:5:28 | res.jso ... y.data) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:5:9:29 | res.jso ... y.data) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/responseExprs.js:19:5:19:16 | res.append() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | | src/responseExprs.js:37:5:37:28 | f(res.a ... ppend() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | | src/responseExprs.js:37:7:37:18 | res.append() | src/responseExprs.js:16:30:42:1 | functio ... }\\n} | @@ -1036,6 +1073,8 @@ test_RouteHandlerExpr | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:1:69:2 | app.get ... es);\\n}) | true | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:1:75:2 | app.get ... es);\\n}) | true | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | true | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:1:6:2 | app.get ... ta);\\n}) | true | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:1:10:2 | app.get ... ta);\\n}) | true | | src/middleware-flow.js:13:16:13:24 | installDb | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | false | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | true | | src/middleware-flow.js:27:23:27:32 | routers[p] | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | true | @@ -1068,6 +1107,7 @@ test_isRouterCreation | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -1111,6 +1151,8 @@ test_RequestInputAccess | src/express.js:67:12:67:25 | req.params.foo | parameter | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | url | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:7:2:7:8 | req.url | url | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:5:14:5:27 | req.query.data | parameter | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | parameter | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:4:35:4:39 | value | parameter | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:5:17:5:28 | req.query.xx | parameter | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:6:17:6:24 | req.body | body | src/params.js:4:18:12:1 | (req, r ... }\\n} | @@ -1125,6 +1167,8 @@ test_ResponseSendArgument | src/express.js:61:12:61:25 | req.params.foo | src/express.js:59:23:63:1 | functio ... res);\\n} | | src/express.js:67:12:67:25 | req.params.foo | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:73:12:73:19 | req.path | src/express.js:71:23:75:1 | functio ... res);\\n} | +| src/json.js:5:14:5:27 | req.query.data | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:9:15:9:28 | req.query.data | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/params.js:8:18:8:22 | value | src/params.js:4:18:12:1 | (req, r ... }\\n} | | src/params.js:15:12:15:18 | "Hello" | src/params.js:14:24:16:1 | functio ... lo");\\n} | test_RouteSetup_getRouter @@ -1182,6 +1226,8 @@ test_RouteSetup_getRouter | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:2:13:2:21 | express() | @@ -1226,6 +1272,8 @@ test_RouteSetup_getServer | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | src/middleware-flow.js:37:22:37:30 | express() | @@ -1266,6 +1314,8 @@ test_StandardRouteHandler | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:2:11:2:19 | express() | src/express.js:65:36:65:38 | req | src/express.js:65:41:65:43 | res | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:2:11:2:19 | express() | src/express.js:71:32:71:34 | req | src/express.js:71:37:71:39 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:2:11:2:19 | express() | src/inheritedFromNode.js:4:24:4:26 | req | src/inheritedFromNode.js:4:29:4:31 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:2:13:2:21 | express() | src/json.js:4:32:4:34 | req | src/json.js:4:37:4:39 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:2:13:2:21 | express() | src/json.js:8:33:8:35 | req | src/json.js:8:38:8:40 | res | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:5:20:5:22 | req | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:17:25:17:27 | req | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | src/middleware-flow.js:37:22:37:30 | express() | src/middleware-flow.js:39:24:39:26 | req | src/middleware-flow.js:39:29:39:31 | res | @@ -1322,6 +1372,8 @@ test_HeaderDefinition_defines | src/express.js:60:3:60:47 | res.hea ... n/xml") | content-type | application/xml | | src/express.js:66:3:66:42 | res.hea ... plain") | content-type | text/plain | | src/express.js:72:3:72:41 | res.hea ... /html") | content-type | text/html | +| src/json.js:5:5:5:28 | res.jso ... y.data) | content-type | application/json | +| src/json.js:9:5:9:29 | res.jso ... y.data) | content-type | application/json | test_RouteHandlerExpr_getBody | src/advanced-routehandler-registration.js:51:9:51:60 | (req, r ... tever") | src/advanced-routehandler-registration.js:51:9:51:60 | (req, r ... tever") | | src/advanced-routehandler-registration.js:64:9:64:53 | (req, r ... q, res) | src/advanced-routehandler-registration.js:64:9:64:53 | (req, r ... q, res) | @@ -1346,6 +1398,8 @@ test_RouteHandlerExpr_getBody | src/express.js:65:27:69:1 | functio ... res);\\n} | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:23:75:1 | functio ... res);\\n} | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:16:13:24 | installDb | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | @@ -1466,6 +1520,8 @@ test_RouteSetup_getARouteHandler | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | @@ -1526,6 +1582,8 @@ test_RouteSetup_getRequestMethod | src/express.js:65:1:69:2 | app.get ... es);\\n}) | GET | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | GET | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | POST | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | GET | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | GET | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | GET | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | GET | | src/middleware-flow.js:39:1:43:2 | unrelat ... .db;\\n}) | GET | @@ -1699,6 +1757,12 @@ test_RouteHandler_getARequestExpr | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:24:4:26 | req | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:7:2:7:4 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:32:4:34 | req | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:14:5:16 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:33:8:35 | req | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:15:9:17 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:20:5:22 | req | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:6:5:6:7 | req | @@ -1909,6 +1973,14 @@ test_RouteHandler_getAResponseExpr | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:4:29:4:31 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:5:2:5:4 | res | | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | src/inheritedFromNode.js:6:2:6:4 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:37:4:39 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:4:37:4:39 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:5:5:7 | res | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:38:8:40 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:8:38:8:40 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:5:9:7 | res | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | src/json.js:9:5:9:29 | res.jso ... y.data) | | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | src/middleware-flow.js:5:25:5:27 | res | | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | src/middleware-flow.js:17:30:17:32 | res | | src/middleware-flow.js:23:17:23:41 | (req, r ... q.db; } | src/middleware-flow.js:23:23:23:25 | res | @@ -2041,6 +2113,8 @@ test_RouteSetup_getRouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | 0 | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | 0 | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | 0 | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | 0 | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | 0 | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | 0 | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | 0 | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | 0 | src/middleware-flow.js:27:23:27:32 | routers[p] | @@ -2073,6 +2147,8 @@ test_HeaderDefinition_getAHeaderName | src/express.js:60:3:60:47 | res.hea ... n/xml") | content-type | | src/express.js:66:3:66:42 | res.hea ... plain") | content-type | | src/express.js:72:3:72:41 | res.hea ... /html") | content-type | +| src/json.js:5:5:5:28 | res.jso ... y.data) | content-type | +| src/json.js:9:5:9:29 | res.jso ... y.data) | content-type | test_RouteHandlerExpr_getAsSubRouter | src/csurf-example.js:13:17:13:19 | api | src/csurf-example.js:30:16:30:35 | new express.Router() | | src/express2.js:6:9:6:14 | router | src/express2.js:2:14:2:23 | e.Router() | @@ -2089,6 +2165,8 @@ test_RouteHandler_getAResponseHeader | src/express.js:65:27:69:1 | functio ... res);\\n} | content-type | src/express.js:66:3:66:42 | res.hea ... plain") | | src/express.js:71:23:75:1 | functio ... res);\\n} | access-control-allow-credentials | src/express.js:12:3:12:54 | arg.hea ... , true) | | src/express.js:71:23:75:1 | functio ... res);\\n} | content-type | src/express.js:72:3:72:41 | res.hea ... /html") | +| src/json.js:4:23:6:1 | functio ... ata);\\n} | content-type | src/json.js:5:5:5:28 | res.jso ... y.data) | +| src/json.js:8:24:10:1 | functio ... ata);\\n} | content-type | src/json.js:9:5:9:29 | res.jso ... y.data) | test_RouteSetup_getARouteHandlerExpr | src/advanced-routehandler-registration.js:10:3:10:24 | app.get ... es0[p]) | src/advanced-routehandler-registration.js:10:14:10:23 | routes0[p] | | src/advanced-routehandler-registration.js:19:3:19:18 | app.use(handler) | src/advanced-routehandler-registration.js:19:11:19:17 | handler | @@ -2149,6 +2227,8 @@ test_RouteSetup_getARouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:27:23:27:32 | routers[p] | @@ -2181,6 +2261,7 @@ test_RouterDefinition_RouterDefinition | src/express4.js:2:11:2:19 | express() | | src/express.js:2:11:2:19 | express() | | src/inheritedFromNode.js:2:11:2:19 | express() | +| src/json.js:2:13:2:21 | express() | | src/middleware-flow.js:2:13:2:21 | express() | | src/middleware-flow.js:37:22:37:30 | express() | | src/params.js:2:11:2:19 | express() | @@ -2216,6 +2297,8 @@ test_RouterDefinition_getARouteHandler | src/express.js:2:11:2:19 | express() | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:2:11:2:19 | express() | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:2:11:2:19 | express() | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:2:13:2:21 | express() | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:2:13:2:21 | express() | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:5:1:10:1 | functio ... xt();\\n} | | src/middleware-flow.js:2:13:2:21 | express() | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:37:22:37:30 | express() | src/middleware-flow.js:39:23:43:1 | (req, r ... s.db;\\n} | @@ -2334,6 +2417,8 @@ test_RouteSetup_getLastRouteHandlerExpr | src/express.js:65:1:69:2 | app.get ... es);\\n}) | src/express.js:65:27:69:1 | functio ... res);\\n} | | src/express.js:71:1:75:2 | app.get ... es);\\n}) | src/express.js:71:23:75:1 | functio ... res);\\n} | | src/inheritedFromNode.js:4:1:8:2 | app.pos ... url;\\n}) | src/inheritedFromNode.js:4:15:8:1 | functio ... .url;\\n} | +| src/json.js:4:1:6:2 | app.get ... ta);\\n}) | src/json.js:4:23:6:1 | functio ... ata);\\n} | +| src/json.js:8:1:10:2 | app.get ... ta);\\n}) | src/json.js:8:24:10:1 | functio ... ata);\\n} | | src/middleware-flow.js:13:5:13:25 | router. ... tallDb) | src/middleware-flow.js:13:16:13:24 | installDb | | src/middleware-flow.js:17:5:21:6 | router. ... \\n }) | src/middleware-flow.js:17:24:21:5 | (req, r ... ;\\n } | | src/middleware-flow.js:27:9:27:33 | router. ... ers[p]) | src/middleware-flow.js:27:23:27:32 | routers[p] | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected index 9b453989bb8..16d31cd07e1 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected @@ -225,7 +225,7 @@ reactComponentRef | statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:9:7:12 | this | | statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:10:23:10:22 | this | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:2:16:2:15 | this | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:13:3:22 | cmp | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:13:3:15 | cmp | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:3:19:3:22 | this | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:4:9:4:11 | cmp | | statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:6:9:6:11 | cmp | @@ -241,7 +241,7 @@ reactComponentRef | statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:40:20:40:19 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:2:17:2:16 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:3:9:3:12 | this | -| thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:13:5:22 | dis | +| thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:13:5:15 | dis | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:5:19:5:22 | this | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:6:9:6:11 | dis | | thisAccesses.js:1:1:16:1 | class C ... }\\n} | thisAccesses.js:8:10:8:9 | this | diff --git a/javascript/ql/test/library-tests/frameworks/koa/tests.expected b/javascript/ql/test/library-tests/frameworks/koa/tests.expected index 365986dfa0b..1c3a323d110 100644 --- a/javascript/ql/test/library-tests/frameworks/koa/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/koa/tests.expected @@ -67,7 +67,7 @@ test_HeaderAccess test_ResponseExpr | src/koa.js:12:3:12:15 | this.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:14:3:14:14 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | -| src/koa.js:15:7:15:24 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | +| src/koa.js:15:7:15:9 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:15:13:15:24 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:16:3:16:5 | rsp | src/koa.js:10:10:28:1 | functio ... az');\\n} | | src/koa.js:18:3:18:14 | ctx.response | src/koa.js:10:10:28:1 | functio ... az');\\n} | @@ -190,7 +190,7 @@ test_RouteHandler_getARequestExpr test_RouteHandler_getAResponseExpr | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:12:3:12:15 | this.response | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:14:3:14:14 | ctx.response | -| src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:7:15:24 | rsp | +| src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:7:15:9 | rsp | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:15:13:15:24 | ctx.response | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:16:3:16:5 | rsp | | src/koa.js:10:10:28:1 | functio ... az');\\n} | src/koa.js:18:3:18:14 | ctx.response | diff --git a/javascript/ql/test/library-tests/frameworks/xUnit/tests.expected b/javascript/ql/test/library-tests/frameworks/xUnit/tests.expected index 5d30921408b..266e9e31e6f 100644 --- a/javascript/ql/test/library-tests/frameworks/xUnit/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/xUnit/tests.expected @@ -3,10 +3,10 @@ xUnitAnnotationfrom | tst.js:5:5:5:13 | [Fixture] | tst.js:6:5:13:5 | functio ... }\\n } | | tst.js:7:9:7:14 | [Fact] | tst.js:8:9:12:9 | functio ... } | | tst.js:16:1:16:43 | [Import ... t.js")] | tst.js:18:1:22:2 | Test.xU ... ..]\\n\\n}; | -| tst.js:17:1:17:9 | Fixture | tst.js:18:1:22:2 | Test.xU ... ..]\\n\\n}; | +| tst.js:17:2:17:8 | Fixture | tst.js:18:1:22:2 | Test.xU ... ..]\\n\\n}; | | tst.js:24:1:24:9 | [Fixture] | tst.js:25:1:34:2 | Test.Ex ... }\\n}; | | tst.js:27:5:29:7 | [Import ... })] | tst.js:31:5:33:5 | functio ... ]\\n } | -| tst.js:30:5:30:10 | Fact | tst.js:31:5:33:5 | functio ... ]\\n } | +| tst.js:30:6:30:9 | Fact | tst.js:31:5:33:5 | functio ... ]\\n } | xUnitAttribute | tst.js:3:2:3:8 | Fixture | Fixture | 0 | | tst.js:5:6:5:12 | Fixture | Fixture | 0 | @@ -24,7 +24,7 @@ xUnitFixture | tst.js:4:20:14:1 | functio ... }\\n} | tst.js:3:1:3:9 | [Fixture] | | tst.js:6:5:13:5 | functio ... }\\n } | tst.js:5:5:5:13 | [Fixture] | | tst.js:18:24:22:1 | functio ... ...]\\n\\n} | tst.js:16:1:16:43 | [Import ... t.js")] | -| tst.js:18:24:22:1 | functio ... ...]\\n\\n} | tst.js:17:1:17:9 | Fixture | +| tst.js:18:24:22:1 | functio ... ...]\\n\\n} | tst.js:17:2:17:8 | Fixture | | tst.js:25:21:34:1 | functio ... }\\n} | tst.js:24:1:24:9 | [Fixture] | xUnitTarget | tst.js:4:1:14:2 | Test.Ex ... }\\n}; | diff --git a/javascript/ql/test/query-tests/LanguageFeatures/LengthComparisonOffByOne/tst.js b/javascript/ql/test/query-tests/LanguageFeatures/LengthComparisonOffByOne/tst.js index 6b214c9b042..bd284d2c027 100644 --- a/javascript/ql/test/query-tests/LanguageFeatures/LengthComparisonOffByOne/tst.js +++ b/javascript/ql/test/query-tests/LanguageFeatures/LengthComparisonOffByOne/tst.js @@ -55,3 +55,11 @@ function badContains(a, elt) { return true; return false; } + +// OK - incorrect upper bound, but extra check +function badContains2(a, elt) { + for (let i = 0; i <= a.length; ++i) + if (i < a.length && a[i] === elt) + return true; + return false; +} diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected index de528b8bde2..4e58b4f8548 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected @@ -12,20 +12,20 @@ | tst-UntrustedDataToExternalAPI.js:41:7:41:8 | {} | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:41:7:41:8 | {} | Call to lodash.merge() [param 0] with untrusted data from $@. | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | window.name | | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | Call to lodash.merge() [param 1] with untrusted data from $@. | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | window.name | edges -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:7:16:7:24 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:8:31:8:39 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:9:18:9:26 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:11:20:11:28 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:33:14:33:22 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:34:34:34:42 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:42:8:42:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:43:8:43:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | provenance | | -| tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:7:16:7:24 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:8:31:8:39 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:9:18:9:26 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:11:20:11:28 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:33:14:33:22 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:34:34:34:42 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:42:8:42:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:43:8:43:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | provenance | | +| tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | provenance | | | tst-UntrustedDataToExternalAPI.js:10:19:10:27 | untrusted | tst-UntrustedDataToExternalAPI.js:10:13:10:33 | ['x', u ... d, 'y'] | provenance | | | tst-UntrustedDataToExternalAPI.js:14:12:16:9 | {\\n ... } [z] | tst-UntrustedDataToExternalAPI.js:13:8:17:5 | {\\n ... }\\n } | provenance | | | tst-UntrustedDataToExternalAPI.js:15:16:15:24 | untrusted | tst-UntrustedDataToExternalAPI.js:14:12:16:9 | {\\n ... } [z] | provenance | | @@ -39,7 +39,7 @@ edges | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} | provenance | | | tst-UntrustedDataToExternalAPI.js:44:8:44:16 | untrusted | tst-UntrustedDataToExternalAPI.js:41:11:45:1 | { // $ ... usted\\n} [z] | provenance | | nodes -| tst-UntrustedDataToExternalAPI.js:3:5:3:27 | untrusted | semmle.label | untrusted | +| tst-UntrustedDataToExternalAPI.js:3:5:3:13 | untrusted | semmle.label | untrusted | | tst-UntrustedDataToExternalAPI.js:3:17:3:27 | window.name | semmle.label | window.name | | tst-UntrustedDataToExternalAPI.js:5:13:5:21 | untrusted | semmle.label | untrusted | | tst-UntrustedDataToExternalAPI.js:6:17:6:25 | untrusted | semmle.label | untrusted | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 2a3e4c18884..833128c1292 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -251,35 +251,35 @@ | typescript.ts:31:29:31:33 | path6 | typescript.ts:9:24:9:30 | req.url | typescript.ts:31:29:31:33 | path6 | This path depends on a $@. | typescript.ts:9:24:9:30 | req.url | user-provided value | | views.js:1:43:1:55 | req.params[0] | views.js:1:43:1:55 | req.params[0] | views.js:1:43:1:55 | req.params[0] | This path depends on a $@. | views.js:1:43:1:55 | req.params[0] | user-provided value | edges -| TaintedPath-es6.js:7:7:7:44 | path | TaintedPath-es6.js:9:41:9:44 | path | provenance | | +| TaintedPath-es6.js:7:7:7:10 | path | TaintedPath-es6.js:9:41:9:44 | path | provenance | | | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | provenance | Config | | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | provenance | Config | -| TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | TaintedPath-es6.js:7:7:7:44 | path | provenance | | +| TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | TaintedPath-es6.js:7:7:7:10 | path | provenance | | | TaintedPath-es6.js:7:20:7:26 | req.url | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | provenance | Config | | TaintedPath-es6.js:9:41:9:44 | path | TaintedPath-es6.js:9:26:9:45 | join("public", path) | provenance | Config | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:11:29:11:32 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:13:45:13:48 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:16:33:16:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:19:33:19:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:22:33:22:36 | path | provenance | | -| TaintedPath.js:9:7:9:48 | path | TaintedPath.js:31:31:31:34 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:11:29:11:32 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:13:45:13:48 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:16:33:16:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:19:33:19:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:22:33:22:36 | path | provenance | | +| TaintedPath.js:9:7:9:10 | path | TaintedPath.js:31:31:31:34 | path | provenance | | | TaintedPath.js:9:14:9:37 | url.par ... , true) | TaintedPath.js:9:14:9:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:9:14:9:43 | url.par ... ).query | TaintedPath.js:9:14:9:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:9:14:9:48 | url.par ... ry.path | TaintedPath.js:9:7:9:48 | path | provenance | | +| TaintedPath.js:9:14:9:48 | url.par ... ry.path | TaintedPath.js:9:7:9:10 | path | provenance | | | TaintedPath.js:9:24:9:30 | req.url | TaintedPath.js:9:14:9:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:13:45:13:48 | path | TaintedPath.js:13:29:13:48 | "/home/user/" + path | provenance | Config | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:39:48:39:51 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:42:45:42:48 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:43:51:43:54 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:44:50:44:53 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:45:52:45:55 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:46:49:46:52 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:47:48:47:51 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:48:54:48:57 | path | provenance | | -| TaintedPath.js:36:3:36:44 | path | TaintedPath.js:49:57:49:60 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:39:48:39:51 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:42:45:42:48 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:43:51:43:54 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:44:50:44:53 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:45:52:45:55 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:46:49:46:52 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:47:48:47:51 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:48:54:48:57 | path | provenance | | +| TaintedPath.js:36:3:36:6 | path | TaintedPath.js:49:57:49:60 | path | provenance | | | TaintedPath.js:36:10:36:33 | url.par ... , true) | TaintedPath.js:36:10:36:39 | url.par ... ).query | provenance | Config | | TaintedPath.js:36:10:36:39 | url.par ... ).query | TaintedPath.js:36:10:36:44 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:36:10:36:44 | url.par ... ry.path | TaintedPath.js:36:3:36:44 | path | provenance | | +| TaintedPath.js:36:10:36:44 | url.par ... ry.path | TaintedPath.js:36:3:36:6 | path | provenance | | | TaintedPath.js:36:20:36:26 | req.url | TaintedPath.js:36:10:36:33 | url.par ... , true) | provenance | Config | | TaintedPath.js:39:48:39:51 | path | TaintedPath.js:39:29:39:52 | pathMod ... e(path) | provenance | Config | | TaintedPath.js:42:45:42:48 | path | TaintedPath.js:42:29:42:49 | pathMod ... n(path) | provenance | Config | @@ -296,57 +296,57 @@ edges | TaintedPath.js:55:61:55:67 | req.url | TaintedPath.js:55:31:55:68 | require ... eq.url) | provenance | Config | | TaintedPath.js:56:31:56:67 | require ... eq.url) | TaintedPath.js:56:31:56:73 | require ... ).query | provenance | Config | | TaintedPath.js:56:60:56:66 | req.url | TaintedPath.js:56:31:56:67 | require ... eq.url) | provenance | Config | -| TaintedPath.js:73:6:73:47 | path | TaintedPath.js:75:44:75:47 | path | provenance | | -| TaintedPath.js:73:6:73:47 | path | TaintedPath.js:76:14:76:17 | path | provenance | | +| TaintedPath.js:73:6:73:9 | path | TaintedPath.js:75:44:75:47 | path | provenance | | +| TaintedPath.js:73:6:73:9 | path | TaintedPath.js:76:14:76:17 | path | provenance | | | TaintedPath.js:73:13:73:36 | url.par ... , true) | TaintedPath.js:73:13:73:42 | url.par ... ).query | provenance | Config | | TaintedPath.js:73:13:73:42 | url.par ... ).query | TaintedPath.js:73:13:73:47 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:73:13:73:47 | url.par ... ry.path | TaintedPath.js:73:6:73:47 | path | provenance | | +| TaintedPath.js:73:13:73:47 | url.par ... ry.path | TaintedPath.js:73:6:73:9 | path | provenance | | | TaintedPath.js:73:23:73:29 | req.url | TaintedPath.js:73:13:73:36 | url.par ... , true) | provenance | Config | | TaintedPath.js:75:44:75:47 | path | TaintedPath.js:75:28:75:48 | fs.real ... c(path) | provenance | Config | | TaintedPath.js:76:14:76:17 | path | TaintedPath.js:77:32:77:39 | realpath | provenance | Config | | TaintedPath.js:77:32:77:39 | realpath | TaintedPath.js:78:45:78:52 | realpath | provenance | | -| TaintedPath.js:109:6:109:47 | path | TaintedPath.js:111:23:111:26 | path | provenance | | +| TaintedPath.js:109:6:109:9 | path | TaintedPath.js:111:23:111:26 | path | provenance | | | TaintedPath.js:109:13:109:36 | url.par ... , true) | TaintedPath.js:109:13:109:42 | url.par ... ).query | provenance | Config | | TaintedPath.js:109:13:109:42 | url.par ... ).query | TaintedPath.js:109:13:109:47 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:109:13:109:47 | url.par ... ry.path | TaintedPath.js:109:6:109:47 | path | provenance | | +| TaintedPath.js:109:13:109:47 | url.par ... ry.path | TaintedPath.js:109:6:109:9 | path | provenance | | | TaintedPath.js:109:23:109:29 | req.url | TaintedPath.js:109:13:109:36 | url.par ... , true) | provenance | Config | -| TaintedPath.js:115:7:115:48 | path | TaintedPath.js:117:19:117:22 | path | provenance | | -| TaintedPath.js:115:7:115:48 | path | TaintedPath.js:119:15:119:18 | path | provenance | | +| TaintedPath.js:115:7:115:10 | path | TaintedPath.js:117:19:117:22 | path | provenance | | +| TaintedPath.js:115:7:115:10 | path | TaintedPath.js:119:15:119:18 | path | provenance | | | TaintedPath.js:115:14:115:37 | url.par ... , true) | TaintedPath.js:115:14:115:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:115:14:115:43 | url.par ... ).query | TaintedPath.js:115:14:115:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:115:14:115:48 | url.par ... ry.path | TaintedPath.js:115:7:115:48 | path | provenance | | +| TaintedPath.js:115:14:115:48 | url.par ... ry.path | TaintedPath.js:115:7:115:10 | path | provenance | | | TaintedPath.js:115:24:115:30 | req.url | TaintedPath.js:115:14:115:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:121:19:121:23 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:125:19:125:23 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:126:28:126:32 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:128:33:128:37 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:131:20:131:24 | split | provenance | | -| TaintedPath.js:119:7:119:29 | split | TaintedPath.js:134:19:134:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:121:19:121:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:125:19:125:23 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:126:28:126:32 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:128:33:128:37 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:131:20:131:24 | split | provenance | | +| TaintedPath.js:119:7:119:11 | split | TaintedPath.js:134:19:134:23 | split | provenance | | | TaintedPath.js:119:15:119:18 | path | TaintedPath.js:119:15:119:29 | path.split("/") | provenance | Config | -| TaintedPath.js:119:15:119:29 | path.split("/") | TaintedPath.js:119:7:119:29 | split | provenance | | +| TaintedPath.js:119:15:119:29 | path.split("/") | TaintedPath.js:119:7:119:11 | split | provenance | | | TaintedPath.js:121:19:121:23 | split | TaintedPath.js:121:19:121:33 | split.join("/") | provenance | Config | | TaintedPath.js:125:19:125:23 | split | TaintedPath.js:125:19:125:26 | split[x] | provenance | Config | | TaintedPath.js:126:28:126:32 | split | TaintedPath.js:126:28:126:35 | split[x] | provenance | Config | | TaintedPath.js:126:28:126:35 | split[x] | TaintedPath.js:126:19:126:35 | prefix + split[x] | provenance | Config | -| TaintedPath.js:128:7:128:38 | concatted | TaintedPath.js:129:19:129:27 | concatted | provenance | | -| TaintedPath.js:128:19:128:38 | prefix.concat(split) | TaintedPath.js:128:7:128:38 | concatted | provenance | | +| TaintedPath.js:128:7:128:15 | concatted | TaintedPath.js:129:19:129:27 | concatted | provenance | | +| TaintedPath.js:128:19:128:38 | prefix.concat(split) | TaintedPath.js:128:7:128:15 | concatted | provenance | | | TaintedPath.js:128:33:128:37 | split | TaintedPath.js:128:19:128:38 | prefix.concat(split) | provenance | Config | | TaintedPath.js:129:19:129:27 | concatted | TaintedPath.js:129:19:129:37 | concatted.join("/") | provenance | Config | -| TaintedPath.js:131:7:131:39 | concatted2 | TaintedPath.js:132:19:132:28 | concatted2 | provenance | | +| TaintedPath.js:131:7:131:16 | concatted2 | TaintedPath.js:132:19:132:28 | concatted2 | provenance | | | TaintedPath.js:131:20:131:24 | split | TaintedPath.js:131:20:131:39 | split.concat(prefix) | provenance | Config | -| TaintedPath.js:131:20:131:39 | split.concat(prefix) | TaintedPath.js:131:7:131:39 | concatted2 | provenance | | +| TaintedPath.js:131:20:131:39 | split.concat(prefix) | TaintedPath.js:131:7:131:16 | concatted2 | provenance | | | TaintedPath.js:132:19:132:28 | concatted2 | TaintedPath.js:132:19:132:38 | concatted2.join("/") | provenance | Config | | TaintedPath.js:134:19:134:23 | split | TaintedPath.js:134:19:134:29 | split.pop() | provenance | Config | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:143:29:143:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:149:29:149:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:150:29:150:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:151:29:151:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:152:29:152:32 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:167:40:167:43 | path | provenance | | -| TaintedPath.js:139:7:139:48 | path | TaintedPath.js:168:50:168:53 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:143:29:143:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:149:29:149:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:150:29:150:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:151:29:151:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:152:29:152:32 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:167:40:167:43 | path | provenance | | +| TaintedPath.js:139:7:139:10 | path | TaintedPath.js:168:50:168:53 | path | provenance | | | TaintedPath.js:139:14:139:37 | url.par ... , true) | TaintedPath.js:139:14:139:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:139:14:139:43 | url.par ... ).query | TaintedPath.js:139:14:139:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:139:14:139:48 | url.par ... ry.path | TaintedPath.js:139:7:139:48 | path | provenance | | +| TaintedPath.js:139:14:139:48 | url.par ... ry.path | TaintedPath.js:139:7:139:10 | path | provenance | | | TaintedPath.js:139:24:139:30 | req.url | TaintedPath.js:139:14:139:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:143:29:143:32 | path | TaintedPath.js:143:29:143:55 | path.re ... /g, '') | provenance | Config | | TaintedPath.js:149:29:149:32 | path | TaintedPath.js:149:29:149:52 | path.re ... /g, '') | provenance | Config | @@ -364,360 +364,360 @@ edges | TaintedPath.js:177:51:177:57 | req.url | TaintedPath.js:177:38:177:58 | normali ... eq.url) | provenance | Config | | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | TaintedPath.js:179:29:179:55 | parseqs ... rl).foo | provenance | Config | | TaintedPath.js:179:44:179:50 | req.url | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | provenance | Config | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:185:31:185:34 | path | provenance | | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:186:45:186:48 | path | provenance | | -| TaintedPath.js:184:7:184:48 | path | TaintedPath.js:187:35:187:38 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:185:31:185:34 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:186:45:186:48 | path | provenance | | +| TaintedPath.js:184:7:184:10 | path | TaintedPath.js:187:35:187:38 | path | provenance | | | TaintedPath.js:184:14:184:37 | url.par ... , true) | TaintedPath.js:184:14:184:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:184:14:184:43 | url.par ... ).query | TaintedPath.js:184:14:184:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:184:14:184:48 | url.par ... ry.path | TaintedPath.js:184:7:184:48 | path | provenance | | +| TaintedPath.js:184:14:184:48 | url.par ... ry.path | TaintedPath.js:184:7:184:10 | path | provenance | | | TaintedPath.js:184:24:184:30 | req.url | TaintedPath.js:184:14:184:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:191:7:191:48 | path | TaintedPath.js:195:29:195:32 | path | provenance | | +| TaintedPath.js:191:7:191:10 | path | TaintedPath.js:195:29:195:32 | path | provenance | | | TaintedPath.js:191:14:191:37 | url.par ... , true) | TaintedPath.js:191:14:191:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:191:14:191:43 | url.par ... ).query | TaintedPath.js:191:14:191:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:191:14:191:48 | url.par ... ry.path | TaintedPath.js:191:7:191:48 | path | provenance | | +| TaintedPath.js:191:14:191:48 | url.par ... ry.path | TaintedPath.js:191:7:191:10 | path | provenance | | | TaintedPath.js:191:24:191:30 | req.url | TaintedPath.js:191:14:191:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:195:29:195:32 | path | TaintedPath.js:195:29:195:85 | path.re ... '), '') | provenance | Config | -| TaintedPath.js:200:7:200:48 | path | TaintedPath.js:202:29:202:32 | path | provenance | | -| TaintedPath.js:200:7:200:48 | path | TaintedPath.js:205:31:205:34 | path | provenance | | +| TaintedPath.js:200:7:200:10 | path | TaintedPath.js:202:29:202:32 | path | provenance | | +| TaintedPath.js:200:7:200:10 | path | TaintedPath.js:205:31:205:34 | path | provenance | | | TaintedPath.js:200:14:200:37 | url.par ... , true) | TaintedPath.js:200:14:200:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:200:14:200:43 | url.par ... ).query | TaintedPath.js:200:14:200:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:200:14:200:48 | url.par ... ry.path | TaintedPath.js:200:7:200:48 | path | provenance | | +| TaintedPath.js:200:14:200:48 | url.par ... ry.path | TaintedPath.js:200:7:200:10 | path | provenance | | | TaintedPath.js:200:24:200:30 | req.url | TaintedPath.js:200:14:200:37 | url.par ... , true) | provenance | Config | | TaintedPath.js:202:29:202:32 | path | TaintedPath.js:202:29:202:68 | path.re ... '), '') | provenance | Config | | TaintedPath.js:205:31:205:34 | path | TaintedPath.js:205:31:205:69 | path.re ... '), '') | provenance | Config | -| TaintedPath.js:212:7:212:48 | path | TaintedPath.js:213:33:213:36 | path | provenance | | -| TaintedPath.js:212:7:212:48 | path | TaintedPath.js:215:36:215:39 | path | provenance | | +| TaintedPath.js:212:7:212:10 | path | TaintedPath.js:213:33:213:36 | path | provenance | | +| TaintedPath.js:212:7:212:10 | path | TaintedPath.js:215:36:215:39 | path | provenance | | | TaintedPath.js:212:14:212:37 | url.par ... , true) | TaintedPath.js:212:14:212:43 | url.par ... ).query | provenance | Config | | TaintedPath.js:212:14:212:43 | url.par ... ).query | TaintedPath.js:212:14:212:48 | url.par ... ry.path | provenance | Config | -| TaintedPath.js:212:14:212:48 | url.par ... ry.path | TaintedPath.js:212:7:212:48 | path | provenance | | +| TaintedPath.js:212:14:212:48 | url.par ... ry.path | TaintedPath.js:212:7:212:10 | path | provenance | | | TaintedPath.js:212:24:212:30 | req.url | TaintedPath.js:212:14:212:37 | url.par ... , true) | provenance | Config | -| TaintedPath.js:213:9:213:37 | improperEscape | TaintedPath.js:214:29:214:42 | improperEscape | provenance | | -| TaintedPath.js:213:26:213:37 | escape(path) | TaintedPath.js:213:9:213:37 | improperEscape | provenance | | +| TaintedPath.js:213:9:213:22 | improperEscape | TaintedPath.js:214:29:214:42 | improperEscape | provenance | | +| TaintedPath.js:213:26:213:37 | escape(path) | TaintedPath.js:213:9:213:22 | improperEscape | provenance | | | TaintedPath.js:213:33:213:36 | path | TaintedPath.js:213:26:213:37 | escape(path) | provenance | Config | -| TaintedPath.js:215:9:215:40 | improperEscape2 | TaintedPath.js:216:29:216:43 | improperEscape2 | provenance | | -| TaintedPath.js:215:27:215:40 | unescape(path) | TaintedPath.js:215:9:215:40 | improperEscape2 | provenance | | +| TaintedPath.js:215:9:215:23 | improperEscape2 | TaintedPath.js:216:29:216:43 | improperEscape2 | provenance | | +| TaintedPath.js:215:27:215:40 | unescape(path) | TaintedPath.js:215:9:215:23 | improperEscape2 | provenance | | | TaintedPath.js:215:36:215:39 | path | TaintedPath.js:215:27:215:40 | unescape(path) | provenance | Config | -| examples/TaintedPath.js:8:7:8:52 | filePath | examples/TaintedPath.js:10:36:10:43 | filePath | provenance | | +| examples/TaintedPath.js:8:7:8:14 | filePath | examples/TaintedPath.js:10:36:10:43 | filePath | provenance | | | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | provenance | Config | | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | provenance | Config | -| examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | examples/TaintedPath.js:8:7:8:52 | filePath | provenance | | +| examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | examples/TaintedPath.js:8:7:8:14 | filePath | provenance | | | examples/TaintedPath.js:8:28:8:34 | req.url | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | provenance | Config | | examples/TaintedPath.js:10:36:10:43 | filePath | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | provenance | Config | -| execa.js:6:9:6:64 | filePath | execa.js:9:26:9:33 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:12:37:12:44 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:15:50:15:57 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:18:62:18:69 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:9:26:9:33 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:12:37:12:44 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:15:50:15:57 | filePath | provenance | | +| execa.js:6:9:6:16 | filePath | execa.js:18:62:18:69 | filePath | provenance | | | execa.js:6:20:6:43 | url.par ... , true) | execa.js:6:20:6:49 | url.par ... ).query | provenance | Config | | execa.js:6:20:6:49 | url.par ... ).query | execa.js:6:20:6:61 | url.par ... ePath"] | provenance | Config | | execa.js:6:20:6:61 | url.par ... ePath"] | execa.js:6:20:6:64 | url.par ... th"][0] | provenance | Config | -| execa.js:6:20:6:64 | url.par ... th"][0] | execa.js:6:9:6:64 | filePath | provenance | | +| execa.js:6:20:6:64 | url.par ... th"][0] | execa.js:6:9:6:16 | filePath | provenance | | | execa.js:6:30:6:36 | req.url | execa.js:6:20:6:43 | url.par ... , true) | provenance | Config | | handlebars.js:10:51:10:58 | filePath | handlebars.js:11:32:11:39 | filePath | provenance | | | handlebars.js:13:73:13:80 | filePath | handlebars.js:15:25:15:32 | filePath | provenance | | | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:10:51:10:58 | filePath | provenance | | | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:13:73:13:80 | filePath | provenance | | -| hapi.js:14:19:14:51 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | -| hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:51 | filepath | provenance | | -| make-dir.js:7:11:7:31 | file | make-dir.js:9:25:9:28 | file | provenance | | -| make-dir.js:7:11:7:31 | file | make-dir.js:10:23:10:26 | file | provenance | | -| make-dir.js:7:18:7:31 | req.query.file | make-dir.js:7:11:7:31 | file | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:11:12:11:18 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:12:17:12:23 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:13:23:13:29 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:14:19:14:25 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:15:19:15:25 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:16:23:16:29 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:17:25:17:31 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:18:25:18:31 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:19:29:19:35 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:20:29:20:35 | dirPath | provenance | | -| mkdirp.js:9:11:9:76 | dirPath | mkdirp.js:21:23:21:29 | dirPath | provenance | | -| mkdirp.js:9:21:9:76 | path.jo ... ltDir') | mkdirp.js:9:11:9:76 | dirPath | provenance | | +| hapi.js:14:19:14:26 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | +| hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:26 | filepath | provenance | | +| make-dir.js:7:11:7:14 | file | make-dir.js:9:25:9:28 | file | provenance | | +| make-dir.js:7:11:7:14 | file | make-dir.js:10:23:10:26 | file | provenance | | +| make-dir.js:7:18:7:31 | req.query.file | make-dir.js:7:11:7:14 | file | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:11:12:11:18 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:12:17:12:23 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:13:23:13:29 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:14:19:14:25 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:15:19:15:25 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:16:23:16:29 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:17:25:17:31 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:18:25:18:31 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:19:29:19:35 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:20:29:20:35 | dirPath | provenance | | +| mkdirp.js:9:11:9:17 | dirPath | mkdirp.js:21:23:21:29 | dirPath | provenance | | +| mkdirp.js:9:21:9:76 | path.jo ... ltDir') | mkdirp.js:9:11:9:17 | dirPath | provenance | | | mkdirp.js:9:42:9:59 | req.query.filename | mkdirp.js:9:42:9:75 | req.que ... ultDir' | provenance | | | mkdirp.js:9:42:9:75 | req.que ... ultDir' | mkdirp.js:9:21:9:76 | path.jo ... ltDir') | provenance | Config | | more-fs-extra.js:8:11:8:22 | { filename } | more-fs-extra.js:8:13:8:20 | filename | provenance | Config | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:10:15:10:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:11:11:11:18 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:12:14:12:21 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:13:18:13:25 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:22:16:22:23 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:23:20:23:27 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:24:19:24:26 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:25:15:25:22 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:26:19:26:26 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:27:13:27:20 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:28:17:28:24 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:29:23:29:30 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:30:16:30:23 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:31:20:31:27 | filename | provenance | | -| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:32:23:32:30 | filename | provenance | | -| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:13:8:20 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:10:15:10:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:11:11:11:18 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:12:14:12:21 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:13:18:13:25 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:22:16:22:23 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:23:20:23:27 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:24:19:24:26 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:25:15:25:22 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:26:19:26:26 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:27:13:27:20 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:28:17:28:24 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:29:23:29:30 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:30:16:30:23 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:31:20:31:27 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:32:23:32:30 | filename | provenance | | | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:14:26:14:29 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:15:19:15:22 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:16:35:16:38 | path | provenance | | -| normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:17:53:17:56 | path | provenance | | -| normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:11:7:11:27 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:14:26:14:29 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:15:19:15:22 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:16:35:16:38 | path | provenance | | +| normalizedPaths.js:11:7:11:10 | path | normalizedPaths.js:17:53:17:56 | path | provenance | | +| normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:11:7:11:10 | path | provenance | | | normalizedPaths.js:14:26:14:29 | path | normalizedPaths.js:14:19:14:29 | './' + path | provenance | Config | | normalizedPaths.js:15:19:15:22 | path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | provenance | Config | | normalizedPaths.js:16:35:16:38 | path | normalizedPaths.js:16:19:16:53 | pathMod ... .html') | provenance | Config | | normalizedPaths.js:17:53:17:56 | path | normalizedPaths.js:17:19:17:57 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:23:19:23:22 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:24:26:24:29 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:25:19:25:22 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:26:35:26:38 | path | provenance | | -| normalizedPaths.js:21:7:21:49 | path | normalizedPaths.js:27:53:27:56 | path | provenance | | -| normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | normalizedPaths.js:21:7:21:49 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:23:19:23:22 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:24:26:24:29 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:25:19:25:22 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:26:35:26:38 | path | provenance | | +| normalizedPaths.js:21:7:21:10 | path | normalizedPaths.js:27:53:27:56 | path | provenance | | +| normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | normalizedPaths.js:21:7:21:10 | path | provenance | | | normalizedPaths.js:21:35:21:48 | req.query.path | normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:24:26:24:29 | path | normalizedPaths.js:24:19:24:29 | './' + path | provenance | Config | | normalizedPaths.js:25:19:25:22 | path | normalizedPaths.js:25:19:25:38 | path + '/index.html' | provenance | Config | | normalizedPaths.js:26:35:26:38 | path | normalizedPaths.js:26:19:26:53 | pathMod ... .html') | provenance | Config | | normalizedPaths.js:27:53:27:56 | path | normalizedPaths.js:27:19:27:57 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:31:7:31:49 | path | normalizedPaths.js:36:19:36:22 | path | provenance | | -| normalizedPaths.js:31:7:31:49 | path | normalizedPaths.js:41:21:41:24 | path | provenance | | -| normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | normalizedPaths.js:31:7:31:49 | path | provenance | | +| normalizedPaths.js:31:7:31:10 | path | normalizedPaths.js:36:19:36:22 | path | provenance | | +| normalizedPaths.js:31:7:31:10 | path | normalizedPaths.js:41:21:41:24 | path | provenance | | +| normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | normalizedPaths.js:31:7:31:10 | path | provenance | | | normalizedPaths.js:31:35:31:48 | req.query.path | normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:59:19:59:22 | path | provenance | | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:63:19:63:22 | path | provenance | | -| normalizedPaths.js:54:7:54:49 | path | normalizedPaths.js:68:21:68:24 | path | provenance | | -| normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | normalizedPaths.js:54:7:54:49 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:59:19:59:22 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:63:19:63:22 | path | provenance | | +| normalizedPaths.js:54:7:54:10 | path | normalizedPaths.js:68:21:68:24 | path | provenance | | +| normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | normalizedPaths.js:54:7:54:10 | path | provenance | | | normalizedPaths.js:54:35:54:48 | req.query.path | normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:63:19:63:22 | path | normalizedPaths.js:63:19:63:38 | path + "/index.html" | provenance | Config | -| normalizedPaths.js:73:7:73:56 | path | normalizedPaths.js:78:22:78:25 | path | provenance | | -| normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | normalizedPaths.js:73:7:73:56 | path | provenance | | +| normalizedPaths.js:73:7:73:10 | path | normalizedPaths.js:78:22:78:25 | path | provenance | | +| normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | normalizedPaths.js:73:7:73:10 | path | provenance | | | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | provenance | Config | | normalizedPaths.js:73:42:73:55 | req.query.path | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | provenance | Config | -| normalizedPaths.js:82:7:82:27 | path | normalizedPaths.js:87:29:87:32 | path | provenance | | -| normalizedPaths.js:82:7:82:27 | path | normalizedPaths.js:90:31:90:34 | path | provenance | | -| normalizedPaths.js:82:14:82:27 | req.query.path | normalizedPaths.js:82:7:82:27 | path | provenance | | -| normalizedPaths.js:94:7:94:49 | path | normalizedPaths.js:99:29:99:32 | path | provenance | | -| normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | normalizedPaths.js:94:7:94:49 | path | provenance | | +| normalizedPaths.js:82:7:82:10 | path | normalizedPaths.js:87:29:87:32 | path | provenance | | +| normalizedPaths.js:82:7:82:10 | path | normalizedPaths.js:90:31:90:34 | path | provenance | | +| normalizedPaths.js:82:14:82:27 | req.query.path | normalizedPaths.js:82:7:82:10 | path | provenance | | +| normalizedPaths.js:94:7:94:10 | path | normalizedPaths.js:99:29:99:32 | path | provenance | | +| normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | normalizedPaths.js:94:7:94:10 | path | provenance | | | normalizedPaths.js:94:35:94:48 | req.query.path | normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:117:7:117:44 | path | normalizedPaths.js:119:19:119:22 | path | provenance | | -| normalizedPaths.js:117:7:117:44 | path | normalizedPaths.js:120:35:120:38 | path | provenance | | -| normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | normalizedPaths.js:117:7:117:44 | path | provenance | | +| normalizedPaths.js:117:7:117:10 | path | normalizedPaths.js:119:19:119:22 | path | provenance | | +| normalizedPaths.js:117:7:117:10 | path | normalizedPaths.js:120:35:120:38 | path | provenance | | +| normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | normalizedPaths.js:117:7:117:10 | path | provenance | | | normalizedPaths.js:117:30:117:43 | req.query.path | normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | provenance | Config | | normalizedPaths.js:120:35:120:38 | path | normalizedPaths.js:120:19:120:53 | pathMod ... .html') | provenance | Config | -| normalizedPaths.js:130:7:130:49 | path | normalizedPaths.js:135:21:135:24 | path | provenance | | -| normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | normalizedPaths.js:130:7:130:49 | path | provenance | | +| normalizedPaths.js:130:7:130:10 | path | normalizedPaths.js:135:21:135:24 | path | provenance | | +| normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | normalizedPaths.js:130:7:130:10 | path | provenance | | | normalizedPaths.js:130:35:130:48 | req.query.path | normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:139:7:139:62 | path | normalizedPaths.js:144:21:144:24 | path | provenance | | -| normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | normalizedPaths.js:139:7:139:62 | path | provenance | | +| normalizedPaths.js:139:7:139:10 | path | normalizedPaths.js:144:21:144:24 | path | provenance | | +| normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | normalizedPaths.js:139:7:139:10 | path | provenance | | | normalizedPaths.js:139:48:139:61 | req.query.path | normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:148:7:148:58 | path | normalizedPaths.js:151:21:151:24 | path | provenance | | -| normalizedPaths.js:148:7:148:58 | path | normalizedPaths.js:153:21:153:24 | path | provenance | | -| normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | normalizedPaths.js:148:7:148:58 | path | provenance | | +| normalizedPaths.js:148:7:148:10 | path | normalizedPaths.js:151:21:151:24 | path | provenance | | +| normalizedPaths.js:148:7:148:10 | path | normalizedPaths.js:153:21:153:24 | path | provenance | | +| normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | normalizedPaths.js:148:7:148:10 | path | provenance | | | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | provenance | Config | | normalizedPaths.js:148:44:148:57 | req.query.path | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:160:7:160:49 | path | normalizedPaths.js:165:19:165:22 | path | provenance | | -| normalizedPaths.js:160:7:160:49 | path | normalizedPaths.js:170:21:170:24 | path | provenance | | -| normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | normalizedPaths.js:160:7:160:49 | path | provenance | | +| normalizedPaths.js:160:7:160:10 | path | normalizedPaths.js:165:19:165:22 | path | provenance | | +| normalizedPaths.js:160:7:160:10 | path | normalizedPaths.js:170:21:170:24 | path | provenance | | +| normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | normalizedPaths.js:160:7:160:10 | path | provenance | | | normalizedPaths.js:160:35:160:48 | req.query.path | normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:184:19:184:22 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:187:21:187:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:189:21:189:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:192:21:192:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:194:21:194:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:199:21:199:24 | path | provenance | | -| normalizedPaths.js:174:7:174:27 | path | normalizedPaths.js:201:45:201:48 | path | provenance | | -| normalizedPaths.js:174:14:174:27 | req.query.path | normalizedPaths.js:174:7:174:27 | path | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:205:21:205:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:208:21:208:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:7:201:49 | normalizedPath | normalizedPaths.js:210:21:210:34 | normalizedPath | provenance | | -| normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | normalizedPaths.js:201:7:201:49 | normalizedPath | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:184:19:184:22 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:187:21:187:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:189:21:189:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:192:21:192:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:194:21:194:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:199:21:199:24 | path | provenance | | +| normalizedPaths.js:174:7:174:10 | path | normalizedPaths.js:201:45:201:48 | path | provenance | | +| normalizedPaths.js:174:14:174:27 | req.query.path | normalizedPaths.js:174:7:174:10 | path | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:205:21:205:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:208:21:208:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:7:201:20 | normalizedPath | normalizedPaths.js:210:21:210:34 | normalizedPath | provenance | | +| normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | normalizedPaths.js:201:7:201:20 | normalizedPath | provenance | | | normalizedPaths.js:201:45:201:48 | path | normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:214:7:214:49 | path | normalizedPaths.js:219:29:219:32 | path | provenance | | -| normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | normalizedPaths.js:214:7:214:49 | path | provenance | | +| normalizedPaths.js:214:7:214:10 | path | normalizedPaths.js:219:29:219:32 | path | provenance | | +| normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | normalizedPaths.js:214:7:214:10 | path | provenance | | | normalizedPaths.js:214:35:214:48 | req.query.path | normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:219:3:219:33 | path | normalizedPaths.js:222:21:222:24 | path | provenance | | -| normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | normalizedPaths.js:219:3:219:33 | path | provenance | | +| normalizedPaths.js:219:3:219:6 | path | normalizedPaths.js:222:21:222:24 | path | provenance | | +| normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | normalizedPaths.js:219:3:219:6 | path | provenance | | | normalizedPaths.js:219:29:219:32 | path | normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | provenance | Config | -| normalizedPaths.js:226:7:226:70 | path | normalizedPaths.js:228:21:228:24 | path | provenance | | +| normalizedPaths.js:226:7:226:10 | path | normalizedPaths.js:228:21:228:24 | path | provenance | | | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | provenance | Config | -| normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | normalizedPaths.js:226:7:226:70 | path | provenance | | +| normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | normalizedPaths.js:226:7:226:10 | path | provenance | | | normalizedPaths.js:226:35:226:48 | req.query.path | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:238:19:238:22 | path | provenance | | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:245:21:245:24 | path | provenance | | -| normalizedPaths.js:236:7:236:47 | path | normalizedPaths.js:250:21:250:24 | path | provenance | | -| normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | normalizedPaths.js:236:7:236:47 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:238:19:238:22 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:245:21:245:24 | path | provenance | | +| normalizedPaths.js:236:7:236:10 | path | normalizedPaths.js:250:21:250:24 | path | provenance | | +| normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | normalizedPaths.js:236:7:236:10 | path | provenance | | | normalizedPaths.js:236:33:236:46 | req.query.path | normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:256:19:256:22 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:262:21:262:24 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:267:38:267:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:275:38:275:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:283:38:283:41 | path | provenance | | -| normalizedPaths.js:254:7:254:47 | path | normalizedPaths.js:291:38:291:41 | path | provenance | | -| normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | normalizedPaths.js:254:7:254:47 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:256:19:256:22 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:262:21:262:24 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:267:38:267:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:275:38:275:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:283:38:283:41 | path | provenance | | +| normalizedPaths.js:254:7:254:10 | path | normalizedPaths.js:291:38:291:41 | path | provenance | | +| normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | normalizedPaths.js:254:7:254:10 | path | provenance | | | normalizedPaths.js:254:33:254:46 | req.query.path | normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:267:7:267:42 | newpath | normalizedPaths.js:270:21:270:27 | newpath | provenance | | -| normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | normalizedPaths.js:267:7:267:42 | newpath | provenance | | +| normalizedPaths.js:267:7:267:13 | newpath | normalizedPaths.js:270:21:270:27 | newpath | provenance | | +| normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | normalizedPaths.js:267:7:267:13 | newpath | provenance | | | normalizedPaths.js:267:38:267:41 | path | normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:275:7:275:42 | newpath | normalizedPaths.js:278:21:278:27 | newpath | provenance | | -| normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | normalizedPaths.js:275:7:275:42 | newpath | provenance | | +| normalizedPaths.js:275:7:275:13 | newpath | normalizedPaths.js:278:21:278:27 | newpath | provenance | | +| normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | normalizedPaths.js:275:7:275:13 | newpath | provenance | | | normalizedPaths.js:275:38:275:41 | path | normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:283:7:283:42 | newpath | normalizedPaths.js:286:21:286:27 | newpath | provenance | | -| normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | normalizedPaths.js:283:7:283:42 | newpath | provenance | | +| normalizedPaths.js:283:7:283:13 | newpath | normalizedPaths.js:286:21:286:27 | newpath | provenance | | +| normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | normalizedPaths.js:283:7:283:13 | newpath | provenance | | | normalizedPaths.js:283:38:283:41 | path | normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:291:7:291:42 | newpath | normalizedPaths.js:296:21:296:27 | newpath | provenance | | -| normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | normalizedPaths.js:291:7:291:42 | newpath | provenance | | +| normalizedPaths.js:291:7:291:13 | newpath | normalizedPaths.js:296:21:296:27 | newpath | provenance | | +| normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | normalizedPaths.js:291:7:291:13 | newpath | provenance | | | normalizedPaths.js:291:38:291:41 | path | normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | provenance | Config | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:304:18:304:21 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:309:19:309:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:313:19:313:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:316:19:316:22 | path | provenance | | -| normalizedPaths.js:303:6:303:26 | path | normalizedPaths.js:320:45:320:48 | path | provenance | | -| normalizedPaths.js:303:13:303:26 | req.query.path | normalizedPaths.js:303:6:303:26 | path | provenance | | -| normalizedPaths.js:320:6:320:49 | normalizedPath | normalizedPaths.js:325:19:325:32 | normalizedPath | provenance | | -| normalizedPaths.js:320:6:320:49 | normalizedPath | normalizedPaths.js:332:19:332:32 | normalizedPath | provenance | | -| normalizedPaths.js:320:23:320:49 | pathMod ... , path) | normalizedPaths.js:320:6:320:49 | normalizedPath | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:304:18:304:21 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:309:19:309:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:313:19:313:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:316:19:316:22 | path | provenance | | +| normalizedPaths.js:303:6:303:9 | path | normalizedPaths.js:320:45:320:48 | path | provenance | | +| normalizedPaths.js:303:13:303:26 | req.query.path | normalizedPaths.js:303:6:303:9 | path | provenance | | +| normalizedPaths.js:320:6:320:19 | normalizedPath | normalizedPaths.js:325:19:325:32 | normalizedPath | provenance | | +| normalizedPaths.js:320:6:320:19 | normalizedPath | normalizedPaths.js:332:19:332:32 | normalizedPath | provenance | | +| normalizedPaths.js:320:23:320:49 | pathMod ... , path) | normalizedPaths.js:320:6:320:19 | normalizedPath | provenance | | | normalizedPaths.js:320:45:320:48 | path | normalizedPaths.js:320:23:320:49 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:339:6:339:46 | path | normalizedPaths.js:341:18:341:21 | path | provenance | | -| normalizedPaths.js:339:6:339:46 | path | normalizedPaths.js:346:19:346:22 | path | provenance | | -| normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | normalizedPaths.js:339:6:339:46 | path | provenance | | +| normalizedPaths.js:339:6:339:9 | path | normalizedPaths.js:341:18:341:21 | path | provenance | | +| normalizedPaths.js:339:6:339:9 | path | normalizedPaths.js:346:19:346:22 | path | provenance | | +| normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | normalizedPaths.js:339:6:339:9 | path | provenance | | | normalizedPaths.js:339:32:339:45 | req.query.path | normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | provenance | Config | -| normalizedPaths.js:354:7:354:27 | path | normalizedPaths.js:356:19:356:22 | path | provenance | | -| normalizedPaths.js:354:7:354:27 | path | normalizedPaths.js:358:47:358:50 | path | provenance | | -| normalizedPaths.js:354:14:354:27 | req.query.path | normalizedPaths.js:354:7:354:27 | path | provenance | | -| normalizedPaths.js:358:7:358:51 | requestPath | normalizedPaths.js:363:21:363:31 | requestPath | provenance | | -| normalizedPaths.js:358:21:358:51 | pathMod ... , path) | normalizedPaths.js:358:7:358:51 | requestPath | provenance | | +| normalizedPaths.js:354:7:354:10 | path | normalizedPaths.js:356:19:356:22 | path | provenance | | +| normalizedPaths.js:354:7:354:10 | path | normalizedPaths.js:358:47:358:50 | path | provenance | | +| normalizedPaths.js:354:14:354:27 | req.query.path | normalizedPaths.js:354:7:354:10 | path | provenance | | +| normalizedPaths.js:358:7:358:17 | requestPath | normalizedPaths.js:363:21:363:31 | requestPath | provenance | | +| normalizedPaths.js:358:21:358:51 | pathMod ... , path) | normalizedPaths.js:358:7:358:17 | requestPath | provenance | | | normalizedPaths.js:358:47:358:50 | path | normalizedPaths.js:358:21:358:51 | pathMod ... , path) | provenance | Config | -| normalizedPaths.js:377:7:377:27 | path | normalizedPaths.js:379:19:379:22 | path | provenance | | -| normalizedPaths.js:377:7:377:27 | path | normalizedPaths.js:381:25:381:28 | path | provenance | | -| normalizedPaths.js:377:14:377:27 | req.query.path | normalizedPaths.js:377:7:377:27 | path | provenance | | +| normalizedPaths.js:377:7:377:10 | path | normalizedPaths.js:379:19:379:22 | path | provenance | | +| normalizedPaths.js:377:7:377:10 | path | normalizedPaths.js:381:25:381:28 | path | provenance | | +| normalizedPaths.js:377:14:377:27 | req.query.path | normalizedPaths.js:377:7:377:10 | path | provenance | | | normalizedPaths.js:381:25:381:28 | path | normalizedPaths.js:381:19:381:29 | slash(path) | provenance | Config | -| normalizedPaths.js:385:7:385:46 | path | normalizedPaths.js:388:19:388:22 | path | provenance | | -| normalizedPaths.js:385:7:385:46 | path | normalizedPaths.js:399:21:399:24 | path | provenance | | -| normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | normalizedPaths.js:385:7:385:46 | path | provenance | | +| normalizedPaths.js:385:7:385:10 | path | normalizedPaths.js:388:19:388:22 | path | provenance | | +| normalizedPaths.js:385:7:385:10 | path | normalizedPaths.js:399:21:399:24 | path | provenance | | +| normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | normalizedPaths.js:385:7:385:10 | path | provenance | | | normalizedPaths.js:385:35:385:45 | req.query.x | normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | provenance | Config | | normalizedPaths.js:407:45:407:55 | req.query.x | normalizedPaths.js:407:45:407:66 | req.que ... it('/') | provenance | Config | | normalizedPaths.js:407:45:407:66 | req.que ... it('/') | normalizedPaths.js:407:19:407:67 | pathMod ... t('/')) | provenance | Config | | normalizedPaths.js:408:38:408:48 | req.query.x | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | provenance | Config | | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | provenance | Config | -| normalizedPaths.js:412:7:412:46 | path | normalizedPaths.js:415:19:415:22 | path | provenance | | -| normalizedPaths.js:412:7:412:46 | path | normalizedPaths.js:426:21:426:24 | path | provenance | | -| normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | normalizedPaths.js:412:7:412:46 | path | provenance | | +| normalizedPaths.js:412:7:412:10 | path | normalizedPaths.js:415:19:415:22 | path | provenance | | +| normalizedPaths.js:412:7:412:10 | path | normalizedPaths.js:426:21:426:24 | path | provenance | | +| normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | normalizedPaths.js:412:7:412:10 | path | provenance | | | normalizedPaths.js:412:35:412:45 | req.query.x | normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | provenance | Config | -| open.js:7:11:7:31 | file | open.js:9:10:9:13 | file | provenance | | -| open.js:7:11:7:31 | file | open.js:10:13:10:16 | file | provenance | | -| open.js:7:18:7:31 | req.query.file | open.js:7:11:7:31 | file | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:11:19:11:22 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:12:27:12:30 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:13:24:13:27 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:14:27:14:30 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:16:34:16:37 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:17:35:17:38 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:19:56:19:59 | path | provenance | | -| other-fs-libraries.js:9:7:9:48 | path | other-fs-libraries.js:24:35:24:38 | path | provenance | | +| open.js:7:11:7:14 | file | open.js:9:10:9:13 | file | provenance | | +| open.js:7:11:7:14 | file | open.js:10:13:10:16 | file | provenance | | +| open.js:7:18:7:31 | req.query.file | open.js:7:11:7:14 | file | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:11:19:11:22 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:12:27:12:30 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:13:24:13:27 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:14:27:14:30 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:16:34:16:37 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:17:35:17:38 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:19:56:19:59 | path | provenance | | +| other-fs-libraries.js:9:7:9:10 | path | other-fs-libraries.js:24:35:24:38 | path | provenance | | | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | other-fs-libraries.js:9:7:9:48 | path | provenance | | +| other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | other-fs-libraries.js:9:7:9:10 | path | provenance | | | other-fs-libraries.js:9:24:9:30 | req.url | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:40:35:40:38 | path | provenance | | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:41:50:41:53 | path | provenance | | -| other-fs-libraries.js:38:7:38:48 | path | other-fs-libraries.js:42:53:42:56 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:40:35:40:38 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:41:50:41:53 | path | provenance | | +| other-fs-libraries.js:38:7:38:10 | path | other-fs-libraries.js:42:53:42:56 | path | provenance | | | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | other-fs-libraries.js:38:7:38:48 | path | provenance | | +| other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | other-fs-libraries.js:38:7:38:10 | path | provenance | | | other-fs-libraries.js:38:24:38:30 | req.url | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:51:19:51:22 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:52:24:52:27 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:54:36:54:39 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:55:36:55:39 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:57:46:57:49 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:59:39:59:42 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:62:43:62:46 | path | provenance | | -| other-fs-libraries.js:49:7:49:48 | path | other-fs-libraries.js:63:51:63:54 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:51:19:51:22 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:52:24:52:27 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:54:36:54:39 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:55:36:55:39 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:57:46:57:49 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:59:39:59:42 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:62:43:62:46 | path | provenance | | +| other-fs-libraries.js:49:7:49:10 | path | other-fs-libraries.js:63:51:63:54 | path | provenance | | | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | other-fs-libraries.js:49:7:49:48 | path | provenance | | +| other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | other-fs-libraries.js:49:7:49:10 | path | provenance | | | other-fs-libraries.js:49:24:49:30 | req.url | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | provenance | Config | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:70:19:70:22 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:71:10:71:13 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:72:15:72:18 | path | provenance | | -| other-fs-libraries.js:68:7:68:48 | path | other-fs-libraries.js:73:8:73:11 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:70:19:70:22 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:71:10:71:13 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:72:15:72:18 | path | provenance | | +| other-fs-libraries.js:68:7:68:10 | path | other-fs-libraries.js:73:8:73:11 | path | provenance | | | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | other-fs-libraries.js:68:7:68:48 | path | provenance | | +| other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | other-fs-libraries.js:68:7:68:10 | path | provenance | | | other-fs-libraries.js:68:24:68:30 | req.url | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | provenance | Config | | other-fs-libraries.js:73:8:73:11 | path | other-fs-libraries.js:75:15:75:15 | x | provenance | | | other-fs-libraries.js:75:15:75:15 | x | other-fs-libraries.js:76:19:76:19 | x | provenance | | -| other-fs-libraries.js:81:7:81:48 | path | other-fs-libraries.js:83:16:83:19 | path | provenance | | +| other-fs-libraries.js:81:7:81:10 | path | other-fs-libraries.js:83:16:83:19 | path | provenance | | | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | provenance | Config | | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | provenance | Config | -| other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | other-fs-libraries.js:81:7:81:48 | path | provenance | | +| other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | other-fs-libraries.js:81:7:81:10 | path | provenance | | | other-fs-libraries.js:81:24:81:30 | req.url | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | provenance | Config | -| prettier.js:6:11:6:28 | p | prettier.js:7:28:7:28 | p | provenance | | -| prettier.js:6:11:6:28 | p | prettier.js:11:44:11:44 | p | provenance | | -| prettier.js:6:13:6:13 | p | prettier.js:6:11:6:28 | p | provenance | | -| pupeteer.js:5:9:5:71 | tainted | pupeteer.js:9:28:9:34 | tainted | provenance | | -| pupeteer.js:5:9:5:71 | tainted | pupeteer.js:13:37:13:43 | tainted | provenance | | -| pupeteer.js:5:19:5:71 | "dir/" ... t.data" | pupeteer.js:5:9:5:71 | tainted | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:6:13:6:13 | p | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:7:28:7:28 | p | provenance | | +| prettier.js:6:13:6:13 | p | prettier.js:11:44:11:44 | p | provenance | | +| pupeteer.js:5:9:5:15 | tainted | pupeteer.js:9:28:9:34 | tainted | provenance | | +| pupeteer.js:5:9:5:15 | tainted | pupeteer.js:13:37:13:43 | tainted | provenance | | +| pupeteer.js:5:19:5:71 | "dir/" ... t.data" | pupeteer.js:5:9:5:15 | tainted | provenance | | | pupeteer.js:5:28:5:53 | parseTo ... t).name | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | provenance | Config | | rimraf.js:8:11:8:18 | { path } | rimraf.js:8:13:8:16 | path | provenance | Config | -| rimraf.js:8:11:8:29 | path | rimraf.js:10:17:10:20 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:11:23:11:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:12:19:12:22 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:13:25:13:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:14:24:14:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:15:23:15:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:16:25:16:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:17:19:17:22 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:18:24:18:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:19:23:19:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:20:26:20:29 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:21:20:21:23 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:22:25:22:28 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:23:24:23:27 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:24:23:24:26 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:25:28:25:31 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:26:27:26:30 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:27:22:27:25 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:28:18:28:21 | path | provenance | | -| rimraf.js:8:11:8:29 | path | rimraf.js:29:23:29:26 | path | provenance | | -| rimraf.js:8:13:8:16 | path | rimraf.js:8:11:8:29 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:8:13:8:16 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:10:17:10:20 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:11:23:11:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:12:19:12:22 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:13:25:13:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:14:24:14:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:15:23:15:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:16:25:16:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:17:19:17:22 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:18:24:18:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:19:23:19:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:20:26:20:29 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:21:20:21:23 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:22:25:22:28 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:23:24:23:27 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:24:23:24:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:25:28:25:31 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:26:27:26:30 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:27:22:27:25 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:28:18:28:21 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:29:23:29:26 | path | provenance | | | rimraf.js:8:22:8:29 | req.body | rimraf.js:8:11:8:18 | { path } | provenance | | | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | sharedlib-repro.js:21:27:21:34 | filepath | provenance | | | sharedlib-repro.js:21:27:21:34 | filepath | sharedlib-repro.js:22:18:22:25 | filepath | provenance | | -| tainted-access-paths.js:6:7:6:48 | path | tainted-access-paths.js:8:19:8:22 | path | provenance | | -| tainted-access-paths.js:6:7:6:48 | path | tainted-access-paths.js:10:33:10:36 | path | provenance | | +| tainted-access-paths.js:6:7:6:10 | path | tainted-access-paths.js:8:19:8:22 | path | provenance | | +| tainted-access-paths.js:6:7:6:10 | path | tainted-access-paths.js:10:33:10:36 | path | provenance | | | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | tainted-access-paths.js:6:7:6:48 | path | provenance | | +| tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | tainted-access-paths.js:6:7:6:10 | path | provenance | | | tainted-access-paths.js:6:24:6:30 | req.url | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | provenance | Config | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:12:19:12:21 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:26:19:26:21 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:29:21:29:23 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:30:23:30:25 | obj | provenance | | -| tainted-access-paths.js:10:7:10:36 | obj | tainted-access-paths.js:31:23:31:25 | obj | provenance | | -| tainted-access-paths.js:10:33:10:36 | path | tainted-access-paths.js:10:7:10:36 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:12:19:12:21 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:26:19:26:21 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:29:21:29:23 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:30:23:30:25 | obj | provenance | | +| tainted-access-paths.js:10:7:10:9 | obj | tainted-access-paths.js:31:23:31:25 | obj | provenance | | +| tainted-access-paths.js:10:33:10:36 | path | tainted-access-paths.js:10:7:10:9 | obj | provenance | | | tainted-access-paths.js:12:19:12:21 | obj | tainted-access-paths.js:12:19:12:25 | obj.sub | provenance | Config | | tainted-access-paths.js:26:19:26:21 | obj | tainted-access-paths.js:26:19:26:26 | obj.sub3 | provenance | Config | | tainted-access-paths.js:29:21:29:23 | obj | tainted-access-paths.js:29:21:29:28 | obj.sub4 | provenance | Config | | tainted-access-paths.js:30:23:30:25 | obj | tainted-access-paths.js:30:23:30:30 | obj.sub4 | provenance | Config | | tainted-access-paths.js:31:23:31:25 | obj | tainted-access-paths.js:31:23:31:30 | obj.sub4 | provenance | Config | -| tainted-access-paths.js:39:7:39:48 | path | tainted-access-paths.js:40:23:40:26 | path | provenance | | +| tainted-access-paths.js:39:7:39:10 | path | tainted-access-paths.js:40:23:40:26 | path | provenance | | | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | tainted-access-paths.js:39:7:39:48 | path | provenance | | +| tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | tainted-access-paths.js:39:7:39:10 | path | provenance | | | tainted-access-paths.js:39:24:39:30 | req.url | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | provenance | Config | -| tainted-access-paths.js:48:7:48:48 | path | tainted-access-paths.js:49:10:49:13 | path | provenance | | +| tainted-access-paths.js:48:7:48:10 | path | tainted-access-paths.js:49:10:49:13 | path | provenance | | | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | provenance | Config | | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | provenance | Config | -| tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | tainted-access-paths.js:48:7:48:48 | path | provenance | | +| tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | tainted-access-paths.js:48:7:48:10 | path | provenance | | | tainted-access-paths.js:48:24:48:30 | req.url | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | provenance | Config | -| tainted-promise-steps.js:6:7:6:48 | path | tainted-promise-steps.js:7:26:7:29 | path | provenance | | +| tainted-promise-steps.js:6:7:6:10 | path | tainted-promise-steps.js:7:26:7:29 | path | provenance | | | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | tainted-promise-steps.js:6:7:6:48 | path | provenance | | +| tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | tainted-promise-steps.js:6:7:6:10 | path | provenance | | | tainted-promise-steps.js:6:24:6:30 | req.url | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | provenance | Config | | tainted-promise-steps.js:7:10:7:30 | Promise ... e(path) [PromiseValue] | tainted-promise-steps.js:10:23:10:33 | pathPromise [PromiseValue] | provenance | | | tainted-promise-steps.js:7:26:7:29 | path | tainted-promise-steps.js:7:10:7:30 | Promise ... e(path) [PromiseValue] | provenance | | @@ -730,23 +730,23 @@ edges | tainted-sendFile.js:22:34:22:45 | req.params.x | tainted-sendFile.js:22:16:22:46 | path.jo ... rams.x) | provenance | Config | | tainted-sendFile.js:28:37:28:48 | req.params.x | tainted-sendFile.js:28:16:28:48 | homeDir ... arams.x | provenance | Config | | tainted-sendFile.js:30:34:30:45 | req.params.x | tainted-sendFile.js:30:16:30:46 | path.jo ... rams.x) | provenance | Config | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:8:18:8:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:9:18:9:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:10:18:10:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:11:18:11:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:13:18:13:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:14:33:14:36 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:15:42:15:45 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:17:18:17:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:18:18:18:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:22:18:22:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:23:18:23:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:24:18:24:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:26:18:26:21 | path | provenance | | -| tainted-string-steps.js:6:7:6:48 | path | tainted-string-steps.js:27:18:27:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:8:18:8:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:9:18:9:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:10:18:10:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:11:18:11:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:13:18:13:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:14:33:14:36 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:15:42:15:45 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:17:18:17:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:18:18:18:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:22:18:22:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:23:18:23:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:24:18:24:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:26:18:26:21 | path | provenance | | +| tainted-string-steps.js:6:7:6:10 | path | tainted-string-steps.js:27:18:27:21 | path | provenance | | | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | provenance | Config | | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | provenance | Config | -| tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | tainted-string-steps.js:6:7:6:48 | path | provenance | | +| tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | tainted-string-steps.js:6:7:6:10 | path | provenance | | | tainted-string-steps.js:6:24:6:30 | req.url | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | provenance | Config | | tainted-string-steps.js:8:18:8:21 | path | tainted-string-steps.js:8:18:8:34 | path.substring(4) | provenance | Config | | tainted-string-steps.js:9:18:9:21 | path | tainted-string-steps.js:9:18:9:37 | path.substring(0, i) | provenance | Config | @@ -766,34 +766,34 @@ edges | tainted-string-steps.js:26:18:26:21 | path | tainted-string-steps.js:26:18:26:36 | path.split(unknown) | provenance | Config | | tainted-string-steps.js:26:18:26:36 | path.split(unknown) | tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | provenance | Config | | tainted-string-steps.js:27:18:27:21 | path | tainted-string-steps.js:27:18:27:36 | path.split(unknown) | provenance | Config | -| torrents.js:5:6:5:38 | name | torrents.js:6:24:6:27 | name | provenance | | -| torrents.js:5:13:5:38 | parseTo ... t).name | torrents.js:5:6:5:38 | name | provenance | | -| torrents.js:6:6:6:45 | loc | torrents.js:7:25:7:27 | loc | provenance | | -| torrents.js:6:12:6:45 | dir + " ... t.data" | torrents.js:6:6:6:45 | loc | provenance | | +| torrents.js:5:6:5:9 | name | torrents.js:6:24:6:27 | name | provenance | | +| torrents.js:5:13:5:38 | parseTo ... t).name | torrents.js:5:6:5:9 | name | provenance | | +| torrents.js:6:6:6:8 | loc | torrents.js:7:25:7:27 | loc | provenance | | +| torrents.js:6:12:6:45 | dir + " ... t.data" | torrents.js:6:6:6:8 | loc | provenance | | | torrents.js:6:24:6:27 | name | torrents.js:6:12:6:45 | dir + " ... t.data" | provenance | Config | -| typescript.ts:9:7:9:48 | path | typescript.ts:11:29:11:32 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:19:15:19:18 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:22:15:22:18 | path | provenance | | -| typescript.ts:9:7:9:48 | path | typescript.ts:29:15:29:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:11:29:11:32 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:19:15:19:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:22:15:22:18 | path | provenance | | +| typescript.ts:9:7:9:10 | path | typescript.ts:29:15:29:18 | path | provenance | | | typescript.ts:9:14:9:37 | url.par ... , true) | typescript.ts:9:14:9:43 | url.par ... ).query | provenance | Config | | typescript.ts:9:14:9:43 | url.par ... ).query | typescript.ts:9:14:9:48 | url.par ... ry.path | provenance | Config | -| typescript.ts:9:14:9:48 | url.par ... ry.path | typescript.ts:9:7:9:48 | path | provenance | | +| typescript.ts:9:14:9:48 | url.par ... ry.path | typescript.ts:9:7:9:10 | path | provenance | | | typescript.ts:9:24:9:30 | req.url | typescript.ts:9:14:9:37 | url.par ... , true) | provenance | Config | -| typescript.ts:19:7:19:18 | path3 | typescript.ts:20:39:20:43 | path3 | provenance | | -| typescript.ts:19:15:19:18 | path | typescript.ts:19:7:19:18 | path3 | provenance | | -| typescript.ts:22:7:22:18 | path4 | typescript.ts:23:39:23:43 | path4 | provenance | | -| typescript.ts:22:15:22:18 | path | typescript.ts:22:7:22:18 | path4 | provenance | | -| typescript.ts:29:7:29:18 | path6 | typescript.ts:31:29:31:33 | path6 | provenance | | -| typescript.ts:29:15:29:18 | path | typescript.ts:29:7:29:18 | path6 | provenance | | +| typescript.ts:19:7:19:11 | path3 | typescript.ts:20:39:20:43 | path3 | provenance | | +| typescript.ts:19:15:19:18 | path | typescript.ts:19:7:19:11 | path3 | provenance | | +| typescript.ts:22:7:22:11 | path4 | typescript.ts:23:39:23:43 | path4 | provenance | | +| typescript.ts:22:15:22:18 | path | typescript.ts:22:7:22:11 | path4 | provenance | | +| typescript.ts:29:7:29:11 | path6 | typescript.ts:31:29:31:33 | path6 | provenance | | +| typescript.ts:29:15:29:18 | path | typescript.ts:29:7:29:11 | path6 | provenance | | nodes -| TaintedPath-es6.js:7:7:7:44 | path | semmle.label | path | +| TaintedPath-es6.js:7:7:7:10 | path | semmle.label | path | | TaintedPath-es6.js:7:14:7:33 | parse(req.url, true) | semmle.label | parse(req.url, true) | | TaintedPath-es6.js:7:14:7:39 | parse(r ... ).query | semmle.label | parse(r ... ).query | | TaintedPath-es6.js:7:14:7:44 | parse(r ... ry.path | semmle.label | parse(r ... ry.path | | TaintedPath-es6.js:7:20:7:26 | req.url | semmle.label | req.url | | TaintedPath-es6.js:9:26:9:45 | join("public", path) | semmle.label | join("public", path) | | TaintedPath-es6.js:9:41:9:44 | path | semmle.label | path | -| TaintedPath.js:9:7:9:48 | path | semmle.label | path | +| TaintedPath.js:9:7:9:10 | path | semmle.label | path | | TaintedPath.js:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -805,7 +805,7 @@ nodes | TaintedPath.js:19:33:19:36 | path | semmle.label | path | | TaintedPath.js:22:33:22:36 | path | semmle.label | path | | TaintedPath.js:31:31:31:34 | path | semmle.label | path | -| TaintedPath.js:36:3:36:44 | path | semmle.label | path | +| TaintedPath.js:36:3:36:6 | path | semmle.label | path | | TaintedPath.js:36:10:36:33 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:36:10:36:39 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:36:10:36:44 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -838,7 +838,7 @@ nodes | TaintedPath.js:56:31:56:73 | require ... ).query | semmle.label | require ... ).query | | TaintedPath.js:56:60:56:66 | req.url | semmle.label | req.url | | TaintedPath.js:64:48:64:60 | req.params[0] | semmle.label | req.params[0] | -| TaintedPath.js:73:6:73:47 | path | semmle.label | path | +| TaintedPath.js:73:6:73:9 | path | semmle.label | path | | TaintedPath.js:73:13:73:36 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:73:13:73:42 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:73:13:73:47 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -848,19 +848,19 @@ nodes | TaintedPath.js:76:14:76:17 | path | semmle.label | path | | TaintedPath.js:77:32:77:39 | realpath | semmle.label | realpath | | TaintedPath.js:78:45:78:52 | realpath | semmle.label | realpath | -| TaintedPath.js:109:6:109:47 | path | semmle.label | path | +| TaintedPath.js:109:6:109:9 | path | semmle.label | path | | TaintedPath.js:109:13:109:36 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:109:13:109:42 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:109:13:109:47 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:109:23:109:29 | req.url | semmle.label | req.url | | TaintedPath.js:111:23:111:26 | path | semmle.label | path | -| TaintedPath.js:115:7:115:48 | path | semmle.label | path | +| TaintedPath.js:115:7:115:10 | path | semmle.label | path | | TaintedPath.js:115:14:115:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:115:14:115:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:115:14:115:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:115:24:115:30 | req.url | semmle.label | req.url | | TaintedPath.js:117:19:117:22 | path | semmle.label | path | -| TaintedPath.js:119:7:119:29 | split | semmle.label | split | +| TaintedPath.js:119:7:119:11 | split | semmle.label | split | | TaintedPath.js:119:15:119:18 | path | semmle.label | path | | TaintedPath.js:119:15:119:29 | path.split("/") | semmle.label | path.split("/") | | TaintedPath.js:121:19:121:23 | split | semmle.label | split | @@ -870,19 +870,19 @@ nodes | TaintedPath.js:126:19:126:35 | prefix + split[x] | semmle.label | prefix + split[x] | | TaintedPath.js:126:28:126:32 | split | semmle.label | split | | TaintedPath.js:126:28:126:35 | split[x] | semmle.label | split[x] | -| TaintedPath.js:128:7:128:38 | concatted | semmle.label | concatted | +| TaintedPath.js:128:7:128:15 | concatted | semmle.label | concatted | | TaintedPath.js:128:19:128:38 | prefix.concat(split) | semmle.label | prefix.concat(split) | | TaintedPath.js:128:33:128:37 | split | semmle.label | split | | TaintedPath.js:129:19:129:27 | concatted | semmle.label | concatted | | TaintedPath.js:129:19:129:37 | concatted.join("/") | semmle.label | concatted.join("/") | -| TaintedPath.js:131:7:131:39 | concatted2 | semmle.label | concatted2 | +| TaintedPath.js:131:7:131:16 | concatted2 | semmle.label | concatted2 | | TaintedPath.js:131:20:131:24 | split | semmle.label | split | | TaintedPath.js:131:20:131:39 | split.concat(prefix) | semmle.label | split.concat(prefix) | | TaintedPath.js:132:19:132:28 | concatted2 | semmle.label | concatted2 | | TaintedPath.js:132:19:132:38 | concatted2.join("/") | semmle.label | concatted2.join("/") | | TaintedPath.js:134:19:134:23 | split | semmle.label | split | | TaintedPath.js:134:19:134:29 | split.pop() | semmle.label | split.pop() | -| TaintedPath.js:139:7:139:48 | path | semmle.label | path | +| TaintedPath.js:139:7:139:10 | path | semmle.label | path | | TaintedPath.js:139:14:139:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:139:14:139:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:139:14:139:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -913,7 +913,7 @@ nodes | TaintedPath.js:179:29:179:51 | parseqs ... eq.url) | semmle.label | parseqs ... eq.url) | | TaintedPath.js:179:29:179:55 | parseqs ... rl).foo | semmle.label | parseqs ... rl).foo | | TaintedPath.js:179:44:179:50 | req.url | semmle.label | req.url | -| TaintedPath.js:184:7:184:48 | path | semmle.label | path | +| TaintedPath.js:184:7:184:10 | path | semmle.label | path | | TaintedPath.js:184:14:184:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:184:14:184:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:184:14:184:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -921,14 +921,14 @@ nodes | TaintedPath.js:185:31:185:34 | path | semmle.label | path | | TaintedPath.js:186:45:186:48 | path | semmle.label | path | | TaintedPath.js:187:35:187:38 | path | semmle.label | path | -| TaintedPath.js:191:7:191:48 | path | semmle.label | path | +| TaintedPath.js:191:7:191:10 | path | semmle.label | path | | TaintedPath.js:191:14:191:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:191:14:191:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:191:14:191:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:191:24:191:30 | req.url | semmle.label | req.url | | TaintedPath.js:195:29:195:32 | path | semmle.label | path | | TaintedPath.js:195:29:195:85 | path.re ... '), '') | semmle.label | path.re ... '), '') | -| TaintedPath.js:200:7:200:48 | path | semmle.label | path | +| TaintedPath.js:200:7:200:10 | path | semmle.label | path | | TaintedPath.js:200:14:200:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:200:14:200:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:200:14:200:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -937,27 +937,27 @@ nodes | TaintedPath.js:202:29:202:68 | path.re ... '), '') | semmle.label | path.re ... '), '') | | TaintedPath.js:205:31:205:34 | path | semmle.label | path | | TaintedPath.js:205:31:205:69 | path.re ... '), '') | semmle.label | path.re ... '), '') | -| TaintedPath.js:212:7:212:48 | path | semmle.label | path | +| TaintedPath.js:212:7:212:10 | path | semmle.label | path | | TaintedPath.js:212:14:212:37 | url.par ... , true) | semmle.label | url.par ... , true) | | TaintedPath.js:212:14:212:43 | url.par ... ).query | semmle.label | url.par ... ).query | | TaintedPath.js:212:14:212:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | TaintedPath.js:212:24:212:30 | req.url | semmle.label | req.url | -| TaintedPath.js:213:9:213:37 | improperEscape | semmle.label | improperEscape | +| TaintedPath.js:213:9:213:22 | improperEscape | semmle.label | improperEscape | | TaintedPath.js:213:26:213:37 | escape(path) | semmle.label | escape(path) | | TaintedPath.js:213:33:213:36 | path | semmle.label | path | | TaintedPath.js:214:29:214:42 | improperEscape | semmle.label | improperEscape | -| TaintedPath.js:215:9:215:40 | improperEscape2 | semmle.label | improperEscape2 | +| TaintedPath.js:215:9:215:23 | improperEscape2 | semmle.label | improperEscape2 | | TaintedPath.js:215:27:215:40 | unescape(path) | semmle.label | unescape(path) | | TaintedPath.js:215:36:215:39 | path | semmle.label | path | | TaintedPath.js:216:29:216:43 | improperEscape2 | semmle.label | improperEscape2 | -| examples/TaintedPath.js:8:7:8:52 | filePath | semmle.label | filePath | +| examples/TaintedPath.js:8:7:8:14 | filePath | semmle.label | filePath | | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | semmle.label | url.par ... , true) | | examples/TaintedPath.js:8:18:8:47 | url.par ... ).query | semmle.label | url.par ... ).query | | examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | semmle.label | url.par ... ry.path | | examples/TaintedPath.js:8:28:8:34 | req.url | semmle.label | req.url | | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | semmle.label | ROOT + filePath | | examples/TaintedPath.js:10:36:10:43 | filePath | semmle.label | filePath | -| execa.js:6:9:6:64 | filePath | semmle.label | filePath | +| execa.js:6:9:6:16 | filePath | semmle.label | filePath | | execa.js:6:20:6:43 | url.par ... , true) | semmle.label | url.par ... , true) | | execa.js:6:20:6:49 | url.par ... ).query | semmle.label | url.par ... ).query | | execa.js:6:20:6:61 | url.par ... ePath"] | semmle.label | url.par ... ePath"] | @@ -974,14 +974,14 @@ nodes | handlebars.js:15:25:15:32 | filePath | semmle.label | filePath | | handlebars.js:29:46:29:60 | req.params.path | semmle.label | req.params.path | | handlebars.js:43:15:43:29 | req.params.path | semmle.label | req.params.path | -| hapi.js:14:19:14:51 | filepath | semmle.label | filepath | +| hapi.js:14:19:14:26 | filepath | semmle.label | filepath | | hapi.js:14:30:14:51 | request ... ilepath | semmle.label | request ... ilepath | | hapi.js:15:44:15:51 | filepath | semmle.label | filepath | -| make-dir.js:7:11:7:31 | file | semmle.label | file | +| make-dir.js:7:11:7:14 | file | semmle.label | file | | make-dir.js:7:18:7:31 | req.query.file | semmle.label | req.query.file | | make-dir.js:9:25:9:28 | file | semmle.label | file | | make-dir.js:10:23:10:26 | file | semmle.label | file | -| mkdirp.js:9:11:9:76 | dirPath | semmle.label | dirPath | +| mkdirp.js:9:11:9:17 | dirPath | semmle.label | dirPath | | mkdirp.js:9:21:9:76 | path.jo ... ltDir') | semmle.label | path.jo ... ltDir') | | mkdirp.js:9:42:9:59 | req.query.filename | semmle.label | req.query.filename | | mkdirp.js:9:42:9:75 | req.que ... ultDir' | semmle.label | req.que ... ultDir' | @@ -997,7 +997,7 @@ nodes | mkdirp.js:20:29:20:35 | dirPath | semmle.label | dirPath | | mkdirp.js:21:23:21:29 | dirPath | semmle.label | dirPath | | more-fs-extra.js:8:11:8:22 | { filename } | semmle.label | { filename } | -| more-fs-extra.js:8:11:8:33 | filename | semmle.label | filename | +| more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | | more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | | more-fs-extra.js:8:26:8:33 | req.body | semmle.label | req.body | | more-fs-extra.js:10:15:10:22 | filename | semmle.label | filename | @@ -1023,7 +1023,7 @@ nodes | more-fs-extra.js:30:16:30:23 | filename | semmle.label | filename | | more-fs-extra.js:31:20:31:27 | filename | semmle.label | filename | | more-fs-extra.js:32:23:32:30 | filename | semmle.label | filename | -| normalizedPaths.js:11:7:11:27 | path | semmle.label | path | +| normalizedPaths.js:11:7:11:10 | path | semmle.label | path | | normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:13:19:13:22 | path | semmle.label | path | | normalizedPaths.js:14:19:14:29 | './' + path | semmle.label | './' + path | @@ -1034,7 +1034,7 @@ nodes | normalizedPaths.js:16:35:16:38 | path | semmle.label | path | | normalizedPaths.js:17:19:17:57 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:17:53:17:56 | path | semmle.label | path | -| normalizedPaths.js:21:7:21:49 | path | semmle.label | path | +| normalizedPaths.js:21:7:21:10 | path | semmle.label | path | | normalizedPaths.js:21:14:21:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:21:35:21:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:23:19:23:22 | path | semmle.label | path | @@ -1046,57 +1046,57 @@ nodes | normalizedPaths.js:26:35:26:38 | path | semmle.label | path | | normalizedPaths.js:27:19:27:57 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:27:53:27:56 | path | semmle.label | path | -| normalizedPaths.js:31:7:31:49 | path | semmle.label | path | +| normalizedPaths.js:31:7:31:10 | path | semmle.label | path | | normalizedPaths.js:31:14:31:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:31:35:31:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:36:19:36:22 | path | semmle.label | path | | normalizedPaths.js:41:21:41:24 | path | semmle.label | path | -| normalizedPaths.js:54:7:54:49 | path | semmle.label | path | +| normalizedPaths.js:54:7:54:10 | path | semmle.label | path | | normalizedPaths.js:54:14:54:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:54:35:54:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:59:19:59:22 | path | semmle.label | path | | normalizedPaths.js:63:19:63:22 | path | semmle.label | path | | normalizedPaths.js:63:19:63:38 | path + "/index.html" | semmle.label | path + "/index.html" | | normalizedPaths.js:68:21:68:24 | path | semmle.label | path | -| normalizedPaths.js:73:7:73:56 | path | semmle.label | path | +| normalizedPaths.js:73:7:73:10 | path | semmle.label | path | | normalizedPaths.js:73:14:73:56 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:73:35:73:55 | './' + ... ry.path | semmle.label | './' + ... ry.path | | normalizedPaths.js:73:42:73:55 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:78:22:78:25 | path | semmle.label | path | -| normalizedPaths.js:82:7:82:27 | path | semmle.label | path | +| normalizedPaths.js:82:7:82:10 | path | semmle.label | path | | normalizedPaths.js:82:14:82:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:87:29:87:32 | path | semmle.label | path | | normalizedPaths.js:90:31:90:34 | path | semmle.label | path | -| normalizedPaths.js:94:7:94:49 | path | semmle.label | path | +| normalizedPaths.js:94:7:94:10 | path | semmle.label | path | | normalizedPaths.js:94:14:94:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:94:35:94:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:99:29:99:32 | path | semmle.label | path | -| normalizedPaths.js:117:7:117:44 | path | semmle.label | path | +| normalizedPaths.js:117:7:117:10 | path | semmle.label | path | | normalizedPaths.js:117:14:117:44 | fs.real ... y.path) | semmle.label | fs.real ... y.path) | | normalizedPaths.js:117:30:117:43 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:119:19:119:22 | path | semmle.label | path | | normalizedPaths.js:120:19:120:53 | pathMod ... .html') | semmle.label | pathMod ... .html') | | normalizedPaths.js:120:35:120:38 | path | semmle.label | path | -| normalizedPaths.js:130:7:130:49 | path | semmle.label | path | +| normalizedPaths.js:130:7:130:10 | path | semmle.label | path | | normalizedPaths.js:130:14:130:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:130:35:130:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:135:21:135:24 | path | semmle.label | path | -| normalizedPaths.js:139:7:139:62 | path | semmle.label | path | +| normalizedPaths.js:139:7:139:10 | path | semmle.label | path | | normalizedPaths.js:139:14:139:62 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:139:48:139:61 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:144:21:144:24 | path | semmle.label | path | -| normalizedPaths.js:148:7:148:58 | path | semmle.label | path | +| normalizedPaths.js:148:7:148:10 | path | semmle.label | path | | normalizedPaths.js:148:14:148:58 | 'foo/' ... y.path) | semmle.label | 'foo/' ... y.path) | | normalizedPaths.js:148:23:148:58 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:148:44:148:57 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:151:21:151:24 | path | semmle.label | path | | normalizedPaths.js:153:21:153:24 | path | semmle.label | path | -| normalizedPaths.js:160:7:160:49 | path | semmle.label | path | +| normalizedPaths.js:160:7:160:10 | path | semmle.label | path | | normalizedPaths.js:160:14:160:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:160:35:160:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:165:19:165:22 | path | semmle.label | path | | normalizedPaths.js:170:21:170:24 | path | semmle.label | path | -| normalizedPaths.js:174:7:174:27 | path | semmle.label | path | +| normalizedPaths.js:174:7:174:10 | path | semmle.label | path | | normalizedPaths.js:174:14:174:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:184:19:184:22 | path | semmle.label | path | | normalizedPaths.js:187:21:187:24 | path | semmle.label | path | @@ -1104,80 +1104,80 @@ nodes | normalizedPaths.js:192:21:192:24 | path | semmle.label | path | | normalizedPaths.js:194:21:194:24 | path | semmle.label | path | | normalizedPaths.js:199:21:199:24 | path | semmle.label | path | -| normalizedPaths.js:201:7:201:49 | normalizedPath | semmle.label | normalizedPath | +| normalizedPaths.js:201:7:201:20 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:201:24:201:49 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:201:45:201:48 | path | semmle.label | path | | normalizedPaths.js:205:21:205:34 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:208:21:208:34 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:210:21:210:34 | normalizedPath | semmle.label | normalizedPath | -| normalizedPaths.js:214:7:214:49 | path | semmle.label | path | +| normalizedPaths.js:214:7:214:10 | path | semmle.label | path | | normalizedPaths.js:214:14:214:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:214:35:214:48 | req.query.path | semmle.label | req.query.path | -| normalizedPaths.js:219:3:219:33 | path | semmle.label | path | +| normalizedPaths.js:219:3:219:6 | path | semmle.label | path | | normalizedPaths.js:219:10:219:33 | decodeU ... t(path) | semmle.label | decodeU ... t(path) | | normalizedPaths.js:219:29:219:32 | path | semmle.label | path | | normalizedPaths.js:222:21:222:24 | path | semmle.label | path | -| normalizedPaths.js:226:7:226:70 | path | semmle.label | path | +| normalizedPaths.js:226:7:226:10 | path | semmle.label | path | | normalizedPaths.js:226:14:226:49 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:226:14:226:70 | pathMod ... g, ' ') | semmle.label | pathMod ... g, ' ') | | normalizedPaths.js:226:35:226:48 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:228:21:228:24 | path | semmle.label | path | -| normalizedPaths.js:236:7:236:47 | path | semmle.label | path | +| normalizedPaths.js:236:7:236:10 | path | semmle.label | path | | normalizedPaths.js:236:14:236:47 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:236:33:236:46 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:238:19:238:22 | path | semmle.label | path | | normalizedPaths.js:245:21:245:24 | path | semmle.label | path | | normalizedPaths.js:250:21:250:24 | path | semmle.label | path | -| normalizedPaths.js:254:7:254:47 | path | semmle.label | path | +| normalizedPaths.js:254:7:254:10 | path | semmle.label | path | | normalizedPaths.js:254:14:254:47 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:254:33:254:46 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:256:19:256:22 | path | semmle.label | path | | normalizedPaths.js:262:21:262:24 | path | semmle.label | path | -| normalizedPaths.js:267:7:267:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:267:7:267:13 | newpath | semmle.label | newpath | | normalizedPaths.js:267:17:267:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:267:38:267:41 | path | semmle.label | path | | normalizedPaths.js:270:21:270:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:275:7:275:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:275:7:275:13 | newpath | semmle.label | newpath | | normalizedPaths.js:275:17:275:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:275:38:275:41 | path | semmle.label | path | | normalizedPaths.js:278:21:278:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:283:7:283:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:283:7:283:13 | newpath | semmle.label | newpath | | normalizedPaths.js:283:17:283:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:283:38:283:41 | path | semmle.label | path | | normalizedPaths.js:286:21:286:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:291:7:291:42 | newpath | semmle.label | newpath | +| normalizedPaths.js:291:7:291:13 | newpath | semmle.label | newpath | | normalizedPaths.js:291:17:291:42 | pathMod ... e(path) | semmle.label | pathMod ... e(path) | | normalizedPaths.js:291:38:291:41 | path | semmle.label | path | | normalizedPaths.js:296:21:296:27 | newpath | semmle.label | newpath | -| normalizedPaths.js:303:6:303:26 | path | semmle.label | path | +| normalizedPaths.js:303:6:303:9 | path | semmle.label | path | | normalizedPaths.js:303:13:303:26 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:304:18:304:21 | path | semmle.label | path | | normalizedPaths.js:309:19:309:22 | path | semmle.label | path | | normalizedPaths.js:313:19:313:22 | path | semmle.label | path | | normalizedPaths.js:316:19:316:22 | path | semmle.label | path | -| normalizedPaths.js:320:6:320:49 | normalizedPath | semmle.label | normalizedPath | +| normalizedPaths.js:320:6:320:19 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:320:23:320:49 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:320:45:320:48 | path | semmle.label | path | | normalizedPaths.js:325:19:325:32 | normalizedPath | semmle.label | normalizedPath | | normalizedPaths.js:332:19:332:32 | normalizedPath | semmle.label | normalizedPath | -| normalizedPaths.js:339:6:339:46 | path | semmle.label | path | +| normalizedPaths.js:339:6:339:9 | path | semmle.label | path | | normalizedPaths.js:339:13:339:46 | pathMod ... y.path) | semmle.label | pathMod ... y.path) | | normalizedPaths.js:339:32:339:45 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:341:18:341:21 | path | semmle.label | path | | normalizedPaths.js:346:19:346:22 | path | semmle.label | path | -| normalizedPaths.js:354:7:354:27 | path | semmle.label | path | +| normalizedPaths.js:354:7:354:10 | path | semmle.label | path | | normalizedPaths.js:354:14:354:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:356:19:356:22 | path | semmle.label | path | -| normalizedPaths.js:358:7:358:51 | requestPath | semmle.label | requestPath | +| normalizedPaths.js:358:7:358:17 | requestPath | semmle.label | requestPath | | normalizedPaths.js:358:21:358:51 | pathMod ... , path) | semmle.label | pathMod ... , path) | | normalizedPaths.js:358:47:358:50 | path | semmle.label | path | | normalizedPaths.js:363:21:363:31 | requestPath | semmle.label | requestPath | -| normalizedPaths.js:377:7:377:27 | path | semmle.label | path | +| normalizedPaths.js:377:7:377:10 | path | semmle.label | path | | normalizedPaths.js:377:14:377:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:379:19:379:22 | path | semmle.label | path | | normalizedPaths.js:381:19:381:29 | slash(path) | semmle.label | slash(path) | | normalizedPaths.js:381:25:381:28 | path | semmle.label | path | -| normalizedPaths.js:385:7:385:46 | path | semmle.label | path | +| normalizedPaths.js:385:7:385:10 | path | semmle.label | path | | normalizedPaths.js:385:14:385:46 | pathMod ... uery.x) | semmle.label | pathMod ... uery.x) | | normalizedPaths.js:385:35:385:45 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:388:19:388:22 | path | semmle.label | path | @@ -1188,16 +1188,16 @@ nodes | normalizedPaths.js:408:19:408:60 | pathMod ... t('/')) | semmle.label | pathMod ... t('/')) | | normalizedPaths.js:408:38:408:48 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:408:38:408:59 | req.que ... it('/') | semmle.label | req.que ... it('/') | -| normalizedPaths.js:412:7:412:46 | path | semmle.label | path | +| normalizedPaths.js:412:7:412:10 | path | semmle.label | path | | normalizedPaths.js:412:14:412:46 | pathMod ... uery.x) | semmle.label | pathMod ... uery.x) | | normalizedPaths.js:412:35:412:45 | req.query.x | semmle.label | req.query.x | | normalizedPaths.js:415:19:415:22 | path | semmle.label | path | | normalizedPaths.js:426:21:426:24 | path | semmle.label | path | -| open.js:7:11:7:31 | file | semmle.label | file | +| open.js:7:11:7:14 | file | semmle.label | file | | open.js:7:18:7:31 | req.query.file | semmle.label | req.query.file | | open.js:9:10:9:13 | file | semmle.label | file | | open.js:10:13:10:16 | file | semmle.label | file | -| other-fs-libraries.js:9:7:9:48 | path | semmle.label | path | +| other-fs-libraries.js:9:7:9:10 | path | semmle.label | path | | other-fs-libraries.js:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1210,7 +1210,7 @@ nodes | other-fs-libraries.js:17:35:17:38 | path | semmle.label | path | | other-fs-libraries.js:19:56:19:59 | path | semmle.label | path | | other-fs-libraries.js:24:35:24:38 | path | semmle.label | path | -| other-fs-libraries.js:38:7:38:48 | path | semmle.label | path | +| other-fs-libraries.js:38:7:38:10 | path | semmle.label | path | | other-fs-libraries.js:38:14:38:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:38:14:38:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:38:14:38:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1218,7 +1218,7 @@ nodes | other-fs-libraries.js:40:35:40:38 | path | semmle.label | path | | other-fs-libraries.js:41:50:41:53 | path | semmle.label | path | | other-fs-libraries.js:42:53:42:56 | path | semmle.label | path | -| other-fs-libraries.js:49:7:49:48 | path | semmle.label | path | +| other-fs-libraries.js:49:7:49:10 | path | semmle.label | path | | other-fs-libraries.js:49:14:49:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:49:14:49:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:49:14:49:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1231,7 +1231,7 @@ nodes | other-fs-libraries.js:59:39:59:42 | path | semmle.label | path | | other-fs-libraries.js:62:43:62:46 | path | semmle.label | path | | other-fs-libraries.js:63:51:63:54 | path | semmle.label | path | -| other-fs-libraries.js:68:7:68:48 | path | semmle.label | path | +| other-fs-libraries.js:68:7:68:10 | path | semmle.label | path | | other-fs-libraries.js:68:14:68:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:68:14:68:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:68:14:68:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1242,23 +1242,23 @@ nodes | other-fs-libraries.js:73:8:73:11 | path | semmle.label | path | | other-fs-libraries.js:75:15:75:15 | x | semmle.label | x | | other-fs-libraries.js:76:19:76:19 | x | semmle.label | x | -| other-fs-libraries.js:81:7:81:48 | path | semmle.label | path | +| other-fs-libraries.js:81:7:81:10 | path | semmle.label | path | | other-fs-libraries.js:81:14:81:37 | url.par ... , true) | semmle.label | url.par ... , true) | | other-fs-libraries.js:81:14:81:43 | url.par ... ).query | semmle.label | url.par ... ).query | | other-fs-libraries.js:81:14:81:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | other-fs-libraries.js:81:24:81:30 | req.url | semmle.label | req.url | | other-fs-libraries.js:83:16:83:19 | path | semmle.label | path | -| prettier.js:6:11:6:28 | p | semmle.label | p | +| prettier.js:6:13:6:13 | p | semmle.label | p | | prettier.js:6:13:6:13 | p | semmle.label | p | | prettier.js:7:28:7:28 | p | semmle.label | p | | prettier.js:11:44:11:44 | p | semmle.label | p | -| pupeteer.js:5:9:5:71 | tainted | semmle.label | tainted | +| pupeteer.js:5:9:5:15 | tainted | semmle.label | tainted | | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | semmle.label | "dir/" ... t.data" | | pupeteer.js:5:28:5:53 | parseTo ... t).name | semmle.label | parseTo ... t).name | | pupeteer.js:9:28:9:34 | tainted | semmle.label | tainted | | pupeteer.js:13:37:13:43 | tainted | semmle.label | tainted | | rimraf.js:8:11:8:18 | { path } | semmle.label | { path } | -| rimraf.js:8:11:8:29 | path | semmle.label | path | +| rimraf.js:8:13:8:16 | path | semmle.label | path | | rimraf.js:8:13:8:16 | path | semmle.label | path | | rimraf.js:8:22:8:29 | req.body | semmle.label | req.body | | rimraf.js:10:17:10:20 | path | semmle.label | path | @@ -1284,13 +1284,13 @@ nodes | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | semmle.label | req.par ... spaceId | | sharedlib-repro.js:21:27:21:34 | filepath | semmle.label | filepath | | sharedlib-repro.js:22:18:22:25 | filepath | semmle.label | filepath | -| tainted-access-paths.js:6:7:6:48 | path | semmle.label | path | +| tainted-access-paths.js:6:7:6:10 | path | semmle.label | path | | tainted-access-paths.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:6:24:6:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:8:19:8:22 | path | semmle.label | path | -| tainted-access-paths.js:10:7:10:36 | obj | semmle.label | obj | +| tainted-access-paths.js:10:7:10:9 | obj | semmle.label | obj | | tainted-access-paths.js:10:33:10:36 | path | semmle.label | path | | tainted-access-paths.js:12:19:12:21 | obj | semmle.label | obj | | tainted-access-paths.js:12:19:12:25 | obj.sub | semmle.label | obj.sub | @@ -1302,19 +1302,19 @@ nodes | tainted-access-paths.js:30:23:30:30 | obj.sub4 | semmle.label | obj.sub4 | | tainted-access-paths.js:31:23:31:25 | obj | semmle.label | obj | | tainted-access-paths.js:31:23:31:30 | obj.sub4 | semmle.label | obj.sub4 | -| tainted-access-paths.js:39:7:39:48 | path | semmle.label | path | +| tainted-access-paths.js:39:7:39:10 | path | semmle.label | path | | tainted-access-paths.js:39:14:39:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:39:14:39:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:39:14:39:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:39:24:39:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:40:23:40:26 | path | semmle.label | path | -| tainted-access-paths.js:48:7:48:48 | path | semmle.label | path | +| tainted-access-paths.js:48:7:48:10 | path | semmle.label | path | | tainted-access-paths.js:48:14:48:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-access-paths.js:48:14:48:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-access-paths.js:48:14:48:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | tainted-access-paths.js:48:24:48:30 | req.url | semmle.label | req.url | | tainted-access-paths.js:49:10:49:13 | path | semmle.label | path | -| tainted-promise-steps.js:6:7:6:48 | path | semmle.label | path | +| tainted-promise-steps.js:6:7:6:10 | path | semmle.label | path | | tainted-promise-steps.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-promise-steps.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-promise-steps.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1343,7 +1343,7 @@ nodes | tainted-sendFile.js:30:16:30:46 | path.jo ... rams.x) | semmle.label | path.jo ... rams.x) | | tainted-sendFile.js:30:34:30:45 | req.params.x | semmle.label | req.params.x | | tainted-sendFile.js:32:43:32:58 | req.param("dir") | semmle.label | req.param("dir") | -| tainted-string-steps.js:6:7:6:48 | path | semmle.label | path | +| tainted-string-steps.js:6:7:6:10 | path | semmle.label | path | | tainted-string-steps.js:6:14:6:37 | url.par ... , true) | semmle.label | url.par ... , true) | | tainted-string-steps.js:6:14:6:43 | url.par ... ).query | semmle.label | url.par ... ).query | | tainted-string-steps.js:6:14:6:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -1380,25 +1380,25 @@ nodes | tainted-string-steps.js:26:18:26:45 | path.sp ... hatever | semmle.label | path.sp ... hatever | | tainted-string-steps.js:27:18:27:21 | path | semmle.label | path | | tainted-string-steps.js:27:18:27:36 | path.split(unknown) | semmle.label | path.split(unknown) | -| torrents.js:5:6:5:38 | name | semmle.label | name | +| torrents.js:5:6:5:9 | name | semmle.label | name | | torrents.js:5:13:5:38 | parseTo ... t).name | semmle.label | parseTo ... t).name | -| torrents.js:6:6:6:45 | loc | semmle.label | loc | +| torrents.js:6:6:6:8 | loc | semmle.label | loc | | torrents.js:6:12:6:45 | dir + " ... t.data" | semmle.label | dir + " ... t.data" | | torrents.js:6:24:6:27 | name | semmle.label | name | | torrents.js:7:25:7:27 | loc | semmle.label | loc | -| typescript.ts:9:7:9:48 | path | semmle.label | path | +| typescript.ts:9:7:9:10 | path | semmle.label | path | | typescript.ts:9:14:9:37 | url.par ... , true) | semmle.label | url.par ... , true) | | typescript.ts:9:14:9:43 | url.par ... ).query | semmle.label | url.par ... ).query | | typescript.ts:9:14:9:48 | url.par ... ry.path | semmle.label | url.par ... ry.path | | typescript.ts:9:24:9:30 | req.url | semmle.label | req.url | | typescript.ts:11:29:11:32 | path | semmle.label | path | -| typescript.ts:19:7:19:18 | path3 | semmle.label | path3 | +| typescript.ts:19:7:19:11 | path3 | semmle.label | path3 | | typescript.ts:19:15:19:18 | path | semmle.label | path | | typescript.ts:20:39:20:43 | path3 | semmle.label | path3 | -| typescript.ts:22:7:22:18 | path4 | semmle.label | path4 | +| typescript.ts:22:7:22:11 | path4 | semmle.label | path4 | | typescript.ts:22:15:22:18 | path | semmle.label | path | | typescript.ts:23:39:23:43 | path4 | semmle.label | path4 | -| typescript.ts:29:7:29:18 | path6 | semmle.label | path6 | +| typescript.ts:29:7:29:11 | path6 | semmle.label | path6 | | typescript.ts:29:15:29:18 | path | semmle.label | path | | typescript.ts:31:29:31:33 | path6 | semmle.label | path6 | | views.js:1:43:1:55 | req.params[0] | semmle.label | req.params[0] | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected b/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected index f8916181de1..d5c5f012a76 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/ZipSlip/ZipSlip.expected @@ -10,41 +10,41 @@ | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:35:26:35:29 | name | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlipBad.js:35:26:35:29 | name | file system operation | | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | Unsanitized archive entry, which may contain '..', is used in a $@. | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | file system operation | edges -| ZipSlipBad2.js:5:9:5:46 | fileName | ZipSlipBad2.js:6:22:6:29 | fileName | provenance | | -| ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | ZipSlipBad2.js:5:9:5:46 | fileName | provenance | | +| ZipSlipBad2.js:5:9:5:16 | fileName | ZipSlipBad2.js:6:22:6:29 | fileName | provenance | | +| ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | ZipSlipBad2.js:5:9:5:16 | fileName | provenance | | | ZipSlipBad2.js:5:37:5:46 | entry.path | ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | provenance | Config | -| ZipSlipBad.js:7:11:7:31 | fileName | ZipSlipBad.js:8:37:8:44 | fileName | provenance | | -| ZipSlipBad.js:7:22:7:31 | entry.path | ZipSlipBad.js:7:11:7:31 | fileName | provenance | | -| ZipSlipBad.js:15:11:15:31 | fileName | ZipSlipBad.js:16:30:16:37 | fileName | provenance | | -| ZipSlipBad.js:15:22:15:31 | entry.path | ZipSlipBad.js:15:11:15:31 | fileName | provenance | | -| ZipSlipBad.js:22:11:22:31 | fileName | ZipSlipBad.js:23:28:23:35 | fileName | provenance | | -| ZipSlipBad.js:22:22:22:31 | entry.path | ZipSlipBad.js:22:11:22:31 | fileName | provenance | | +| ZipSlipBad.js:7:11:7:18 | fileName | ZipSlipBad.js:8:37:8:44 | fileName | provenance | | +| ZipSlipBad.js:7:22:7:31 | entry.path | ZipSlipBad.js:7:11:7:18 | fileName | provenance | | +| ZipSlipBad.js:15:11:15:18 | fileName | ZipSlipBad.js:16:30:16:37 | fileName | provenance | | +| ZipSlipBad.js:15:22:15:31 | entry.path | ZipSlipBad.js:15:11:15:18 | fileName | provenance | | +| ZipSlipBad.js:22:11:22:18 | fileName | ZipSlipBad.js:23:28:23:35 | fileName | provenance | | +| ZipSlipBad.js:22:22:22:31 | entry.path | ZipSlipBad.js:22:11:22:18 | fileName | provenance | | | ZipSlipBad.js:30:14:30:17 | name | ZipSlipBad.js:31:26:31:29 | name | provenance | | | ZipSlipBad.js:34:16:34:19 | name | ZipSlipBad.js:35:26:35:29 | name | provenance | | -| ZipSlipBadUnzipper.js:7:9:7:29 | fileName | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | provenance | | -| ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:9:7:29 | fileName | provenance | | +| ZipSlipBadUnzipper.js:7:9:7:16 | fileName | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | provenance | | +| ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | ZipSlipBadUnzipper.js:7:9:7:16 | fileName | provenance | | nodes | AdmZipBad.js:6:24:6:41 | zipEntry.entryName | semmle.label | zipEntry.entryName | | TarSlipBad.js:6:36:6:46 | header.name | semmle.label | header.name | | TarSlipBad.js:9:17:9:31 | header.linkname | semmle.label | header.linkname | -| ZipSlipBad2.js:5:9:5:46 | fileName | semmle.label | fileName | +| ZipSlipBad2.js:5:9:5:16 | fileName | semmle.label | fileName | | ZipSlipBad2.js:5:20:5:46 | 'output ... ry.path | semmle.label | 'output ... ry.path | | ZipSlipBad2.js:5:37:5:46 | entry.path | semmle.label | entry.path | | ZipSlipBad2.js:6:22:6:29 | fileName | semmle.label | fileName | -| ZipSlipBad.js:7:11:7:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:7:11:7:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:7:22:7:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:8:37:8:44 | fileName | semmle.label | fileName | -| ZipSlipBad.js:15:11:15:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:15:11:15:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:15:22:15:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:16:30:16:37 | fileName | semmle.label | fileName | -| ZipSlipBad.js:22:11:22:31 | fileName | semmle.label | fileName | +| ZipSlipBad.js:22:11:22:18 | fileName | semmle.label | fileName | | ZipSlipBad.js:22:22:22:31 | entry.path | semmle.label | entry.path | | ZipSlipBad.js:23:28:23:35 | fileName | semmle.label | fileName | | ZipSlipBad.js:30:14:30:17 | name | semmle.label | name | | ZipSlipBad.js:31:26:31:29 | name | semmle.label | name | | ZipSlipBad.js:34:16:34:19 | name | semmle.label | name | | ZipSlipBad.js:35:26:35:29 | name | semmle.label | name | -| ZipSlipBadUnzipper.js:7:9:7:29 | fileName | semmle.label | fileName | +| ZipSlipBadUnzipper.js:7:9:7:16 | fileName | semmle.label | fileName | | ZipSlipBadUnzipper.js:7:20:7:29 | entry.path | semmle.label | entry.path | | ZipSlipBadUnzipper.js:8:37:8:44 | fileName | semmle.label | fileName | subpaths diff --git a/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected b/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected index 32b2875a86c..9962113d806 100644 --- a/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-073/TemplateObjectInjection.expected @@ -10,67 +10,67 @@ | tst.js:24:28:24:30 | obj | tst.js:8:26:8:49 | req.que ... rameter | tst.js:24:28:24:30 | obj | Template object depends on a $@. | tst.js:8:26:8:49 | req.que ... rameter | user-provided value | | tst.js:29:28:29:42 | JSON.parse(str) | tst.js:8:26:8:49 | req.que ... rameter | tst.js:29:28:29:42 | JSON.parse(str) | Template object depends on a $@. | tst.js:8:26:8:49 | req.que ... rameter | user-provided value | edges -| tst2.js:6:9:6:46 | bodyParameter | tst2.js:7:28:7:40 | bodyParameter | provenance | | +| tst2.js:6:9:6:21 | bodyParameter | tst2.js:7:28:7:40 | bodyParameter | provenance | | | tst2.js:6:25:6:32 | req.body | tst2.js:6:25:6:46 | req.bod ... rameter | provenance | Config | -| tst2.js:6:25:6:46 | req.bod ... rameter | tst2.js:6:9:6:46 | bodyParameter | provenance | | -| tst2.js:26:9:26:46 | bodyParameter | tst2.js:27:28:27:40 | bodyParameter | provenance | | +| tst2.js:6:25:6:46 | req.bod ... rameter | tst2.js:6:9:6:21 | bodyParameter | provenance | | +| tst2.js:26:9:26:21 | bodyParameter | tst2.js:27:28:27:40 | bodyParameter | provenance | | | tst2.js:26:25:26:32 | req.body | tst2.js:26:25:26:46 | req.bod ... rameter | provenance | Config | -| tst2.js:26:25:26:46 | req.bod ... rameter | tst2.js:26:9:26:46 | bodyParameter | provenance | | -| tst2.js:34:9:34:46 | bodyParameter | tst2.js:35:28:35:40 | bodyParameter | provenance | | +| tst2.js:26:25:26:46 | req.bod ... rameter | tst2.js:26:9:26:21 | bodyParameter | provenance | | +| tst2.js:34:9:34:21 | bodyParameter | tst2.js:35:28:35:40 | bodyParameter | provenance | | | tst2.js:34:25:34:32 | req.body | tst2.js:34:25:34:46 | req.bod ... rameter | provenance | Config | -| tst2.js:34:25:34:46 | req.bod ... rameter | tst2.js:34:9:34:46 | bodyParameter | provenance | | -| tst2.js:42:9:42:46 | bodyParameter | tst2.js:43:28:43:40 | bodyParameter | provenance | | +| tst2.js:34:25:34:46 | req.bod ... rameter | tst2.js:34:9:34:21 | bodyParameter | provenance | | +| tst2.js:42:9:42:21 | bodyParameter | tst2.js:43:28:43:40 | bodyParameter | provenance | | | tst2.js:42:25:42:32 | req.body | tst2.js:42:25:42:46 | req.bod ... rameter | provenance | Config | -| tst2.js:42:25:42:46 | req.bod ... rameter | tst2.js:42:9:42:46 | bodyParameter | provenance | | -| tst2.js:51:9:51:46 | bodyParameter | tst2.js:52:28:52:40 | bodyParameter | provenance | | +| tst2.js:42:25:42:46 | req.bod ... rameter | tst2.js:42:9:42:21 | bodyParameter | provenance | | +| tst2.js:51:9:51:21 | bodyParameter | tst2.js:52:28:52:40 | bodyParameter | provenance | | | tst2.js:51:25:51:32 | req.body | tst2.js:51:25:51:46 | req.bod ... rameter | provenance | Config | -| tst2.js:51:25:51:46 | req.bod ... rameter | tst2.js:51:9:51:46 | bodyParameter | provenance | | -| tst.js:7:9:7:46 | bodyParameter | tst.js:10:28:10:40 | bodyParameter | provenance | | +| tst2.js:51:25:51:46 | req.bod ... rameter | tst2.js:51:9:51:21 | bodyParameter | provenance | | +| tst.js:7:9:7:21 | bodyParameter | tst.js:10:28:10:40 | bodyParameter | provenance | | | tst.js:7:25:7:32 | req.body | tst.js:7:25:7:46 | req.bod ... rameter | provenance | Config | -| tst.js:7:25:7:46 | req.bod ... rameter | tst.js:7:9:7:46 | bodyParameter | provenance | | -| tst.js:8:9:8:49 | queryParameter | tst.js:11:28:11:41 | queryParameter | provenance | | -| tst.js:8:9:8:49 | queryParameter | tst.js:20:19:20:32 | queryParameter | provenance | | -| tst.js:8:26:8:49 | req.que ... rameter | tst.js:8:9:8:49 | queryParameter | provenance | | +| tst.js:7:25:7:46 | req.bod ... rameter | tst.js:7:9:7:21 | bodyParameter | provenance | | +| tst.js:8:9:8:22 | queryParameter | tst.js:11:28:11:41 | queryParameter | provenance | | +| tst.js:8:9:8:22 | queryParameter | tst.js:20:19:20:32 | queryParameter | provenance | | +| tst.js:8:26:8:49 | req.que ... rameter | tst.js:8:9:8:22 | queryParameter | provenance | | | tst.js:20:19:20:32 | queryParameter | tst.js:23:24:23:26 | obj | provenance | | | tst.js:23:24:23:26 | obj | tst.js:24:28:24:30 | obj | provenance | | | tst.js:23:24:23:26 | obj | tst.js:26:17:26:19 | obj | provenance | | -| tst.js:26:11:26:24 | str | tst.js:29:39:29:41 | str | provenance | | +| tst.js:26:11:26:13 | str | tst.js:29:39:29:41 | str | provenance | | | tst.js:26:17:26:19 | obj | tst.js:26:17:26:24 | obj + "" | provenance | Config | -| tst.js:26:17:26:24 | obj + "" | tst.js:26:11:26:24 | str | provenance | | +| tst.js:26:17:26:24 | obj + "" | tst.js:26:11:26:13 | str | provenance | | | tst.js:29:39:29:41 | str | tst.js:29:28:29:42 | JSON.parse(str) | provenance | Config | nodes | routes.js:2:23:2:30 | req.body | semmle.label | req.body | -| tst2.js:6:9:6:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:6:9:6:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:6:25:6:32 | req.body | semmle.label | req.body | | tst2.js:6:25:6:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:7:28:7:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:26:9:26:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:26:9:26:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:26:25:26:32 | req.body | semmle.label | req.body | | tst2.js:26:25:26:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:27:28:27:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:34:9:34:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:34:9:34:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:34:25:34:32 | req.body | semmle.label | req.body | | tst2.js:34:25:34:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:35:28:35:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:42:9:42:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:42:9:42:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:42:25:42:32 | req.body | semmle.label | req.body | | tst2.js:42:25:42:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:43:28:43:40 | bodyParameter | semmle.label | bodyParameter | -| tst2.js:51:9:51:46 | bodyParameter | semmle.label | bodyParameter | +| tst2.js:51:9:51:21 | bodyParameter | semmle.label | bodyParameter | | tst2.js:51:25:51:32 | req.body | semmle.label | req.body | | tst2.js:51:25:51:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | | tst2.js:52:28:52:40 | bodyParameter | semmle.label | bodyParameter | -| tst.js:7:9:7:46 | bodyParameter | semmle.label | bodyParameter | +| tst.js:7:9:7:21 | bodyParameter | semmle.label | bodyParameter | | tst.js:7:25:7:32 | req.body | semmle.label | req.body | | tst.js:7:25:7:46 | req.bod ... rameter | semmle.label | req.bod ... rameter | -| tst.js:8:9:8:49 | queryParameter | semmle.label | queryParameter | +| tst.js:8:9:8:22 | queryParameter | semmle.label | queryParameter | | tst.js:8:26:8:49 | req.que ... rameter | semmle.label | req.que ... rameter | | tst.js:10:28:10:40 | bodyParameter | semmle.label | bodyParameter | | tst.js:11:28:11:41 | queryParameter | semmle.label | queryParameter | | tst.js:20:19:20:32 | queryParameter | semmle.label | queryParameter | | tst.js:23:24:23:26 | obj | semmle.label | obj | | tst.js:24:28:24:30 | obj | semmle.label | obj | -| tst.js:26:11:26:24 | str | semmle.label | str | +| tst.js:26:11:26:13 | str | semmle.label | str | | tst.js:26:17:26:19 | obj | semmle.label | obj | | tst.js:26:17:26:24 | obj + "" | semmle.label | obj + "" | | tst.js:29:28:29:42 | JSON.parse(str) | semmle.label | JSON.parse(str) | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected index 22394ec4cb8..f1d547bdfb1 100644 --- a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected @@ -21,6 +21,12 @@ | child_process-test.js:75:29:75:31 | cmd | child_process-test.js:73:25:73:31 | req.url | child_process-test.js:75:29:75:31 | cmd | This command line depends on a $@. | child_process-test.js:73:25:73:31 | req.url | user-provided value | | child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | child_process-test.js:83:19:83:36 | req.query.fileName | This command line depends on a $@. | child_process-test.js:83:19:83:36 | req.query.fileName | user-provided value | | child_process-test.js:94:11:94:35 | "ping " ... ms.host | child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:11:94:35 | "ping " ... ms.host | This command line depends on a $@. | child_process-test.js:94:21:94:30 | ctx.params | user-provided value | +| command-line-libs.js:14:8:14:18 | options.cmd | command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:14:8:14:18 | options.cmd | This command line depends on a $@. | command-line-libs.js:9:16:9:23 | req.body | user-provided value | +| command-line-libs.js:15:8:15:18 | program.cmd | command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:15:8:15:18 | program.cmd | This command line depends on a $@. | command-line-libs.js:9:16:9:23 | req.body | user-provided value | +| command-line-libs.js:21:12:21:17 | script | command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:21:12:21:17 | script | This command line depends on a $@. | command-line-libs.js:9:16:9:23 | req.body | user-provided value | +| command-line-libs.js:29:10:29:24 | parsed['--cmd'] | command-line-libs.js:27:23:27:30 | req.body | command-line-libs.js:29:10:29:24 | parsed['--cmd'] | This command line depends on a $@. | command-line-libs.js:27:23:27:30 | req.body | user-provided value | +| command-line-libs.js:37:8:37:18 | options.cmd | command-line-libs.js:35:62:35:69 | req.body | command-line-libs.js:37:8:37:18 | options.cmd | This command line depends on a $@. | command-line-libs.js:35:62:35:69 | req.body | user-provided value | +| command-line-libs.js:49:8:49:17 | parsed.cmd | command-line-libs.js:42:16:42:23 | req.body | command-line-libs.js:49:8:49:17 | parsed.cmd | This command line depends on a $@. | command-line-libs.js:42:16:42:23 | req.body | user-provided value | | exec-sh2.js:10:12:10:57 | cp.spaw ... ptions) | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:10:40:10:46 | command | This command line depends on a $@. | exec-sh2.js:14:25:14:31 | req.url | user-provided value | | exec-sh.js:15:12:15:61 | cp.spaw ... ptions) | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:15:44:15:50 | command | This command line depends on a $@. | exec-sh.js:19:25:19:31 | req.url | user-provided value | | execSeries.js:14:41:14:47 | command | execSeries.js:18:34:18:40 | req.url | execSeries.js:14:41:14:47 | command | This command line depends on a $@. | execSeries.js:18:34:18:40 | req.url | user-provided value | @@ -76,34 +82,61 @@ | other.js:28:27:28:29 | cmd | other.js:5:25:5:31 | req.url | other.js:28:27:28:29 | cmd | This command line depends on a $@. | other.js:5:25:5:31 | req.url | user-provided value | | other.js:30:33:30:35 | cmd | other.js:5:25:5:31 | req.url | other.js:30:33:30:35 | cmd | This command line depends on a $@. | other.js:5:25:5:31 | req.url | user-provided value | | other.js:34:44:34:46 | cmd | other.js:5:25:5:31 | req.url | other.js:34:44:34:46 | cmd | This command line depends on a $@. | other.js:5:25:5:31 | req.url | user-provided value | +| promisification.js:9:13:9:21 | code.code | promisification.js:15:18:15:25 | req.body | promisification.js:9:13:9:21 | code.code | This command line depends on a $@. | promisification.js:15:18:15:25 | req.body | user-provided value | +| promisification.js:24:22:24:25 | code | promisification.js:21:18:21:25 | req.body | promisification.js:24:22:24:25 | code | This command line depends on a $@. | promisification.js:21:18:21:25 | req.body | user-provided value | +| promisification.js:31:24:31:27 | code | promisification.js:30:18:30:25 | req.body | promisification.js:31:24:31:27 | code | This command line depends on a $@. | promisification.js:30:18:30:25 | req.body | user-provided value | +| promisification.js:40:21:40:24 | code | promisification.js:37:18:37:25 | req.body | promisification.js:40:21:40:24 | code | This command line depends on a $@. | promisification.js:37:18:37:25 | req.body | user-provided value | +| promisification.js:43:24:43:27 | code | promisification.js:37:18:37:25 | req.body | promisification.js:43:24:43:27 | code | This command line depends on a $@. | promisification.js:37:18:37:25 | req.body | user-provided value | +| promisification.js:52:21:52:24 | code | promisification.js:49:18:49:25 | req.body | promisification.js:52:21:52:24 | code | This command line depends on a $@. | promisification.js:49:18:49:25 | req.body | user-provided value | +| promisification.js:55:15:55:18 | code | promisification.js:49:18:49:25 | req.body | promisification.js:55:15:55:18 | code | This command line depends on a $@. | promisification.js:49:18:49:25 | req.body | user-provided value | +| promisification.js:65:21:65:23 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:65:21:65:23 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:69:20:69:22 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:69:20:69:22 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:74:26:74:28 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:74:26:74:28 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:77:24:77:26 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:77:24:77:26 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:78:28:78:30 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:78:28:78:30 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:79:25:79:27 | cmd | promisification.js:61:15:61:22 | req.body | promisification.js:79:25:79:27 | cmd | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:83:36:83:39 | code | promisification.js:61:15:61:22 | req.body | promisification.js:83:36:83:39 | code | This command line depends on a $@. | promisification.js:61:15:61:22 | req.body | user-provided value | +| promisification.js:100:23:100:26 | code | promisification.js:99:18:99:25 | req.body | promisification.js:100:23:100:26 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value | +| promisification.js:101:27:101:30 | code | promisification.js:99:18:99:25 | req.body | promisification.js:101:27:101:30 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value | +| promisification.js:102:27:102:30 | code | promisification.js:99:18:99:25 | req.body | promisification.js:102:27:102:30 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value | +| promisification.js:106:24:106:27 | code | promisification.js:99:18:99:25 | req.body | promisification.js:106:24:106:27 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value | +| promisification.js:109:24:109:27 | code | promisification.js:99:18:99:25 | req.body | promisification.js:109:24:109:27 | code | This command line depends on a $@. | promisification.js:99:18:99:25 | req.body | user-provided value | +| promisification.js:124:17:124:19 | cmd | promisification.js:114:18:114:25 | req.body | promisification.js:124:17:124:19 | cmd | This command line depends on a $@. | promisification.js:114:18:114:25 | req.body | user-provided value | +| promisification.js:133:21:133:24 | code | promisification.js:130:18:130:25 | req.body | promisification.js:133:21:133:24 | code | This command line depends on a $@. | promisification.js:130:18:130:25 | req.body | user-provided value | +| promisification.js:136:15:136:18 | code | promisification.js:130:18:130:25 | req.body | promisification.js:136:15:136:18 | code | This command line depends on a $@. | promisification.js:130:18:130:25 | req.body | user-provided value | +| promisification.js:144:21:144:24 | code | promisification.js:141:18:141:25 | req.body | promisification.js:144:21:144:24 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value | +| promisification.js:147:15:147:18 | code | promisification.js:141:18:141:25 | req.body | promisification.js:147:15:147:18 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value | +| promisification.js:150:24:150:27 | code | promisification.js:141:18:141:25 | req.body | promisification.js:150:24:150:27 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value | +| promisification.js:151:28:151:31 | code | promisification.js:141:18:141:25 | req.body | promisification.js:151:28:151:31 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value | +| promisification.js:152:25:152:28 | code | promisification.js:141:18:141:25 | req.body | promisification.js:152:25:152:28 | code | This command line depends on a $@. | promisification.js:141:18:141:25 | req.body | user-provided value | | third-party-command-injection.js:6:21:6:27 | command | third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | This command line depends on a $@. | third-party-command-injection.js:5:20:5:26 | command | user-provided value | edges -| actions.js:8:9:8:57 | title | actions.js:9:16:9:20 | title | provenance | | -| actions.js:8:17:8:57 | github. ... t.title | actions.js:8:9:8:57 | title | provenance | | +| actions.js:8:9:8:13 | title | actions.js:9:16:9:20 | title | provenance | | +| actions.js:8:17:8:57 | github. ... t.title | actions.js:8:9:8:13 | title | provenance | | | actions.js:9:16:9:20 | title | actions.js:9:8:9:22 | `echo ${title}` | provenance | | -| actions.js:18:9:18:63 | head_ref | actions.js:19:22:19:29 | head_ref | provenance | | -| actions.js:18:20:18:63 | github. ... ead.ref | actions.js:18:9:18:63 | head_ref | provenance | | +| actions.js:18:9:18:16 | head_ref | actions.js:19:22:19:29 | head_ref | provenance | | +| actions.js:18:20:18:63 | github. ... ead.ref | actions.js:18:9:18:16 | head_ref | provenance | | | actions.js:19:22:19:29 | head_ref | actions.js:19:14:19:31 | `echo ${head_ref}` | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:17:13:17:15 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:18:17:18:19 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:19:17:19:19 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:20:21:20:23 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:21:14:21:16 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:22:18:22:20 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:23:13:23:15 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:25:21:25:23 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:39:26:39:28 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:43:15:43:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:53:15:53:17 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | -| child_process-test.js:6:9:6:49 | cmd | child_process-test.js:57:46:57:48 | cmd | provenance | | -| child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:9:6:49 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:17:13:17:15 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:18:17:18:19 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:19:17:19:19 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:20:21:20:23 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:21:14:21:16 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:22:18:22:20 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:23:13:23:15 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:25:21:25:23 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:39:26:39:28 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:43:15:43:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:48:15:48:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:53:15:53:17 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:56:54:56:56 | cmd | provenance | | +| child_process-test.js:6:9:6:11 | cmd | child_process-test.js:57:46:57:48 | cmd | provenance | | +| child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:9:6:11 | cmd | provenance | | | child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:15:6:49 | url.par ... ry.path | provenance | | | child_process-test.js:6:15:6:38 | url.par ... , true) | child_process-test.js:6:15:6:49 | url.par ... ry.path | provenance | | -| child_process-test.js:6:15:6:49 | url.par ... ry.path | child_process-test.js:6:9:6:49 | cmd | provenance | | +| child_process-test.js:6:15:6:49 | url.par ... ry.path | child_process-test.js:6:9:6:11 | cmd | provenance | | | child_process-test.js:6:25:6:31 | req.url | child_process-test.js:6:15:6:38 | url.par ... , true) | provenance | | | child_process-test.js:25:21:25:23 | cmd | child_process-test.js:25:13:25:31 | "foo" + cmd + "bar" | provenance | | | child_process-test.js:48:5:48:8 | [post update] args [1] | child_process-test.js:49:15:49:18 | args [1] | provenance | | @@ -112,18 +145,47 @@ edges | child_process-test.js:56:46:56:57 | ["bar", cmd] [1] | child_process-test.js:56:25:56:58 | ['/C', ... , cmd]) | provenance | | | child_process-test.js:56:54:56:56 | cmd | child_process-test.js:56:46:56:57 | ["bar", cmd] [1] | provenance | | | child_process-test.js:57:46:57:48 | cmd | child_process-test.js:57:25:57:49 | ['/C', ... at(cmd) | provenance | | -| child_process-test.js:73:9:73:49 | cmd | child_process-test.js:75:29:75:31 | cmd | provenance | | -| child_process-test.js:73:15:73:38 | url.par ... , true) | child_process-test.js:73:9:73:49 | cmd | provenance | | +| child_process-test.js:73:9:73:11 | cmd | child_process-test.js:75:29:75:31 | cmd | provenance | | +| child_process-test.js:73:15:73:38 | url.par ... , true) | child_process-test.js:73:9:73:11 | cmd | provenance | | | child_process-test.js:73:25:73:31 | req.url | child_process-test.js:73:15:73:38 | url.par ... , true) | provenance | | | child_process-test.js:94:21:94:30 | ctx.params | child_process-test.js:94:11:94:35 | "ping " ... ms.host | provenance | | +| command-line-libs.js:9:9:9:12 | args | command-line-libs.js:12:17:12:20 | args | provenance | | +| command-line-libs.js:9:9:9:12 | args | command-line-libs.js:23:29:23:32 | args | provenance | | +| command-line-libs.js:9:16:9:23 | req.body | command-line-libs.js:9:9:9:12 | args | provenance | | +| command-line-libs.js:12:17:12:20 | args | command-line-libs.js:13:19:13:32 | program.opts() | provenance | | +| command-line-libs.js:12:17:12:20 | args | command-line-libs.js:15:8:15:18 | program.cmd | provenance | | +| command-line-libs.js:12:17:12:20 | args | command-line-libs.js:20:14:20:19 | script | provenance | | +| command-line-libs.js:13:9:13:15 | options | command-line-libs.js:14:8:14:14 | options | provenance | | +| command-line-libs.js:13:19:13:32 | program.opts() | command-line-libs.js:13:9:13:15 | options | provenance | | +| command-line-libs.js:14:8:14:14 | options | command-line-libs.js:14:8:14:18 | options.cmd | provenance | | +| command-line-libs.js:20:14:20:19 | script | command-line-libs.js:21:12:21:17 | script | provenance | | +| command-line-libs.js:23:29:23:32 | args | command-line-libs.js:20:14:20:19 | script | provenance | | +| command-line-libs.js:27:11:27:19 | argsArray | command-line-libs.js:28:53:28:61 | argsArray | provenance | | +| command-line-libs.js:27:23:27:30 | req.body | command-line-libs.js:27:11:27:19 | argsArray | provenance | | +| command-line-libs.js:28:11:28:16 | parsed | command-line-libs.js:29:10:29:15 | parsed | provenance | | +| command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | command-line-libs.js:28:11:28:16 | parsed | provenance | | +| command-line-libs.js:28:53:28:61 | argsArray | command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | provenance | | +| command-line-libs.js:29:10:29:15 | parsed | command-line-libs.js:29:10:29:24 | parsed['--cmd'] | provenance | | +| command-line-libs.js:35:9:35:15 | options | command-line-libs.js:37:8:37:14 | options | provenance | | +| command-line-libs.js:35:19:35:83 | command ... \| [] }) | command-line-libs.js:35:9:35:15 | options | provenance | | +| command-line-libs.js:35:62:35:69 | req.body | command-line-libs.js:35:19:35:83 | command ... \| [] }) | provenance | | +| command-line-libs.js:37:8:37:14 | options | command-line-libs.js:37:8:37:18 | options.cmd | provenance | | +| command-line-libs.js:42:9:42:12 | args | command-line-libs.js:43:24:43:27 | args | provenance | | +| command-line-libs.js:42:16:42:23 | req.body | command-line-libs.js:42:9:42:12 | args | provenance | | +| command-line-libs.js:43:9:43:14 | parsed | command-line-libs.js:49:8:49:13 | parsed | provenance | | +| command-line-libs.js:43:18:43:28 | yargs(args) | command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | provenance | | +| command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | command-line-libs.js:43:18:47:12 | yargs(a ... parse() | provenance | | +| command-line-libs.js:43:18:47:12 | yargs(a ... parse() | command-line-libs.js:43:9:43:14 | parsed | provenance | | +| command-line-libs.js:43:24:43:27 | args | command-line-libs.js:43:18:43:28 | yargs(args) | provenance | | +| command-line-libs.js:49:8:49:13 | parsed | command-line-libs.js:49:8:49:17 | parsed.cmd | provenance | | | exec-sh2.js:9:17:9:23 | command | exec-sh2.js:10:40:10:46 | command | provenance | | -| exec-sh2.js:14:9:14:49 | cmd | exec-sh2.js:15:12:15:14 | cmd | provenance | | -| exec-sh2.js:14:15:14:38 | url.par ... , true) | exec-sh2.js:14:9:14:49 | cmd | provenance | | +| exec-sh2.js:14:9:14:11 | cmd | exec-sh2.js:15:12:15:14 | cmd | provenance | | +| exec-sh2.js:14:15:14:38 | url.par ... , true) | exec-sh2.js:14:9:14:11 | cmd | provenance | | | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:14:15:14:38 | url.par ... , true) | provenance | | | exec-sh2.js:15:12:15:14 | cmd | exec-sh2.js:9:17:9:23 | command | provenance | | | exec-sh.js:13:17:13:23 | command | exec-sh.js:15:44:15:50 | command | provenance | | -| exec-sh.js:19:9:19:49 | cmd | exec-sh.js:20:12:20:14 | cmd | provenance | | -| exec-sh.js:19:15:19:38 | url.par ... , true) | exec-sh.js:19:9:19:49 | cmd | provenance | | +| exec-sh.js:19:9:19:11 | cmd | exec-sh.js:20:12:20:14 | cmd | provenance | | +| exec-sh.js:19:15:19:38 | url.par ... , true) | exec-sh.js:19:9:19:11 | cmd | provenance | | | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:19:15:19:38 | url.par ... , true) | provenance | | | exec-sh.js:20:12:20:14 | cmd | exec-sh.js:13:17:13:23 | command | provenance | | | execSeries.js:3:20:3:22 | arr [0] | execSeries.js:5:3:10:4 | (functi ... );\\n }) [arr, 0] | provenance | | @@ -134,45 +196,45 @@ edges | execSeries.js:13:19:13:26 | commands [0] | execSeries.js:14:13:14:20 | commands [0] | provenance | | | execSeries.js:14:13:14:20 | commands [0] | execSeries.js:3:20:3:22 | arr [0] | provenance | | | execSeries.js:14:24:14:30 | command | execSeries.js:14:41:14:47 | command | provenance | | -| execSeries.js:18:7:18:58 | cmd | execSeries.js:19:13:19:15 | cmd | provenance | | -| execSeries.js:18:13:18:47 | require ... , true) | execSeries.js:18:7:18:58 | cmd | provenance | | +| execSeries.js:18:7:18:9 | cmd | execSeries.js:19:13:19:15 | cmd | provenance | | +| execSeries.js:18:13:18:47 | require ... , true) | execSeries.js:18:7:18:9 | cmd | provenance | | | execSeries.js:18:34:18:40 | req.url | execSeries.js:18:13:18:47 | require ... , true) | provenance | | | execSeries.js:19:12:19:16 | [cmd] [0] | execSeries.js:13:19:13:26 | commands [0] | provenance | | | execSeries.js:19:13:19:15 | cmd | execSeries.js:19:12:19:16 | [cmd] [0] | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:11:15:11:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:13:32:13:34 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:14:31:14:33 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:17:14:17:16 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:19:32:19:34 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:20:33:20:35 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:23:17:23:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:24:17:24:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:25:17:25:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:27:15:27:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:28:15:28:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:30:24:30:26 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:31:24:31:26 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:33:22:33:24 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:34:22:34:24 | cmd | provenance | | -| execa.js:6:15:6:38 | url.par ... , true) | execa.js:6:9:6:54 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:11:15:11:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:13:32:13:34 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:14:31:14:33 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:17:14:17:16 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:19:32:19:34 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:20:33:20:35 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:23:17:23:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:24:17:24:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:25:17:25:19 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:27:15:27:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:28:15:28:17 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:30:24:30:26 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:31:24:31:26 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:33:22:33:24 | cmd | provenance | | +| execa.js:6:9:6:11 | cmd | execa.js:34:22:34:24 | cmd | provenance | | +| execa.js:6:15:6:38 | url.par ... , true) | execa.js:6:9:6:11 | cmd | provenance | | | execa.js:6:25:6:31 | req.url | execa.js:6:15:6:38 | url.par ... , true) | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:30:30:30:33 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:31:30:31:33 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:33:28:33:31 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:34:28:34:31 | arg1 | provenance | | -| execa.js:7:16:7:39 | url.par ... , true) | execa.js:7:9:7:53 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:30:30:30:33 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:31:30:31:33 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:33:28:33:31 | arg1 | provenance | | +| execa.js:7:9:7:12 | arg1 | execa.js:34:28:34:31 | arg1 | provenance | | +| execa.js:7:16:7:39 | url.par ... , true) | execa.js:7:9:7:12 | arg1 | provenance | | | execa.js:7:26:7:32 | req.url | execa.js:7:16:7:39 | url.par ... , true) | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:30:37:30:40 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:31:37:31:40 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:33:35:33:38 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:34:35:34:38 | arg2 | provenance | | -| execa.js:8:16:8:39 | url.par ... , true) | execa.js:8:9:8:53 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:30:37:30:40 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:31:37:31:40 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:33:35:33:38 | arg2 | provenance | | +| execa.js:8:9:8:12 | arg2 | execa.js:34:35:34:38 | arg2 | provenance | | +| execa.js:8:16:8:39 | url.par ... , true) | execa.js:8:9:8:12 | arg2 | provenance | | | execa.js:8:26:8:32 | req.url | execa.js:8:16:8:39 | url.par ... , true) | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:30:44:30:47 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:31:44:31:47 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:33:42:33:45 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:34:42:34:45 | arg3 | provenance | | -| execa.js:9:16:9:39 | url.par ... , true) | execa.js:9:9:9:53 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:30:44:30:47 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:31:44:31:47 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:33:42:33:45 | arg3 | provenance | | +| execa.js:9:9:9:12 | arg3 | execa.js:34:42:34:45 | arg3 | provenance | | +| execa.js:9:16:9:39 | url.par ... , true) | execa.js:9:9:9:12 | arg3 | provenance | | | execa.js:9:26:9:32 | req.url | execa.js:9:16:9:39 | url.par ... , true) | provenance | | | execa.js:30:24:30:26 | cmd | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | | execa.js:30:30:30:33 | arg1 | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | @@ -204,37 +266,90 @@ edges | form-parsers.js:53:21:53:26 | fields | form-parsers.js:53:10:53:31 | "touch ... ds.name | provenance | | | form-parsers.js:58:30:58:33 | part | form-parsers.js:59:21:59:24 | part | provenance | | | form-parsers.js:59:21:59:24 | part | form-parsers.js:59:10:59:33 | "touch ... ilename | provenance | | -| other.js:5:9:5:49 | cmd | other.js:7:33:7:35 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:8:28:8:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:9:32:9:34 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:10:29:10:31 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:11:29:11:31 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:12:27:12:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:14:28:14:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:15:34:15:36 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:16:21:16:23 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:17:27:17:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:18:22:18:24 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:19:36:19:38 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:22:21:22:23 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:23:28:23:30 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:26:34:26:36 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:28:27:28:29 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:30:33:30:35 | cmd | provenance | | -| other.js:5:9:5:49 | cmd | other.js:34:44:34:46 | cmd | provenance | | -| other.js:5:15:5:38 | url.par ... , true) | other.js:5:9:5:49 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:7:33:7:35 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:8:28:8:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:9:32:9:34 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:10:29:10:31 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:11:29:11:31 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:12:27:12:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:14:28:14:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:15:34:15:36 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:16:21:16:23 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:17:27:17:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:18:22:18:24 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:19:36:19:38 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:22:21:22:23 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:23:28:23:30 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:26:34:26:36 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:28:27:28:29 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:30:33:30:35 | cmd | provenance | | +| other.js:5:9:5:11 | cmd | other.js:34:44:34:46 | cmd | provenance | | +| other.js:5:15:5:38 | url.par ... , true) | other.js:5:9:5:11 | cmd | provenance | | | other.js:5:25:5:31 | req.url | other.js:5:15:5:38 | url.par ... , true) | provenance | | +| promisification.js:8:21:8:24 | code | promisification.js:9:13:9:16 | code | provenance | | +| promisification.js:9:13:9:16 | code | promisification.js:9:13:9:21 | code.code | provenance | | +| promisification.js:15:11:15:14 | code | promisification.js:16:15:16:18 | code | provenance | | +| promisification.js:15:18:15:25 | req.body | promisification.js:15:11:15:14 | code | provenance | | +| promisification.js:16:15:16:18 | code | promisification.js:8:21:8:24 | code | provenance | | +| promisification.js:21:11:21:14 | code | promisification.js:24:22:24:25 | code | provenance | | +| promisification.js:21:18:21:25 | req.body | promisification.js:21:11:21:14 | code | provenance | | +| promisification.js:30:11:30:14 | code | promisification.js:31:24:31:27 | code | provenance | | +| promisification.js:30:18:30:25 | req.body | promisification.js:30:11:30:14 | code | provenance | | +| promisification.js:37:11:37:14 | code | promisification.js:40:21:40:24 | code | provenance | | +| promisification.js:37:11:37:14 | code | promisification.js:43:24:43:27 | code | provenance | | +| promisification.js:37:18:37:25 | req.body | promisification.js:37:11:37:14 | code | provenance | | +| promisification.js:49:11:49:14 | code | promisification.js:52:21:52:24 | code | provenance | | +| promisification.js:49:11:49:14 | code | promisification.js:55:15:55:18 | code | provenance | | +| promisification.js:49:18:49:25 | req.body | promisification.js:49:11:49:14 | code | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:65:21:65:23 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:69:20:69:22 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:74:26:74:28 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:77:24:77:26 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:78:28:78:30 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:79:25:79:27 | cmd | provenance | | +| promisification.js:61:9:61:11 | cmd | promisification.js:89:12:89:14 | cmd | provenance | | +| promisification.js:61:15:61:22 | req.body | promisification.js:61:9:61:11 | cmd | provenance | | +| promisification.js:81:34:81:37 | code | promisification.js:83:36:83:39 | code | provenance | | +| promisification.js:89:12:89:14 | cmd | promisification.js:81:34:81:37 | code | provenance | | +| promisification.js:99:11:99:14 | code | promisification.js:100:23:100:26 | code | provenance | | +| promisification.js:99:11:99:14 | code | promisification.js:101:27:101:30 | code | provenance | | +| promisification.js:99:11:99:14 | code | promisification.js:102:27:102:30 | code | provenance | | +| promisification.js:99:11:99:14 | code | promisification.js:106:24:106:27 | code | provenance | | +| promisification.js:99:11:99:14 | code | promisification.js:109:24:109:27 | code | provenance | | +| promisification.js:99:18:99:25 | req.body | promisification.js:99:11:99:14 | code | provenance | | +| promisification.js:114:11:114:14 | code | promisification.js:122:42:122:45 | code | provenance | | +| promisification.js:114:18:114:25 | req.body | promisification.js:114:11:114:14 | code | provenance | | +| promisification.js:116:32:116:34 | cmd | promisification.js:117:16:119:10 | new Pro ... }) [PromiseValue] | provenance | | +| promisification.js:116:32:116:34 | cmd | promisification.js:118:21:118:23 | cmd | provenance | | +| promisification.js:118:13:118:19 | [post update] resolve [resolve-value] | promisification.js:117:29:117:35 | resolve [Return] [resolve-value] | provenance | | +| promisification.js:118:21:118:23 | cmd | promisification.js:118:13:118:19 | [post update] resolve [resolve-value] | provenance | | +| promisification.js:122:11:122:20 | cmdPromise [PromiseValue] | promisification.js:123:17:123:26 | cmdPromise [PromiseValue] | provenance | | +| promisification.js:122:24:122:46 | createE ... e(code) [PromiseValue] | promisification.js:122:11:122:20 | cmdPromise [PromiseValue] | provenance | | +| promisification.js:122:42:122:45 | code | promisification.js:116:32:116:34 | cmd | provenance | | +| promisification.js:122:42:122:45 | code | promisification.js:122:24:122:46 | createE ... e(code) [PromiseValue] | provenance | | +| promisification.js:123:5:123:27 | maybe(n ... romise) [PromiseValue] | promisification.js:123:34:123:36 | cmd | provenance | | +| promisification.js:123:17:123:26 | cmdPromise [PromiseValue] | promisification.js:123:5:123:27 | maybe(n ... romise) [PromiseValue] | provenance | | +| promisification.js:123:34:123:36 | cmd | promisification.js:124:17:124:19 | cmd | provenance | | +| promisification.js:130:11:130:14 | code | promisification.js:133:21:133:24 | code | provenance | | +| promisification.js:130:11:130:14 | code | promisification.js:136:15:136:18 | code | provenance | | +| promisification.js:130:18:130:25 | req.body | promisification.js:130:11:130:14 | code | provenance | | +| promisification.js:141:11:141:14 | code | promisification.js:144:21:144:24 | code | provenance | | +| promisification.js:141:11:141:14 | code | promisification.js:147:15:147:18 | code | provenance | | +| promisification.js:141:11:141:14 | code | promisification.js:150:24:150:27 | code | provenance | | +| promisification.js:141:11:141:14 | code | promisification.js:151:28:151:31 | code | provenance | | +| promisification.js:141:11:141:14 | code | promisification.js:152:25:152:28 | code | provenance | | +| promisification.js:141:18:141:25 | req.body | promisification.js:141:11:141:14 | code | provenance | | | third-party-command-injection.js:5:20:5:26 | command | third-party-command-injection.js:6:21:6:27 | command | provenance | | nodes -| actions.js:8:9:8:57 | title | semmle.label | title | +| actions.js:8:9:8:13 | title | semmle.label | title | | actions.js:8:17:8:57 | github. ... t.title | semmle.label | github. ... t.title | | actions.js:9:8:9:22 | `echo ${title}` | semmle.label | `echo ${title}` | | actions.js:9:16:9:20 | title | semmle.label | title | -| actions.js:18:9:18:63 | head_ref | semmle.label | head_ref | +| actions.js:18:9:18:16 | head_ref | semmle.label | head_ref | | actions.js:18:20:18:63 | github. ... ead.ref | semmle.label | github. ... ead.ref | | actions.js:19:14:19:31 | `echo ${head_ref}` | semmle.label | `echo ${head_ref}` | | actions.js:19:22:19:29 | head_ref | semmle.label | head_ref | -| child_process-test.js:6:9:6:49 | cmd | semmle.label | cmd | +| child_process-test.js:6:9:6:11 | cmd | semmle.label | cmd | | child_process-test.js:6:15:6:38 | url.par ... , true) | semmle.label | url.par ... , true) | | child_process-test.js:6:15:6:49 | url.par ... ry.path | semmle.label | url.par ... ry.path | | child_process-test.js:6:15:6:49 | url.par ... ry.path | semmle.label | url.par ... ry.path | @@ -262,22 +377,54 @@ nodes | child_process-test.js:57:25:57:49 | ['/C', ... at(cmd) | semmle.label | ['/C', ... at(cmd) | | child_process-test.js:57:46:57:48 | cmd | semmle.label | cmd | | child_process-test.js:66:19:66:22 | args | semmle.label | args | -| child_process-test.js:73:9:73:49 | cmd | semmle.label | cmd | +| child_process-test.js:73:9:73:11 | cmd | semmle.label | cmd | | child_process-test.js:73:15:73:38 | url.par ... , true) | semmle.label | url.par ... , true) | | child_process-test.js:73:25:73:31 | req.url | semmle.label | req.url | | child_process-test.js:75:29:75:31 | cmd | semmle.label | cmd | | child_process-test.js:83:19:83:36 | req.query.fileName | semmle.label | req.query.fileName | | child_process-test.js:94:11:94:35 | "ping " ... ms.host | semmle.label | "ping " ... ms.host | | child_process-test.js:94:21:94:30 | ctx.params | semmle.label | ctx.params | +| command-line-libs.js:9:9:9:12 | args | semmle.label | args | +| command-line-libs.js:9:16:9:23 | req.body | semmle.label | req.body | +| command-line-libs.js:12:17:12:20 | args | semmle.label | args | +| command-line-libs.js:13:9:13:15 | options | semmle.label | options | +| command-line-libs.js:13:19:13:32 | program.opts() | semmle.label | program.opts() | +| command-line-libs.js:14:8:14:14 | options | semmle.label | options | +| command-line-libs.js:14:8:14:18 | options.cmd | semmle.label | options.cmd | +| command-line-libs.js:15:8:15:18 | program.cmd | semmle.label | program.cmd | +| command-line-libs.js:20:14:20:19 | script | semmle.label | script | +| command-line-libs.js:21:12:21:17 | script | semmle.label | script | +| command-line-libs.js:23:29:23:32 | args | semmle.label | args | +| command-line-libs.js:27:11:27:19 | argsArray | semmle.label | argsArray | +| command-line-libs.js:27:23:27:30 | req.body | semmle.label | req.body | +| command-line-libs.js:28:11:28:16 | parsed | semmle.label | parsed | +| command-line-libs.js:28:20:28:64 | arg({ ' ... rray }) | semmle.label | arg({ ' ... rray }) | +| command-line-libs.js:28:53:28:61 | argsArray | semmle.label | argsArray | +| command-line-libs.js:29:10:29:15 | parsed | semmle.label | parsed | +| command-line-libs.js:29:10:29:24 | parsed['--cmd'] | semmle.label | parsed['--cmd'] | +| command-line-libs.js:35:9:35:15 | options | semmle.label | options | +| command-line-libs.js:35:19:35:83 | command ... \| [] }) | semmle.label | command ... \| [] }) | +| command-line-libs.js:35:62:35:69 | req.body | semmle.label | req.body | +| command-line-libs.js:37:8:37:14 | options | semmle.label | options | +| command-line-libs.js:37:8:37:18 | options.cmd | semmle.label | options.cmd | +| command-line-libs.js:42:9:42:12 | args | semmle.label | args | +| command-line-libs.js:42:16:42:23 | req.body | semmle.label | req.body | +| command-line-libs.js:43:9:43:14 | parsed | semmle.label | parsed | +| command-line-libs.js:43:18:43:28 | yargs(args) | semmle.label | yargs(args) | +| command-line-libs.js:43:18:47:4 | yargs(a ... ue\\n }) | semmle.label | yargs(a ... ue\\n }) | +| command-line-libs.js:43:18:47:12 | yargs(a ... parse() | semmle.label | yargs(a ... parse() | +| command-line-libs.js:43:24:43:27 | args | semmle.label | args | +| command-line-libs.js:49:8:49:13 | parsed | semmle.label | parsed | +| command-line-libs.js:49:8:49:17 | parsed.cmd | semmle.label | parsed.cmd | | exec-sh2.js:9:17:9:23 | command | semmle.label | command | | exec-sh2.js:10:40:10:46 | command | semmle.label | command | -| exec-sh2.js:14:9:14:49 | cmd | semmle.label | cmd | +| exec-sh2.js:14:9:14:11 | cmd | semmle.label | cmd | | exec-sh2.js:14:15:14:38 | url.par ... , true) | semmle.label | url.par ... , true) | | exec-sh2.js:14:25:14:31 | req.url | semmle.label | req.url | | exec-sh2.js:15:12:15:14 | cmd | semmle.label | cmd | | exec-sh.js:13:17:13:23 | command | semmle.label | command | | exec-sh.js:15:44:15:50 | command | semmle.label | command | -| exec-sh.js:19:9:19:49 | cmd | semmle.label | cmd | +| exec-sh.js:19:9:19:11 | cmd | semmle.label | cmd | | exec-sh.js:19:15:19:38 | url.par ... , true) | semmle.label | url.par ... , true) | | exec-sh.js:19:25:19:31 | req.url | semmle.label | req.url | | exec-sh.js:20:12:20:14 | cmd | semmle.label | cmd | @@ -289,21 +436,21 @@ nodes | execSeries.js:14:13:14:20 | commands [0] | semmle.label | commands [0] | | execSeries.js:14:24:14:30 | command | semmle.label | command | | execSeries.js:14:41:14:47 | command | semmle.label | command | -| execSeries.js:18:7:18:58 | cmd | semmle.label | cmd | +| execSeries.js:18:7:18:9 | cmd | semmle.label | cmd | | execSeries.js:18:13:18:47 | require ... , true) | semmle.label | require ... , true) | | execSeries.js:18:34:18:40 | req.url | semmle.label | req.url | | execSeries.js:19:12:19:16 | [cmd] [0] | semmle.label | [cmd] [0] | | execSeries.js:19:13:19:15 | cmd | semmle.label | cmd | -| execa.js:6:9:6:54 | cmd | semmle.label | cmd | +| execa.js:6:9:6:11 | cmd | semmle.label | cmd | | execa.js:6:15:6:38 | url.par ... , true) | semmle.label | url.par ... , true) | | execa.js:6:25:6:31 | req.url | semmle.label | req.url | -| execa.js:7:9:7:53 | arg1 | semmle.label | arg1 | +| execa.js:7:9:7:12 | arg1 | semmle.label | arg1 | | execa.js:7:16:7:39 | url.par ... , true) | semmle.label | url.par ... , true) | | execa.js:7:26:7:32 | req.url | semmle.label | req.url | -| execa.js:8:9:8:53 | arg2 | semmle.label | arg2 | +| execa.js:8:9:8:12 | arg2 | semmle.label | arg2 | | execa.js:8:16:8:39 | url.par ... , true) | semmle.label | url.par ... , true) | | execa.js:8:26:8:32 | req.url | semmle.label | req.url | -| execa.js:9:9:9:53 | arg3 | semmle.label | arg3 | +| execa.js:9:9:9:12 | arg3 | semmle.label | arg3 | | execa.js:9:16:9:39 | url.par ... , true) | semmle.label | url.par ... , true) | | execa.js:9:26:9:32 | req.url | semmle.label | req.url | | execa.js:11:15:11:17 | cmd | semmle.label | cmd | @@ -358,7 +505,7 @@ nodes | form-parsers.js:58:30:58:33 | part | semmle.label | part | | form-parsers.js:59:10:59:33 | "touch ... ilename | semmle.label | "touch ... ilename | | form-parsers.js:59:21:59:24 | part | semmle.label | part | -| other.js:5:9:5:49 | cmd | semmle.label | cmd | +| other.js:5:9:5:11 | cmd | semmle.label | cmd | | other.js:5:15:5:38 | url.par ... , true) | semmle.label | url.par ... , true) | | other.js:5:25:5:31 | req.url | semmle.label | req.url | | other.js:7:33:7:35 | cmd | semmle.label | cmd | @@ -379,6 +526,71 @@ nodes | other.js:28:27:28:29 | cmd | semmle.label | cmd | | other.js:30:33:30:35 | cmd | semmle.label | cmd | | other.js:34:44:34:46 | cmd | semmle.label | cmd | +| promisification.js:8:21:8:24 | code | semmle.label | code | +| promisification.js:9:13:9:16 | code | semmle.label | code | +| promisification.js:9:13:9:21 | code.code | semmle.label | code.code | +| promisification.js:15:11:15:14 | code | semmle.label | code | +| promisification.js:15:18:15:25 | req.body | semmle.label | req.body | +| promisification.js:16:15:16:18 | code | semmle.label | code | +| promisification.js:21:11:21:14 | code | semmle.label | code | +| promisification.js:21:18:21:25 | req.body | semmle.label | req.body | +| promisification.js:24:22:24:25 | code | semmle.label | code | +| promisification.js:30:11:30:14 | code | semmle.label | code | +| promisification.js:30:18:30:25 | req.body | semmle.label | req.body | +| promisification.js:31:24:31:27 | code | semmle.label | code | +| promisification.js:37:11:37:14 | code | semmle.label | code | +| promisification.js:37:18:37:25 | req.body | semmle.label | req.body | +| promisification.js:40:21:40:24 | code | semmle.label | code | +| promisification.js:43:24:43:27 | code | semmle.label | code | +| promisification.js:49:11:49:14 | code | semmle.label | code | +| promisification.js:49:18:49:25 | req.body | semmle.label | req.body | +| promisification.js:52:21:52:24 | code | semmle.label | code | +| promisification.js:55:15:55:18 | code | semmle.label | code | +| promisification.js:61:9:61:11 | cmd | semmle.label | cmd | +| promisification.js:61:15:61:22 | req.body | semmle.label | req.body | +| promisification.js:65:21:65:23 | cmd | semmle.label | cmd | +| promisification.js:69:20:69:22 | cmd | semmle.label | cmd | +| promisification.js:74:26:74:28 | cmd | semmle.label | cmd | +| promisification.js:77:24:77:26 | cmd | semmle.label | cmd | +| promisification.js:78:28:78:30 | cmd | semmle.label | cmd | +| promisification.js:79:25:79:27 | cmd | semmle.label | cmd | +| promisification.js:81:34:81:37 | code | semmle.label | code | +| promisification.js:83:36:83:39 | code | semmle.label | code | +| promisification.js:89:12:89:14 | cmd | semmle.label | cmd | +| promisification.js:99:11:99:14 | code | semmle.label | code | +| promisification.js:99:18:99:25 | req.body | semmle.label | req.body | +| promisification.js:100:23:100:26 | code | semmle.label | code | +| promisification.js:101:27:101:30 | code | semmle.label | code | +| promisification.js:102:27:102:30 | code | semmle.label | code | +| promisification.js:106:24:106:27 | code | semmle.label | code | +| promisification.js:109:24:109:27 | code | semmle.label | code | +| promisification.js:114:11:114:14 | code | semmle.label | code | +| promisification.js:114:18:114:25 | req.body | semmle.label | req.body | +| promisification.js:116:32:116:34 | cmd | semmle.label | cmd | +| promisification.js:117:16:119:10 | new Pro ... }) [PromiseValue] | semmle.label | new Pro ... }) [PromiseValue] | +| promisification.js:117:29:117:35 | resolve [Return] [resolve-value] | semmle.label | resolve [Return] [resolve-value] | +| promisification.js:118:13:118:19 | [post update] resolve [resolve-value] | semmle.label | [post update] resolve [resolve-value] | +| promisification.js:118:21:118:23 | cmd | semmle.label | cmd | +| promisification.js:122:11:122:20 | cmdPromise [PromiseValue] | semmle.label | cmdPromise [PromiseValue] | +| promisification.js:122:24:122:46 | createE ... e(code) [PromiseValue] | semmle.label | createE ... e(code) [PromiseValue] | +| promisification.js:122:42:122:45 | code | semmle.label | code | +| promisification.js:123:5:123:27 | maybe(n ... romise) [PromiseValue] | semmle.label | maybe(n ... romise) [PromiseValue] | +| promisification.js:123:17:123:26 | cmdPromise [PromiseValue] | semmle.label | cmdPromise [PromiseValue] | +| promisification.js:123:34:123:36 | cmd | semmle.label | cmd | +| promisification.js:124:17:124:19 | cmd | semmle.label | cmd | +| promisification.js:130:11:130:14 | code | semmle.label | code | +| promisification.js:130:18:130:25 | req.body | semmle.label | req.body | +| promisification.js:133:21:133:24 | code | semmle.label | code | +| promisification.js:136:15:136:18 | code | semmle.label | code | +| promisification.js:141:11:141:14 | code | semmle.label | code | +| promisification.js:141:18:141:25 | req.body | semmle.label | req.body | +| promisification.js:144:21:144:24 | code | semmle.label | code | +| promisification.js:147:15:147:18 | code | semmle.label | code | +| promisification.js:150:24:150:27 | code | semmle.label | code | +| promisification.js:151:28:151:31 | code | semmle.label | code | +| promisification.js:152:25:152:28 | code | semmle.label | code | | third-party-command-injection.js:5:20:5:26 | command | semmle.label | command | | third-party-command-injection.js:6:21:6:27 | command | semmle.label | command | subpaths +| promisification.js:116:32:116:34 | cmd | promisification.js:118:21:118:23 | cmd | promisification.js:117:29:117:35 | resolve [Return] [resolve-value] | promisification.js:117:16:119:10 | new Pro ... }) [PromiseValue] | +| promisification.js:122:42:122:45 | code | promisification.js:116:32:116:34 | cmd | promisification.js:117:16:119:10 | new Pro ... }) [PromiseValue] | promisification.js:122:24:122:46 | createE ... e(code) [PromiseValue] | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/command-line-libs.js b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/command-line-libs.js new file mode 100644 index 00000000000..83c824d4239 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/command-line-libs.js @@ -0,0 +1,50 @@ +import express from 'express'; +import { Command } from 'commander'; +import { exec } from 'child_process'; +import arg from 'arg'; +const app = express(); +app.use(express.json()); + +app.post('/Command', async (req, res) => { + const args = req.body.args || []; // $ Source + const program = new Command(); + program.option('--cmd ', 'Command to execute'); + program.parse(args, { from: 'user' }); + const options = program.opts(); + exec(options.cmd); // $ Alert + exec(program.cmd); // $ Alert + + const program1 = new Command(); + program1 + .command('run
  • JSLint Error Explanations: Expected an assignment or function call.